github AntelopeIO/leap v4.0.0
Leap v4.0.0

latest releases: v5.0.3, v5.0.2, v4.0.6...
2 years ago

Antelope Leap v4.0.0 release focuses on optimizing node performance, improving block propagation, scheduling future snapshots, adding read-only transactions, and improving performance of EVM related functions.

Leap v4.0.0 Release Notes

New features

Read-Only Transactions

PRs

  • (558) Introduce new read-only transaction RPC endpoint


We have introduced a RPC endpoint for sending read-only transactions. A read-only transaction does not change the state and is not added into the blockchain. It is useful for users to retrieve complex chain information.

The format is the same as regular transaction, except it does not contain authorization section. Mechanisms are in place to ensure actions (including inline actions) in a read-only transaction do not modify the state and deepmind logging is not performed.

The RPC URL is v1/chain/send_read_only_transaction

cleos is updated to send read-only transactions:

  • cleos push transaction --read <transaction>
  • cleos push action --read <action>

New producer_plugin logging categories are added for transient transactions (dry-run (by compute_transaction) and read-only transactions). They are transient_trx_success_tracing and transient_trx_failure_tracing . Existing transaction_success_tracing and transaction_failure_tracing do not include the logging for transient transactions.

max_action_return_value_size is not enforced for read-only transactions.

Auto-peering with schedule proximal Block Producer nodes

PRs

  • (744) Add auto bp peering functionality


We've added a config option to automatically manage connections based on the Block Producer schedule. Node order and peering can impact a node's latency to receive last block of the preceding BP, and to send their last block to the next BP. Ideally, Block Producers:

  • Receive the last block of the previous round as soon as possible
  • Send their last block to the next Block Producer as soon as possible
  • Avoid getting a late start on their block production

To achieve these goals, the following changes were made in v4.0.0:

Correlate BP account names and connection details

--p2p-auto-bp-peer has been added to nodeos to allow a node to correlate BP account names to p2p connection details. When a block producer node with this setting detects a pending schedule change, it will attempt to auto-peer with BPs that have come into schedule proximity, and disconnect from any auto-peered BPs that are no longer in schedule proximity. These auto-peered connections are not subjected to the limit specified by the --max-clients option.

BP Peer flag in net api

is_bp_peer has been added to every connection object in the v1/net/connections api endpoint response.

Snapshot Scheduling API

PRs

  • (131) Proposal for a snapshot scheduling API
  • (759) Programmable snapshots API


The Snapshot Scheduling API added in Leap v4.0.0 allows users to schedule and manage snapshot requests in advance, increasing reliability and reducing the potential for errors in the snapshot creation process. It also allows for greater flexibility in creating and managing snapshots, as users can specify parameters such as start and end blocks and block spacing.

The API provides endpoints for several features:

  • /producer/schedule_snapshot: Add a task to perform snapshots
    • Parameters: start_block, end_block, block_spacing, snapshot_description
  • /producer/get_snapshot_requests: Return all scheduled snapshot requests
  • /producer/unschedule_snapshot: Remove a previously scheduled snapshot task
    • Parameters: snapshot_request_id

For more details, check out the Snapshot Scheduling API Design Specs.

Prometheus Exporter Plugin

Prometheus Instrumentation & Metrics

PRs

  • (537) Instrument producer_plugin for Prometheus


Instrumentation of nodeos plugins to expose data with Prometheus. An initial phase of instrumentation will allow for the evaluation of the usability of the instrumentation when viewed from Prometheus. The initial instrumentation will not include any per account or per contract metrics. Additionally, the ability to expire metrics will not be included in the initial phase. To support dynamic metrics, the metric object for each plugin will include an indicator of when the set of metrics has last changed. The following metrics will be collected for the initial phase of instrumentation:

Net Plugin
gauge - number of clients
gauge - number of peers
gauge - number of dropped blocks

Producer Plugin (Producer plugin metrics will be gathered at the start of each block)
gauge - unapplied transaction queue sizes (number of transactions)
counter - blacklisted transactions count (total)
counter - blocks produced
counter - transactions produced
gauge - last irreversible
gauge - current block num
gauge - subjective billing number of accounts
gauge - subjective billing number of blocks
gauge - scheduled transactions

See the Prometheus Plugin Architecture for more details.

Prometheus on a dedicated IP/port

PRs

  • (939) [4.0] prometheus on different port


The prometheus_plugin can run on a dedicated IP and port by setting prometheus-exporter-address and specifying the IP and port to listen for incoming prometheus metrics http request. A simple embedded server handles HTTP requests and exports Prometheus metrics.

NOTE: Future versions will generalize this functionality to allow custom IP/port configuration for categories of HTTP endpoints.

Log Splitting

PRs

  • (532) block log partition functionality
  • (628) SHiP stability fixes, log splitting, and memory usage improvements


Leap v4.0.0 includes two similar features aimed at giving node operators greater control over how important logs for blocks and state are managed: blocks log splitting and state history log splitting. The key benefit of these features is that it allows users to specify how many split log files to retain, and automates aging out older logs by deleting them or moving them another directory.

Blocks Log Splitting

To make it easy to use block log splitting, we've added some new options for the chain plugin:

  • blocks-log-stride allows you to split the block log file when the head block number is the multiple of the stride. When the stride is reached, the current block log and index will be renamed 'blocks--.log/index', and a new current block log and index will be created with the most recent block. All files following this format will be used to construct an extended block log.
  • max-retained-block-files alows you to specifiy the maximum number of block files to retain so that the blocks in those files can be queried. When the number is reached, the oldest block file would be moved to an archive directory or deleted if the archive directory is empty. It's important to note that the retained block log files should not be manipulated by users.
  • Two new options allow you to configure the locations of blocks log directories, we've added two new options:
    • blocks-archive-dir allows you to specify the location of the blocks archive directory (absolute or relative path). If the value is empty, blocks files beyond the retained limit will be deleted. Files in the archive directory won't be accessed by nodeos anymore.
    • blocks-retained-dir allows you to specify the location of the blocks retained directory (absolute or relative path). If the value is empty, it is set to the value of the blocks dir.

