
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 (github.com) | PGP Signature | |
| aarch64 | reth-v2.2.0-aarch64-unknown-linux-gnu.tar.gz (github.com) | PGP Signature | |
| x86_64 | reth-v2.2.0-x86_64-apple-darwin.tar.gz (github.com) | PGP Signature | |
| aarch64 | reth-v2.2.0-aarch64-apple-darwin.tar.gz (github.com) | PGP Signature | |
| Docker | paradigmxyz/reth | - |
Full Changelog: v2.1.0...v2.2.0