Leap v5.0.0-rc2
Pre-releaseThe Leap v5.0.0 Release introduces several exciting enhancements. This release is focused around four key themes: relaxed constraints, increased speed, improved efficiency, and enhanced control.
📝 | v5.0.0-rc2 is the first release candidate of 5.0.0 due to an issue discovered in a tagged but not released 5.0.0-rc1. |
---|
See the Upgrade Guide for details on required/recommended configuration changes, deprecations and new nodeos
options.
Notable Changes at a Glance:
Added
- New default option to automatically apply EOS VM OC to reduce system CPU
- New Peer to Peer configuration options
- New Peer-level Prometheus metrics
- New BLS12-381 elliptic curve crypto primitives
Improved
- Relaxed constraints allow for larger transactions
- Sync latency optimization
- Node memory and multithreading improvements
- New mode for managing state database memory
Removed
- Deferred Transactions
Continue reading for an in depth look at the features of Leap v5.0.0. A complete change log is included at the bottom of these release notes.
Leap v5.0.0-rc2 Release Notes
Relaxed Constraints
Larger Transactions
Quick Summary
Benefit
- Increased max transaction to support larger transactions
Achieved by
- Removing
max-nonprivileged-inline-action-size
- Increasing default
max-transaction-time
Enabled by
- CPU efficiency gained by leveraging EOS VM OC on system contracts
Details
Leap 5 modifies the behavior controlled by two parameters that constrained the execution of smart contracts.
The first parameter is max-nonprivileged-inline-action-size
which, while technically configurable, in practice capped the size of inline actions sent by regular contracts to 4 KiB. This parameter has been removed from Leap 5 so that the only constraint on inline action size comes from the objective limit (max_inline_action_size
) that is managed on-chain.
Since the objective max_inline_action_size
limit is typically higher (it is 512 KiB on EOS), the removal of the max-nonprivileged-inline-action-size
unlocks behavior in smart contracts that was previously constrained. For example, on the EOS network, EOS EVM’s new call action could be used to deploy EVM contracts greater in size than 4 KiB from an EOS smart contract.
The second parameter is max-transaction-time
which limits the duration a transaction is allowed to execute as measured by wall-clock time. This parameter is not removed from Leap 5 but its default value is changed to instead effectively drive the transaction wall-clock deadline by the objective limit (max_transaction_cpu_usage
) that is managed on-chain.
Since the objective max_transaction_cpu_usage
limit is typically higher (it is 150 ms on EOS), the change of default value for max-transaction-time allows transactions to do more work within the longer time duration allotted to them. For example, on the EOS network, EOS EVM can take advantage of the relaxed transaction wall-clock deadline to successfully execute more computationally-heavy EVM transactions that may have been rejected previously.
When upgrading to Leap 5+, node operators:
- MUST ensure the
max-nonprivileged-inline-action-size
parameter is not in config.ini so nodeos can start. - SHOULD remove the
max-transaction-time
parameter to allow enforcement of the transaction wall-clock deadline to be driven by the objective on-chain limit.
Related Development
- Allow non privileged inline actions larger then 4KiB
- Remove max-nonprivileged-inline-action-size option
- Raise
max-transaction-time
- Change default max-transaction-time
- Add eos-vm-oc-enable auto mode
Increased Speed
Improved Read Performance
Quick Summary
Benefits
- High scale read-only-transactions
Achieved by
- Increased max allowed read-only transaction parallelization to 128 threads.
Enabled by
- Making multi-threaded read only transaction processing more memory efficient
- Improved serialization and deserialization
- Reducing contract compile time
- Reducing module cache size
Details
Leap 4 introduced parallel execution for both read only transactions (made by smart contracts) and read only RPC APIs (like get_block_info, get_transaction_id, etc). However, this initial implementation had to restrict the number of read-only threads up to 8 due to large memory usage.
Leap 5 restructures the underlying execution engine EOS VM, reducing memory usage and making parallelism more natural. The limit has been increased up to 128 threads. This unlocks another option for developers. Read-only solutions are a cheap, fast, and easy way to access data, cutting down on the need for additional history solutions and secondary data caches. Combined with natively supported tables and indexing EOS blockchain can be your one and only distributed database.
Related Development
- Collect EOS-VM-OC memory usage from the mainnet
- Reduce EOS VM OC's memory slice count allowing for higher parallelization
- Set EOS VM OC max mirroring pages to a small number for read-only threads
- Use a single WASM interface per nodeos (instead of per thread) to save WASM compile time and cache
- Increase default read-only-threads
- Increase maximum supported number of read-only threads to 128
- Do not create/use/cache execution context per contract
- Update EOS VM to use a single execution context per thread instead of per contract
- Update Leap to use a single execution context per thread instead of per contract
- Reduce EOS VM OC's memory slice count to allow higher parallelization
- Set specific sliced pages for read-only threads in EOS
- Update Leap to parse WASM code only once for JIT
- Store wasm globals in execution context such that a single parsed module can be shared by multiple threads
- Update eos-vm version to make wasm globals thread safe
Non-blocking ABI Serialization
Quick Summary
Benefits
- ~4X speed improvement for ABI intensive requests
- More reliable atomic API calls
Achieved by
- Moving ABI serialization off the main thread
- Updated serialization time constraints
Details
Leap 5 enhances EOS node performance by moving ABI serialization off the main thread and introducing improved time constraints. Most notably, ABI intensive requests (like get_block) are up to 4X faster.
Previously Leap would error out to avoid long running deserialization processes that tie up reasources. In Leap 5.0 this behaviour changes. In Leap 5, when a specific object deserialization takes longer than abi-serializer-max-time-ms
, it will be returned in binary form. This applies to requests that return multiple item. This includes get_block
, get_account
, and get_table_rows
.
Related Development
- Move abi serialization of transaction trace off main thread
- Move abi serialization of transaction trace off main thread for
chain_plugin: get_table_rows
andget_account
- Update API/serialization time constraints
Improved Efficiency
Asynchronous Block Fetching
Benefits
- Simultaneously fetch and apply blocks
Achieved By
- Continuing to sync the next sync-fetch-span while applying the current blocks
Details
With Leap 5, nodeos
now pulls downs new blocks independantly of block processing, allowing seemless and continuous processing of blocks
Related Development
P2P Latency Optimizations
Benefits
- Minimize latency for sync
- Simultaneously fetch and apply blocks
Achieved By
- Adding new p2p options and changing defaults
- Tracking peer latency and prioritizing lowest latency peers for sync
Details
Leap 5 enables node operators to sync more efficiently. Peer Latency Tracking prioritizes peers with the lowest latency for faster and more reliable sync. Block Buffering ensures maximum CPU utilization by fetching the next block batch while applying the current one.
Smarter block deadlines optimize transactions scheduled in a block to reduce micro-forking. In previous Leap versions, speculative transaction would be queued up until a new block arrives, causing stale or aborted blocks and unnecessarily delaying read-only transaction. In Leap v5.0.0 speculative blocks scheduling is optimized to prevent unneeded block aborts, and increase liveliness of transactions.
Summary of changes
- Added new option (
sync-peer-limit
) to limit the number of peers to sync from (default 3). - Added block range to notice messages to optimize peer choice.
- Modified latency calculation based on round trip of
time_message
- Only sync from lowest latency peers up to
sync-peer-limit
- Default
sync-fetch-span
is now1000
(up from100
)
Related Development
- P2P Improve sync behavior
- P2P sync improvements
- P2P sync ahead while applying received blocks
- P2P use round trip of time_message to calculate latency
- Smarter block deadlines for speculative blocks
Memory Optimized Chainbase
Quick Summary
Benefits
- ~20% overall reduced state memory consumption
Achieved By
- Optimizing underlying chainbase data structure
Details
Chainbase is the database which holds all the smart contract state in memory (RAM) for Antelope blockchains. The state is stored in (key, value) maps implemented using red-black trees. Each (key, value) pair is stored in a node, and requires three pointers (parent, left, right) and a color (a small integer able to store at least three different values).
In all versions of Leap until 5.0, these four members occupied 32 bytes of memory (three eight byte pointers, and the small integer also used 8 bytes because of alignment).
In Leap 5.0, these four members are stored in a compressed form occupying only 16 bytes, where each pointer is represented by a 42 bit offset for a total of 126 bits, leaving 2 bytes for the color member (allowing for four different values).
Our measurements show that this compressed representation allows for a Chainbase memory reduction of about 20%, with a negligible performance impact. This is one of the ways that Leap 5.0 will better utilize a given hardware, and be able to run higher blockchain loads than previous versions.
Related Development
- reduce chainbase memory usage
- Update chainbase to tip (reduce memory usage)
- Update chainbase to tip.
New mode for managing in-state memory
Quick Summary
Benefits
Much lower disk IO resulting in higher throughput and lower write operations.
Achieved by
Limits memory usage to state database that is actually accessed, and not the full configured chain-state-db-size-mb
, while persisting state to disk during shutdown.
Caution
If there is not enough memory to hold the state database nodeos will crash, and the state will be lost.
Details
New chain_plugin option for database-map-mode
Leap 5.0 supports a new mapped_private
option for database-map-mode
, which attemps to combine most of the benefits of mapped
and heap
modes, but opens the possibility of nodeos crashing in constrained memory environments.
Similar to mapped
mode, the resident memory usage is limited to the part of the state database that is actually accessed, and not the full configured chain-state-db-size-mb
as in heap
and locked
modes.
Similar to heap
and locked
modes, the database modified pages are not written back to disk during nodeos
execution. Only at nodes
normal termination are the modified pages written back to disk, updating the chain state database.
This reduces the wear-and-tear on the disk used to hold the chain state database. Also startup and termination times should be faster than with heap
and locked
modes.
A potential issue with the new mapped_private
option is that, if the system does not have enough available RAM to hold the accessed part of the state database (around 20GB for EOS today), nodeos can crash with an out of memory error. So we recommend using this option on systems with sufficient RAM, but which may not have quite as much as is required for heap
and locked
modes.
Please note that using a tmpfs
file system provides only benefits in mapped
mode, it is mostly a waste of RAM in all other modes. nodeos
now checks when this mismatch occurs, and will error at startup.
Improvement in locked
and heap
modes
Loading the chain state database to and from RAM (in the locked
and heap
modes) was memory intensive, accessing a virtual memory space of two times chain-state-db-size-mb
.
In Leap 5.0 this requirement was lowered to one time chain-state-db-size-mb
+ 1GB.
Related Development
CPU Optimized Smart Contracts
Quick Summary
Benefits
- Order of magnitude reduced CPU utilization for system contracts
Achieved by
- Selectively leveraging EOS VM OC
Details
Leap 5 leverages OC for the EOS VM by implementing an Auto OC Mode as the default setting. This new mode, eos-vm-oc-enable=auto
, automatically applies OC when appropriate, optimizing the execution of transactions and improving overall throughput.
Context | OC? |
---|---|
Building block | baseline, but OC if account is eosio.* |
Applying block | OC, or if producer: baseline, but OC if account is eosio.* |
Speculatively executing trx from p2p or HTTP | baseline, but OC if account is eosio.* |
Compute transaction | baseline, but OC if account is eosio.* |
Read only transaction | OC |
Related Developement
Enhanced Control
Customizable Peer Networking
Quick Summary
Benefits
- Customize IP addresses/hostnames/ports of nodeos HTTP endpoints
- Leverage efficient and secure local-only connections
Achieved By
- Allowing
--p2p-listen-endpoint
and--p2p-server-address
to be specified multiple times - Supporting multiple http endpoints
- Categorizing HTTP endpoints for logical and granular control
Details
For endpoint configuration purposes, API endpoints are now grouped into several categories. You can specify different server addresses for each category. Server address can be IPv4 and port: 27.0.0.1:8080
, IPv6 and port: [2001:db8:3c4d:15::1a2f:1a2b]:8080
, Hostname and port: example.com:8080
, or unix socket path: ./relative/unix_path.sock
. For backward compatibility, the HTTP category facility has to be opted in by specifying http-server-address = http-category-address
explicitly. When http-server-address = http-category-address
, all the unspecified categories are considered disabled.
Changes
- Specify
--p2p-listen-endpoint
and--p2p-server-address
multiple times - Added fields added to the connections api
remote_ip
remote_port
is_socket_open
is_blocks_only
is_transactions_only
- Categorized API endpoints
chain_ro
- v1/chain/get_activated_protocol_features
- v1/chain/get_block_info
- v1/chain/get_block_header_state
- v1/chain/get_account
- v1/chain/get_code
- v1/chain/get_code_hash
- v1/chain/get_consensus_parameters
- v1/chain/get_abi
- v1/chain/get_raw_code_and_abi
- v1/chain/get_raw_abi
- v1/chain/get_table_rows
- v1/chain/get_table_by_scope
- v1/chain/get_currency_balance
- v1/chain/get_currency_stats
- v1/chain/get_producers
- v1/chain/get_producer_schedule
- v1/chain/get_scheduled_transactions
- v1/chain/get_required_keys
- v1/chain/get_transaction_id
- v1/chain/send_read_only_transaction
- v1/chain/get_accounts_by_authorizers
- v1/chain/get_raw_block
- v1/chain/get_block
- v1/chain/get_block_header
- v1/chain/get_transaction_status
chain_rw
- v1/chain/compute_transaction
- v1/chain/push_transaction
- v1/chain/push_transactions
- v1/chain/send_transaction
- v1/chain/send_transaction2
db_size
- v1/db_size/get
net_ro
- v1/net/status
- v1/net/connections
net_rw
- v1/net/connect
- v1/net/disconnect
producer_ro
- v1/producer/paused
- v1/producer/get_runtime_options
- v1/producer/get_greylist
- v1/producer/get_whitelist_blacklist
- v1/producer/get_scheduled_protocol_feature_activations
- v1/producer/get_supported_protocol_features
- v1/producer/get_account_ram_corrections
- v1/producer/get_unapplied_transactions
producer_rw
- v1/producer/pause
- v1/producer/resume
- v1/producer/update_runtime_options
- v1/producer/add_greylist_accounts
- v1/producer/remove_greylist_accounts
- v1/producer/set_whitelist_blacklist
- v1/producer/schedule_protocol_feature_activations
- v1/producer/get_integrity_hash
snapshot
- v1/producer/get_snapshot_requests
- v1/producer/create_snapshot
- v1/producer/schedule_snapshot
- v1/producer/unschedule_snapshot
trace_api
- v1/trace_api/get_block
- v1/trace_api/get_transaction_trace
prometheus
- v1/prometheus/metrics
node
- v1/node/get_supported_apis
- v1/chain/get_info
Related Development
Peer-level tracking in Prometheus
Quick Summary
Benefits
- Troubleshoot peering challenges
Achieved By
- Adding per-peer prometheus metrics
Details
In Leap 5, Prometheus metrics are now tracked for each peer. These stats can be rendered in a terminal with a text-based user interface similar to top
or ntop
.
Changes
- Per Peer metrics added to prometheus exporter under
nodeos_p2p_connections
accepting_blocks
last_received_block
first_available_block
last_available_block
unique_first_block_count
latency
bytes_received
bytes_sent
connection_start_time
Related Development
Other Changes
Build, Binaries & Platform Support
Pinned builds are no longer built via a script (pinned_build.sh
) but now via Docker. The containerization of the build allows the resulting .deb
package to be reproducible. README.md
contains updated instructions for those wanting to perform a reproducible pinned build.
Support for Ubuntu 18.04 has been dropped.
Due to changes in the build process, separate .deb
packages for different Ubuntu versions are no longer required. Only a single .deb
package will be released which can be installed on all versions of Ubuntu that Leap supports.
Related Development
Replace pinned builds with reproducible pinned builds
Full IPv6 Support
Avoid port remapping hassles for multi node setups with Leap 5's full support for IPv6 in all HTTP endpoints for all nodeos plugins.
Related Development
New Cryptographic Primitives
Quick Summary
Benefits
- Implement efficient ZKProofs validation with BLS12-381 elliptic curve technology
Achieved by
- New types in Leap to support BLS12-381 elliptic curve
Enabled by
- Addition of bls12-381 library
Details
Leap 5 introduces a new implementation of a math library for the BLS12-381 elliptic curve to support Instant Finality. BLS12-381 serves as the foundation for zero-knowledge proof systems such as Groth16 in Zcash's Sapling upgrade. The BLS host functions empower EOS contract developers to validate zero-knowledge proofs more efficiently, unlocking new possibilities for systems that can protect the privacy of users' financial data.
BLS related types are available immediately in Leap v5.0.0, and BLS host functions will be available in the future via a protocol feature.
Related Development
- BLS12-381 Crypto Primitives
- BLS host functions; integration branch -> main merge
- Finish integrating BLS into Leap main branch
- Migrate to AntelopeIO's bls12-381 repo; minor additional bls12-381 usage tweaks
- Add BLS unit test for host functions taking variable number of inputs and
n=0
Deprecations & Removals
Deferred Transactions Removed
Deferred Transactions have been removed. The configuration option max-scheduled-transaction-time-per-block-ms
has been removed, and Leap now behaves as if this option had been set to 0. As stated in the Leap 5.0 Upgrade Guide, node operators must remove this configuration option.
Default Behavior for Scheduled Transactions:
Nodes running Leap 5 will not execute or process scheduled transactions. Instead, scheduled transactions will expire them without execution, effectively releasing the RAM.
Protocol Feature and Block Validation:
Version 5.0 additionally introduces protocol features that impact the validation of blocks with deferred transactions. Once activated, blocks with deferred transactions will no longer be considered valid.
Related Development
Remove Deferred Transactions
Remove defer transaction configuration options and block incoming delayed transactions
Implement DISABLE_DEFERRED_TRXS_STAGE_1 and DISABLE_DEFERRED_TRXS_STAGE_2 protocol features
Upgrade to C++20
Quick Summary
Benefits
- Access to new language features for core development of Leap.
Achieved by
- Upgrading C++ standard to C++20
Details
The C++ standard has been upgraded to C++20 for Leap 5. This will provide an array of benefits for core development. C++20 allows for simpler, cleaner code and provides new standard features and libraries.
Here are some examples of future improvements that are now possible:
- Remove of code emulating features that are now standard in C++20
- Utilize new features that
- Provide superior performance/portability
- Reduce memory usage
- Offer simplified syntax
- enable us to use new features such as:
- concepts to make the code simpler and easier to use (better error messages)
- ranges to progran in a more functional way (partial support)
- coroutines to reduce callback hell (would require some thinking first to decide which task/executor library to use)
Related Development
Update C++ standard to C++20
C++20 support - add boost 1.82 as a submodule
Changes to Options
Disable Replay Opts by default if statehist plugin enabled
Changes to Logging & Help
Prometheus: Add speculative block metrics
Print non-default options on startup/shutdown
Changes to Performance Harness
Make transaction generator a configurable option to Tra
Create performance harness module
Create workflow for manually dispatching performance harness runs
Create workflow to test backward compatibility of performance harness
Performance test - use 475ms for max_transact
Create stub workflow for manual dispatch performance harness runs
Create stub workflow ph_backward_compatibility.yaml
Read-Only transaction support
Bug Fixes
Fix http_port
in boot script
fix leaky EOS VM OC executor code mapping
Smarter block deadlines for speculative blocks
Fix base64 encoding
Guard Against crashes in HTTP when making addition nodeos calls
Make sure all exceptions are caught when executing code
Signal accepted_block after it is marked valid
Complete Leap v5.0.0 Change Log
Pull Requests
- [4.0 -> main] Merge 4.0.0-rc1 version bump to main by @linh2931 in #855
- fix comparison of different signedness warning in log_index by @spoonincode in #860
- fix noisy
ignoring packed attribute
warning onIR::ControlStructureImm
by @spoonincode in #866 - [4.0 -> main] Increase robustness of snapshot diff python test by @vladtr in #873
- [4.0->main] unshare import fix & SHiP: Send until queue is empty by @huangminghuang in #877
- [4.0 -> main] Test Fix: Use max-transaction-time -1 by @heifner in #878
- [4.0 -> main] Restore Node.py Changes that were lost by @ClaytonCalabrese in #880
- [4.0 -> main] Test fix: Add max-transaction-time -1 by @heifner in #882
- [4.0 -> main] Merge 4.0.0-rc2 bump changes to main by @linh2931 in #884
- Fix clang warning by @heifner in #888
- [4.0 -> main] Add time summary logging for transient trx processing and read-only threads by @linh2931 in #890
- set a maximum test time in CI via a ctest argument by @spoonincode in #895
- [4.0 -> main] Cleanup and prevent thread starvation while in the read window. by @greg7mdp in #904
- remove ubuntu 18.04 from CI & documentation by @spoonincode in #894
- [4.0 -> main] Use block_num for interrupt of start_block & Use single timer for read and write windows by @heifner in #910
- [4.0 -> main] Adjusted timeout in tests to give better chance on reaching consensus by @vladtr in #909
- Replace needless std::map with std::vector, and std::move in capture by @greg7mdp in #913
- [4.0 -> main] Implement support for -k/--kill in launcher. by @jgiszczak in #926
- curl is no longer a required dependency; remove from docs & CI environment by @spoonincode in #924
- [4.0 -> main] Execute read only safe tasks on read-only thread pool by @heifner in #929
- [4.0 -> main] SHiP flush logs on write by @heifner in #937
- [4.0->main] fix gelf DNS resolves to ipv6 address by @huangminghuang in #940
- remove more unused libfc network code by @spoonincode in #941
- [4.0 -> main] Clean tmp and TestLogs after test runs by @ClaytonCalabrese in #942
- bump minimum cmake requirement to 3.16 by @spoonincode in #920
- [4.0 -> main] forkdb reset in replay since blocks are signaled by @heifner in #944
- [4.0 -> main] Small improvements for parallelizing read-only transactions and tasks by @linh2931 in #946
- [4.0 -> main] Merge time summary fix to main by @linh2931 in #954
- [4.0 -> main] SHiP Fix forking behavior by @heifner in #955
- Return 400 http error for unknown account by @heifner in #912
- [4.0 -> main] Merge 3.2.3 version bump from 4.0 to main by @linh2931 in #959
- [4.0 -> main] Use is_write_window in eos-vm-oc main to determine if it is safe to update code cache by @linh2931 in #962
- [PH] Reduce log Usage and Other Performance Harness Improvements by @ClaytonCalabrese in #945
- revert
ctest --test-dir
usage that is cmake 3.20+ by @spoonincode in #961 - [4.0 -> main] test_snapshot_scheduler stability improvements by @vladtr in #976
- [4.0 -> main] Remove global WASM::check_limits and initial memory from instantiate_module by @linh2931 in #977
- [4.0 -> main] Added missing calls to wasmifs on read-only threads by @linh2931 in #979
- remove more unused WAVM code by @spoonincode in #923
- remove WAVM specific c++11 flag by @spoonincode in #927
- [4.0 -> main] Set an upper limit on read-only-threads of 8 by @heifner in #983
- [4.0->main] fix cpack error message by @huangminghuang in #987
- [4.0 -> main] Several improvements and fixes for snapshot scheduling by @vladtr in #985
- Unify definitions of
next_function
and its variant parameter by @greg7mdp in #973 - [4.0->main] prometheus on different port by @huangminghuang in #989
- Update boost version. by @oschwaldp-oci in #990
- [4.0 -> main] Restore read-mode=speculative by @heifner in #992
- [4.0 -> main] make eosio_exit impl more direct by @spoonincode in #995
- [4.0 -> main] Fix ROtrx dispatched to baseline runtime when compiled code not ready by @linh2931 in #997
- [4.0 -> main] Merge release 4.0 rc3 version bump to main by @linh2931 in #1001
- [4.0->main] prometheus fix main by @huangminghuang in #1006
- cleos wildcard linkauth by @huangminghuang in #991
- cleanup duplicated code blocks in
get_account
by @greg7mdp in #1004 - [4.0->main] response to disallowed host by @huangminghuang in #1013
- Optimize block start time by @huangminghuang in #867
- [4.0 -> main] Log all http request/response at debug log level by @heifner in #1015
- [4.0 -> main] Reduce producer_plugin debug level log spam by @heifner in #1019
- P2P: Inform peer if not accepting transactions by @heifner in #1020
- Move abi serialization of transaction trace off main thread by @greg7mdp in #999
- Fix compilation warnings with clang-16 by @greg7mdp in #1027
- P2P: clang-tidy fixes by @heifner in #1022
- Small but measurable improvement to executor queue by @heifner in #994
- update to latest commit of abieos submodule by @greg7mdp in #1036
- Test: Add SHiP forking and have_positions unittest by @heifner in #958
- Pass Resolver as
const &
instead of by value. by @greg7mdp in #1038 - [PH] block producer op mode by @oschwaldp-oci in #967
- P2P: Misc improvements by @heifner in #1040
- Added leap-util subcommand to check for a clean shutdown by @vladtr in #914
- add needed
string
include for some newer libc++ versions by @spoonincode in #1044 - Replace boost/fc filesystem by @huangminghuang in #1011
- P2P: Save and retry unlinkable blocks by @heifner in #1045
- mitigate unix socket path problem by @huangminghuang in #1039
- FC cleanup by @heifner in #1049
- Fix control reaches end of non-void function warning by @linh2931 in #1055
- Properly stringify both large and small int64's when converting to json by @vladtr in #1060
- Update chainbase to include comparison of different signedness warning fix by @linh2931 in #1061
- Added missing namespace to logger in case of FC_USE_PTHREAD_NAME_NP not defined by @vladtr in #1058
- remove unused libssl from libtester cmakes by @spoonincode in #1068
- remove boost <1.70 workaround in libtester cmakes by @spoonincode in #1069
- [PH] Update initial API Node Op Mode documentation. by @oschwaldp-oci in #1056
- [PH] Add http client async by @oschwaldp-oci in #1052
- OBE [PH] Feature API Node Operational Mode Init by @oschwaldp-oci in #1051
- Move abi serialization of transaction trace off main thread for
chain_plugin: get_table_rows
andget_account
by @greg7mdp in #1054 - Fix test failure on fast machine (release builds) by @greg7mdp in #1075
- [4.0 -> main] Merge 4.0.0 version bump to main by @linh2931 in #1078
- fix ambiguous to_variant()s in json tests by @spoonincode in #1080
- use python_DISTLIB by @huangminghuang in #1023
- Refactor: Move subjective_billing to chain library by @heifner in #1076
- Update submodules to the version building with
-std=c++20
by @greg7mdp in #1086 - fix: not fail on signature checks for dry-run txns by @PinelliaC in #1081
- [4.0 -> main] fix: not fail on signature checks for dry-run txns by @heifner in #1091
- Update chainbase to tip (-Wfree-nonheap-object warning suppressed for gcc-12) by @greg7mdp in #1092
- [PH] Initial API Node (HTTP Node) Support - Topology definition/configuration by @oschwaldp-oci in #1093
- Changes for building with c++20. by @greg7mdp in #1070
- Snapshot code refactoring by @vladtr in #1037
- refactor prometheus plugin by @huangminghuang in #1074
std::result_of
was deprecated in C++17, removed in C++20. by @greg7mdp in #1107- fix parallel-ctest-containers creation of log tarballs on failure by @spoonincode in #1097
- Fix g++-10 link issue when building with -std=c++20. by @greg7mdp in #1103
- Refactor libfc tests into one executable by @heifner in #1095
- Optimization: New escape_str function for sanitizing strings by @heifner in #1108
- Tests: misc cleanup by @heifner in #1112
- Reorganize tests for plugins by @vladtr in #1115
- [main] Update swagger files to include missing documentation by @iamveritas in #1110
- Update pinned build versions for boost and llvm-src by @greg7mdp in #1118
- Remove time_point implicit conversions by @heifner in #1125
- [4.0 -> main] Check read-only trx options only when read-only-thread enabled, and present better error message by @linh2931 in #1134
- Update ship_client.cpp by @7flash in #1140
- bump chainbase & appbase submodules to main w/ CI tweaks by @spoonincode in #1143
- [PH] Feature API Operational Mode and HTTP Transaction Generator by @oschwaldp-oci in #1138
- Additional test contract for readonly trx test by @linh2931 in #1148
- Increase test coverage of snapshot-scheduler by @vladtr in #1147
- Stability issues and improvements on BSD by @vladtr in #1059
- [4.0 -> main] Added block log version and num of blocks to output of leap-util block-log smoke-test by @vladtr in #1155
- Fix clang warning by @heifner in #1157
- bump bn256 to main head with gcc13 + c++20 include fix by @spoonincode in #1160
- [4.0->main] change max-retained-history-files default by @huangminghuang in #1163
- Keep
subprocess_results.log
around when test fails by @oschwaldp-oci in #1161 - [PH] Initial reporting updates for API Node and http transaction generator by @oschwaldp-oci in #1165
- Support multiple http endpoints by @huangminghuang in #1137
- add gelf test by @huangminghuang in #1145
- Update API/serialization time constraints by @heifner in #1139
- [4.0 -> main] Ignore http error on remote_endpoint() causing shutdown by @heifner in #1177
- [4.0 -> main] Correctly handle close while syncing by @heifner in #1178
- Move log line for
onblock
and update saved log file for tests by @greg7mdp in #1183 - update appbase submodule by @huangminghuang in #1184
- [4.0->main] fix replay for partitioned block log by @huangminghuang in #1190
- [4.0 -> main] Revert "Simplify Pinned Build Scripts" by @arhag in #1194
- Fix compilation warning (does not return a value in all control paths) by @greg7mdp in #1188
- fix unstable gelf test by @huangminghuang in #1180
- [4.0 -> main] Fix for nodeos large memory consumption during a blocks log replay by @vladtr in #1200
- [4.0 -> Main] Merge 4.0.1 version bump by @linh2931 in #1202
- Improve packed_transaction parsing performance by @greg7mdp in #1199
- [4.0 -> main] [docs] fix devrel#248 document chain api endpoints by @iamveritas in #1208
- IPv6 support by @huangminghuang in #1203
- Test harness process control by @jgiszczak in #1182
- [PH] Performance Harness improvements by @oschwaldp-oci in #1195
- P2P Refactor connections management by @heifner in #1187
- Add prettyPrint and printReturnLimit to processUrllibRequest() by @jgiszczak in #1210
- Remove disable-subjective-billing option by @heifner in #1209
- [4.0 -> main] remove innocuous stray
}
in log statement by @spoonincode in #1211 - Cleanup producer_plugin pimpl idiom. by @greg7mdp in #1213
- P2P sync improvements by @heifner in #1215
- Cleanup pimpl idiom on chain_plugin by @greg7mdp in #1222
- Cleanup pimpl idiom for ship. by @greg7mdp in #1224
- [4.0 -> main] fix NP & LR CI workflow for forked/mirrored repos that are not named leap by @spoonincode in #1227
- P2P sync ahead while applying received blocks by @heifner in #1225
- Extended snapshot scheduler to better handle missing and zero params by @vladtr in #1220
- Avoid trying to kill a node twice to prevent orphaned processes. by @jgiszczak in #1232
- [PH] Read-Only transaction support by @oschwaldp-oci in #1229
- Improve robustness of snapshot unit test by @vladtr in #1236
- [4.0 -> main] allow ROtrx threads unlimited time to start by @spoonincode in #1242
- [4.0 -> main] SHiP: Fix state-history-log-retain-blocks option handling by @heifner in #1248
- Add harden flags to pinned builds by @greg7mdp in #1258
- Remove fc/string.hpp to_string impls by @greg7mdp in #1234
- fix
i256
key type conversion by initialize buffer before usage by @learnforpractice in #1252 - Cleanup pimpl idiom for
net_plugin
by @greg7mdp in #1253 - [4.0 -> main] Output-dir should be required for block-log subcommands of leap-util by @vladtr in #1265
- P2P use round trip of time_message to calculate latency by @heifner in #1243
- [4.0 -> main] fix i256 key type conversion by initialize buffer before usage by @heifner in #1269
- [4.0 -> main] P2P excessive logging caused by message spamming by @heifner in #1271
- [4.0 -> main] SHiP: fix intermittent empty get_block_result by @heifner in #1278
- Made snapshot test more robust in case of asap scheduling by @vladtr in #1274
- Create initial workflow file for Pinned Builds. by @oschwaldp-oci in #1297
- [4.0 -> main] Fix for loading snapshot with empty block log by @heifner in #1298
- [4.0 -> main] if actions.data & actions.hex_data provided, use the hex_data in api call get_transaction_id by @vladtr in #1301
- Fix for a build on FreeBSD 13.2 by @vladtr in #1283
- [4.0 -> main] Fix for loading a snapshot with an empty block log but an existing fork database by @heifner in #1304
- [4.0 -> main] P2P: Do not log small clock skew by @heifner in #1305
- Improve snapshot test reliability by @vladtr in #1308
- fix error log message in fc network listener by @spoonincode in #1309
- [4.0 -> main] Merge release/4.0.2 version bump to main by @linh2931 in #1311
- remove
FC_USE_PTHREAD_NAME_NP
&pthread_getname_np()
usage by @spoonincode in #1317 - on macOS do not consider
EINVAL
a fatal accept error in fc's listener; fixing keosd on macOS by @spoonincode in #1318 - [4.0 -> main] P2P: Use magnitude safe time types by @heifner in #1321
- [4.0 -> main] Merge release/4.0.3 version bump by @linh2931 in #1327
- libtester ci matrix by @oschwaldp-oci in #1312
- Add configuration knobs and defaults for cdt and eos-system-contracts by @oschwaldp-oci in #1313
- Add support for '--plugin' to cluster_launcher.py by @jgiszczak in #1314
- [4.0 -> main] Report transaction failed if trx was exhausted in non-producing mode (GH 1247) by @greg7mdp in #1337
- Update net_plugin to support clang Thread Safety Analysis features by @greg7mdp in #1268
- [4.0 -> main] Pinned Builds manual dispatch workflow in CI by @oschwaldp-oci in #1339
- test libtester usage as part of CI by @oschwaldp-oci in #1259
- Use retry-num-blocks where possible to avoid polling in tests by @jgiszczak in #1249
- Fix unused warning by @heifner in #1341
- refactor listener by @huangminghuang in #1218
- Test fix: nodeos_retry_transaction_test by @heifner in #1343
- Test fix: large-lib-test by @heifner in #1344
- Test: plugin_http_api_test.py by @heifner in #1346
- [4.0 -> main] P2P: fix head_num reporting by @heifner in #1347
- Blocklog: Return std::optional for head_id by @heifner in #1351
- [4.0 -> main] Docs: Additional nodeos --help info by @heifner in #1352
- Add eos-vm-oc-enable auto mode by @heifner in #1322
- OC tierup compile in order by @heifner in #1342
- Create stub workflow ph_backward_compatibility.yaml by @oschwaldp-oci in #1355
- [PH] Create stub workflow for manual dispatch performance harness runs by @oschwaldp-oci in #1365
- [4.0 -> main] Removed "deprecated" from help for speculative read-mode by @heifner in #1371
- [4.0 -> main] Fix incorrect serializing of std::optional when value is not provided - (GH #1189) by @greg7mdp in #1374
- add
*.gdb_history
to.gitignore
by @greg7mdp in #1367 - [4.0 -> main] Close connection on aysnc_read with a closed socket by @heifner in #1376
- [4.0 -> main] SHiP: Support snapshot start with full deltas by @heifner in #1377
- no longer eagerly use tcmalloc if it's found by @spoonincode in #1363
- [3.2 -> main] Emit correct trace id for deferred trx before replace_deferred protocol feature activation by @heifner in #1380
- [4.0 -> main] Emit correct trace id for deferred trx before replace_deferred protocol feature activation by @heifner in #1382
- [4.0 -> main] SHiP: Improve startup when large number of SHiP logs in retain directory by @heifner in #1385
- [4.0 -> main] Test: Reduce load on ci/cd by @heifner in #1389
- [4.0 -> main] Test: Fix ship test to wait on correct transaction by @heifner in #1391
- Signal accepted_block after it is marked valid by @heifner in #1386
- [4.0 -> main] Merge memory issue fix from release/4.0 to main by @linh2931 in #1398
- Test Fix: performance test - use 475ms for max_transaction_cpu_usage by @heifner in #1401
- [4.0 -> main] Merge version bump from 4.0.4 to main by @linh2931 in #1402
- Update max_block_cpu_usage and max_transaction_cpu_usage properly. by @jgiszczak in #1400
- [PH] Create workflow to test backward compatibility of performance harness by @oschwaldp-oci in #1356
- Print non-default options on startup/shutdown by @heifner in #1412
- BLS12-381 Crypto Primitives by @mschoenebeck in #1071
- Revert back to non-oc execution for read-only trxs by @heifner in #1408
- Test Fix: libtester test failures in CICD by @oschwaldp-oci in #1438
- Test Fix: Change default max-transaction-cpu-usage for tests by @heifner in #1436
- on cmake 3.22+ compress .deb packages via zstd by @spoonincode in #1443
- Test Fix: Controller calls only valid when building a block by @heifner in #1442
- set
DEBIAN_FRONTEND
&TZ
globally during libtester job by @spoonincode in #1444 - Listen on multiple addresses for net_plugin p2p. by @jgiszczak in #1411
- Disable building leap-dev.deb package by default by @spoonincode in #1448
- [4.0] Fix block time reporting log statement by @heifner in #1434
- C++20 support - add boost 1.82 as a submodule by @greg7mdp in #1142
- [4.0 -> main] Fix block time reporting log statement by @heifner in #1451
- Do not print version and non-default args for help by @heifner in #1447
- Upgrade to asset-artifact-download-action@v3 in CI workflows by @spoonincode in #1445
- [3.2] Ignore http error on remote_endpoint() causing terminate by @heifner in #1452
- [3.2 -> 4.0] Ignore http error on remote_endpoint() causing terminate by @heifner in #1453
- update eos-vm version to make wasm globals thread safe by @linh2931 in #1414
- C++20 support - continue to use c++17 on files that use LLVM by @spoonincode in #1192
- [4.0 -> main] Ignore http error on remote_endpoint() causing terminate by @heifner in #1454
- Remove *.s from .gitignore by @heifner in #1459
- Make sure all exceptions are caught when executing code in http_plugin's thread pool, so Leap doesn't crash when processing APIs. by @greg7mdp in #1370
- Update C++ standard to C++20 by @greg7mdp in #1458
.gitignore
cleanup - mostly stop ignoring*.cmake
files. by @greg7mdp in #1460- [3.2] Modify trace_api_plugin to report serialization errors to user by @heifner in #1449
- [3.2 -> 4.0] Modify trace_api_plugin to report serialization errors to user by @heifner in #1468
- SHiP: Auto disable-replay-opts instead of exiting with error by @heifner in #1467
- [4.0 -> main] Modify trace_api_plugin to report serialization errors to user by @heifner in #1469
- Update
bn256
submodule to tip. by @greg7mdp in #1474 - Fix
-Wsign-compare
warnings by @greg7mdp in #1471 - [PH] Create workflow for manually dispatching performance harness runs by @oschwaldp-oci in #1378
- Update chainbase to tip. by @greg7mdp in #1475
- skip
bad_alloc_test
when ASAN enabled by @spoonincode in #1479 - Tests: Add back old commented out unittests by @heifner in #1476
- return
string
from test contract's_abi()
call instead ofvector
to avoid non-null terminatedchar*
access by @spoonincode in #1478 - Update Leap to parse WASM code only once for JIT by @linh2931 in #1455
- Fix base64 encoding by @heifner in #1482
- check for existance of BMI2 & ADX instructions on CI workers by @spoonincode in #1132
- migrate to AntelopeIO's bls12-381 repo; minor additional bls12-381 usage tweaks by @spoonincode in #1472
- add BLS unit test for host functions taking variable number of inputs and
n=0
by @spoonincode in #1473 - Require dry-run trxs to have authorization and add tests by @heifner in #1489
- Set EOS VM OC max mirroring pages to a small number for read-only threads by @linh2931 in #1488
- fix a couple sign-compare warnings in resource_limits_test by @spoonincode in #1491
- Smarter block deadlines for speculative blocks by @heifner in #1481
- fix sign-compare warning in dry_run_trx_tests by @spoonincode in #1492
- upgrade to boost 1.83 by @spoonincode in #1493
- fix compilation on ARM -- ifdef out an EOS VM JIT piece when not supported by @spoonincode in #1495
- Add some
[[nodiscard]]
attributes and remove unused type by @greg7mdp in #1500 - fix leaky EOS VM OC executor code mapping by @spoonincode in #1499
- BLS host functions; integration branch -> main merge by @spoonincode in #1486
- Add per peer prometheus metrics and a TUI to view them. by @jgiszczak in #1477
- Set specific sliced pages for read-only threads in EOS VM OC Tierup by @linh2931 in #1498
- The companion Leap PR for using a single execution context per wasm interface by @linh2931 in #1484
- add
const
tooperator==
&operator!=
to avoid c++20 warning in chainbase by @spoonincode in #1524 - Prometheus: Add speculative block metrics by @heifner in #1502
- Update gcc version check in CMakeLists.txt. by @greg7mdp in #1530
- negate after converting to unsigned to avoid UB on minimum signed value by @spoonincode in #1526
- Fix
http_port
in boot script by @YaroShkvorets in #1567 - Update
bls12-381
submodule to tip (comparison operators) by @greg7mdp in #1564 - Create performance harness module by @oschwaldp-oci in #1535
- Update chainbase to tip (reduce memory usage) by @greg7mdp in #1575
- Remove some conversion operators by @heifner in #1563
- Update bls12 submodule to tip by @greg7mdp in #1577
- Make transaction generator a configurable option to TransactionGeneratorsLauncher. by @oschwaldp-oci in #1579
- switch out
COMPILE_FLAGS
forINCLUDE_DIRECTORIES
in fc's rapidjson cmake by @spoonincode in #1591 - wrap
cfile
'sfclose()
to avoid warning on latest glibc by @spoonincode in #1592 - add 100+ modexp test vectors from boringssl by @spoonincode in #1604
- Use a single WASM interface per nodeos (instead of per thread) to save WASM compile time and cache by @linh2931 in #1549
- Increase maximum supported number of read-only threads to 128 by @linh2931 in #1611
- Prevent unnecessary lib<->head catchup transition changes by @linh2931 in #1619
- fix build on macOS: add yield for Secure Enclave wallet's
to_string()
call by @spoonincode in #1627 - add a needed
typename
for newer clang compilers by @spoonincode in #1628 - remove now unneeded macOS z/bz2/lzma/zstd boost iostreams workaround by @spoonincode in #1629
- Cleanup unnecessary dependency on chain_plugin by trx_generator. by @oschwaldp-oci in #1624
- bump abieos submodule to newer rapidjson submodule to fix c++20 warnings by @spoonincode in #1630
- add some additional test cases in modexp benchmark by @spoonincode in #1635
- Add a test for memory mappings by @linh2931 in #1633
- [PH] Fix issues with processing read-only transactions. by @oschwaldp-oci in #1637
- Remove max-nonprivileged-inline-action-size option by @heifner in #1645
- add
BLS_PRIMITIVES
to bios boot tutorial script by @spoonincode in #1647 - Refactor adding EosioChain INTERFACE library for use in add_eosio_test_executable macro and by itself. by @oschwaldp-oci in #1638
- avoid unaligned accesses to types casted from byte stream in WAVM's wasm parser by @spoonincode in #1648
- avoid possible memcpy with nullptr when action data size is 0 by @spoonincode in #1649
- resolve misaligned access in OC code cache write out by @spoonincode in #1653
- do not perform arithmetic on
nullptr
inside WAVM serialization by @spoonincode in #1654 - [4.0] HTTP: Check for connection_reset by @heifner in #1663
- [4.0 -> main] HTTP: Check for connection_reset by @heifner in #1665
- PH: Include full version in performance harness reports by @heifner in #1666
- Change default max-transaction-time by @heifner in #1655
- [PH] Performance Harness Updates by @oschwaldp-oci in #1667
- bump libsecp256k1 to v0.4.0 by @spoonincode in #1670
- randomize secp256k1 context used for signing by @spoonincode in #1671
- remove usage of deprecated
ATOMIC_VAR_INIT
from eos-vm by @spoonincode in #1673 - fix some different signedness warnings in
custom_appbase_tests
by @spoonincode in #1674 - [PH] Delete state dirs in test logs. by @oschwaldp-oci in #1679
- PH: Add a longer running read-only trx for tests by @heifner in #1685
- Replace OpenSSL dependency with pinned BoringSSL by @spoonincode in #1599
- [PH] Trx Generator - Use default exception handler. by @oschwaldp-oci in #1692
- Remove defer transaction configuration options and block incoming delayed transactions by @linh2931 in #1643
- Chainbase should balk on 3.1-4.0 chainbases by @greg7mdp in #1695
- Remove prometheus-exporter-address option by @heifner in #1698
- P2P: Advance read pointer when dropping trx by @heifner in #1706
- Improve trx_generator http client by @heifner in #1699
- migrate to new
platform-cache-workflow
to manage Dockerfile caching in CI by @spoonincode in #1703 - extend leap-util logs for smoke test by @dimas1185 in #1704
- Implement DISABLE_DEFERRED_TRXS_STAGE_1 and DISABLE_DEFERRED_TRXS_STAGE_2 protocol features by @linh2931 in #1697
- generate
.tar.zst
out ofcpack
instead of.tar.gz
by @spoonincode in #1714 - Reduce the number of thread hops for read-only trxs by @heifner in #1702
- Replace pinned builds with reproducible pinned builds by @spoonincode in #1686
- PH: Disable p2p trx execution on validation and api nodes by @heifner in #1709
- Fix: segfault switching between read/write windows by @heifner in #1718
- Improve chainbase mapped and heap behavior by @greg7mdp in #1691
- Add protocol features to disallow deferred transaction by @ericpassmore in #1724
- Create release/5.0 branch and bump Leap version to 5.0.0 rc1 by @linh2931 in #1726
Contributors
New Contributors
- @PinelliaC made their first contribution in #1081
- @7flash made their first contribution in #1140
- @learnforpractice made their first contribution in #1252
- @mschoenebeck made their first contribution in #1071
- @YaroShkvorets made their first contribution in #1567
Complete Contributors List
Full Changelog: v4.0.4...v5.0.0-rc1