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).
EthBuiltPayloadnow stores the recovered block instead of a sealed-only block, keeping recovered sender data available to downstream payload users (#24403).TransactionPool::mark_invalidnow takes an ownedInvalidPoolTransactionErrorinstead 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-statebehindStateTrieOverlayManager; 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 unimplementeddebug_executePayloadtrait 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_simulatestate-root support and improved BAL handling in RPC state caching (#24564, #24037, #24079). - Made
eth_getProofcompatible with geth-style zero hashes for non-existent accounts (#24360). - Added support for
Ethcapabilities 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_containsas the inverse ofretain_unknown, retaining only hashes already present in the pool (#24482).
Storage, CLI & Tooling
- Added MDBX-to-RocksDB migration support and storage v2 imports (#24230, #24126).
- Added BAL store retention, notifications, pruning, flushing, bulk inserts, and cache sizing (#23873, #23918, #24023, #24066, #24071, #24002).
- Added
reth download --force, pipeline-stage disabling, database/RPC metrics toggles, and startup pruning-mode logging (#24229, #24436, #24806, #24803, #24367).
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::ZEROas a non-existent-account marker when deserializing EIP-1186 proofs from geth-compatible sources (#24359). - Fixed
eth_simulategas defaults, fee defaults, block hash exposure, fork handling, precompile self-moves, blocking IO guards,maxUsedGasreporting, 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).
