Releases: paradigmxyz/reth
Release list
Reth v2.5.2
Maintenance Release
- Recovers ExEx WALs with non-contiguous file IDs, preventing startup failures after finalization leaves gaps.
- Allows networks with dynamically scheduled forks to update their advertised fork filter without restarting.
- Improves RocksDB open-file limit handling and includes rejected block hashes in stage error logs.
Update Priority
| User Class | Priority |
|---|---|
| Payload Builders | High |
| Non-Payload Builders | High |
Full Changelog: v2.5.1...v2.5.2
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.5.2-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.5.2-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.5.2-aarch64-apple-darwin.tar.gz | PGP Signature | |
| Docker | paradigmxyz/reth | - |
Reth v2.5.1
Maintenance Release
- Finalizes pending payload builds when resolved early, preserving accumulated work instead of discarding it.
- Correctly handles whole-storage trie wipes during batched persistence.
Update Priority
If you are running on a low-core machine (<5 cores), the update is mandatory as it fixes a regression.
| User Class | Priority |
|---|---|
| Payload Builders | Medium |
| Non-Payload Builders | Medium |
All Changes
- feat(payload): finalize pending build on resolve (#26759)
- fix(provider): handle storage wipes in batched persistence (#26750)
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.5.1-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.5.1-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.5.1-aarch64-apple-darwin.tar.gz | PGP Signature | |
| Docker | paradigmxyz/reth | - |
Reth v2.5.0
Reth v2.5.0 improves execution performance across the board. Release regression testing against v2.4.1 measured 5-10% lower mean block-processing latency, especially in long-tail workloads.
Performance
- Added an opt-in sender recovery cache shared across transaction paths, reducing mean mainnet block-processing latency by 3%. Enable it with
--engine.sender-recovery-cache(#26494). - Added an opt-in transaction-pool prewarming to pipeline transaction ingestion with block execution, reducing mean mainnet block-processing latency by 7%. Enable it with
--engine.txpool-prewarming; it is enabled by default only in nightly Docker builds (#26378, #26493). - Avoided proof-worker cursor overlays when the sparse trie already covers the required persisted state (#25952).
- Parallelized sparse-trie pruning retention-set construction and removed unnecessary LFU retention bookkeeping (#26439).
- Removed sparse-trie memory accounting from hot paths where repeated size estimation added unnecessary work (#26458).
- Kept five recent blocks in memory by default to reduce repeated state reconstruction (#26462).
- Centralized overlay anchoring to reduce duplicate Engine and persistence work (#26580).
Update Priority
| User Class | Priority |
|---|---|
| Payload Builders | Medium |
| Non-Payload Builders | Medium |
Breaking Changes
SDK and Storage APIs
- Reorganized storage-overlay APIs: renamed
StateTrieOverlayManagertoOverlayManagerand moved it,OverlayBuilder,OverlayStateProvider, andOverlayStateProviderFactoryto the newreth-storage-overlaycrate.ChangesetCacheis now internal rather than a public import (#26506, #26522, #26611). - Changed
PayloadValidator::validate_block_post_execution_with_hashed_stateto take state updates by value and receive the resolved parent header. Custom validators overriding this method must update their signatures (#26398, #26420). - Removed public changed-path tracking fields and methods from payload and sparse-trie APIs (#26403).
- Removed
ConsistentDbViewfromreth-provider(#26581). - Removed the
reth-rpc-api-testing-utilcrate (#26393).
Features
Networking and P2P
- Added real snap/2 account-range, storage-range, and bytecode serving, including boundary proofs (#26339).
- Added support for discv5 ENR records in
--bootnodes,--trusted-peers, andpeers.trusted_nodes(#26448). - Added bootnode configuration to
reth.toml, with CLI configuration taking precedence (#26551). - Added configurable no-op client-version handling for network connections (#26652).
- Added blob-cell availability tracking to the transaction pool (#25463).
RPC
- Added
eth_getMultiProofto retrieve consolidated EIP-1186 proofs for multiple account and storage targets (#26555). - Added
debug_getRawBlockAccessListfor retrieving the RLP-encoded EIP-7928 block access list (#26438). - Reused a single EVM during block replay tracing, fixing downstream chains with block-scoped EVM state and avoiding redundant EVM construction (#26614).
- Added network-specific log response conversion for downstream chain implementations (#26491).
- Allowed execution-witness requests to use any
BlockId(#26572). - Made the testing RPC handler generic over node-specific types (#26547).
- Made IPC message decoding linear-time for large Engine API payloads instead of repeatedly scanning the entire buffered message (#26540).
Engine, Payload Building and Amsterdam
- Allowed payload construction on canonical ancestors at or above finality, while rejecting reorgs below the finalized block with
-38006(#26567). - Added REST-SSZ blob-body witness containers and SSZ proxy support (#26328, #26335).
- Added configurable development finality depth (#26451).
- Exposed Engine thread resource-usage metrics (#26459).
CLI, ERA and Snapshots
- Added
import-era --with-receiptsto restore missing receipt static files from.era1or.erearchives (#26436). - Added
reth download --print-plan-jsonfor inspecting modular snapshot download plans without modifying the data directory (#26480). - Added per-chunk snapshot paths so manifests can reference immutable tip archives (#26576).
- Added customizable dev-mode defaults for downstream node implementations (#26488).
- Allowed ExEx instances to catch up to the current chain head after being paused (#26474).
Trie, Storage and Partial Persistence
- Added partial trie unwind support and a partial-persistence completion checkpoint (#26543, #26447).
- Added split-frontier and trie-only block persistence support (#26521, #26535).
- Added sparse-trie epoch pruning and pruning-duration metrics (#26485, #26470).
- Exposed the payload state-root receiver for downstream integrations (#26431).
Bug Fixes
Security and Networking
- Bound the devp2p
Helloidentity to the authenticated ECIES peer identity, preventing peers from presenting a different node ID after the encrypted handshake (#26639). - Rejected message IDs outside a negotiated subprotocol’s declared range (#26654).
- Restored DNS discovery for long EIP-1459 records by correctly joining multi-string TXT responses (#26602).
- Skipped unrelated TXT records during DNS discovery (#26603).
- Kept ENR ports paired with the correct IPv4 or IPv6 address (#26529).
- Advertised fork ENR data for custom-chain discv5 networks (#26449).
- Recovered partial header responses and returned an empty response for unsupported
GetNodeDatarequests (#26482, #26513).
Engine and Trie
- Deferred destructive persistence handoff until active payload-building jobs release their overlay leases (#26559).
- Prevented reused sparse-trie coverage anchors from moving backwards before persistence catches up (#26422).
- Avoided marking unchanged empty storage tries as deleted (#26526).
- Retained required sparse-trie branch children during pruning (#26376).
- Supported partial persistence in the changeset cache and propagated proof-worker startup failures (#26612, #26545).
RPC and Txpool
- Honored
targetGasLimitintesting_buildBlockV1(#26632). - Capped implicit
eth_simulategas limits and aligned debug trace error codes (#26502, #26479). - Stopped cancelled payload-body requests instead of continuing background work (#26546, #26569).
- Allowed transaction senders whose account contains the canonical empty code hash, matching EIP-3607 semantics (#26644).
- Included block numbers in pruned-history errors (#26550).
Pruning, Storage and Snapsho...
Reth v2.4.1
Latest Release
This patch release is for alloy dependency updates.
Update Priority
This table provides priorities for which classes of users should update particular components.
| User Class | Priority |
|---|---|
| Payload Builders | High |
| Non-Payload Builders | High |
See Update Priorities for more information about this table.
All Changes
- chore: remove release formatting noise
- chore(deps): bump alloy core 1.6.1 (#26419)
- chore: release 2.4.1
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.4.1-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.4.1-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.4.1-aarch64-apple-darwin.tar.gz | PGP Signature | |
| Docker | paradigmxyz/reth | - |
Reth v2.4.0
Performance
Reth v2.4.0 reduces mean newPayload latency by 6.2% compared with v2.3.0.
Experimental revmc JIT EVM support is added and can be activated with --jit.enabled flag.
Networking and transaction propagation get a large set of throughput-oriented improvements: faster pooled transaction recovery (#26304), cached full transaction propagation encoding (#26012), and multiple ECIES / P2PStream allocation reductions.
Features
We continue with Amsterdam and EIP-7928 Block Access List development.
reth p2p bootnode --v5 now co-locates discv4 and discv5 on a single UDP port (--addr), matching go-ethereum and reth's own networking stack, with IPv4/IPv6 support (#26089)
RPC compatibility was improved with eth_sendRawTransactionSync timeout support, geth-aligned raw transaction handling, empty-proof normalization for eth_getProof, and several eth_simulate, eth_estimateGas, fee-history, and txpool fixes.
ParallelStateRoot deprecation
SDK/library users that depend on trie internals should update usages of ParallelStateRoot, ParallelSparseTrie, and ParallelStateRootError that were removed in this version.
Deployments still passing --engine.legacy-state-root should remove it or use --engine.state-root-fallback if they intentionally need synchronous state-root computation.
Update Priority
This table provides priorities for which classes of users should update particular components.
| User Class | Priority |
|---|---|
| Payload Builders | High |
| Non-Payload Builders | High |
Breaking Changes
Runtime / Configuration
- Dropped the legacy parallel state-root runtime path;
--engine.legacy-state-rootis hidden and now only warns if passed, with the sparse trie task as the normal path and serial fallback retained (#26069).
SDK / State Root APIs
- Refactored state-root strategy APIs to support custom out-of-tree state-root implementations (#26085).
- Removed
ParallelStateRoot; downstream users should migrate to the sparse trie task or the serial fallback path (#26121). - Renamed
ParallelStateRootErrortoStateRootTaskError(#26132). - Removed
ParallelSparseTrie;ArenaParallelSparseTrieis now the default sparse trie implementation used by engine sparse-trie paths (#25453). - Changed
PayloadValidator::validate_block_post_execution_with_hashed_stateto receive a lazy overlay-aware parent-state provider and returnPostExecutionValidationError; custom implementations overriding this method must update their signatures (#26330).
Features
Performance
- Added experimental
revmcJIT support for Ethereum EVM execution, including--jitnode flags andreth_jitdebug controls (#23230). - Made JIT opt-in for library crates and fixed JIT CLI/helper handling (#25178, #25183, #25413).
- Reduced transaction conversion latency by emitting recovered transactions in ordered windows instead of waiting on a large Rayon ordered iterator (#25783).
- Avoided full block clones in FCU, RPC cache, and ExEx paths by storing and exposing
Arc<RecoveredBlock>handles inChain(#25645, #25647). - Optimized state-root and storage-history work with better
update_leavesparallelism, parallelwrite_storage_history, and more aggressive sparse trie caching. (#24774, #25282, #25428). - Reduced BAL execution overhead by using unordered transaction iteration for BALs, buffering BAL execution cache metrics, and avoiding unnecessary hashed-account reads (#25411, #25366, #25369).
- Offloaded metric rendering and added worker queue / provider metric improvements (#26180, #25649, #25481).
- Routed raw transaction submission through
PoolTransaction::recover_raw_transaction, allowing custom pool transaction types to recover directly from encoded bytes (#25238).
Networking & P2P
- Added snap/2 support across negotiation, dedicated eth + snap/2 streams, SnapClient BAL APIs, snap message helpers, the snap client, and inbound snap/2 request routing (#25774, #25752, #25607, #25608, #26049, #26324).
- Improved bootnode reachability by supporting NAT advertisement and dual-stack discv5 addresses, then running discv4 and discv5 on the same UDP port (#25757, #26089).
- Optimized transaction propagation and devp2p decoding with cached full transaction encodings, lower allocation transaction list decodes, preallocated pooled hash metadata, and same-poll pending transaction propagation (#26012, #26164, #26145, #25087).
- Reduced ECIES and P2PStream overhead by caching AES key schedules, reusing snappy buffers, batching flushes, raising the write flush boundary, and avoiding redundant zero-fill/copy work (#26346, #26347, #26349, #26348, #26120, #26119).
RPC
- Added
eth_sendRawTransactionSynctimeout support matching EIP-7966-style timeout behavior (#25682). - Added
engine_hasBlobsso consensus clients can check ordered blob availability without fetching blob/proof payloads (#25589). - Added
debug_clearTxpoolfor geth-compatible testing and debugging workflows (#25588). - Added
admin_banPeerandadmin_unbanPeermethods (#25140). - Added the
EthSubscriptionstrait for logs and header streams (#22155). - Added testing RPC helpers for committing and building blocks (#25070, #25750).
Engine, Payload & Amsterdam
- Added SSZ Engine API payload and forkchoice status containers, plus SSZ proxy wiring (#26133, #26271, #25422).
- Validated Block Access Lists during
flashbots_validateBuilderSubmissionV6and stored validated payload BALs (#24297, #25268). - Added BAL-capable download client requirements (#25266).
CLI, ERA & Snapshots
- Added ERE export and extended ERE import through stage sync (#25304, #25262).
- Improved
.eraimport handling by supporting ERA file imports, decoding execution blocks from consensus.erablocks, avoiding misreading consensus.eraas era1, and accepting local filename variants (#25404, #25582, #25603, #26006). - Added
import-erasupport for ERE.eraefiles and explicitly rejected unsupported.eraexport paths (#25122, #25576). - Supported file archives in modular snapshots and exposed
SlotPreimagesfor snapshot importers (#26078, #25035). - Allowed overriding
TraceArgsdefaults and added node command helpers (#25736, #25273).
Pruning & Storage
- Added row-budgeted dupsort pruning and used static-file transa...
Reth v2.3.0
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).
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 path...
Reth v2.2.0
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](https://github.com/paradigmxyz/reth/releases/download/v2.2.0/reth-v2.2.0-x86_64-apple-darw... |
Reth v2.1.0
Important
alloy-evm bump fixes an issue where gas refunds issued by custom precompiles were not accounted for. If your network was setting gas_refunded field to a non-zero value for any precompile, its behaviour might change.
Storage v2 Migration
This release includes a reth db migrate-v2 command that can be used to migrate from Storage v1 to Storage v2 without a full resync. For Ethereum Mainnet, Reth team provides new snapshots, other chains based on Reth SDK can use the new CLI for migrating to new storage format.
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.
Breaking Changes
SDK
- Bumped revm to v38 with EIP-8037 state gas support (#23191)
- Bumped alloy to 2.0.0 (#23407)
- Decoupled
CachedStateMetricsfromSavedCache(#23552) WorkerPoolis now lazy by default (#23627)- Support modifying
next_available_nonce_for(#23409)
Dependencies
Compatible versions:
revm: 38.0.0
alloy-*: 2.0.0
alloy-evm: 0.33.0
revm-inspectors: 0.39.0
Highlights
Bug Fixes
- Use
sync=truefor RocksDBWriteOptionsto prevent database corruption on ungraceful shutdown. (#23603)
Performance
- Parallel segmented snapshot downloads (#23028)
Storage
- Added
reth db migrate-v2for v1→v2 storage migration (#23422)
RPC
- Support
transactionReceiptssubscription ineth_subscribe#23485
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.1.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v2.1.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| x86_64 | reth-v2.1.0-x86_64-apple-darwin.tar.gz | PGP Signature | |
| aarch64 | reth-v2.1.0-aarch64-apple-darwin.tar.gz | PGP Signature | |
| Docker | paradigmxyz/reth | - |
Full Changelog: v2.0.0...v2.1.0
Reth v2.0.0
Reth 2.0 is a major release that makes Storage V2 the default for all new nodes, introduces the SparseTrieCacheTask for dramatically faster state root computation, and delivers across-the-board performance improvements to the engine, RPC, and P2P layers. This release also removes the deprecated reth-primitives crate and removes RocksDB feature gates (RocksDB is now always available).
Storage v2
Storage v2 is now the default for new nodes (#22890). Existing storage v1 nodes are unaffected and will continue to work.
For v2 snapshots, check out our renovated portal https://snapshots.reth.rs/.
We recommend downloading the snapshots with the --resumable flag, this will be enabled by default in the next release.
Note
Support for storage v1 nodes will be removed in a future version. An exact deprecation date will be communicated separately, all users are strongly encouraged to switch to storage v2.
Important
If you rely on out-of-process database access concurrently with a running reth node (e.g. out of process block builders), with storage v2 holding a long read transaction might result in persistence stall if a reorg happens at the same time. In combination with engine backpressure this might cause the node to stall if the external reader holds the read transaction for too long.
Backwards Compatibility
- If you start a new node with storage v2, you will not be able to use it with storage v1, and vice versa.
- Reth 2.0 includes engine backpressure. This is a safeguard that prevents unbounded growth of in-memory blocks buffer in cases when persistence is not able to keep up with the chain. When the gap between canonical tip and the last persisted block exceeds --engine.persistence-backpressure-threshold (default: 16), no new payloads are executed until persistence advances. For SDK users, TreeConfig::with_persistence_backpressure_threshold provides the same functionality.
reth-primitives-traitscrate was moved to a separatereth-corerepo, along with other supporting crates. We kept the re-exports, so it should not affect the code that uses Reth as a library. If you depend onreth-primitives-traitsdirectly, you need to switch to crates.io.- ExEx WAL encoding was changed from bincode to RLP for block serialization.
Dependencies
Compatible versions:
revm: 36.0.0
alloy-*: 1.8.2
alloy-evm: 0.30.0
revm-inspectors: 0.36.0
Update Priority
This table provides priorities for which classes of users should update particular components.
| User Class | Priority |
|---|---|
| Payload Builders | High |
| Non-Payload Builders | High |
See Update Priorities for more information about this table.
Breaking Changes
SDK
- Removed deprecated reth-primitives crate — use reth-ethereum-primitives instead (#23220)
- Removed SerdeBincodeCompat trait, use RLP for block serialization (#23158)
- Removed PayloadBuilderAttributes (#23202)
- Removed TaskSpawner trait in favor of concrete Runtime (#22052)
- Removed reth-engine-service crate (#22187)
- Removed IntoRpcTx — integrated reth-rpc-traits directly (#23288)
- Removed legacy proof code paths, simplified to V2-only (#22270)
- Removed changeset count APIs from storage (#23310)
- Replaced TryFrom*Response traits with unified RpcResponseConverter (#22320)
- Replaced reth-primitives-traits with reth-core deps (#23186, #23210)
- Used EthereumReceipt from alloy (#22254)
- Removed OP features from engine-local and payload-primitives (#23255, #23253)
Storage
- Storage V2 is the default for new nodes (#22890)
- Slot preimage DB for plain changeset keys in V2 (#22379)
Features
Performance
- SparseTrieCachTask: New background state root task which persists the trie across blocks (#21583)
- ArenaParallelSparseTrie: Arena-based parallel sparse trie implementation (#22381)
- Proof V2: Ground-up rewrite of merkle proof calculation used to populate data in the sparse trie. Supports partial proofs and cursor re-use (#19863, #20336)
- Engine backpressure: persistence-aware backpressure for pipeline throughput (#23280, #23308)
- Shared execution cache and sparse trie pipeline with payload builder (#23242, #23246)
- Jemalloc override_allocator_on_supported_platforms enabled (#23214)
- Adaptive multiproof chunk size based on block gas usage (#22233)
- Rayon par_iter for tx prewarming with dedicated pool (#22521, #22108)
- Lock-free for_each_ordered replaces channel+BTreeMap reorder (#22144)
- Precompute tx root during payload validation (#22489)
- Overlap block conversion with execution in payload validation (#21957)
- Concurrent block+receipt fetching in eth_feeHistory (#22826)
- Reduced redundant DB lookups for receipts (#22724)
- Pool read-only MDBX transaction handles to avoid reader table mutex (#22631)
- Size-based backpressure for session broadcast messages (#22849)
- Increased default concurrent outbound dials to 30 (#22744)
- Thread priority boosting for engine and sparse trie threads (#22541)
- StoredNibblesSubKey packed from 65→33 bytes (#22158)
- FastInstant (quanta) for metrics timing (#23265, #22211)
RPC
- debug_intermediateRoots (#22754)
- debug_traceBadBlock (#22719)
- debug_verbosity / debug_vmodule (#21497)
- eth_getStorageValues batch storage slot retrieval (#22186)
- reth_getBlockExecutionOutcome (#22397)
- reth_forkchoiceUpdated (#22536)
- reth_newPayload accepts RLP-encoded blocks (#22533)
- block_access_list_raw RPC (#23363)
- BAL RPC methods (#23330)
- Configurable minimum pruning distance (#23082)
- CLI args exposed as Prometheus metric (#22896)
CLI
- New reth-bb binary for multi-segment big block execution (#23140)
- Modular snapshot downloads with interactive TUI and config generation (#22246)
- reth db prune-checkpoints and reth db stage-checkpoints commands (#22288, #22579)
- --storage.v2 works without explicit true/false (#23173)
- --with-senders and --with-rocksdb niche presets (#22933)
- Snapshots API at snapshots.reth.rs with --list and --channel flags (#22859)
- File logging disabled by default for non-node commands (#21521)
- Storage V2 support in db state --block historical queries (#22670)
P2P
Reth v1.11.3
Latest Release
Important
This release replaces v1.11.x, and users must upgrade to v1.11.3
- fix(trie): panic in sparse trie proof workers
Update Steps
Nodes can be restarted using the new binary with no required update steps. Errors during payload validation may continue to be seen, but will not stall the node.
To fully fix errors such as those described in issue 22973, shut down the node and run:
reth db --datadir <datadir> repair-trieThis command will take up to 2 hours to complete for ethereum mainnet. Once complete, start reth node as normal.
Update Priority
This table provides priorities for which classes of users should update particular components.
| User Class | Priority |
|---|---|
| Payload Builders | High |
| Non-Payload Builders | High |
All Changes
- chore: release 1.11.3
- fix(trie): Reset proof v2 calculator on error (#22781)
- cherry-pick: fix don't produce both updates and removals for trie nodes (#22507)
- cherry-pick: install rayon panic handler (37f5b3a)
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-v1.11.3-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v1.11.3-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| x86_64 | reth-v1.11.3-x86_64-apple-darwin.tar.gz | PGP Signature | |
| aarch64 | reth-v1.11.3-aarch64-apple-darwin.tar.gz | PGP Signature | |
| Docker | paradigmxyz/reth | - |

