Reth v2.5.0 improves execution performance across the board. Release regression testing against v2.4.1 measured 5-10% lower mean block-processing latency, especially in long-tail workloads.
Performance
- Added an opt-in sender recovery cache shared across transaction paths, reducing mean mainnet block-processing latency by 3%. Enable it with
--engine.sender-recovery-cache(#26494). - Added an opt-in transaction-pool prewarming to pipeline transaction ingestion with block execution, reducing mean mainnet block-processing latency by 7%. Enable it with
--engine.txpool-prewarming; it is enabled by default only in nightly Docker builds (#26378, #26493). - Avoided proof-worker cursor overlays when the sparse trie already covers the required persisted state (#25952).
- Parallelized sparse-trie pruning retention-set construction and removed unnecessary LFU retention bookkeeping (#26439).
- Removed sparse-trie memory accounting from hot paths where repeated size estimation added unnecessary work (#26458).
- Kept five recent blocks in memory by default to reduce repeated state reconstruction (#26462).
- Centralized overlay anchoring to reduce duplicate Engine and persistence work (#26580).
Update Priority
| User Class | Priority |
|---|---|
| Payload Builders | Medium |
| Non-Payload Builders | Medium |
Breaking Changes
SDK and Storage APIs
- Reorganized storage-overlay APIs: renamed
StateTrieOverlayManagertoOverlayManagerand moved it,OverlayBuilder,OverlayStateProvider, andOverlayStateProviderFactoryto the newreth-storage-overlaycrate.ChangesetCacheis now internal rather than a public import (#26506, #26522, #26611). - Changed
PayloadValidator::validate_block_post_execution_with_hashed_stateto take state updates by value and receive the resolved parent header. Custom validators overriding this method must update their signatures (#26398, #26420). - Removed public changed-path tracking fields and methods from payload and sparse-trie APIs (#26403).
- Removed
ConsistentDbViewfromreth-provider(#26581). - Removed the
reth-rpc-api-testing-utilcrate (#26393).
Features
Networking and P2P
- Added real snap/2 account-range, storage-range, and bytecode serving, including boundary proofs (#26339).
- Added support for discv5 ENR records in
--bootnodes,--trusted-peers, andpeers.trusted_nodes(#26448). - Added bootnode configuration to
reth.toml, with CLI configuration taking precedence (#26551). - Added configurable no-op client-version handling for network connections (#26652).
- Added blob-cell availability tracking to the transaction pool (#25463).
RPC
- Added
eth_getMultiProofto retrieve consolidated EIP-1186 proofs for multiple account and storage targets (#26555). - Added
debug_getRawBlockAccessListfor retrieving the RLP-encoded EIP-7928 block access list (#26438). - Reused a single EVM during block replay tracing, fixing downstream chains with block-scoped EVM state and avoiding redundant EVM construction (#26614).
- Added network-specific log response conversion for downstream chain implementations (#26491).
- Allowed execution-witness requests to use any
BlockId(#26572). - Made the testing RPC handler generic over node-specific types (#26547).
- Made IPC message decoding linear-time for large Engine API payloads instead of repeatedly scanning the entire buffered message (#26540).
Engine, Payload Building and Amsterdam
- Allowed payload construction on canonical ancestors at or above finality, while rejecting reorgs below the finalized block with
-38006(#26567). - Added REST-SSZ blob-body witness containers and SSZ proxy support (#26328, #26335).
- Added configurable development finality depth (#26451).
- Exposed Engine thread resource-usage metrics (#26459).
CLI, ERA and Snapshots
- Added
import-era --with-receiptsto restore missing receipt static files from.era1or.erearchives (#26436). - Added
reth download --print-plan-jsonfor inspecting modular snapshot download plans without modifying the data directory (#26480). - Added per-chunk snapshot paths so manifests can reference immutable tip archives (#26576).
- Added customizable dev-mode defaults for downstream node implementations (#26488).
- Allowed ExEx instances to catch up to the current chain head after being paused (#26474).
Trie, Storage and Partial Persistence
- Added partial trie unwind support and a partial-persistence completion checkpoint (#26543, #26447).
- Added split-frontier and trie-only block persistence support (#26521, #26535).
- Added sparse-trie epoch pruning and pruning-duration metrics (#26485, #26470).
- Exposed the payload state-root receiver for downstream integrations (#26431).
Bug Fixes
Security and Networking
- Bound the devp2p
Helloidentity to the authenticated ECIES peer identity, preventing peers from presenting a different node ID after the encrypted handshake (#26639). - Rejected message IDs outside a negotiated subprotocol’s declared range (#26654).
- Restored DNS discovery for long EIP-1459 records by correctly joining multi-string TXT responses (#26602).
- Skipped unrelated TXT records during DNS discovery (#26603).
- Kept ENR ports paired with the correct IPv4 or IPv6 address (#26529).
- Advertised fork ENR data for custom-chain discv5 networks (#26449).
- Recovered partial header responses and returned an empty response for unsupported
GetNodeDatarequests (#26482, #26513).
Engine and Trie
- Deferred destructive persistence handoff until active payload-building jobs release their overlay leases (#26559).
- Prevented reused sparse-trie coverage anchors from moving backwards before persistence catches up (#26422).
- Avoided marking unchanged empty storage tries as deleted (#26526).
- Retained required sparse-trie branch children during pruning (#26376).
- Supported partial persistence in the changeset cache and propagated proof-worker startup failures (#26612, #26545).
RPC and Txpool
- Honored
targetGasLimitintesting_buildBlockV1(#26632). - Capped implicit
eth_simulategas limits and aligned debug trace error codes (#26502, #26479). - Stopped cancelled payload-body requests instead of continuing background work (#26546, #26569).
- Allowed transaction senders whose account contains the canonical empty code hash, matching EIP-3607 semantics (#26644).
- Included block numbers in pruned-history errors (#26550).
Pruning, Storage and Snapshots
- Fixed startup crash loops for snapshot-restored nodes using distance- or block-based pruning (#26565).
- Prevented history prune checkpoints from moving backwards during static-file walks (#26505).
- Correctly handled account- and storage-history prune checkpoints when validating overlay anchors (#26475, #26476).
- Downloaded sufficient history when the final modular snapshot chunk is partial (#26607).
Backwards Compatibility
Important
After running v2.5.x, downgrade to v2.4.1 if a rollback is required.
Compatible versions
- revm: 42.0.1
- alloy core: 1.6.1
- alloy crates: 2.3.0
- alloy-evm: 0.38.0
- revm-inspectors: 0.42.0
- alloy-eip7928: 0.4.5
Full Changelog: v2.4.0...3a83ccc
Binaries
See pre-built binaries documentation.
The binaries are signed with the PGP key: 50FB 7CC5 5B2E 8AFA 59FE 03B7 AA5E D56A 7FBF 253E
Reth
| System | Architecture | Binary | PGP Signature |
|---|---|---|---|
| x86_64 | reth-v2.5.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.5.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.5.0-aarch64-apple-darwin.tar.gz | PGP Signature | |
| Docker | paradigmxyz/reth | - |
