This release lays the groundwork for Amsterdam (EIP-7928 Block Access Lists), introducing a BAL store abstraction, P2P wire support for fetching BALs alongside full blocks, payload-builder integration, and parallel/batched BAL execution paths. It also enables Discv5 by default, adds snap/2 wire helpers, and bounds the memory footprint of the P2P transaction manager and network channels. Numerous performance improvements land in the trie, database, and re-execution paths, alongside a broad set of correctness fixes in the engine, RPC, networking, and CLI layers.
Action Required: Discv5 is now enabled by default (#23686). If you previously relied on Discv4-only behaviour, review your CLI/config flags. BAL parallel execution and storage prefetch are gated behind CLI flags and are off by default (#23764, #23770).
Backwards Compatibility
Important
In case you need to downgrade after running 2.2.x, please downgrade to v2.1.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.
Features
Engine & Payload
- Suppress persistence during payload building to reduce contention (#23618)
- Enabled BAL building in the Ethereum payload builder (#23597)
- New CLI flag to disable BAL storage prefetch (#23770)
- Added
DecodedBaltoExecutionEnv(#23675)
P2P / Networking
- Discv5 is now enabled by default (#23686)
- Support binding Discv5 and Discv4 to the same port (#23613)
- Customizable discovery defaults (#23843)
- Memory-bounded channel between network and transaction manager (#23802)
- Bound memory footprint of P2P messages (#23718)
- Avoid RLP-decoding
NewBlockpayloads to save CPU (#23712) - Added
snap/2wire helpers and messages (#23611) - Optionally fetch BAL with full blocks over P2P (#23629)
- Added BAL requirement to block access list requests (#23682)
- Enforce BAL response soft limit (#23725)
- Added basic in-memory BAL store (#23710)
- Added BAL request e2e coverage (#23727)
- Scaffolded BAL store abstraction (#23596)
Performance
- Skip DB seek on exact overlay hits (#23559)
- Pass
ExecutedBlockstoOverlayBuilderto reduce reverts queried (#23657) - Prebind cursor operation metrics for hot DB paths (#23654)
- Avoid reopening
.csoffon every changeset lookup (#23687) - Spawn BAL hashed state before storage prefetch (#23761)
- Enable
p256-aws-lc-rsfeature in revm for faster P-256 (#23721) - Configurable RocksDB block cache size and re-use of MDBX provider in re-execute (#23701)
- Platform-specific
RUSTFLAGSin Dockerfile (#23738) - Added BAL parallelization and batch I/O flags (#23663)
Storage / Database
- Detect and warn about ZFS filesystems (#23685)
- Replaced deprecated
MDBX_NOTLSwithMDBX_NOSTICKYTHREADS(#23378)
SDK
- Encapsulate state fetching in DB provider (#23656)
- Use overlay builders in historical state paths (#23667)
- Removed
TrieNodeProvider(#23658) - Unified opaque consensus error helpers (#23669)
- Let consensus impls control which errors are transient (#23668)
- Expose executor transaction result type (#23759)
- Return gas output from block builder (#23744)
- Verify reverts against changesets in re-execute (#23717)
Bug Fixes
Engine
- Apply finalized state after syncing FCU head import (#23838)
- Configure invalid header cache hit eviction (#23670)
- Properly handle selfdestructed storage slots in re-execute (#23832)
- Disable read tx timeout in re-execute (#23680)
- Track Amsterdam block gas in payload builders (#23743)
RPC
- Narrow
eth_getLogsretry range (#23818) - Include block numbers in
BlockRangeExceedsHeaderror (#23720) - Clean up
ethstate cache reorg entries (#23683)
Networking
- Apply count cap to
BlockAccessListsrequest handler (#23754) - Respect peer requirements for fetch followups (#23706)
- Retain active session buffer capacity (#23702)
- Track unknown tx types in announcement metrics (#23688)
- Use a
Weakreference in Discv5 kbuckets background task to release the port on shutdown (#23282)
Trie & Storage
- Account for heap-allocated blinded hashes in
SparseNode::memory_size(#23726) reth db migrate-v2works for pruned nodes (#23716)- Skip
move_to_static_filesforstorage.v2(#23814) - Move unix deps section after strum in
Cargo.toml(#23697)
CLI
- Avoid
u64underflow insetup_without_evmfor the genesis-block header (#23728) - Preserve
trusted_nodes_onlyfrom config when--trusted-onlyis not set (#23703) - Use node types in execution stage dump (#23705)
- Use
TxTyandReceiptTyfor static-file db get (#23692)
Era / Export
- Align ERA1 export with spec (#23693)
Dependencies
Compatible versions:
- revm: 38.0.0
- alloy-*: 2.0.4
- alloy-evm: 0.34.0
- revm-inspectors: 0.39.0
Notable bumps:
- Bump alloy crates to 2.0.4 (#23828)
- Bump alloy-evm to 0.33.3 (#23778)
- Bump alloy crates to 2.0.1 (#23677)
- Bump rustls-webpki (#23681)
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.2.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.2.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| x86_64 | reth-v2.2.0-x86_64-apple-darwin.tar.gz | PGP Signature | |
| aarch64 | reth-v2.2.0-aarch64-apple-darwin.tar.gz | PGP Signature | |
| Docker | paradigmxyz/reth | - |
Full Changelog: v2.1.0...v2.2.0
