Leap v3.2.0-rc1
Pre-releaseRelease 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
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 autocompletioneosio-blocklog
full functionality via sub-commandblock-log
- Retrieving chainbase build environment information via sub-command
chain-state
Enhancements to cleos
Autocomplete support
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
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
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
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).
- 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
- 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
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
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
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
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
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.
- Determine functions to be benchmarked:
alt_bn128_add
,alt_bn128_mul
, andalt_bn128_pair
. - 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();
}
- 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 benchmarkfc::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);
}
- Add
void alt_bn_128_benchmarking();
tobenchmark/benchmark.hpp
- Add
{ "alt_bn_128", alt_bn_128_benchmarking }
tofeatures
(a map) inbenchmark.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
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
/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
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
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)
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 associatedtransaction_metadata
objects in thread pool. - Calculate Merkle roots in a thread pool.
Other changes
3-strike rule applied to speculative blocks
PRs
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
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 tracenet_usage
in bytescpu
- sum of transaction tracecpu_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 tracenet_usage
in bytescpu
- sum of transaction tracecpu_usage_us
in microsecondselapsed
- sum of transaction traceelapsed
in microsecondstime
- 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 traceelapsed
in microsecondstime
- 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 microsecondsauth
- first authorizer of the transactioncpu
- transaction trace receiptcpu_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:
- @spoonincode
- @heifner
- @linh2931
- @larryk85
- @arhag
- @766C6164
- @ericpassmore
- @lparisc
- @ClaytonCalabrese
- @jgiszczak
- @oschwaldp-oci
- @ndcgundlach
- @pnx
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