Please note that all of the newly added options cannot be specified together with the --block-log-retain-blocks option. Overall, we believe that the Blocklog splitting feature and its associated options will help you better manage your block logs and improve the efficiency of your nodeos instance.

SHiP Log Splitting

To make it easy to use SHiP Log Splitting, we've added some new options for the State History Plugin:

  • state-history-stride allows you to split the state history log file when the block number is the multiple of the stride. When the stride is reached, the current history log and index will be renamed *-history--.log/index, and a new current history log and index will be created with the most recent blocks. All files following this format will be used to construct an extended history log.
  • max-retained-history-files allows you to specify the maximum number of state history log file groups to retain so that the blocks in those files can be queried. When the number is reached, the oldest log files would be moved to an archive directory or deleted if the archive directory is empty. The retained log files should not be manipulated by users.
  • state-history-retained-dir allows you to specify the location of the state history retained directory (absolute path or relative to state-history dir). If the value is empty, it is set to the value of the state history dir.
  • state-history-archive-dir allows you to specify the location of the state history archive directory (absolute path or relative to state-history dir). If the value is empty string, log files beyond the retained limit will be deleted. All files in the archive directory are completely under user's control, i.e. they won't be accessed by nodeos anymore.

Please note that all of the newly added options cannot be specified together with the --state-history-retain-num option. Overall, we believe that the SHiP Log Splitting feature will help you better manage your state history log files and improve the efficiency of your nodeos instance. We look forward to seeing how this feature will benefit the Leap community.

Performance improvements

Parallelize Read-Only Transaction Execution

PRs

  • (776) Parallelize Read-only Transaction Execution
  • (776) [4.0] Parallelize Read-only Transaction Execution
  • (901) [4.0] Execute read only safe tasks on read-only thread pool
  • (885) Add time summary logging for transient trx processing and read-only threads
  • (892) [4.0] Cleanup and prevent thread starvation while in the read window
  • (933) Small improvements for parallelizing read-only transactions and tasks
  • (947) [4.0] Correct time summary calculation for transient trxs due to change of read-only trxs windows
  • (960) [4.0] Use is_write_window in eos-vm-oc main to determine if it is safe to update code cache
  • (905) Use a single timer for read and write windows
  • (964) [4.0] Added missing calls to wasmifs on read-only threads
  • (975) [4.0] Remove global WASM::check_limits and initial memory from instantiate_module
  • (982) [4.0] Set an upper limit on read-only-threads of 8
  • (984) [4.0] Fix ROtrx dispatched to baseline runtime when compiled code not ready
  • (993) [4.0] make eosio_exit impl more direct


Regular read-only transactions are executed sequentially on the main thread. To take advantage of multi-core architecture, offloading them from the main thread and executing them multi-threaded will make more time for the main thread and improve throughput of read-only transactions.

We have implemented a new feature to parallelize read-only transaction execution. Design documentation for this feature can be accessed here.

When this feature is enabled, the node toggles between write and read windows. In the write window, the node operates normally. In the read window, read-only transactions are executed in a dedicated thread pool, while operations safe to read-only transaction execution are executed on the main thread.

New configuration options are

  --read-only-threads arg               Number of worker threads in read-only
                                        execution thread pool. Max 8.
                                        
  --read-only-write-window-time-us arg (=200000)
                                        time in microseconds the write window
                                        lasts
                                        
  --read-only-read-window-time-us arg (=60000)
                                        time in microseconds the read window
                                        lasts

