Skip to content

Leap v3.2.0-rc1

Pre-release
Pre-release
Compare
Choose a tag to compare
@stephenpdeos stephenpdeos released this 07 Oct 20:34
· 5517 commits to main since this release
05fda58

Release 3.2.0 includes a new unified command-line interface (CLI) tool called leap-util to support users operating Leap nodes, a significant number of new cleos sub-commands, and various performance enhancements. A large portion of this release is a series of backported PRs from previous releases of EOSIO.

Leap v3.2.0-rc1 Release Notes

New features

New leap-util program

PRs

  • (150) [3.2] Build framework for leap-util


The nodeos program is meant to be run as a daemon. Over time, however, nodeos has collected various functionalities that are useful to Leap node operators, which are invoked by executing the nodeos program which then completes the desired task and then immediately exits the nodeos process. Since nodeos was designed as a daemon rather than a CLI tool like cleos, the interface to invoke these functions within the nodeos program is clunky compared to the hierarchical sub-command interface of cleos.

However, these functions are meant for Leap node operators and are closely tied to the nodeos executable. The program cleos is intended as tool for a more general audience that includes users who interact with servers running nodeos with public interfaces serving its API but do not necessarily run nodeos themselves. Dumping all that functionality into cleos would clutter its interface and be a distraction for the intended audience of cleos.

Furthermore, the Leap package comes with additional programs like eosio-blocklog which provide additional functionality that is relevant to Leap node operators but is not part of nodeos.

This release introduces a new program called leap-util. The program leap-util is intended to be a unified tool to capture all the functions that would benefit Leap node operators specifically and which are not appropriate to include in nodeos given how nodeos is intended to be used as a daemon. It uses a command-line interface of hierarchical sub-commands familiar to users of cleos.

The scope of leap-util includes all of the functionality provided by eosio-blocklog (which now makes the eosio-blocklog program redundant) and will, over time, include additional functions: some currently in nodeos (that really do not belong in nodeos); and others which are completely new capabilities that haven't existed in prior EOSIO or Leap releases in any form.

For the MVP of leap-util introduced in this release, the following features are supported:

  • CLI11 command-line parsing library with autocompletion
  • eosio-blocklog full functionality via sub-command block-log
  • Retrieving chainbase build environment information via sub-command chain-state

Enhancements to cleos

Autocomplete support

PRs

  • (150) [3.2] Build framework for leap-util


The enhancements to the CLI11 library to support autocomplete for the new leap-util program have also made it possible for cleos to also support autocomplete since it shares the same enhanced CLI11 library to parse its command-line arguments.

HTTP/1.1 support for cleos

