github paradigmxyz/reth v2.5.0
Reth v2.5.0

6 hours ago

image

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 StateTrieOverlayManager to OverlayManager and moved it, OverlayBuilder, OverlayStateProvider, and OverlayStateProviderFactory to the new reth-storage-overlay crate. ChangesetCache is now internal rather than a public import (#26506, #26522, #26611).
  • Changed PayloadValidator::validate_block_post_execution_with_hashed_state to 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 ConsistentDbView from reth-provider (#26581).
  • Removed the reth-rpc-api-testing-util crate (#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, and peers.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_getMultiProof to retrieve consolidated EIP-1186 proofs for multiple account and storage targets (#26555).
  • Added debug_getRawBlockAccessList for 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-receipts to restore missing receipt static files from .era1 or .ere archives (#26436).
  • Added reth download --print-plan-json for 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 Hello identity 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 GetNodeData requests (#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 targetGasLimit in testing_buildBlockV1 (#26632).
  • Capped implicit eth_simulate gas 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 -

Don't miss a new reth release

NewReleases is sending notifications on new releases.