NOTES

  • If you get this error message: "plugin_config_exception: Incorrect plugin configuration
    --read-only-read-window-time-us (60000) must be greater than --max-transaction-time 10000 ms plus a margin of 10000 us
    {"read":60000,"trx_time":10000,"min":10000}", please note...
    • max-transaction-time is expressed in milliseconds, whereas read-only-read-window-time-us and read-only-write-window-time-us are expressed in microseconds.
    • Example of a configuration that causes an error: , amax-transaction-time of 10000, and a read-only-read-window-time-us of 60000
    • Example of a valid configuration: a max-transaction-time of 50, and a read-only-read-window-time-us of 60000
    • We've added an issue to make this configuration clearer and more consistent in a future release: #1088
  • --read-only-threads
    • is not allowed on a producer node
    • defaults to 3 when eosio::chain_api_plugin is enabled.
    • block relay nodes or canary nodes should consider --read-only-threads=0
    • If --read-only-threads is not configured or configured to 0, this feature is not enabled; read-only transactions are executed on the main thread.
  • --read-only-read-window-time-us must be greater than --max-transaction-time.
  • --read-only option is removed in cleos send transaction command. Use --dry-run instead for compute_transaction
  • Since eosio::chain_api_plugin may be enabled so /v1/chain/get_info is available. Block relay nodes or canary nodes should consider --read-only-threads=0 if they have enabled eosio::chain_api_plugin as the read-only-thread pool is only used for read-only transactions and /v1/chain/get* calls. If read-only-threads are enabled, but not utilized, there is a very small overhead of switching back and forth between the read/write windows.
  • Read and write windows are interrupted when new blocks are received.
  • The majority of Chain RPC get_* requests are safe to run in parallel with themselves and read-only transactions. To further improve API nodes throughputs, they are now executed on the read-only thread pool during the read-only-read-window-time-us window.
  • /v1/net/* calls were also moved to http thread pool, off main app thread.

Lighter Validation for Relays

PRs

  • (543) [3.1] Interrupt speculative start_block when a block is received
  • (590) Propagate block after header validation
  • (648) [3.1 -> 3.2] Interrupt speculative start_block when a block is received
  • (649) backport #648


This feature aims to reduce the latency of block propagation by enabling nodes to relay blocks before fully validating or computing state, as long as certain conditions are met. With this new feature, nodes can immediately process received blocks after validating their headers, even when there is a backlog of pending transactions. Additionally, the new implementation includes optimizations for broadcast blocks behavior and peer_block_state_index, further improving block propagation times. The goal of lighter validation on relays is to reduce the latency of block propagation.

Other Multithread Support

PRs

  • (727) SHiP move client handling off the main thread
  • (696) Move get_block abi serialization off the main thread


We have moved more tasks out from the main thread and process them in separate threads:

  • block_log has been made thread safe.
  • net_plugin updated to use thread safe block_log from net threads instead of having to post onto the main thread for processing.
  • SHiP writes to the state history logs on the main thread, but reads from them on the SHiP thread. The state history logs have been made thread safe.
  • /v1/chain/get_block performance has been significantly improved by moving abi serialization off the main thread.

Other changes

Faster bilinear group cryptography library for EVM support

PRs

  • (461) Replace implementation of alt_bn128 host functions with faster bn256 library


The Ethereum Virtual Machine on EOS requires bilinear group cryptography. The libff and bn256 libraries were benchmarked against each other. Each test run used the same 10 pairs of points as input and run through the same initialization and pairing. The bn256 library was selected as most performant, and ported into Antelope Leap v4.0.0.

Default read mode is now head & removal of read-only mode

PRs

  • (414) [4.0] Remove read-mode speculative & disable-api-persisted-trx

  • (986) [4.0] Restore read-mode=speculative


In all releases of Leap/EOSIO prior to 4.0, the default read-mode was speculative. speculative mode meant a transaction submitted to an API node would maintain any state changes for subsequent transactions submitted to the same API node. For example, create a new account in one transaction and then transfer to that account in a subsequent transaction. This mode has been a source of confusion due to it presenting state that has not been included into any blocks by a block producer and thus showing different state across different nodes.

In 4.0, the default is now read-mode=head which does not persist the state changes of transactions that have not been included in a block. For example, this means a transfer transaction will need to wait for a block producer to include the account creation transaction into a block which is applied before the transfer would be allowed.

read-mode=speculative remains supported for users who want old behavior but with an important change that transactions submitted via API endpoints will not be reapplied speculatively upon a new block being applied. The user is required to resubmit any transactions after a new block should those transactions' side effects need to be observed.

In addition to the above changes, deprecated read-mode=read-only has been removed. Its behavior can be achieved with a combination of other options:

  • read-mode=head
  • p2p-accept-transactions=false
  • api-accept-transactions=false

These changes better reflect the actual state of execution, reduce user confusion, and improve control over transaction behavior by introducing more clearly defined options.

Support for -k --kill in launcher

PRs

  • (921) [4.0] Implement support for -k --kill in launcher


Launcher now honors -k --kill <signal_number> argument. Cluster was updated for the Python launcher but support in the launcher itself was missed. Was causing a Test failure: resource_monitor_plugin_test

Add time summary logging for transient trx processing and read-only threads

PRs

  • (885) Add time summary logging for transient trx processing and read-only threads


A new log summary report was introduced that provides details on the time spent executing dry-run and read-only transactions. When the option --read-only-threads is enabled, the report also includes time spent on read-only transactions across multiple threads. This makes it easy to monitor the time spent on dry-run and read-only transactions, including execution time of read-only transactions across multiple threads. This will help identify any bottlenecks to the performance of the system.

Read-only Transactions and Operations Parallelization Hardening

PRs

  • (885) Add time summary logging for transient trx processing and read-only threads
  • (892) [4.0] Cleanup and prevent thread starvation while in the read window
  • (933) Small improvements for parallelizing read-only transactions and tasks
  • (947) [4.0] Correct time summary calculation for transient trxs due to change of read-only trxs windows
  • (960) [4.0] Use is_write_window in eos-vm-oc main to determine if it is safe to update code cache
  • (905) Use a single timer for read and write windows
  • (964) [4.0] Added missing calls to wasmifs on read-only threads
  • (975) [4.0] Remove global WASM::check_limits and initial memory from instantiate_module
  • (982) [4.0] Set an upper limit on read-only-threads of 8
  • (984) [4.0] Fix ROtrx dispatched to baseline runtime when compiled code not ready
  • (993) [4.0] make eosio_exit impl more direct


As part of implementing and enabling parallel processing for read-only transactions, we went through a hardnening process to ensure reliability and performance. Some of our optimizations included:

  • preventing threads from getting stuck during read operations
  • accurate time tracking for temporary transactions
  • code cache optimization
  • enhancements to read-only threads handling in WebAssembly (WASM)
  • removal of global WASM limits during module instantiation
  • Maximum of 8 read-only threads at a time
  • Simplification of 'eosio_exit'

Clean tmp and TestLogs after test runs

PR

  • (915) [4.0] Clean tmp and TestLogs after test runs


Previously when tests failed, they left temporary files behind, which could cause problems if the tests were run on multiple devices with /tmp mounted on a different device. These files were not being cleaned up, and some tests were also leaving logs around even on success. To solve this problem, test logs are now cleaned up after each test. These changes will help ensure that tests do not leave temporary files and logs behind, which could cause problems if the tests are run on different devices.

Fix gelf DNS resolves to IPv6 address

PR

  • (917) [4.0] fix gelf DNS resolves to IPv6 address


There was an issue with gelf logging not working when using DNS pointing to both IPv4 and IPv6 addresses. In v4.0.0-rc3, we made a couple of subtle changes to how the UDP socket is handled. First, the sending thread was changed to a new thread to ensure that it is a blocking socket. Second, a "connected" socket was used to eliminate unnecessary buffer copy for sending gelf message. These changes fix the issue with gelf logging when using DNS pointing to both IPv4 and IPv6 addresses. Additionally, the fc udp_socket and resolver have been removed, and unnecessary buffer copy for sending gelf message has been eliminated.

Improved test_snapshot_scheduler stability

PR

  • (931) [4.0] Improved test_snapshot_scheduler stability


There was an issue with the test_snapshot_scheduler stability, where the ordering of snapshot requests in multiindex container caused instability. The test code was modified to stop if pending_snapshots did not exist, using find_if() to search for pending_snapshots. Now the test can better handle situations where the order of the snapshot requests is not static.

CPack error message fix

PRs

  • (972) [4.0] fix cpack error message


When adding TestHarness python integration scripts, there was an error message with the CMAKE program on certain versions, such as CMAKE < 3.21. The error was related to creating a symbolic link that did not exist. The issue was resolved by adding an install script that would work for CMAKE versions < 3.21. The new install script was added to the project and now TestHarness python integration scripts can be used without any errors on CMAKE versions < 3.21.

Improvements and fixes for snapshot scheduling

PRs

  • (968) [4.0] Several improvements and fixes for snapshot scheduling


There were a few issues with scheduling and managing snapshots, including that the list of pending snapshots was not always available, which caused some confusion and extra work. To address this, the list of pending snapshots is now always included in the request reply. This makes managing snapshots easier and more user-friendly.

Use block_num for interrupt of start_block

PRs

  • (893) [3.2] Use block_num for interrupt of start_block
  • (908) [3.2 -> 4.0] Use block_num for interrupt of start_block


Signal received block with the block number so that start_block can be interrupted even if the block is received before the start of start_block. Useful as mitigation against race condition of receiving block right before start of the block in current implementation.

Adjusted timeout in tests to give better chance on reaching consensus

PRs

  • (907) Adjusted timeout in tests to give better chance on reaching consensus


Looks like default 30 sec in this particular cluster config is not sufficient sometimes on a slower gh workers, leading to Test Failure: nodeos_snapshot_forked_test.

Bug fixes

SHiP forking behavior fix

PRs

  • (943) [3.2] SHiP Fix forking behavior
  • (952)[3.2 -> 4.0] SHiP Fix forking behavior


The state_history_plugin was not sending updated blocks when nodeos forked. There has been an enhancement made to the ship_streamer_test to generate a fork and verify SHiP sends new blocks on forks.

SHiP flush logs on write

PRs

  • (928) [3.2] SHiP flush logs on write
  • (935)[3.2 -> 4.0] SHiP flush logs on write


In version 3.2, the trace history index was sometimes corrupted, causing the state history to be rebuilt from scratch. This prevented ship nodes from starting up properly with a snapshot, which took a long time on large blockchains.

To address this issue, two changes were made. First, the state_history_plugin logs are now flushed to disk at the end of each write to make it more likely that the logs will be valid if there is a crash or kill -9. Second, a fix was implemented for replay where forkdb.root() is null during the write in SHiP for on_accepted_block. In version 4.0, SHiP calls chain.last_irreversible_block_id() in on_accepted_block, which expects forkdb.root() to be valid.

These changes will help ensure that the logs are valid and can be used for recovery if needed.

Building, compatibility, and upgrading

Upgrading from prior releases

To upgrade from Leap 3.X.X to Leap 4.0.0:

  • Install Leap v4.0.0
  • Edit config.ini and remove any set configuration items that no longer exist in v4.0.0 :
    • nodeos disable-api-persisted-trx, private-key, https-client-root-cert, https-client-validate-peers, https-server-address, https-certificate-chain-file, https-private-key-file, https-ecdh-curve, plugin=eosio::trx_test_gen_plugin, txn-reference-block-lag, txn-test-gen-threads, txn-test-gen-account-prefix, txn-test-gen-expiration-seconds, txn-test-gen-stop-on-push-failed, plugin=eosio::login_plugin, max-login-requests, max-login-timeout.
    • keosd yubism-url, yubism-authkey, https-server-address, https-certificate-chain-file, https-private-key-file, https-ecdh-curve.
  • Restart the binaries while pointing to the same data directories and the updated config
    • Persisted data files used by Leap v3.1.X and v3.2.X are compatible with Leap v4.0.0.

Feature Lifecycle Updates

Removed features in v4.0.0

HTTPS in nodeos and keosd

PRs

  • (745) Remove HTTPS support from nodeos & keosd


  • removed HTTPS support (and code) from http_plugin
  • removed HTTPS support (and code) from http_client_plugin (mostly in libfc)
  • removed OpenSSL::SSL from libraries/libfc/CMakeLists.txt

Removed ABI JSON/BIN conversion endpoints

PRs

  • (797) Remove deprecated /v1/chain/abi_bin_to_json and /v1/chain/abi_json_to_bin


Removed the following deprecated endpoints to improve security posture:

  • /v1/chain/abi_bin_to_json
  • /v1/chain/abi_json_to_bin

Direct YubiHSM support

PRs

  • (306) [4.0] remove YubiHSM support from keosd


The original implementation of YubiHSM support required additional dependencies, complicated the build process, lacked sufficient automated testing, and prevented natively building Leap for ARM on macOS. Leap v4.0.0 removes support for YubiHSM.

Transaction Generator

PRs

  • (634) Remove trx_test_gen_plugin


The old txn_test_gen_plugin was deprecated in favor of the new trx_generator. Tests previously using txn_test_gen_plugin were updated to use trx_generator. Additionally, performance tests and configuration options were added to trx_generator.

Login Plugin

PRs

  • (278) [4.0] remove login_plugin


The Login Plugin (login_plugin) appears to be an abandoned demo/prototype/PoC from early EOSIO implementations. It was removed in Leap v4.0.0.

Blocklog Utility

PRs

  • (802) [4.0] remove eosio-blocklog


The deprecated eosio-blocklog program blocklog-util has been removed in v4.0.0, please use leap-util block-log instead. Output file names have changed when using leap-util block-log extract-blocklog. The file names now include the start and end block numbers as a suffix. For example, blocks-100-200.log and blocks-100-200.index.

Example 1

eosio-blocklog --as-json-array --blocks-dir .

...is now...

leap-util block-log print-log --as-json-array --blocks-dir .

Example 2

eosio-blocklog --trim-blocklog -f 1 -l 100 --blocks-dir .

...is now...

leap-util block-log trim-blocklog -f 1 -l 100 --blocks-dir .

Example 3

eosio-blocklog --extract-blocks -f 1 -l 100 --blocks-dir . --output-dir newdir

...is now...

leap-util block-log extract-blocklog -f 1 -l 100 --blocks-dir . --output-dir newdir

Private-key nodeos config

PRs

  • (798) [4.0] Remove deprecated --private-key option from nodeos


The private-key nodeos config was deprecated since EOSIO v1.0.0 and is now removed in favor of signature-provider nodeos config.

For example:

--private-key [\"EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg\",\"5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr\"]

Becomes:

--signature-provider EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg=KEY:5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr

eosio-launcher

PRs

  • (192) [4.0] Port eosio-launcher to Python


eosio-launcher is removed and replaced by launcher.py.

All deprecated features, not yet removed

fc and wasm-spec-tests repos

Due to limited cases for fc and wasm-spec-tests have been integrated directly into leap repository. 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. The fc and wasm-spec-tests repositories will be archived in an upcoming version of Leap.

Ubuntu 18.04 Support

Support for Ubuntu 18.04 will be removed in an upcoming version of Leap. Please use Ubuntu 20.04 or 22.04.

More Information

The latest state of deprecations for Leap can be found by visiting our deprecations and proposed deprecations page.

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

  • (27) [PH] Added initial version of the TPS tester
  • (45) [PH] Added unit tests for the tps_tester
  • (40) [PH] Capture data and create usable data structures storing data in performance_test_basic.py
  • (50) [PH] Performance harness cluster configurable logging
  • (81) [PH] Refactored the trx_generator main code
  • (110) [PH] Added tps_performance_monitor
  • (92) [PH] Update to test harness python package
  • (100) [PH] Refactor and Separate Python Script for Performance Harness
  • (129) [PH] Nodeos log scraping test
  • (140) [PH] Integrate tps_performance_monitor into trx_generator program
  • (147) [PH] Add TPS scoring
  • (161) [PH] Add numpy dependency installation to Dockerfile for ubuntu20
  • (159) [PH] Updated logging for trx_generator
  • (160) [PH] Update Python Perf Harness to run CI/CD configuration.
  • (177) [PH] Added early termination status
  • (181) [PH] Add testing around TPS scoring implementation.
  • (190) Add Prometheus Plugin
  • (164) [PH] Export Performance Harness Results as JSON
  • (193) [PH] Break out chain data section knowledge into chainGuide.
  • (233) [PH] Migrate numpy to ubuntu pkg
  • (237) [PH] Performance harness graceful shutdown
  • (232) [PH] Add calculating and reporting on block size over time during test.
  • (213) [PH] Performance harness multiple generators
  • (258) Add Prometheus Library
  • (261) [PH] Cluster: Node Specific Logging Levels
  • (267) [PH] Calculate & Report Transaction Latency Stats
  • (285) [PH] Add support for calculating and reporting individual transaction CPU and net time
  • (303) [3.2 -> main] Merge version bump of 3.2.0-rc1
  • (306) [4.0] remove YubiHSM support from keosd
  • (278) [4.0] remove login_plugin
  • (309) [3.2 -> main] Test fix: trx_finality_status_forked_test.py
  • (311) Add prometheus-cpp as a submodule
  • (304) [PH] Add some additional parameters to performance harness output
  • (321) [3.2 -> main] Update produced block log output.
  • (336) [3.2 -> main] Test fix: nodeos_forked_chain_lr_test
  • (337) [3.2 -> main] Return application/json for all http responses including errors
  • (339) [3.2 -> main] Test fix: api_tests checktime_pause_block_deadline_not_extended_test
  • (349) [3.2 -> main] SHiP Fix log output
  • (314) [PH] Add method to wait and check blocks for transactions
  • (302) [PH] TPS Scenario Runner
  • (334) [4.0] SHiP: Store initial chain state on startup if state_history_plugin chain state log is empty
  • (352) [PH] Performance Harness MVP Documentation
  • (362) [3.2 -> main] Leap util blocklog updates
  • (369) [3.2 -> main] Remove replay optimization that skips recording transactions in dedup list
  • (376) [ main ] update libfc path in EosioTesterBuild.cmake.in for building integration tests in CDT and System Contracts
  • (375) Complete Build Instructions + Other README Updates
  • (381) [3.2 -> main] Curate eos.io refs and remove unused doc metadata [docs]
  • (360) [PH] Report start end times for tests
  • (361) [PH] Add option to quiet reporting from performance tests.
  • (388) [3.2 -> main] Warning message for trx being dropped due to high traffic
  • (385) [PH] Add ability to configure whether producer nodes enable trace api plugin
  • (387) [PH] Perf Harness test updates
  • (391) [PH] Performance Test - Long running Tests to use linear search
  • (390) [3.2 -> main] Clear expired transactions before snapshot and integrity hash
  • (333) Add pull functionality
  • (398) [PH] Perf harness wait for transactions in block
  • (407) [3.2 -> main] Changed default error handler to print help in cli apps by default
  • (408) [3.2 -> main] Use error log instead of warning log when resource_monitor exceeds threshold
  • (401) don't triage new issues if they're already assigned to a project
  • (412) [4.0] Update eos-vm
  • (415) [3.2 -> main] fix threading on state_history shutdown leading to hung nodeos shutdown
  • (417) [3.2 -> main] Enable new CLI11 LeapFormatter for both cleos and leap-util
  • (423) [3.2->main] merge original release/3.1.3 version bump PR
  • (379) CPack: fix separator in depends field of debian dev pacakge.
  • (425) [(whoops)] CPack: fix separator in depends field of debian dev pacakge
  • (426) [3.2->main] Merge release/3.2 rc2 version bump to Main
  • (427) [3.2 -> main] (noop) update libfc path in EosioTesterBuild.cmake.in for building integration tests in CDT and System Contracts
  • (431) [3.2 -> main] (noop) Cpack fix debian dev package dependancies main
  • (437) work around abieos test failure on ARM float min/max roundtrip to&from string in JSON parsing
  • (439) [3.2 -> main] change the HTTP Server header to be nodeos/keosd version
  • (393) [PH] Default perf harness to saving logs
  • (402) [PH] Launch Trx Generators updates
  • (445) [PH] merge main
  • (432) Write a genesis file for each node.
  • (448) [3.2 -> main] Fix test failure due to trx hitting near end of block production time
  • (446) [PH] Update producer node configurations for performance
  • (447) [PH] Consolidate some of the arguments to log_reader.py's calcAndReport
  • (331) Add data classes, populators, and topology generators
  • (450) [4.0] Added snapshot to-json subcommand to leap-util
  • (449) Wall fix
  • (414) [4.0] Remove read-mode speculative & disable-api-persisted-trx
  • (453) [PH] Remove --dump-error-detail test arg
  • (454) [PH] Fix links to test report sections.
  • (455) [PH] Fix links to Build and Install From Source directions.
  • (456) [PH] README updates.
  • (457) [PH] README updates
  • (460) [PH] merge main
  • (459) Migrate chain queries out of Node.py into their own class
  • (436) Updates to runtime_metrics / interface between instrumented plugins and prometheus plugin
  • (444) [4.0] Use libcurl for cleos
  • (463) [4.0] remove platform root CA population for TLS connections
  • (442) [4.0] replace usage of curl in python with urllib
  • (462) Remove --dump-error-details from all tests in tests/CMakeLists.txt
  • (465) [4.0] refactor boost::beast::string_view to std::string conversion for changes in boost 1.81
  • (464) [4.0] resolve path ambiguous overload in boost 1.81
  • (469) [PH] Add support for thread configs
  • (474) [PH] Add argument to configure --chain-state-db-size-mb and default to 10GB
  • (475) [PH] Update docs for new arguments.
  • (481) [PH] add database map mode
  • (476) [PH] Update performance harness to main
  • (487) [3.2->main] compute_transaction: add --dry-run, deprecate --read-only, and sign a transaction only when explicitly requested
  • (491) [3.2 -> main] Use net_plugin_impl logger instead of default logger
  • (489) [PH] fix trx gen err detection
  • (484) [PH] log dir add tps target
  • (496) [PH] Remove argument to disable resmon shutdown.
  • (502) [3.2->main] Merge release/3.2 version bump to Main
  • (499) libfc cleanup
  • (505) [3.2 -> main] Added validation of plugin configuration for deep-mind
  • (492) clean up compute_transaction: replace read_only flag with dry_run, refactor trx_type in transaction_metadata and transaction_context
  • (507) [4.0] add libcurl to README build instructions
  • (512) Fixed broken cleos due to reuse of curl handle
  • (514) [PH] Performance harness remove unnecessary throw chains
  • (516) [TH] Merge main into test harness
  • (519) [PH] main merge
  • (520) [PH] Ph2 merge feature br
  • (268) [4.0] Regression test for: fix replay to correctly add trxs into the de-dup list
  • (522) [PH] Update response order and truncate when printing.
  • (510) [PH] thread count recommendation tests
  • (518) [PH] argparse.ArgumentParser usage updates
  • (524) [4.0] nodeos_snapshot_diff_test fix
  • (527) [PH] test tweaking
  • (528) [PH] Test tweaking - Decrease perf expectations for lower performing vms in CI/CD
  • (531) Fixed test harness crash when actiob_traces is empty
  • (536) [3.2 -> main] Test nodeos_forked_chain_test: Fix race on kill of bridge node
  • (468) Add text/plain content type to http_plugin
  • (546) [PH] Provide *PluginArgs dataclasses to capture and validate nodeos config options
  • (540) Handle shutdown of http_plugin lifetime
  • (350) [PH -> main] Performance Harness MVP [PH]
  • (556) Set keosd max http response time to unlimited
  • (560) [3.1 -> main] Do not run maintenance task on shutdown
  • (467) [TH] Replace hardcoded use of var/lib in tests
  • (567) [3.2 -> main] Fix Test: Specify a large time limit for cleos get table
  • (539) Update management of in_flight bytes in http_plugin
  • (537) Instrument producer_plugin for Prometheus
  • (578) Fix trx_generator warnings
  • (580) revert to previous appbase version
  • (562) Include subjective cpu limit in trx deadline
  • (570) [4.0] [PH] enable compatibility for 2.0 and 2.1 nodeos on performance tests.
  • (563) Adds support for a 'state-dir' command line option in chain_plugin.
  • (466) [4.0] Use leap's cli11 as submodule for leap-util and cleos
  • (461) Replace implementation of alt_bn128 host functions with faster bn256 library
  • (575) Small Misc python test improvements
  • (594) Fix for mulit-producer run of performance test
  • (581) Include additional info in tx_cpu_usage_exceeded exceptions
  • (589) Fixes Producer Plugin Schema Fixes and Better Alignment with OpenAPI spec
  • (495) Fix undefined behavior - uninitialized variables revealed by valgrind
  • (597) [3.2 -> main] Update nodeos options help usage [docs]
  • (609) Fix nodeos v2 performance harness support
  • (611) [PH] Ph merge main
  • (614) fix spelling of "parameters" in cleos' set action permission
  • (571) [PH] Replace usage of os.path with Path and PurePath
  • (616) [3.2 -> main] Attempt connection retry for duplicate connections
  • (617) Merge main into prometheus
  • (618) [PH] Performance harness Log Number of Forks and Forked Blocks
  • (557) CLI11: Use inherited option vs duplicating it in leap-util (blocklog)
  • (607) Tests: Add is_code_cached and use in tests to verify
  • (584) Subjectively bill for failed transactions during block production
  • (630) Update abieos to head of main
  • (629) Add support for specifying paths to nodeos in launcher.
  • (603) Add timer on http listener to avoid fast looping on accept
  • (598) [PH] Add Ability to Specify Contract for Performance Tests
  • (626) [PH] Support configuring transaction type to send in trx generator through JSON transaction description
  • (634) Remove trx_test_gen_plugin
  • (638) [3.2 -> main] Backport SHiP fixes from eosio/eos release/2.2.x
  • (633) [PH] Log Dropped Blocks, Dropped Transactions, and Production Windows
  • (649) [3.2 -> main] Interrupt speculative start_block when a block is received
  • (639) Working to fix nodeos_snapshot_diff_test by sync on trx gen startup
  • (655) [3.2->main] Merge 3.1.4 version bump to main
  • (658) [3.2 -> main] Merge 3.2.1 version bump to main
  • (664) add missing include statements for gcc13 (libstdc++13)
  • (632) Add handling of exceptions to named_thread_pool
  • (612) Add test contract code for existing abi/wasm and clean up libraries/testing & unittests dependencies
  • (665) net_plugin: add delay when accept() fails with too_many_files_open
  • (671) [3.2 -> main] Test fix: nodeos_forked_chain_lr_test
  • (590) Propagate block after header validation
  • (647) [PH] Performance Harness csv improvements
  • (682) [3.2 -> main] net_plugin improve block latency calculation
  • (663) SHiP: add delay when accept() fails with too_many_files_open
  • (686) clear executable flag on a couple source files
  • (635) First cut at a more message based interface between prometheus and instrumented plugins
  • (694) Log exception details for failed transactions
  • (693) [3.2 -> main] Fix --terminate-at-block to stop at correct block
  • (687) named_thread_pool template description for debugger
  • (697) Producer Plugin: Add block number to account_failures::report()
  • (636) Update appbase/plugins to support multiple instances/exe
  • (685) merge from main into launcher dev branch
  • (705) bump appbase to the latest for clang compile errors
  • (710) [3.2 -> main] Fix reporting of dirty db
  • (712) GH-711 Update dependencies to include numpy.
  • (702) [PH] Transaction Generator support generating newaccount transactions
  • (704) Add absolute value threshold to resource monitor
  • (717) bump appbase to the latest version for fixing test failures
  • (696) Move get_block abi serialization off the main thread
  • (715) [3.2 -> main] Fix SHiP stability
  • (718) Change INCBIN to INCTXT for abi in tests to fix invalid read
  • (724) merge bn256 submodule change
  • (722) Added instrumentation for number of calls to api endpoint
  • (720) [PH] Capture Full Command Line Argument String in Report
  • (732) Update leap to use new appbase version.
  • (729) Test: Provide a bit more time for the contract to be cached.
  • (731) [PH] Add TransactionGeneratorLauncher to TestHelper Shutdown
  • (728) Optimize json parsing
  • (739) remove unused boost/bind.hpp include that generates a warning
  • (713) [PH] Use EOSMechanics contract with Performance Test
  • (742) Revert interface change of abi_serializer for tester
  • (751) [3.2 -> main] New protocol features activation was added to the bootstrap process
  • (752) Move initialization of logging before plugin_initialize
  • (755) [3.2 -> main] Avoid logging errors when client disconnects after request (GH #530)
  • (757) [PH] Resolve Duplicate Transaction ID Generation in Transaction Generator
  • (734) [PH] Update docs
  • (532) Add block log partition functionality
  • (740) [PH] Expose various Nodeos Options in performance_test_basic
  • (763) [3.2 -> main] keosd - Exit program if keosd fails to aquire wallet lock (GH #513)
  • (761) [PH] update calc threads min to give to plugins to the plugin default.
  • (762) [PH] expose --user-trx-data-file to performance test
  • (765) [TH] Revert Unintentional Change to Performance Test Defaults
  • (558) introduce new read-only transaction RPC end point
  • (766) [PH] Handle exceptions occurring during runTest.
  • (758) move gelf logging to another thread
  • (628) Merge SHiP stability fixes & log splitting & memory usage improvements
  • (769) [PH] Reduce Performance Test Database Size Allocation
  • (727) SHiP move client handling off the main thread
  • (764) [3.2 -> main] SHiP do not truncate logs when starting from genesis
  • (771) [PH] Repair Nodeos 2.0 Compatibility with Performance Tests
  • (538) Launch nodeos instances per configuration, unsharing the network first.
  • (745) Remove HTTPS support from nodeos & keosd
  • (770) Test: Add a test that verifies restart from genesis not allowed
  • (774) Fix issue with reported fork head vs retrieval of block from fork db
  • (780) bump appbase version and fix logging.json not working problem
  • (744) Add auto bp peering functionality
  • (778) [PH] Update Log Reader Tests For scrapeBlockTrxDataLog
  • (738) http_plugin: add support for `Expect: 100-Continue' header.
  • (781) [3.2 -> main] Move subjective bill log to all level of producer_plugin logger.
  • (784) Minor cleanup and fix for clang warning
  • (787) Cleanup some missed https support from test that was missed.
  • (786) Use appbase with external order for priority queue.
  • (794) fix create_metrics_listener
  • (793) [3.2 -> main] subjective-account-max-failures-window-size
  • (795) prometheus plugin integeration test
  • (796) Huangminghuang/fix_prometheus_test
  • (797) Remove deprecated /v1/chain/abi_bin_to_json and /v1/chain/abi_json_to_bin
  • (473) [PH] Feature performance harness stage 2 development
  • (799) Search for LLVM versions 7-11, prefering latest version.
  • (804) [TH] Merge Main Containing PH Phase 2
  • (803) [PH] Remove unnecessary dependency on contracts.
  • (805) Improve logging during syncing when producer_plugin debug level is enabled
  • (807) fix mixed up boost test linkage in ship session_test
  • (623) Add Prometheus Plugin
  • (809) Test fix: Increase abi-serializer-max-time-ms & http-max-response-time-ms for test
  • (819) [PH] Add performance test to CI/CD
  • (827) [PH] [4.0] Remove read_log_data.py
  • (776) Parallelize Read-only Transaction Execution
  • (823) [3.2 -> Main] Merge 3.2.2 version bump to main
  • (802) remove eosio-blocklog
  • (829) [PH] fix bug and arg passing
  • (820) get_raw_block api endpoint
  • (759) Programmable snapshots API
  • (831) fix signed vs unsigned comparison warning in autobp peering
  • (836) Snapshot: fix issue with erasing element while iterating
  • (192) Port eosio-launcher to Python
  • (798) Remove deprecated --private-key option from nodeos
  • (818) Add TestHarness python integration scripts to dev package
  • (791) [PH] Distribute Transaction Generators Across Producer Nodes.
  • (842) snapshot-diff-test fix
  • (845) Fix test coverage regression by a bad merge conflict in PR #192
  • (833) Fix Pinned Build on Ubuntu 22.04
  • (812) Pinned Build Script Linter Changes
  • (835) Change ASCII Art Banner in Build Script
  • (847) Restore libcurl4-openssl-dev
  • (848) Bump Leap Main branch version to 4.1.0-dev
  • (851) Create v4.0.0-rc1 on release/4.0 branch
  • (852) [4.0] Test Fix: Pass a large time limit to get table call
  • (856) [4.0] Increase robustness of snapshot diff python test
  • (876) [4.0] SHiP: Send until queue is empty
  • (869) [4.0] unshare import fix
  • (864) [4.0] Test Fix: Use max-transaction-time -1
  • (875) [4.0] Return Lost Changes to Node.py Functions
  • (872) [4.0] Test fix: Add max-transaction-time -1
  • (881) Bump release/4.0.0 to rc2
  • (885) [4.0] Add time summary logging for transient trx processing and read-only threads
  • (892) [4.0] Cleanup and prevent thread starvation while in the read window.
  • (893) [3.2] Use block_num for interrupt of start_block
  • (905) [4.0] Use a single timer for read and write windows
  • (908) [3.2 -> 4.0] Use block_num for interrupt of start_block
  • (907) [4.0] Adjusted timeout in tests to give better chance on reaching consensus
  • (921) [4.0] Implement support for -k/--kill in launcher.
  • (901) [4.0] Execute read only safe tasks on read-only thread pool
  • (928) [3.2] SHiP flush logs on write
  • (935) [3.2 -> 4.0] SHiP flush logs on write
  • (936) [3.2] forkdb reset in replay since blocks are signaled
  • (917) [4.0] fix gelf DNS resolves to ipv6 address
  • (915) [4.0] Clean tmp and TestLogs after test runs
  • (938) [3.2 -> 4.0] forkdb reset in replay since blocks are signaled
  • (933) [4.0] Small improvements for parallelizing read-only transactions and tasks
  • (943) [3.2] SHiP Fix forking behavior
  • (947) [4.0] Correct time summary calculation for transient trxs due to change of read-only trxs windows
  • (953) [3.2] Bump Leap version to 3.2.3
  • (952) [3.2 -> 4.0] SHiP Fix forking behavior
  • (957) [3.2 -> 4.0] Merge 3.2.3 version bump to 4.0
  • (960) [4.0] Use is_write_window in eos-vm-oc main to determine if it is safe to update code cache
  • (931) [4.0] Improved test_snapshot_scheduler stability
  • (975) [4.0] Remove global WASM::check_limits and initial memory from instantiate_module
  • (964) [4.0] Added missing calls to wasmifs on read-only threads
  • (982) [4.0] Set an upper limit on read-only-threads of 8
  • (972) [4.0] fix cpack error message
  • (968) [4.0] Several improvements and fixes for snapshot scheduling
  • (939) [4.0] prometheus on different port
  • (986) [4.0] Restore read-mode=speculative
  • (993) [4.0] make eosio_exit impl more direct
  • (984) [4.0] Fix ROtrx dispatched to baseline runtime when compiled code not ready
  • (998) [4.0] Bump Leap version to release 4.0 rc3
  • (1005) [4.0] fix resource not found bug
  • (996) [3.2] response to disallowed host
  • (1000) [3.2] Log all http request/response at debug log level
  • (1008) [3.2->4.0] response to disallowed host
  • (1009) [3.2 -> 4.0] Log all http request/response at debug log level
  • (1010) [3.2] Reduce producer_plugin debug level log spam
  • (1017) [3.2 -> 4.0] Reduce producer_plugin debug level log spam
  • (1077) [4.0] Bump Leap version to 4.0.0


Full Changelog: v3.2.1...v4.0.0

Don't miss a new leap release

NewReleases is sending notifications on new releases.