PRs

  • (mandel#533) [3.2] cleos Http 1.1 support and improves response handling
  • (mandel#630) [3.2] Allow HTTP-RPC with empty response


In some scenarios involving advanced cloud stacks, cleos was being rejected by gateways or proxies with HTTP status 426. The HTTP 426 Upgrade Required error response code indicates that the server refuses to perform the request using the current protocol but might be willing to do so after the client upgrades to a different protocol. The server sends an Upgrade header with this response to indicate the required protocol(s). This update also improves cleos handling of error codes from nodeos; specifically around use of --print-response.

cleos validate signatures sub-command

PRs

  • (mandel#500) [3.2] Backport of the cleos validate signatures


This sub-command takes a signed transaction, validates the signatures on it, and outputs a JSON array of the recovered public keys.

cleos validate signatures <json_file_of_transaction>

Example:

$ cleos create account -j -d --json-file t eosio kevinh EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
{
  "expiration": "2022-06-23T00:50:08",
  "ref_block_num": 4714,
  "ref_block_prefix": 3530990,
  "max_net_usage_words": 0,
  "max_cpu_usage_ms": 0,
  "delay_sec": 0,
  "context_free_actions": [],
  "actions": [{
      "account": "eosio",
      "name": "newaccount",
      "authorization": [{
          "actor": "eosio",
          "permission": "active"
        }
      ],
      "data": "0000000000ea305500000000b4e9b68201000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf0100000001000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf01000000"
    }
  ],
  "transaction_extensions": [],
  "signatures": [
    "SIG_K1_K4ewr6ZLtiWABNKjEhWzXkfgiPdhpF2nKvGz9NKAGaZwtpKdBP6FBXrzKDpuiqEVfh5tZ4GAd4FcFZK4ysMf7NcgtreKfK"
  ],
  "context_free_data": []
}
$ cleos validate signatures <t>
info  2022-06-23T00:49:48.284 cleos     main.cpp:2690                 operator()           ] grabbing chain_id from nodeos
[
  "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"
]

Add support for authority structure in cleos system newaccount sub-command

PRs

  • (mandel#543) [3.2] Add authority structure to cleos system newaccount


It is now possible to specify an authority structure (encoded as JSON) with cleos system newaccount for the owner or active authorities to use for the newly created account. It still remains possible to specify the single public key and single permission reference shorthands in place of the full authority structure.

Example

$ cleos system newaccount eosio testtesttest '{"threshold": 1, "keys":[{"key":"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV", "weight":1}], "accounts":[{"permission":{"actor":"eosio.prods", "permission":"active"},"weight":1},{"permission":{"actor":"eosio.prods", "permission":"prod.major"},"weight":1},{"permission":{"actor":"eosio.prods", "permission":"prod.minor"},"weight":1}],"waits":[]}' --stake-net "1.0000 EOS" --stake-cpu "1.0000 EOS" --buy-ram-kbytes 4

cleos get supported_protocol_features and system activate sub-commands

PRs

  • (mandel#663) [3.2] cleos: add get supported_protocol_features and system activate subcommands


The sub-commands get supported_protocol_features and system activate were added to cleos so that protocol features can be activated by using their names and feature digests are no longer needed.

A user can now use get supported_protocol_features to find a list of supported feature names. The command description was cleaned up and PREACTIVATE_FEATURE was removed because it is not possible to activate it using activate action from eosio.boot (RPC schedule_protocol_feature_activations must be used).

  1. Find supported protocol features
$ cleos get supported_protocol_features
ONLY_LINK_TO_EXISTING_PERMISSION
FORWARD_SETCODE
WTMSIG_BLOCK_SIGNATURES
GET_BLOCK_NUM
REPLACE_DEFERRED
NO_DUPLICATE_DEFERRED_ID
RAM_RESTRICTIONS
WEBAUTHN_KEY
BLOCKCHAIN_PARAMETERS
DISALLOW_EMPTY_PRODUCER_SCHEDULE
CRYPTO_PRIMITIVES
ONLY_BILL_FIRST_AUTHORIZER
RESTRICT_ACTION_TO_SELF
GET_CODE_HASH
ACTION_RETURN_VALUE
CONFIGURABLE_WASM_LIMITS2
FIX_LINKAUTH_RESTRICTION
GET_SENDER
  1. Activate a protocol feature
$ cleos system activate WTMSIG_BLOCK_SIGNATURES
executed transaction: 667479cd2280739b21b925c1c9cddc2d8dc46626f0ecc61173aec5f092431c61  128 bytes  179 us
#         eosio <= eosio::activate              {"feature_digest":"299dcb6af692324b899b39f16d5a530a33062804e41f09dc97e9f156b4476707"}
warn  2022-07-16T01:51:13.001 cleos     main.cpp:665                  print_result       warning: transaction executed locally, but may not be confirmed by the network yet

cleos get consensus_parameters sub-command

PRs

  • (mandel#692) [3.2] Add chain api get_consensus_parameters


A new sub-command get consensus_parameters has been added to cleos to retrieve consensus parameters.

cleos --sign-with & --signature options

PRs

  • (mandel#547) [3.2] Backport cleos transaction signature keys
  • (mandel#674) [3.2] Backport: allow multiple signatures in cleos command “push transaction”


Added --sign-with <public key> or --sign-with [ <public key 1>, <public key 2>, ... ] option to cleos options that generate a transaction. When specified, cleos will use the provided public keys instead of querying nodeos for the keys required for signing the transaction.

Added --signature <signature> option which allows adding additional signatures to a transaction. Repeat option to specify multiple signatures. Example:

$ cleos push transaction -s transaction_json_not_signed.txt --signature SIG_K1_K5vfhnCSPCppSw3sWTPWj7LVf39vxhEZssHsKBrWpgrufE71M1GUvD2Ujt7QxVEWeQnYTkmr3nkHPhkbYgpT1J7Aa56bav

cleos --compression option for transactions

PRs

  • (mandel#563) [3.2] Backport: Add cleos --compression option for transactions


A new --compression option has been added to cleos for all transaction commands.

  --compression ENUM:value in {none->0,zlib->1} OR {0,1}
                              Compression for transaction 'none' or 'zlib'

cleos option to unpack data when forming transaction

PRs

  • (mandel#580) [3.2] Backport unpack transaction data
  • (mandel#581) [3.2] Backport: Fix unpack data for signing transaction
  • (158) [3.2] cleos: only unpack action data when explicitly asked


Added new cleos option --unpack-action-data (or -u for short) which can be used alongside the existing --dont-broadcast option to expand the transaction action data section of JSON.

Limit requests to http_plugin

PRs

  • (mandel#561) [3.2] Add --http-max-in-flight-requests to http_plugin option


The http-max-in-flight-requests option has been added to the http_plugin. It restricts the maximum number of concurrent requests. If limit is exceeded, it sends a HTTP 429 error to the client. --http-max-in-flight-requests = -1 disables the restriction allowing unlimited concurrent requests.

eosio-blocklog –extract-blocks option

PRs

  • (mandel#535) [3.2] Add extract-blocks option to eosio-blocklog


There is now an --extract-blocks option to the eosio-blocklog tool, along with an accompanying --output-dir option. This option extracts the range of blocks specified by the -f or --first block option and the -l or --last block option and writes a new block log with accompanying index file to the directory specified by the --output-dir option. At least one of --first or --last must be specified.

This new functionality has also been included within the block-log sub-command within the new leap-util program.

Option to run with no block log

PRs

  • (mandel#643) [3.2] Enhancement: Add capability of not genereating block log by setting option block-log-retain-blocks to 0


The block-log-retain-blocks option has been modified to allow being set to 0, which tells nodeos not to generate blocks.log.

Now the block-log-retain-blocks option description looks like:

--block-log-retain-blocks arg         If set to greater than 0, periodically
                                       prune the block log to store only
                                       configured number of most recent
                                       blocks.
                                       If set to 0, no blocks are be written
                                       to the block log; block log file is
                                       removed after startup.

Basic crypto primitives benchmarking framework

PRs

  • (17) [3.2] Create a simple benchmarking framework and use it to benchmark crypto primitives


There is now a benchmarking framework to help with writing benchmarking code by reusing common measuring functions and unifying reports.

For end users

A few examples of usage of the benchmarking tool are provided below.

Help
$ benchmark -h
benchmark command line options:
  -m [ --module ] arg       the module to be benchmarked; if this option is not
                            present, all modules are benchmarked.
  -l [ --list ]             list of supported modules
  -r [ --runs ] arg (=1000) the number of runs per function
  -h [ --help ]             execute the benchmarked functions for the specified
                            number of times, and report average, minimum, and
                            maximum time in nanoseconds
Benchmarking All Modules (functions)
$ benchmark
function                      runs               avg              min              max

alt_bn_128:
alt_bn128_add                 1,000         6,467 ns         3,727 ns       113,625 ns
alt_bn128_mul                 1,000       251,105 ns       235,337 ns       395,856 ns
alt_bn128_pair (1 pair)       1,000     6,405,913 ns     6,354,466 ns     8,265,015 ns
alt_bn128_pair (10 pairs)     1,000    25,379,638 ns    25,236,388 ns    36,013,377 ns

modexp:
1024-bit width                1,000       389,252 ns       388,298 ns       396,263 ns
2048-bit width                1,000     2,914,494 ns     2,910,697 ns     2,999,909 ns
Benchmarking Particular Module with Specific Number of Runs
$ benchmark -m modexp -r 500
function                      runs               avg              min              max

modexp:
1024-bit width                500         441,057 ns       388,091 ns       818,064 ns
2048-bit width                500       2,914,402 ns     2,911,318 ns     3,001,094 ns

For developers

The following steps illustrate how to add code to benchmark new functions, using alt_bn_128 functions as an example.

  1. Determine functions to be benchmarked: alt_bn128_add, alt_bn128_mul, and alt_bn128_pair.
  2. Create a file alt_bn_128.cpp inside <leap-repo>/benchmaking directory. A skeleton of the file looks like:
  void add_benchmarking() {
    ...
  }
 
  void mul_benchmarking() {
     ...
  }
 
  void pair_benchmarking() {
    ...
  }
 
  void alt_bn_128_benchmarking() {
     add_benchmarking();
     mul_benchmarking();
     pair_benchmarking();
  } 
  1. For each benchmarked function, define a lambda to call the function and use benchmarking to link it to the framework. The following code segment shows how to benchmark fc::alt_bn128_add:
   void add_benchmarking() {
      bytes point1, point2;
      // initialization of point1 and point2 are omitted
      
      auto f = [&]() {
         fc::alt_bn128_add(point1, point2);
      }
      
      benchmarking("alt_bn128_add", f);
   }
  1. Add void alt_bn_128_benchmarking(); to benchmark/benchmark.hpp
  2. Add { "alt_bn_128", alt_bn_128_benchmarking } to features (a map) in benchmark.cpp:
   std::map<std::string, std::function<void()>> features {
      { "alt_bn_128", alt_bn_128_benchmarking },
      { "modexp", modexp_benchmarking },
      ...
   }

Additional CPU/NET usage data within get_account results

PRs

  • (mandel#493) [3.2] Add additional CPU/NET usage data to get_account results


Added last_updated_time_stamp and current_used (according to the head block timestamp) to get_account RPC results.

The addition of the last_updated_time_stamp value in the result enables a client to calculate in real-time what the current value of the used would be if it were to be refreshed to account for the continuous decay in the used amount; note that the refreshed value is what is relevant for determining how much CPU or NET resources an account has available to use in a new transaction. Clients that put in the effort to calculate the updated values for their users can help alleviate confusion in users who mistakenly believe their account has still used up all of their available CPU despite the fact that their account has been inactive for more than 24 hours.

The current_used value is added as a convenience to the client since it holds the resulting value if this refresh calculation was carried out using the head block time at the moment the RPC request was processed by nodeos.

Note:

Versions of cleos prior to this release normally display the same info as was done previously regardless of whether they make an RPC call to an old or new version of nodeos. But if they make the call to a version of nodeos including the changes of this release, the JSON output for cleos get account -j will additionally contain the two new fields for both the CPU and NET resources of the account.

The version of cleos that is part of this release will display different data for the cleos get account sub-command than it has in previous versions. If the RPC call goes to a new version of nodeos, then the value displayed after used: will now be the current_used value rather than the used value (the original used value still remains accessible in the JSON output). However, if the RPC call goes to an old version of nodeos, then the value displayed after used: will remain the original used value, expect it will be followed by (out-of-date) to signal that the value is the used value and therefore is likely to be quite out-of-date (depending on how recently the account had activity on the blockchain).

Performance improvements

Control whether to log integrity hash on start/stop

PRs

  • (mandel#395) [3.2] log integrity hash on start/stop with integrity-hash-on-start & integrity-hash-on-stop options


It was previously observed that logging the integrity hash after loading a snapshot increased start up time from a snapshot by nearly 33%. This is no longer performed by default: the options integrity-hash-on-start and integrity-hash-on-stop have been added to determine whether the integrity hash is calculated on start up and shut down, respectively.

Multi-threaded support for get_accounts_by_authorizers

PRs

  • (mandel#411) [3.2] Make /v1/chain/get_accounts_by_authorizers multi-threaded


/v1/chain/get_accounts_by_authorizers was designed to support multi-threaded calls, but was hooked up to the normal app thread handling. This update hooks it up the http thread handling code. Resultingly, /v1/chain/get_transaction_status has been moved from add_async_api to add_api since it does not support multi-threaded reads.

websocketpp replaced with boost beast for nodeos HTTP server implementation

PRs

  • (22) [3.2] Replace websocketpp with boost beast


The http_plugin has been overhauled, replacing websocketpp with boost::beast. The new implementation has feature parity with the previous implementation and adds HTTP Keep Alive support along with additional server-side error logging.

Use get_raw_abi in cleos

PRs


To reduce load on servers,get_abi has been replaced with get_raw_abi within cleos to get the ABI of a contract.

Stability and performance improvements to state_history_plugin (SHiP)

PRs

  • (mandel#340) [3.2] Backporting state history plugin improvements and fixes


Various stability and performance improvements were made to the state_history_plugin. See the referenced PR for details.

Optimizations to transaction and block processing

PRs

  • (mandel#484) [3.2] Backport push_transaction optimizations.
  • (mandel#551) [3.2] skip context free actions during light validation
  • (mandel#634) [3.2] Backport of 2.1 optimizations


Transaction processing has been optimized by using deque instead of std::vector. Building with a version of boost >= 1.71 will provide an additional performance improvement by using boost::container::deque. Also calculation of the action_receipt digest and transaction_receipt digest was moved to transaction and action execution time to avoid copying of receipts and to bill for hash time.

Leap now skips context-free action execution during light validation. Since context-free actions are designed not have any side-effects (except for possible console output) and to only influence execution via asserting, the fact that they exist in a signed block is indication that the producer executed them and they did not assert. Therefore, they can be skipped during light validation where producers are implicitly trusted. Note: Any node that wishes to include all context free action console output in action traces needs to run nodeos with --force-all-checks for replay, no trusted producers, and in full validation mode.

Multithreaded enhancements:

  • Pack blocks for writing to the block log in a thread pool.
  • Destroy block_state objects and their associated transaction_metadata objects in thread pool.
  • Calculate Merkle roots in a thread pool.

Other changes

3-strike rule applied to speculative blocks

PRs

  • (151) [3.2] Add 3-strike rule to speculative blocks
  • (175) [3.2] Do not apply 3-strike rule when subjective billing is disabled


Previously, subjective-account-max-failures only applied to signed produced blocks, not to speculative blocks. On the WAX network, it was sometimes observed that a large number of failed transactions on speculative blocks caused excessive (100%) CPU usage, and enabling subjective-account-max-failures within that environment was observed to reduce CPU usage to approximately 40%.

Applying the 3-strike rule to speculative blocks means that an account is only allowed 3 failures per speculative block, approximately 3 failures every 500 ms. It is not exactly over 500 ms as speculative blocks can be shorter or longer than 500 ms as new speculative blocks are only started when a BP signed block is received or a block CPU/NET limit is exhausted. Any transaction processed into a speculative block after the first 3 failures is immediately failed with a transaction exceeded CPU usage exception without any attempt to execute it.

The 3-strike rule is enabled by disable-subjective-billing=false and configured by subjective-account-max-failures. It is not applied to disable-subjective-account-billing accounts.

Since subjective-account-max-failures is configurable already (defaults to 3) it can be configured to 99999 to disable the 3-strike rule. Also it can be configured differently for block signing nodes, API nodes, and relay nodes.

Additional logging

PRs

  • (mandel#537) [3.2] Additional transaction/block time logging


Logging enhancements add additional information to existing log statements.

The info log statement tracked in the default logger for when a block is produced in the producer_plugin adds the following fields:

  • net - sum of transaction trace net_usage in bytes
  • cpu - sum of transaction trace cpu_usage_us in microseconds

Example:

info 2022-06-25T16:37:28.419 nodeos producer_plugin.cpp:2486 produce_block ] Produced block 23e74c6387b1b15f... #53 @ 2022-06-25T16:37:28.500 signed by defproducerc [trxs: 18, lib: 48, confirmed: 0, net: 2592, cpu: 7030]

The info log statement tracked in the default logger for when a block is received by the producer_plugin adds the following fields:

  • net - sum of transaction trace net_usage in bytes
  • cpu - sum of transaction trace cpu_usage_us in microseconds
  • elapsed - sum of transaction trace elapsed in microseconds
  • time - wall clock time for processing/validating the block in microseconds

Example:

info 2022-06-25T16:37:23.979 nodeos producer_plugin.cpp:509 on_incoming_block ] Received block 01e618736c7f02f5... #44 @ 2022-06-25T16:37:24.000 signed by eosio [trxs: 9, lib: 43, conf: 0, net: 89592, cpu: 20526, elapsed: 19293, time: 44956, latency: -20 ms]

The debug log statements for subjective billing of a transaction processed in the producer_plugin, whether for the success case (tracked in transaction_success_tracing logger) or the failure case (tracked in transaction_failure_tracing logger), capture two time-based metrics in the log:

  • elapsed - transaction trace elapsed in microseconds
  • time - wall clock time for processing/validating the transaction in microseconds

Example:

debug 2022-06-25T16:37:24.007 nodeos producer_plugin.cpp:743 process_incoming_tra ] Subjective bill for success eosio: 0 elapsed 1082us, time 1287us

The logging enhancements also add completely new log statements.

A debug log statement is added within the producer_plugin and tracked by the transaction_success_tracing logger to report the wall clock time in microseconds since the completion of the previous transaction or since the start of the block.

Example:

debug 2022-06-25T17:38:36.326 nodeos producer_plugin.cpp:689 process_incoming_tra ] Time since last trx: 21479us

Debug log statements are added within the producer_plugin and tracked by the transaction_success_tracing and transaction_failure_tracing loggers to capture the processing of deferred transactions (whether they succeed or fail) with the following additional data:

  • time - wall clock time for executing the transaction in microseconds
  • auth - first authorizer of the transaction
  • cpu - transaction trace receipt cpu_usage_us in microseconds

Example:

debug 2022-06-25T17:26:28.501 nodeos producer_plugin.cpp:2213 process_scheduled_an ] [TRX_TRACE] Block 77 for producer defproducera is ACCEPTING scheduled tx: 8203fcf4583e6f86377c09391d3a11688379fb4969df65eec38173d286ee083f, time: 452, auth: eosio, cpu: 210

Additionally, debug log statements are added within the producer_plugin and tracked by the transaction_trace_success and transaction_trace_failure loggers to capture the processing of deferred transactions (whether they succeed or fail) along with the full transaction trace.

Example:

debug 2022-06-25T17:38:34.001 nodeos producer_plugin.cpp:2216 process_scheduled_an ] [TRX_TRACE] Block 77 for producer defproducera is ACCEPTING scheduled tx: {"id":"93778ab0d07ceab684323c3f7ab053923266318254ab5d583f5a699ef1d7b585","block_num":77,"block_time":"2022-06-25T17:38:34.500","producer_block_id":null,"receipt":{"status":"executed","cpu_usage_us":172,"net_usage_words":0},"elapsed":172,"net_usage":0,"scheduled":true,"action_traces":[{"action_ordinal":1,"creator_action_ordinal":0,"closest_unnotified_ancestor_action_ordinal":0,"receipt":{"receiver":"eosio","act_digest":"cfd5ae30263ee0c3873c6f6895fb34d6b2898f55a16afd4fc4c41044a069b60f","global_sequence":111,"recv_sequence":107,"auth_sequence":[["eosio",108]],"code_sequence":1,"abi_sequence":1},"receiver":"eosio","act":{"account":"eosio","name":"newaccount","authorization":[{"actor":"eosio","permission":"active"}],"data":{"creator":"eosio","name":"sample","owner":{"threshold":1,"keys":[{"key":"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV","weight":1}],"accounts":[],"waits":[]},"active":{"threshold":1,"keys":[{"key":"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV","weight":1}],"accounts":[],"waits":[]}},"hex_data":"0000000000ea305500000000a858a5c101000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf0100000001000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf01000000"},"context_free":false,"elapsed":111,"console":"","trx_id":"93778ab0d07ceab684323c3f7ab053923266318254ab5d583f5a699ef1d7b585","block_num":77,"block_time":"2022-06-25T17:38:34.500","producer_block_id":null,"account_ram_deltas":[{"account":"sample","delta":2724}],"except":null,"error_code":null,"return_value_hex_data":""}],"account_ram_delta":{"account":"eosio","delta":-424},"except":null,"error_code":null}

Building, compatibility, and upgrading

Upgrading from prior releases

To upgrade from Leap 3.1, simply install Leap 3.2 and restart the binaries while pointing to the same config and data directories as usual. The persisted data files used by Leap 3.1 are compatible with Leap 3.2.

Deprecations, removals, and dropped support

Deprecations

The latest state of deprecations for Leap can be found at https://github.com/AntelopeIO/leap/wiki/Deprecations-and-Proposed-Deprecations-In-Leap-Software.

Below are new deprecations introduced as part of this release.

HTTPS support

nodeos does currently have limited HTTPS support but in actual production networks node operators tend to use the HTTPS support provided by a reverse proxy. Using the reverse proxy is the recommended way to secure client connections to the nodeos API services provided by an organization.

HTTPS support built into keosd is also not a popular way of securely connecting transaction signing tools, such as cleos, to keosd.

HTTPS support has been deprecated in nodeos and keosd and will be removed from both programs in a future release. HTTPS support within cleos has not been deprecated.

Speculative mode

Speculative mode is currently the default mode for nodeos. In speculative mode, nodeos will create a pending block even when it is not configured to producer a block for the current time slot to capture the side-effects of transactions that it has received. This allows a client to query the state of that nodeos and see what the side-effects of a transaction sent to that nodeos would be even before the transaction has actually made its way to a block producer.

However, this behavior can mislead users into believing their transaction was included in the blockchain when it may not have even been seen by a block producer yet. Furthermore, even when communicating with a particular API provider, there is no guarantee of consistently seeing the side-effects of a transaction that was sent to that API provider earlier because the API provider's load balance may route one read request to an API node that has speculatively applied the transaction and then route the next read request to another API node that never saw the transaction.

For the sake of simplicity, we recommend all nodes to run in head mode for any situation where they would otherwise considered running nodeos in speculative mode.

Speculative mode is deprecated and will be removed in favor of head mode in a future release. The disable-api-persisted-trx option is related to speculative mode and so it is also deprecated and will be removed at the same time speculative mode is removed.

blocklog-util

The blocklog-util program is made redundant by the new leap-util program. Therefore, blocklog-util is now deprecated and will be removed in a future release.

trx_test_gen_plugin

The trx_test_gen_plugin has not ever been a reliable way to benchmark nodeos. The trx_test_gen_plugin is deprecated and will be removed in the future once a better mechanism is in place for executing transaction benchmarks for Leap.

login_plugin

The login_plugin is an obscure plugin with no known usage. It has been deprecated and will be removed in a future release.

fc and wasm-spec-tests repos

Due to limited cases for fc and wasm-spec-tests outside of Leap along with the associated overhead, the two code for both repositories, which used to be integrated into the leap repository through submodules, has now been integrated directly into leap repository (see (236) and (111)).

This change means the two repositories https://github.com/AntelopeIO/fc and https://github.com/AntelopeIO/wasm-spec-tests are no longer needed for Leap versions 3.2 and later, and so they are both deprecated. Further development on related code will occur directly in the leap repository and the only development that will occur within the fc and wasm-spec-tests repositories are critical bug fixes that are necessary to support Leap 3.1 patches.

When support for Leap 3.1 reaches its end of life, the fc and wasm-spec-tests repositories will be archived.

Further details on changes since last release

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs

  • (mandel#355) [3.2] Add new parameters to txn-test-gen plugin
  • (mandel#393) [3.1] remove an unneeded npm command from README
  • (mandel#394) [3.1 -> main] remove an unneeded npm command from README
  • (mandel#389) [3.2] Boost.Test to report the last checkpoint location
  • (mandel#404) [3.2] Merge Main post 3 1 into Main
  • (mandel#387) [3.1] plugin_http_api_test - fix timing issue
  • (mandel#381) [3.1] net_plugin delay connecting to peers
  • (mandel#412) [3.2] bump main to 3.2.0-dev
  • (mandel#409) [3.1 -> main] Fix plugin http api test
  • (mandel#410) [3.1 -> main] net_plugin delay connecting to peers
  • (mandel#417) [3.1] before reading /etc/os-release make sure it exists
  • (mandel#481) [3.1 -> main] before reading /etc/os-release make sure it exists
  • (mandel#483) [3.1] bump fc submod with fix for macos hole punching
  • (mandel#480) [3.1] Remove confusing error message
  • (mandel#485) [3.1 -> main] bump fc submod with fix for macos hole punching
  • (mandel#395) [3.2] log integrity hash on start/stop with integrity-hash-on-start & integrity-hash-on-stop options
  • (mandel#486) [3.1 -> main] Remove confusing error message
  • (mandel#482) [3.2] Get future before use to avoid race on set_value get_future
  • (mandel#487) [3.1] pinned_build.sh - prints out warning only if the platorm is not Ubuntu and makes build directory relative to where the build starts
  • (mandel#472) [3.1] Fix issue with current block not sent to SHiP clients
  • (mandel#494) [3.1 -> main] Fix issue with current block not sent to SHiP clients
  • (mandel#411) [3.2] Make /v1/chain/get_accounts_by_authorizers multi-threaded
  • (mandel#496) [3.1] Fix incorrect default option name for wasm-runtime in appbase
  • (mandel#497) [3.1 -> main] Fix incorrect default option name for wasm-runtime in appbase
  • (mandel#489) [3.2] Eliminate use of boost deprecated query object.
  • (mandel#491) [3.2] Using get raw abi in cleos
  • (mandel#492) [3.2] Replace hard coding system_account_name
  • (mandel#498) [3.1] Changes need to crypto-primitives host functions
  • (mandel#503) [3.1 -> main] Merge changes needed for crypto primitives
  • (mandel#504) [3.2] pick sane defaults for OPENSSL_ROOT_DIR on ARM macOS
  • (mandel#505) [3.1] fix linking of c++ SHIP tests on boost versions prior to 1.69
  • (mandel#499) [3.2] Fix nodeos forked chain test
  • (mandel#495) [3.2] Backport: Send handshake for heartbeat/2 if no block
  • (mandel#484) [3.2] Backport push_transaction optimizations.
  • (mandel#500) [3.2] Backport of the cleos validate signatures
  • (mandel#501) [3.2] Backport comparison operators
  • (mandel#493) [3.2] Add additional CPU/NET usage data to get_account results
  • (mandel#506) [3.1 -> main] fix linking of c++ SHIP tests on boost versions prior to 1.69
  • (mandel#507) [3.2] Fix db modes test
  • (mandel#509) [3.2] Backport: two comment fixes to transaction.hpp
  • (mandel#502) [3.1] fix libff in 3.1 tester cmakes
  • (mandel#530) [3.1 -> main] fix libff in 3.1 tester cmakes
  • (mandel#532) [3.1] misc pinned build script fixes
  • (mandel#534) [3.1 -> main] misc pinned build script fixes
  • (mandel#533) [3.2] cleos Http 1.1 support and improves response handling
  • (mandel#536) [3.2] CLEOS -- prints out non-JSON formatted HTTP responses
  • (mandel#510) [3.2] Add a second account and action to test_exhaustive_snapshot
  • (mandel#520) [3.2] Fix eosio::name conversion in get_table_rows_by_seckey
  • (mandel#539) [3.1] Fix log trimming of hex_data JSON output.
  • (mandel#541) [3.2] Separate out signature provider from producer plugin
  • (mandel#549) [3.1 -> main] Fix log trimming of hex_data JSON output.
  • (mandel#543) [3.2] Add authority structure to cleos system newaccount
  • (mandel#537) [3.2] Additional transaction/block time logging
  • (mandel#547) [3.2] Backport cleos transaction signature keys
  • (mandel#560) [3.2] Backport: Create integration test for sending copies of the same transaction into the network
  • (mandel#563) [3.2] Backport: Add cleos --compression option for transactions
  • (mandel#565) [3.2] Backport: Fix build when build path has spaces for mandel and appbase
  • (mandel#551) [3.2] skip context free actions during light validation
  • (mandel#561) [3.2] Add --http-max-in-flight-requests to http_plugin option
  • (mandel#572) [3.2] Switch mandel/eosio-wasm-spec-tests to point to mandel-wsam-spec-tests' branch from historical-v2.1.x to main
  • (mandel#580) [3.2] Backport unpack transaction data
  • (mandel#581) [3.2] Backport: Fix unpack data for signing transaction
  • (mandel#584) [3.2] Backport: Add trace plugin API test
  • (mandel#570) [3.2] Backport: Add ABI action trace tests
  • (mandel#573) [3.2] Add block replay test
  • (mandel#587) Github workflow to create new jira issues on OCI label
  • (mandel#591) [3.2] Fix race condition on trace_api_plugin shutdown
  • (mandel#586) [3.2] Light sync validation test
  • (mandel#566) [3.1] fixup CONTRIBUTING.md
  • (mandel#550) [3.2] Add logs to artifacts
  • (mandel#594) [3.1 -> main] fixup CONTRIBUTING.md
  • (mandel#592) [3.1] Fix race condition on trace_api_plugin shutdown
  • (mandel#604) [3.1 -> main] Fix race condition on trace_api_plugin shutdown
  • (mandel#603) [3.2] Update jiraIssueCreator.yml
  • (mandel#605) [3.2] remove old outdated MSVC paths in cmake files
  • (mandel#607) [3.2] mandel: rebase abieos to the head of abieos submodule (fixing compile warnings)
  • (mandel#596) [3.1] various README.md improvements w.r.t. build & branches
  • (mandel#608) [3.1] Allow zero in alt_bn128; fix gmp linking in EosioTester
  • (mandel#610) [3.1] Bump version to 3.1.0-rc2
  • (mandel#609) [3.1 -> main] Allow zero in alt_bn128; fix gmp linking in EosioTester
  • (mandel#611) [3.1 -> main] Pull in 3.1.0-rc2
  • (mandel#535) [3.2] Add extract-blocks option to eosio-blocklog
  • (mandel#613) [3.2] Fix typo in log message format string.
  • (mandel#615) [3.2] Fix compile warnings in eos-vm-oc's memory.hpp, executor.cpp, and memory.cpp
  • (mandel#569) Update and bring to current state mandel/docs
  • (mandel#595) [3.2] Backport separate logging for state history plugin
  • (mandel#618) [3.1] ensure an empty llvm-dev dep doesn't make its way to mandel-dev .deb
  • (mandel#620) [3.2] Backport: [statehist] Ship logs reduction / optimization
  • (mandel#624) [3.1 -> main] ensure an empty llvm-dev dep doesn't make its way to mandel-dev .deb
  • (mandel#626) [3.2] fixing compile warnings in cleos main.cpp
  • (mandel#625) Backport SHiP tests
  • (mandel#419) before enabling Secure Enclave wallet require code be signed with a certificate
  • (mandel#622) [3.2] Backport test contract fixes
  • (mandel#627) [3.1] Fix for block producer stuck in coma state
  • (mandel#633) [3.1] spelling fixes in p2p log messages
  • (mandel#629) [3.1 -> main] Fix for block producer stuck in coma state
  • (mandel#637) [3.1 -> main] spelling fixes in p2p log messages
  • (mandel#628) [3.2] Add snapshot test and refactor pending_snapshot
  • (mandel#630) [3.2] Allow HTTP-RPC with empty response
  • (mandel#593) [3.2] simplify deep_mine_tests by replacing complicated merge and match with straight-forward file copying and comparison
  • (mandel#636) [3.2] fixed compile warnings in abi_tests.cpp (real bug, missing test), auth_tests.cpp, bootseq_tests.cpp, and whitelist_blacklist_tests.cpp
  • (mandel#646) [3.1] make fc::read_file_contents() check for errors instead of silently returning empty string
  • (mandel#634) [3.2] Backport of 2.1 optimizations
  • (mandel#635) [3.2] fix break strict-aliasing rules warnings in get_table_tests.cpp
  • (mandel#645) [3.2] Backport: move fc::blob to/from_variant out of libchain to fc
  • (mandel#644) [3.2] Backport: pop a delta with empty rows
  • (mandel#655) Update jiraIssueCreator.yml
  • (mandel#656) Update jiraIssueCreator.yml
  • (mandel#657) Update jiraIssueCreator.yml
  • (mandel#658) Update jiraIssueCreator.yml
  • (mandel#661) [3.2] Backport: Add unit tests for new fields get account in chain_plugin
  • (mandel#650) [3.2] force the plugin_http_api_test to use a custom config dir
  • (mandel#667) [3.2] Backport: fix wrong cleos version returned in getClientVersion of tests/Cluster.py
  • (mandel#654) [3.1] Use signed transaction for PUSH_CREATE action deep-mind logging.
  • (mandel#668) [3.2] Backport: save snapshot json gz files when snapshot test fails
  • (mandel#660) [3.2] disable appbase's automatic version discovery via git
  • (mandel#670) [3.1 -> main] Bring GH-651 and GH-646 into main
  • (mandel#671) [3.2] Backport: Use new appbase method caller
  • (mandel#662) [3.2] Backport: Add waits for token transfer block to improve reliability
  • (mandel#652) [3.2] extra transaction data integration test
  • (mandel#674) [3.2] Backport: allow multiple signatures in cleos command “push transaction”
  • (mandel#647) [3.2] controller::extract_chain_id_from_db() does not properly handle dirty db
  • (mandel#679) [3.1] Fix trx_finality_status_test
  • (mandel#684) [3.1 -> main] Fix trx_finality_status_test
  • (mandel#686) [3.2] Merge pull request #10727 from EOSIO/keke_epe948
  • (mandel#688) [3.2] Add tests for creating public key with no private key
  • (mandel#663) [3.2] cleos: add get supported_protocol_features and system activate subcommands
  • (mandel#649) [3.2] Backported contract deltas test
  • (mandel#648) [3.1] more cleanup to EosioTester.cmake to use CMAKE_INSTALL_FULL_LIBDIR instead
  • (mandel#690) Added FreeBSD build instructions
  • (mandel#680) embed contracts required for native contract unit testing in to libtester
  • (mandel#695) [3.2] Backported SHiP transaction extension unit test
  • (mandel#696) [3.2] cleos sorts keys/permission_levels/waits for "cleos set account permission
  • (mandel#692) [3.2] Add chain api get_consensus_parameters
  • (mandel#701) [3.2] Backport action serialization to always include hex_data.
  • (mandel#702) [3.1] remove broad 'using namespace boost' causing float128_t conflict; fixes builds w/ boost 1.80
  • (mandel#709) [3.2] Add test cases for get_consensus_parameters RPC endpoint
  • (mandel#691) [proposed bugfix] Docs clean up resolved #676
  • (mandel#643) [3.2] Enhancement: Add capability of not genereating block log by setting option block-log-retain-blocks to 0
  • (mandel#340) [3.2] Backporting state history plugin improvements and fixes
  • (mandel#720) wrong description for db_lowerbound_i64
  • (mandel#724) Wrong description for lowerbound comments
  • (mandel#739) [3.1] Add subjective limit to mod_exp host function
  • (mandel#741) merge #648, #680 & #702 from 3.1 to main
  • (mandel#742) [3.1 -> main] Add subjective limit to mod_exp host function
  • (mandel#736) [3.2] Update, Replace, and Check Validity of WASM files in mandel
  • (mandel#718) [3.1] set prune logs at debug level except for the initial log when enabling pruning
  • (mandel#725) [3.2] Replace hardcoded protocol feature names and digests with dynamically retrieved names and digests
  • (mandel#734) Backport cleos optional support
  • (mandel#751) [3.1 -> main] set prune logs at debug level except for the initial log when enabling pruning
  • (mandel#744) [3.2] fix some compile warnings in fc's hash classes
  • (mandel#749) [3.1] Use more flexible subjective limits on mod_exp.
  • (mandel#735) Replace cleos local abi file test with test harness version.
  • (mandel#754) [3.1 -> main] Use more flexible subjective limits on mod_exp
  • (mandel#752) [3.1] bump version to 3.1.0-rc3
  • (mandel#756) [3.1] Attempt connection retries for duplicate connections
  • (mandel#757) [3.1 -> main] Attempt connection retries for duplicate connections
  • (mandel#743) [3.2] grab bag of warning fixes
  • (mandel#758) fix warning in fc::array<> from_variant
  • (mandel#704) Backport cleos local abi file
  • (mandel#791) [3.1] Reduce net_plugin handshake messages in case of unavailable blocks
  • (mandel#798) [3.1 -> main] Reduce net_plugin handshake messages in case of unavailable blocks
  • (mandel#719) [3.2] Enhancement: Add unique error message for subjective billing in the transaction trace logs
  • (mandel#753) [3.2] insert comments in the kv_config header file indicating it is not in use
  • (mandel#807) [3.1] Added file package to the list of installable packages
  • (mandel#809) [3.1] Increase default transaction-retry-max-expiration-sec from 90 to 120
  • (mandel#810) [3.1 -> main] Increase default transaction-retry-max-expiration-sec from 90 to 120. Added file package to the list of installable packages.
  • (mandel#750) [3.2] move trace api plugin activation out of tests and into cluster
  • (mandel#733) [3.2] return the error from the contract itself in the transaction trace log message for asserts
  • (14) [3.1 -> main] Antelope rename changes
  • (15) documentation fixes to power developer doc portal
  • (33) [3.2] bump FC version to fix sha3.hpp compile error when Boost 1.79 is used
  • (38) remove boost::thread usage, fixing pinned builds
  • (37) fix multiple problems in cli_test
  • (17) [3.2] Create a simple benchmarking framework and use it to benchmark crypto primitives
  • (39) Compile warnings fixes in deep_mind.cpp, abi_serializer.cpp, producer_plugin.cpp, auth_tests.cpp
  • (42) [3.1 -> main] CICD adjustments for public repo & README fixes wrt multiple llvm-dev
  • (57) [3.1 -> main] add a final job that passes if all tests pass making it easier to branch protect on checks
  • (61) [3.2] Convert regression test framework into a Python package and update tests
  • (35) [3.2] fix compile warnings in trace_api_plugin
  • (64) [3.1 -> main] fix a number of issues with http-max-bytes-in-flight-mb configuration
  • (29) [3.2] Refactor producer_plugin to consolidate controller push_transaction calls
  • (34) [3.2] Update max-scheduled-transaction-time-per-block-ms description
  • (65) remove nonworking Secure Enclave support from signature_provider_plugin
  • (70) [3.1 -> main] Fix python format issue that caused test to fail
  • (73) [3.2] cleanup & simplify license file handling
  • (74) [3.1 -> main] Fix failure to sync on startup
  • (75) [3.1 -> main] Fix crash on startup if port already in use
  • (71) [3.2] replace git commands from nodeos' & launcher's cmake with libversion usage
  • (66) [3.2] remove YubiHSM support from keosd
  • (78) [3.2] improve CICD build time via faster artifact upload & parallel leap-dev creation
  • (79) [3.2] Fix documentation for get_scheduled_transactions in plugins/chain_api_plugin/chain.swagger.yaml
  • (22) [3.2] Replace websocketpp with boost beast
  • (83) [3.2] run nonparallel tests in parallel via separate docker containers
  • (84) move tests that are sub 3 minutes out of long running classification
  • (95) [3.1 -> main] patch pinned build's boost 1.70 to fix websocket defect
  • (101) [3.1 -> main] add CLI11 license to install
  • (102) [3.2] fix ship_client test on boost 1.67-1.69
  • (107) [3.1 -> main] Fix test failure due to trx hitting near end of block production time
  • (114) [3.1 -> main] Validate set whitelist blacklist input main
  • (112) [3.2] Add Support For Json Snapshots sans Nodeos options
  • (24) [3.2] Add command line option --snapshot-to-json
  • (25) [3.2] Implement JSON Snapshot Reader
  • (125) [3.1 -> main] Allow for larger subjective CPU billing amounts
  • (133) [3.1 -> main] Test: verify on the correct fork before verifying trx status
  • (136) [3.2] Revert "remove YubiHSM support from keosd" (#66); restore this functionality for now
  • (137) [3.2] bump abieos submodule to branch with 2.0/3.1 ship_protocol.hpp fixes
  • (96) [3.2] Remove hardcoded 10ms limit for chain_api_plugin calls
  • (146) [3.2] Fix multithreaded Snapshot test Failure
  • (120) CPACK: Improve deb package filenames
  • (153) [3.1 -> main] net_plugin fix startup issue when peer does not have requested blocks
  • (154) [3.2] fix two signed/unsigned warnings in json snapshot reader
  • (156) [3.1 -> main] always overwrite old downloads in pinned build script
  • (166) [3.2] Remove initial_chain_id in genesis.json as it is not supported.
  • (145) [3.2] Log block trx summary for speculative and BP blocks
  • (167) [3.1 -> main] use a temp dir for release-build test as it can leak creation of config.ini in to default location
  • (158) [3.2] cleos: only unpack action data when explicitly asked
  • (151) [3.2] Add 3-strike rule to speculative blocks
  • (175) [3.2] Do not apply 3-strike rule when subjective billing is disabled
  • (172) [3.2] switch parallel tests to new runner type
  • (173) [3.2] enable all tests for Ubuntu 22; NP & LR tests for Ubuntu 18
  • (171) Docs: http protocol spec for producer plugin
  • (180) [3.1 -> main] pinned_build.sh: make relative path work
  • (185) [3.2] label new issues with 'triage' label and add them to the Team Backlog project as Todo
  • (189) [3.1 -> main] trx_finality_status_forked_test fix
  • (182) [3.2] Add /v1/chain/get_unapplied_transactions to producer_api_plugin
  • (197) [3.2] updated schema references to eosnetwork host
  • (198) [3.1 -> main] promote ship log recovery logging from dlog to ilog
  • (204) Curate eosio refs, and github, eosnetwork links [docs]
  • (202) [3.2] remove elog when ship thread exits normally
  • (201) [3.2] add missing incoming_persisted in unapplied transaction queue's get_trx_type
  • (212) [3.1 -> main] Update cleos to return an error code on failed trx processing
  • (214) [3.2] Cleanup regression python test handling of CalledProcessError
  • (218) [3.1] Fix nodeos_retry_transaction_test.py
  • (219) [3.2] Log std::exception while handling API calls at debug level
  • (220) [3.1 -> main] Fix nodeos_retry_transaction_test.py
  • (211) [3.1] when uploading failure logs, ignore missing files
  • (225) [3.1 -> main] noop merge of #211 - when uploading failure logs, ignore missing files
  • (221) [3.2] always run the long running tests, including for pull requests
  • (226) [3.1] Test fix: wait for system init to be in block
  • (227) [3.1 -> main] Test fix: wait for system init to be in block
  • (238) [3.1] Sync docs with main [docs]
  • (224) [3.1] updated trace_api openapi documentation [docs]
  • (240) [3.1 -> main] updated trace_api openapi documentation [docs]
  • (244) [3.1 -> main] Docs commits from 3.1 to main [docs]
  • (111) [3.2] desubmodule wasm-spec-tests
  • (236) [3.2] desubmodule fc
  • (241) [3.2] "null out" iostream's library dependencies on macOS
  • (242) [3.2] avoid redefining _mm_crc32_u64 which can lead to compile errors
  • (243) [3.2] remove old, unused, and currently broken alternate k1 ECC impls
  • (245) [3.1] Remove #pragma(s) to ignore warnings
  • (248) [3.1 -> main] Remove #pragma(s) to ignore warnings
  • (249) [3.1] Increase keosd http-max-response-time-ms for tests
  • (246) [3.2] manually set PKG_CONFIG_PATH for openssl on macOS
  • (250) [3.1 -> main] Increase keosd http-max-response-time-ms for tests
  • (253) [3.2] disable unused-function warning in secp256k1
  • (255) [3.2] add more context to chainbase logging during loading and writing in heap or locked more
  • (222) [3.2] Add information about log levels [docs]
  • (262) [3.2] more compiler warnings cleanup
  • (265) [3.2] bump softfloat submodule to branch with warning fixes
  • (269) [3.2] Fix some clang warnings
  • (272) [3.2] update libff submodule to branch with warning fixes
  • (273) [3.1] Fix replay to correctly add trxs into the de-dup list
  • (270) [3.2] Do not log or subjective bill for duplicate trxs
  • (275) [3.1 -> main] Fix replay to correctly add trxs into the de-dup list
  • (277) [3.2] initialize slice_directory::index_header::version to avoid warning in tests
  • (263) [3.2] reenable warnings for softfloat and wasm-jit, and fix a warning in wasm-
  • (150) [3.2] Build framework for leap-util


Full Changelog: 165e031...v3.2.0-rc1