Reth v2.3.0
- Version
v2.3.0- Repository
- paradigmxyz/reth
Release notes
Reth v2.3.0 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. In our benchmark, throughput improved from ~1.4 to ~1.5 Ggas/s, an 8.1% increase.
It also fixes important correctness issues in eth_simulate, proof deserialization, chain-state overlay handling, RLPx buffering, BAL validation, and RocksDB/MDBX handling.
This release continues the Amsterdam / Block Access List rollout with expanded BAL validation, storage, networking, RPC, and payload-builder support. It 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.
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…