Reth v2.4.0
- Version
v2.4.0- Repository
- paradigmxyz/reth
Release notes
Performance
Reth v2.4.0 reduces mean newPayload latency by 6.2% compared with v2.3.0.
Experimental revmc JIT EVM support is added and can be activated with --jit.enabled flag.
Networking and transaction propagation get a large set of throughput-oriented improvements: faster pooled transaction recovery (#26304), cached full transaction propagation encoding (#26012), and multiple ECIES / P2PStream allocation reductions.
Features
We continue with Amsterdam and EIP-7928 Block Access List development.
reth p2p bootnode --v5 now co-locates discv4 and discv5 on a single UDP port (--addr), matching go-ethereum and reth's own networking stack, with IPv4/IPv6 support (#26089)
RPC compatibility was improved with eth_sendRawTransactionSync timeout support, geth-aligned raw transaction handling, empty-proof normalization for eth_getProof, and several eth_simulate, eth_estimateGas, fee-history, and txpool fixes.
ParallelStateRoot deprecation
SDK/library users that depend on trie internals should update usages of ParallelStateRoot, ParallelSparseTrie, and ParallelStateRootError that were removed in this version.
Deployments still passing --engine.legacy-state-root should remove it or use --engine.state-root-fallback if they intentionally need synchronous state-root computation.
Update Priority
This table provides priorities for which classes of users should update particular components.
User Class
Priority
Payload Builders
High
Non-Payload Builders
High
Breaking Changes
Runtime / Configuration
• Dropped the legacy parallel state-root runtime path; --engine.legacy-state-root is hidden and now only warns if passed, with the sparse trie task as the normal path and serial fallback retained (#26069).
SDK / State Root APIs
• Refactored state-root strategy APIs to support custom out-of-tree state-root implementations (#26085).
• Removed ParallelStateRoot; downstream users should migrate to the sparse trie task or the serial fallback path (#26121).
• Renamed ParallelStateRootError to StateRootTaskError (#26132).
• Removed ParallelSparseTrie; ArenaParallelSparseTrie is now the default sparse trie implementation used by engine sparse-trie paths (#25453).
• Changed PayloadValidator::validate_block_post_execution_with_hashed_state to receive a lazy overlay-aware parent-state provider and return PostExecutionValidationError; custom implementations overriding this method must update their signatures (#26330).
Features
Performance
• Added experimental revmc JIT support for Ethereum EVM execution, including --jit node flags and reth_jit debug controls (#23230).
• Made JIT opt-in for library crates and fixed JIT CLI/helper handling (#25178, #25183, #25413).
• Reduced transaction conversion latency by emitting recovered transactions in ordered windows instead of waiting on a large Rayon ordered iterator (#25783).
• Avoided full block clones in FCU, RPC cache, and ExEx paths by storing and exposing Arc<RecoveredBlock> handles in Chain (#25645, #25647).
• Optimized state-root and storage-history work with better update_leaves parallelism, parallel write_storage_history, and more aggressive sparse trie caching. (#24774, #25282, #25428).
• Reduced BAL execution overhead by using unordered transaction iteration for BALs, buffering BAL execution cache metrics, and avoiding unnecessary hashed-account reads (#25411, #25366, #25369).
• Offloaded metric rendering and added worker queue / provider metric improvements (#26180, #25649, #25481).
• Routed raw transaction submission through PoolTransaction::recover_raw_transaction, allowing custom pool transaction types to recover directly from encoded bytes (#25238).
Networking & P2P
• Added snap/2 support across negotiation, dedicated eth + snap/2 streams, SnapClient BAL APIs, snap message helpers, the snap client, and inbound snap/2 request routing (#25774, #25752, #25607, #25608, #26049, #26324).
• Improved bootnode reachability by supporting NAT advertisement and dual-stack discv5…