Skip to content

Leap v5.0.0-rc2

Pre-release
Pre-release
Compare
Choose a tag to compare
@spoonincode spoonincode released this 11 Oct 21:09
· 403 commits to release/5.0 since this release
3231de1

The 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:

  1. MUST ensure the max-nonprivileged-inline-action-size parameter is not in config.ini so nodeos can start.
  2. 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

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

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

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 now 1000 (up from 100)
Related Development

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

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

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 on IR::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 and get_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 of vector to avoid non-null terminated char* 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 to operator== & 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 for INCLUDE_DIRECTORIES in fc's rapidjson cmake by @spoonincode in #1591
  • wrap cfile's fclose() 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 of cpack 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

Complete Contributors List


Full Changelog: v4.0.4...v5.0.0-rc1