github paradigmxyz/reth v2.3.0
Reth v2.3.0

4 hours ago

image

Reth v2.3.0 continues the Amsterdam / Block Access List rollout with expanded BAL validation, storage, networking, RPC, and payload-builder support. The release also adds SSZ proxy coverage for Engine API methods, ERE file support, eth_pendingTransactions, debug account-state RPC endpoints, eth_baseFee, and snapshot overwrite support for reth download --force.

This release includes several payload, engine, trie, and transaction-pool performance improvements, including parallel execution work, BAL prewarming, faster proof and trie paths, cheaper transaction-pool insertion, and reduced payload-building overhead. It also fixes important correctness issues in eth_simulate, proof deserialization, chain-state overlay handling, RLPx buffering, BAL validation, and RocksDB/MDBX handling.

Action Required: SDK users with custom payload, transaction pool, or consensus integrations should review the breaking changes below. Node operators using default configurations do not need migration steps.

Backwards Compatibility

Important

In case you need to downgrade after running 2.3.x, please downgrade to v2.2.0.

Update Priority

This table provides priorities for which classes of users should update particular components.

User Class Priority
Payload Builders Medium
Non-Payload Builders Medium

See Update Priorities for more information about this table.

Dependencies

Compatible versions:

revm: 40.0.3
alloy-*: 2.0.5
alloy core crates: 1.6.0
alloy-evm: 0.36.0
revm-inspectors: 0.40.1

Breaking Changes

SDK

  • Custom built payload types now convert directly into execution data, avoiding reconstruction from sealed blocks during local payload submission (#23928).
  • EthBuiltPayload now stores the recovered block instead of a sealed-only block, keeping recovered sender data available to downstream payload users (#24403).
  • TransactionPool::mark_invalid now takes an owned InvalidPoolTransactionError instead of a reference, allowing invalid transaction errors to cross thread boundaries cleanly (#24121).
  • Consensus opaque error handling uses a single Other(Arc<dyn Error + Send + Sync>) path with constructor and downcast helpers (#23669).
  • State hooks are now configured at the State<DB> level, ensuring everything committed to the database is propagated to the hook (#24654).
  • In-memory state trie overlay ownership moved into reth-chain-state behind StateTrieOverlayManager; provider/tree wiring resolves managed overlays instead of carrying lazy overlay handles through engine state (#24184).

RPC

  • Removed stale geth-style debug_ profiling endpoints that only returned no-op responses, along with the unimplemented debug_executePayload trait surface (#24284).

Features

Engine & Payload

  • Expanded Block Access List support across payload building, reorg head creation, payload bodies, payload ranges, and block RLP payloads (#24128, #24147, #24153, #24177).
  • Added SSZ proxy support for Engine API capabilities, identity, forkchoiceUpdated, and blob methods (#23936, #24887, #24906).
  • Passed execution data directly through the debug consensus client provider path and added block access list payload conversion for RPC-backed debug providers (#23969, #23989).
  • Added target gas limit payload attributes and cached parent block info for payload jobs (#24502, #24671).
  • Made payload-builder state pre-caching from canonical notifications optional via BasicPayloadJobGeneratorConfig, enabled by default (#24670).

RPC

  • Added eth_pendingTransactions, eth_baseFee, debug account-state endpoints, and builder submission v6 validation (#24286, #24050, #24296, #24170).
  • Added eth_simulate state-root support and improved BAL handling in RPC state caching (#24564, #24037, #24079).
  • Made eth_getProof compatible with geth-style zero hashes for non-existent accounts (#24360).
  • Added support for Eth capabilities per execution-apis#755 (#24298).

P2P & Networking

  • Added eth/72, cell request/response handling, shared cell custody, and optional BAL fetching for block ranges (#24012, #24041, #24129, #24364, #23779).
  • Added outbound peer rotation to avoid slot saturation (#24776).
  • Added TransactionPool::retain_contains as the inverse of retain_unknown, retaining only hashes already present in the pool (#24482).

Storage, CLI & Tooling

Performance

  • Added parallel execution support and BAL prewarming improvements (#23924, #25003).
  • Improved trie, proof, cursor, and state-root hot paths (#24301, #24354, #24432, #24442).
  • Reduced transaction-pool overhead with specialized same-origin batch insertion and preallocated propagation/reorg structures (#25037, #24554, #24555).

Bug Fixes

RPC, Trie & Simulation

  • Accepted B256::ZERO as a non-existent-account marker when deserializing EIP-1186 proofs from geth-compatible sources (#24359).
  • Fixed eth_simulate gas defaults, fee defaults, block hash exposure, fork handling, precompile self-moves, blocking IO guards, maxUsedGas reporting, and parent beacon block root handling (#24386, #24387, #24388, #24503, #24567, #24705, #24724, #23983, #24652).

Engine, Chain State & Networking

  • Fixed chain-state overlay cache deadlock and deferred trie data publication (#24875, #24995).
  • Fixed BAL validation, persistence, gas admission, and payload range behavior (#24107, #24122, #24084, #24087).
  • Bounded RLPx mux outbound buffering fairly and fixed several peer/BAL request validation paths (#25031, #24113, #24406).

Don't miss a new reth release

NewReleases is sending notifications on new releases.