
Reth v1.11.0 delivers massive state root performance gains, benchmarks show a ~25% reduction in mean newPayload latency (42.9ms → 32.4ms), ~27% improvement at P90 (72.4ms → 53.1ms), and +33% throughput (700M → 1G gas/s), through the new sparse trie as cache. Up-to-date performance metrics can be seen on the ethpandaops Labs dashboard. v1.11.0 also introduces an experimental hot/cold storage architecture, introduced via --storage.v2.
The headline feature of this release is sparse trie as cache (#21583): the sparse trie is now preserved across payload validations (#21534), eliminating redundant trie reconstruction on every newPayload, and allowing reuse of trie nodes in memory. Combined with parallel proof workers pool optimizations (#22051), integration with prewarming (#21901), parallel state hashing (#21836), and many allocation/scheduling optimizations, state root computation is dramatically faster.
The new --storage.v2 CLI flag (#21868) introduces an experimental hot/cold storage architecture that routes history indices and transaction hash lookups to RocksDB, and writes changesets to static files. This architecture also drops usage of reth's plain state tables (#21115). Below is the measured disk usage at block 24396823:
| Node Type | Pre v1.11 | v1.11 (v2) | Savings |
|---|---|---|---|
| Full | 1.46 TB | 1.02 TB | -30% |
| Minimal | 449 GB | 224 GB | -50% |
| Archive | 2.99 TB | 2.31 TB | -23% |
Note:
--storage.v2requires a fresh sync from scratch — it cannot be enabled on an existing node database. Public snapshots are available at snapshots.reth.rs to accelerate initial sync.
⚠️ Starting with v1.11.0, this release no longer includes vanilla op-reth binaries. op-reth has been fully removed from this repository (#21532) and now lives in its own dedicated repo. For OP Stack releases, please refer to OP Labs' announcement.
Backwards Compatibility
[!IMPORTANT] In case you need to downgrade after running 1.11.x, please downgrade to v1.10.2
Update Priority
This table provides priorities for which classes of users should update particular components.
| User Class | Priority |
|---|---|
| Payload Builders | High |
| Non-Payload Builders | Medium |
Breaking Changes
SDK
- Removed
reth-statelesscrate (#22115) - Removed
resscrates from workspace (#22057) - Removed
TypesAnd1-5staging types fromProviderFactoryBuilder(#22049) - Removed
SerialSparseTrie— always useParallelSparseTrie(#21808, #21435) - Use hashed state as canonical state representation (#21115)
- Merged
SparseTrieExtintoSparseTrietrait (#22035) - Removed op-reth from repository — it now lives in its own repo (#21532)
- Breaking dependency bumps: revm 34, alloy 1.6.3, alloy-evm 0.27.2 (#21584, #21337)
- Added
Blockassociated type toTransactionValidatortrait (#21359)
CLI
- Renamed
--engine.enable-sparse-trie-as-cacheto--engine.legacy-trie(#21851) - Removed
--edgefeature flag in favor of--storage.v2(#21868) - Removed Windows build and release support (#21902)
jemalloc,asm-keccak, andmin-debug-logsare now default features (#22034)
Features
Performance — Sparse Trie & State Root
- Sparse trie as cache: Preserve sparse trie across payload validations, eliminating redundant trie reconstruction (#21583, #21534)
- Dedicated rayon pool for proof workers, preventing contention with other parallel work (#22051)
- Send proofs directly from prewarming to multiproof task, cutting out intermediate buffering (#21901)
- Parallel state hashing for
HashedPostStateupdates (#21836) - Cache fetched proof targets in
SparseTrieCacheTaskto avoid redundant DB lookups (#21612) - Reuse proof nodes buffer in
reveal_nodes(#21648) - Reuse account RLP buffer in
SparseTrieCacheTask(#21644) - Avoid clearing already-cached sparse trie on repeated validations (#21702)
- Dispatch V2 storage proofs in lexicographical order for cache locality (#21684)
- Process state/prewarm updates directly without intermediate collection (#21768)
- Better scheduling for storage roots computation (#21987)
- Parallelize
merge_ancestors_into_overlayand COW extend operations (#21379, #21375) - Treat hashes as bytes in
BranchNodeCompactto avoid conversion overhead (#22089) - Use
TrieMaskiterator for efficient bit iteration (#21676) - Fix allocation hot paths with capacity hints and buffer reuse (#21466)
- Use
EntryAPI to avoid empty Vec allocations (#21645) - Add
memory_sizeheuristic forParallelSparseTrie(#21745)
Performance — Engine & Prewarming
- Fixed-cache for execution cache with O(1) lookups (#21128)
- Skip transaction prewarming for small blocks via transaction count threshold (#22094)
- Add
PrewarmMode::Skippedto avoid spawning idle workers on small blocks (#22066) - Sequential signature recovery for small blocks (#22077)
- Disable balance check for prewarming transactions (#21941)
- Use shared channel for prewarm workers (#21429)
- Optimistically prepare canonical overlay (#21475)
- Skip DB lookup for new blocks in
insert_block_or_payload(#21650) - Single-pass fold for
EvmStatemetrics collection (#21852) - Use biased select and prioritize engine events (#21556)
- Spawn proof workers in a separate thread to avoid tokio contention (#21780)
Performance — Persistence & DB
- Combine
save_blocksand prune into single MDBX commit (#21927) - Batch finalized/safe block commits with
SaveBlocks(#21663) - Use separate pool for
save_blocks(#21764) - Flatten
HashedPostStatebefore persisting (#21422) - Stack-allocate
ShardedKeyandStorageShardedKeyencoding (#21200) - Use
Cow::Borrowedinwalk_dupto avoid allocation (#21220) - Use
alloy_primitiveshasher for DashMaps (#21726) - Replace
RwLock<HashMap/HashSet>withDashMap/DashSet(#21692) - Switch to unstable sort where ordering guarantees aren't needed (#21803)
- Build Docker images for
target-cpu=x86-64-v3by default (#21761) - Reduce tracing span noise in prewarm and proof workers (#22101, #22044)
- Parallelize
into_sortedwith rayon (#21193) - RocksDB: increase write buffer size to 128 MB (#21696)
- RocksDB: disable compression and bloom filters for
TransactionHashNumbersCF (#21310)
RPC
- Add
subscribeFinalizedChainNotificationsendpoint (#22011) - Add EIP-7928
eth_getBalanceWithProofandeth_getAccountWithProof(#21720) - Add
getPayloadBodiesV2endpoint for EIP-7928 BAL support (#21774) - Stub Amsterdam engine API endpoints (
newPayloadV5,getPayloadV6, BALs) (#21344) - Add EIP-7934 block size validation to
testing_buildBlockV1(#21623) - Implement
movePrecompileToAddressforeth_simulateV1(#21414) - Respect history expiry in
eth_getLogsandblock()per EIP-4444 (#21304, #21270) - Add transaction hash caching to
EthStateCache(#21180) - Propagate
TransactionOriginthroughsend_transactionand batcher (#21969) - Make blob sidecar upcasting opt-in (#21624)
- Add EIP-7594 blob sidecar toggle for txpool (#21622)
P2P
- Enforce EIP-868 fork ID for discovered peers (#22013)
- Add inbound/outbound scopes for disconnect reasons and session metrics (#22070, #22014)
- Add reason label to
backed_off_peersmetric (#22009)
Engine
- State root task timeout with sequential fallback (#22004)
- Global tokio runtime for better resource sharing (#21934)
- Reorg depth commitment metric (#21992)
- Prefetch withdrawal addresses in pre-warming (#21966)
- Add wait duration metrics for execution and sparse trie caches (#21800)
- Finer-grained
newPayloadgas bucket metrics (#22136, #22067)
SDK
- Make backfill thresholds configurable for ExEx (#22037)
- Add
build_with_ordering_and_spawn_maintenance_tasktoTxPoolBuilder(#21979) - Add
is_transaction_readytoTransactionPooltrait (#21742) - Add public
prune_transactionsmethod toTransactionPool(#21765) - Add
DefaultPruningValuesfor overridable pruning defaults (#21207) - Allow setting custom debug block provider (#21345)
Bug Fixes
Engine
- Ensure block in memory before setting canonical head (#21693)
- Clear execution cache when block validation fails (#21282)
- Guard receipt streaming against duplicate indices (#21512)
- Only exit when both channels are drained (#21877)
RPC
- Enforce
blockHashconstraint inappend_matching_block_logs(#22007) - Validate
toBlockintrace_filter(#21718) - Consistent sidecar check in
fill_transactionfor EIP-7594 support (#21763) - Multiple
eth_simulateV1fixes: block timestamp/number validation, prevrandao, gas cap, error codes, log population (#21396, #21397, #21399, #21402, #21412, #21413)
P2P
- Correct
EthMessageID::maxfor eth70 and later versions (#22076) - Fix
FetchFullBlockRangeFuturegetting stuck after partial body fetch + error (#21411) - Limit pending pool imports for broadcast transactions (#21254)
All Changes
- fix(ci): pass docker tags as separate set entries in bake action (#22151)
- chore: allow invalid storage metadata (#22150)
- chore: release reth v1.11.0 (#22148)
- chore(storage): rm storage settings, use only one (#22042)
- feat(network): add inbound / outbound scopes for disconnect reasons (#22070)
- feat: bundle mdbx_copy as
reth db copysubcommand (#22061) - chore: fix book (#22142)
- feat(download): optional chain-aware snapshot url (#22119)
- docs: improve reth.rs/overview page (#22131)
- fix(engine): return error on updates channel disconnect in sparse trie task (#22139)
- feat(metrics): use 5M first gas bucket for finer-grained newPayload metrics (#22136)
- fix: improve nightly Docker build failure Slack notification (#22130)
- fix: stage drop prunes account/storage changeset static files (#22062)
- refactor(db): use hashed state as canonical state representation (#21115)
- perf(engine): use transaction count threshold for prewarm skip (#22094)
- chore: add DaniPopes as codeowner for tasks crate (#22128)
- feat(engine): add --engine.disable-sparse-trie-cache-pruning flag (#21967)
- chore(node): update misleading consensus engine log message (#22124)
- feat(reth-bench): add progress field to per-block benchmark logs (#22016)
- fix(net): correct EthMessageID::max for eth70 and later versions (#22076)
- feat(net): enforce EIP-868 fork ID for discovered peers (#22013)
- perf(engine): use sequential sig recovery for blocks with small blocks (#22077)
- chore: zero-pad thread indices in thread names (#22113)
- chore(stateless): Remove reth-stateless crate (#22115)
- chore(engine): remove biased select in engine service loop (#21961)
- chore(engine): downgrade failed response delivery logs to warn (#22055)
- fix(engine): add await_state_root span to timeout path (#22111)
- refactor(engine): remove unnecessary turbofish on CachedStateProvider, add new_prewarm (#22107)
- refactor(engine): move CachedStateProvider prewarm to const generic (#22106)
- chore: bump alloy-core deps (#22104)
- fix: move alloy-primitives to regular dependency in bin/reth (#22105)
- fix(tracing): return error instead of panicking on log directory creation failure (#22100)
- feat(docker): include debug symbols in maxperf images (#22003)
- fix(primitives): move feature-referenced deps from dev-dependencies to optional dependencies (#22103)
- feat(evm): impl ExecutableTxTuple for Either via EitherTxIterator (#22102)
- perf: reduce tracing span noise in prewarm and proof workers (#22101)
- feat(net): add reason label to backed_off_peers metric (#22009)
- test: add WebSocket subscription integration tests for eth_subscribe (#22065)
- revert: skip transaction prewarming for small blocks (#22059) (#22097)
- perf: treat hashes as bytes in BranchNodeCompact (#22089)
- perf: use dedicated trie rayon pool for proof workers (#22051)
- chore: add span and log to runtime build (#22064)
- test: expand CLI integration tests (#22086)
- feat(engine): add state root task timeout with sequential fallback (#22004)
- perf(engine): skip transaction prewarming for small blocks (#22059)
- perf(engine): add PrewarmMode::Skipped to avoid spawning idle workers (#22066)
- feat(cli): split account-history and storage-history stage drops (#22083)
- feat(engine): add gas bucket label to newPayload metrics (#22067)
- test: add CLI integration tests for reth binary (#22069)
- chore(cli): log received signals at info level (#22071)
- fix: don't drop node (#22063)
- chore: remove ress crates from workspace (#22057)
- feat(node/builder): add
build_with_ordering_and_spawn_maintenance_tasktoTxPoolBuilder(#21979) - feat(net): add direction labels to closed_sessions and pending_session_failures metrics (#22014)
- refactor: remove TypesAnd1-5 staging types from ProviderFactoryBuilder (#22049)
- refactor(trie): merge SparseTrieExt into SparseTrie trait (#22035)
- chore(docker): pass RUSTC_WRAPPER to cargo build in Dockerfile.depot (#22048)
- chore(log): simplify default profiler tracing filter (#22050)
- ci: pass --no-fail-fast to all cargo nextest runs (#22046)
- fix(node): ethstats conn/last_ping deadlock (#21463)
- feat: global runtime (#21934)
- fix(reth-bench): increase WS keepalive interval to match persistence timeout (#22039)
- refactor(storage): add
with_*_optbuilder methods toStorageSettings(#21998) - feat(reth-bench): accept bare integers as milliseconds for --wait-time (#22038)
- perf: downgrade on_hashed_state_update and on_prewarm_targets spans to trace (#22044)
- feat(exex): make backfill thresholds configurable (#22037)
- fix(txpool): correct swapped args in blob_tx_priority calls (#22030)
- perf(engine): implement BAL handler for SparseTrieCacheTask (#21990)
- chore: move jemalloc, asm-keccak, min-debug-logs to default features (#22034)
- fix(docker): fix sccache stats in Dockerfile.depot (#22033)
- feat(engine): add getPayloadBodiesV2 endpoints for EIP-7928 BAL support (#21774)
- ci: skip scheduled workflows on forks (#22022)
- chore: rm random log file (#22023)
- chore: remove base.reth.rs public endpoint references (#22019)
- feat(rpc): add
subscribeFinalizedChainNotificationsendpoint (#22011) - feat(trie): remove
SerialSparseTrie(#21808) - fix(rocksdb): set max_open_files to prevent fd exhaustion (#22005)
- refactor(txpool): rename and document validation methods (#22008)
- feat(engine): prefetch withdrawal addresses in pre-warming (#21966)
- refactor(pool): add IntoIter: Send bounds to avoid unnecessary Vec collect (#22001)
- fix(rpc): enforce blockHash constraint in append_matching_block_logs (#22007)
- chore: move Kurtosis failures to the hive slack channel (#21983)
- feat(rpc): propagate TransactionOrigin through send_transaction and batcher (#21969)
- feat(engine): reorg depth commitment metric (#21992)
- feat(storage): add use_hashed_state storage setting (#21997)
- perf: better scheduling for storage roots computation (#21987)
- chore(deps): bump alloy 1.6.2 -> 1.6.3 (#21986)
- fix(stages): skip sender unwind when fully pruned (#21988)
- chore(net): remove OP stack bootnodes (#21984)
- ci: use depot for hive and kurtosis image builds, run daily (#21976)
- feat(tracing): add jsonrpsee targets to profiling filter (#21981)
- feat(cli): rename enable-sparse-trie-as-cache to legacy-trie (#21851)
- chore(deps): bump alloy from 1.6.1 to 1.6.2 (#21974)
- chore(trie): Spans and traces for sparse trie (#21973)
- fix(trie): Do not reveal disconnected leaves (#21924)
- chore(deps): weekly
cargo update(#21955) - chore(ci): improve wasm and riscv check output (#21956)
- refactor(engine): wrap ExecutionCache internals in single Arc (#21950)
- feat(txpool): add missing no_eip7702/set_eip7702 builder methods (#21926)
- perf(prewarm): disable balance check for prewarming transactions (#21941)
- chore: add libmdbx to default tracing filter (#21944)
- feat: add a public
prune_transactionsmethod to the TransactionPool (#21765) - perf(persistence): combine save_blocks and prune into single MDBX commit (#21927)
- chore(persistence): delete ambiguous TODO (#21923)
- chore: bump persistence timeout (#21919)
- chore: log mdbx tx manager msg (#21916)
- fix: skip sender recovery stage when senders fully pruned (#21918)
- chore: revert back to trace for update_hashes (#21915)
- fix: add more safety checks to reveals of upper subtrie nodes (#21905)
- perf: remove per-tx state iteration and loaded metrics from MeteredStateHook (#21884)
- chore: always compare updates (#21863)
- feat(trie): Add root_node method to v2 ProofCalculator (#21906)
- chore: introduce v2 storage flag and remove edge flag (#21868)
- perf(engine): send proofs directly from prewarming to multiproof task (#21901)
- perf: use separate pool for save_blocks (#21764)
- chore: remove windows build and release support (#21902)
- chore: simplify subtrie hashes parallel loop (#21871)
- docs: add site-level meta description for SEO (#21903)
- feat(static-file): incremental changeset offset storage (#21596)
- docs: add Signature Verification to sidebar under Running a Node (#21900)
- fix(net): correct backed_off_peers metric calculation (#21885)
- test(e2e): add eth_simulateV1 test for maxFeePerBlobGas without blob data (#21899)
- fix: only exit when both channels are drained (#21877)
- chore: remove op-reth from repository (#21532)
- chore: fix cargo deny advisories (#21894)
- fix: correct account cache size metrics (#21864)
- feat(eth-wire): introduce ProtocolMessage::decode_status for handshake (#21797)
- chore: improve persistence spans (#21875)
- chore(reth-bench): use "reth-bench" log target (#21870)
- chore: add warning if 'tracy' not enabled (#21867)
- chore: block recovery cleanup (#21436)
- fix: support EIP-1559 params configuration for Optimism dev mode (#21855)
- fix(ci): use commit SHA instead of branch ref in changelog workflow (#21866)
- fix(prune): correct checkpoint when RocksDB tx lookup deletes nothing (#21842)
- perf: hash state updates in parallel (#21836)
- chore(engine): remove MIN_WORKER_COUNT (#21829)
- chore: enable changelog check on PRs (#21750)
- chore: integrate dependabot to get dep updates (#21856)
- perf(engine): single-pass fold for EvmState metrics collection (#21852)
- perf(trie): Don't filter proofs in v2 if sparse trie as cache is enabled (#21811)
- perf(rocksdb): increase write buffer size to 128 MB (#21696)
- fix(provider): off-by-one error in static file range calculation (#21841)
- fix(prune): reth prune requires being run twice to actually prune (#21785)
- perf(net): remove unnecessary collect in transaction propagation (#21831)
- perf(trie): process new updates from state/prewarm update directly (#21768)
- fix(rpc): use consistent sidecar check in fill_transaction for EIP-7594 support (#21763)
- chore: fix spans (#21830)
- perf(engine): use par_bridge_buffered instead of par_bridge for storage trie updates (#21827)
- perf: use num_threads for prewarm concurrency (#21826)
- refactor(bench): use into_payload_and_sidecar for V4/V5 envelopes (#21823)
- chore: use cargo nextest run in CLAUDE.md example (#21825)
- refactor(trie): drop sparse trie task fields early via destructuring (#21824)
- refactor: use spawn_os_thread for better tokio integration (#21788)
- feat(trie): add storage_root field to storage trie span (#21502)
- ci(docker): notify Slack on nightly build failure (#21819)
- fix(storage): add skip(provider) to check_consistency instrument (#21818)
- fix: update the hive slack webhook url (#21816)
- perf(trie): reuse proof nodes buffer in
reveal_nodes(#21648) - refactor: spanning and misc improvements to consistency check code (#20961)
- perf: switch to unstable sort (#21803)
- chore(deps): bump revm inspectors, handle case where revm-inspectors js-tracer is enabled but reth's js-tracer is not (#21810)
- chore: improve some spans (#21781)
- chore: better default filter for profiling (#21779)
- revert: undo last two changes to docker-bake.hcl (#21804)
- chore: don't format fields in tracy spans (#21773)
- chore: name tokio rt threads (#21777)
- ci: verify docker output (#21807)
- feat(engine): add wait duration metrics for execution and sparse trie caches (#21800)
- refactor: use alloy_primitives::map for all HashMap/HashSet types (#21686)
- fix(engine): ensure block in memory before setting canonical head (#21693)
- ci: set
RUSTFLAGSin Dockerfile instead of bake (#21790) - feat(reth-bench): support combined wait-time and wait-for-persistence modes (#21771)
- fix(trie): Guard against infinite loop in proof_v2 (#21789)
- perf(pruner): do not create an iterator_cf for every address (#21767)
- fix(pruner): implement pruning for rocksdb TransactionHashNumbers (#21782)
- chore(pruner): always flush and compact after
reth prunecommand (#21783) - perf: spawn proof workers in a separate thread (#21780)
- ci: enable debug assertions for statetests (#21775)
- fix(test): clean up test temp directories on drop (#21772)
- chore(cli): expose static file metrics in cli (#21770)
- chore: decode MDBX error code (#21766)
- perf: build for target-cpu=x86-64-v3 in docker by default (#21761)
- perf(trie): use TrieMask iterator for efficient bit iteration (#21676)
- perf(rocksdb): batch tx reads in TransactionLookupStage unwind (#21723)
- fix: ensure transaction lookup can prune (#19553)
- chore(prune): increase reth prune DELETE_LIMIT to 20M (#21762)
- chore(cli): support ctrl-C in reth prune (#21759)
- perf: bump nybbles (#21725)
- chore: centralize thread::spawn to share tokio handles (#21754)
- chore: shorten thread names (#21751)
- chore(deps): bump bytes 1.11.1 (#21755)
- perf: use alloy_primitives hasher for dashmaps (#21726)
- chore(static-files): proper segment writer scoped thread names (#21747)
- fix(discv5): add missing
randfeature for test compilation (#21749) - refactor(stages): use with_rocksdb_batch_auto_commit in tx_lookup (#21722)
- refactor(rocksdb): deduplicate first()/last() implementations (#21738)
- perf(static-file): simplify stage checkpoint lookup to avoid allocs (#21730)
- refactor(rocksdb): deduplicate iterator next() implementations (#21737)
- perf(static-file): hoist cursor creation outside block loop (#21731)
- chore(deps): bump alloy 1.5.2 -> 1.6.1 (#21746)
- feat(txpool): add
is_transaction_readytoTransactionPooltrait (#21742) - chore: misc tree cleanups (#21691)
- chore: disable changelog workflow on PRs (#21748)
- chore: match statement order in ExecutionCache::new (#21712)
- fix(evm): remove unused reth-ethereum-forks (#21695)
- feat(trie): add memory_size heuristic for ParallelSparseTrie (#21745)
- perf: replace RwLock<HashMap/HashSet> with DashMap/DashSet (#21692)
- feat: add AI-assisted changelog generation (#21743)
- perf: optimize
SparseTrieCacheTask(#21704) - fix(rpc): validate toBlock in trace_filter (#21718)
- fix: update sparse trie masks (#21716)
- chore: remove clone from in memory cursor (#21719)
- chore: move TransactionLookup as first option (#21721)
- feat(rpc): add EIP-7928 eth_getBalanceWithProof and eth_getAccountWithProof (#21720)
- feat: reintroduce
--engine.state-root-task-compare-updates(#21717) - fix(cli): actually enable reth-prune rocksdb feature in cli (#21715)
- fix(cli): delete all static files when PruneModes::Full is configured (#21647)
- fix: properly drain pending account updates (#21709)
- chore(ci): add
conststo typos allowlist (#21708) - perf(trie): avoid clearing already-cached sparse trie (#21702)
- feat(engine): add CLI args for sparse trie pruning configuration (#21703)
- fix: short-circuit in reveal_account_v2_proof_nodes on empty nodes (#21701)
- fix(reth-bench): gracefully stop when transaction source exhausted (#21700)
- fix(trie): Return full_key from update_leaves unless it is not a child of the missing path (#21699)
- perf(trie): dispatch V2 storage proofs in lexicographical order (#21684)
- perf(trie): fix allocation hot paths with capacity hints and buffer reuse (#21466)
- fix(prune): use batched pruning loop with edge feature to prevent OOM (#21649)
- perf: add ParallelBridgeBuffered trait to replace par_bridge (#21674)
- refactor: add with_* compressor utility methods (#21680)
- fix(zstd): use transaction dictionary for tx compressor (#21382)
- refactor(provider): deduplicate segment-to-stage mapping in static file manager (#21670)
- fix(engine): wait for persistence service thread before RocksDB drop (#21640)
- fix(prune): migrate invalid receipts prune config to Distance(64) (#21677)
- chore(deps): update metrics-derive 0.1.1 (#21673)
- chore: avoid eager evaluation in base_fee_params_at_timestamp (#21536)
- fix(rpc): change debug_set_head number parameter to U64 (#21678)
- feat(prune): prune rocksdb account and storage history indices (#21331)
- perf(trie): reuse account RLP buffer in SparseTrieCacheTask (#21644)
- fix(trie): silence unused param warnings in sparse-parallel no_std build (#21657)
- chore(deps): weekly
cargo update(#21660) - perf: batch finalized/safe block commits with SaveBlocks (#21663)
- fix: remove unnecessary alloc (#21665)
- refactor(engine): improve payload processor tx iterator (#21658)
- feat(rpc): make blob sidecar upcasting opt-in (#21624)
- fix: cleanup entire temp directory when using testing_node (#18399)
- fix(metrics): rename save_blocks_block_count to save_blocks_batch_size (#21654)
- perf(engine): skip DB lookup for new blocks in insert_block_or_payload (#21650)
- chore(deps): breaking bumps (#21584)
- chore(trie): add set_ methods alongside with_ builders (#21639)
- perf(trie): use Entry API to avoid empty Vec allocation in extend (#21645)
- chore(trie): clear RevealableSparseTrie in place (#21638)
- docs(CLAUDE.md): tweaks (#21646)
- refactor(db): derive Clone for DatabaseEnv (#21641)
- chore(db-api): simplify DatabaseMetrics impl for Arc (#21635)
- chore: make engine tree crate items public (#21487)
- refactor(trie): replace SmallVec with Vec in sparse trie buffers (#21637)
- feat(engine): preserve sparse trie across payload validations (#21534)
- perf(trie): remove shrink_to_fit calls from SparseSubtrieBuffers::clear (#21630)
- fix(trie): cleanup modified branch masks in update_leaf on reveal failure (#21629)
- fix(ethstats): WSS Handling (#21595)
- fix(debug-client): fix off-by-one in block hash buffer lookup (#21628)
- perf: use biased select and prioritize engine events (#21556)
- feat(grafana): add gauge panels for save_blocks _last metrics (#21604)
- fix(net): include disconnect reason in P2PStreamError display (#21626)
- feat(cli): add
reth db statecommand for historical contract storage (#21570) - chore(op-reth): move op-dependent examples into crates/optimism/examples/ (#21495)
- feat(rpc): add EIP-7934 block size validation to testing_buildBlockV1 (#21623)
- feat(txpool): add EIP-7594 blob sidecar toggle (#21622)
- chore(engine-tree): simplify impl trait bound (#21621)
- perf: cache fetched proof targets in
SparseTrieCacheTask(#21612) - fix(proof_v2): make sure that all storage proofs are delivered (#21611)
- feat(cli): add --metrics param to
reth prune(#21613) - feat(prune): add static file pruning support for sender recovery (#21598)
- test(stages): add pipeline forward sync and unwind test (#21602)
- chore: fix unused parallel trie const without std (#21610)
- refactor(reth-bench): dedupe derive_ws_rpc_url helper (#21585)
- feat(rpc): default --testing.skip-invalid-transactions to true (#21603)
- fix(provider): prune account changesets from static files in remove_state_above (#21605)
- feat(metrics): add _last gauge metrics for save_blocks timings (#21597)
- chore: revert "test(stages): add pipeline forward sync and unwind test" (#21601)
- test(stages): add pipeline forward sync and unwind test (#21553)
- feat(grafana): add reth-persistence dashboard (#21594)
- fix(grafana): order MerkleChangeSets checkpoint after MerkleExecute (#21581)
- feat: sparse trie as cache (#21583)
- chore(trie): remove unused direct MDBX changeset readers (#21580)
- chore: update RPC URLs from ithaca.xyz to reth.rs (#21574)
- fix(engine): Try to always compute storage root in V2 proofs when account proof is present, fallback if not (#21579)
- chore(deps): bump codspeed (#21578)
- chore: remove cargo-chef from Dockerfile.depot (#21577)
- fix(trie): PST: Fix update_leaf atomicity, remove update_leaves revealed tracking, fix callback calling (#21573)
- fix(provider): check executed block before returning historical state (#21571)
- fix(provider): use storage-aware methods in unwind_trie_state_from (#21561)
- fix(reth-bench): stop fetcher when reaching chain tip (#21568)
- feat(trie): add update_leaves method to SparseTrieExt (#21525)
- refactor(reth-bench): dedupe read_input and load_jwt_secret helpers (#21555)
- fix(reth-bench): retry testing_buildBlockV1 when payload gas < target (#21547)
- fix(reth-bench): return error instead of panic on invalid payload (#21557)
- chore(net): downgrade fork id mismatch log to trace (#21554)
- chore: move scripts from .github/assets to .github/scripts (#21539)
- chore: fix unused warns in sparse trie (#21546)
- chore(deps): cargo update (#21538)
- feat(reth-bench): add reporting and wait options to replay-payloads (#21537)
- perf(tree): optimistically prepare canonical overlay (#21475)
- fix(prune): add minimum 64 block retention for receipts and bodies (#21520)
- fix(provider): read changesets from static files during unwind (#21528)
- fix: simplify UTF-8 decoding in
StreamCodecby usingResult::ok(#21524) - chore(op-reth): remove op-reth dependencies from core reth library crates (#21492)
- feat(trie): add prune method to SparseTrieInterface (#21427)
- fix(prune): improve pruner log readability (#21522)
- refactor: using iterator over references (#21506)
- chore(engine): simplify EngineApiTreeHandler type inference (#21503)
- perf(trie-db): preallocate vectors in changeset computation (#21465)
- refactor: remove redundant clone() in CursorSubNode::new (#21493)
- fix(provider): cap static file changeset iteration to highest available block (#21510)
- feat(trie): Enable proofs v2 by default (#21434)
- fix(engine): guard receipt streaming against duplicate indices (#21512)
- fix(rpc): populate block fields in mev_simBundle logs (#21491)
- perf: avoid cloning prefix sets in
TrieWitness::compute(#21352) - refactor(db): make Tx::inner field private with accessor (#21490)
- chore(txpool): remove redundant locals clone in config (#21477)
- fix: ensure edge enables history in rocksdb (#21478)
- chore: remove Sync bound from cursor associated types (#21486)
- fix(reth-bench): retry up to 5 times on failed transaction fetches in big blocks generate (#21483)
- feat: more metrics (#21481)
- refactor(trie): reuse shared StorageProofCalculator for V2 sync storage roots and add deferred encoder metrics (#21424)
- fix(static-files): apply minimal blocks per file to all segments (#21479)
- refactor: align RocksDbArgs defaults with StorageSettings::base() (#21472)
- fix(db): write genesis history to correct storage backend (#21471)
- chore: simplify account_changesets_range (#21457)
- fix(provider): skip storage changeset writes when routed to static files (#21468)
- test(e2e): comprehensive RocksDB storage E2E tests (#21423)
- perf(trie): use is_zero() check to avoid copy in is_storage_empty (#21459)
- chore: add logging for internal fcu errors (#21456)
- perf(db): flatten HashedPostState before persisting (#21422)
- chore: log docker sccache stats (#21455)
- chore: use Default::default() for TransactionInfo for forward compatibility (#21454)
- ci: typorino (#21453)
- perf(docker): use shared cache mounts for parallel builds (#21451)
- ci: use depot cache in Dockerfile.depot (#21450)
- fix: use unwrap_or_else for lazy evaluation of BlobParams::cancun (#21442)
- chore: reduce number of nightly builds (#21446)
- chore: remove unused docker from makefile (#21445)
- fix(stages): retain RocksDB TempDir in TestStageDB to prevent premature deletion (#21444)
- fix(pruner): prune account and storage changeset static files (#21346)
- chore(metrics): add a gas_last metric similar to new_payload_last (#21437)
- refactor(trie): always use ParallelSparseTrie, deprecate config flags (#21435)
- perf: use shared channel for prewarm workers (#21429)
- feat: configurable EVM execution limits (#21088)
- feat(rpc): add transaction hash caching to EthStateCache (#21180)
- fix(rpc): add block timestamp validation in eth_simulateV1 (#21397)
- fix(rpc): use correct error codes for eth_simulateV1 reverts and halts (#21412)
- fix(rpc): add block number validation in eth_simulateV1 (#21396)
- fix(rpc): populate block_hash in eth_simulateV1 logs (#21413)
- feat(cli): make stopping on invalid block the default for reth import (#21403)
- feat(rpc): implement movePrecompileToAddress for eth_simulateV1 (#21414)
- fix(rpc): set prevrandao to zero for eth_simulateV1 simulated blocks (#21399)
- fix(rpc): cap simulate_v1 default gas limit to RPC gas cap (#21402)
- fix(engine): only warn for critical capability mismatches (#21398)
- fix(net): FetchFullBlockRangeFuture can get stuck forever after partial body fetch + error (#21411)
- docs(rpc): add reth_subscribePersistedBlock method (#21420)
- test: add E2E test for RocksDB provider functionality (#21419)
- docs(tracing): fix incorrect example description in lib.rs (#21417)
- feat(payload): add fn for system transaction check (#21407)
- fix(era-utils): export correct era1 CompressedBody payload (#21409)
- chore(deps): weekly
cargo update(#21406) - chore: remove unused imports in storage-api (#21400)
- fix(rocksdb): filter history writes to only changed accounts/storage (#21339)
- feat: prealloc vec (#21391)
- feat: change from stable sort to unstable sort (#21387)
- chore: fix clippy unnecessary_sort_by lint (#21385)
- fix(docker): pass vergen git vars as build args (#21384)
- fix(engine): use LazyTrieData::deferred for chain notification (#21383)
- perf(trie): parallelize merge_ancestors_into_overlay extend ops (#21379)
- chore: removed needless collect (#21381)
- feat(engine): add metric for forkchoiceUpdated response -> newPayload (#21380)
- ci: use depot for docker (#20380)
- feat(rocksdb): static file based healing for TransactionHashNumbers (#21343)
- fix(trie): only clone required keys in on_prefetch_proofs (#21378)
- feat(rocksdb): add WAL size tracking metric and Grafana dashboard (#21295)
- fix(stages): commit RocksDB batches before flush and configure immediate WAL cleanup (#21374)
- feat(rocksdb): changeset-based crash recovery healing for history indices (#21341)
- perf(trie): parallelize COW extend operations with rayon (#21375)
- feat(engine): add metric for state root task fallback success (#21371)
- revert: perf(trie): parallelize merge_ancestors_into_overlay (#21202) (#21370)
- perf(engine): fixed-cache for execution cache (#21128)
- chore(reth-bench): make from-block a required flag (#21372)
- feat(stages): flush RocksDB at end of history and tx_lookup stages (#21367)
- fix(libmdbx): handle errors gracefully in TransactionInner::drop (#21368)
- refactor: refactor get_idle_peer_for to use Iterator::find (#21321)
- test(e2e): selfdestruct pre- and post-Dencun (#21363)
- feat(engine): add BAL metrics type for EIP-7928 (#21356)
- chore: update snmalloc upstream repository link (#21360)
- feat(reth-bench): support human-readable gas format in generate-big-block (#21361)
- feat(p2p): add
reth p2p enodecommand (#21357) - feat(txpool): add Block associated type to TransactionValidator trait (#21359)
- fix(tree): evict changeset cache even when finalized block is unset (#21354)
- chore(etc): update ethereum-metrics-exporter GitHub URL (#21348)
- chore: add yongkangc as codeowner for crates/storage/provider (#21349)
- feat(engine): stub Amsterdam engine API endpoints (newPayloadV5, getPayloadV6, BALs) (#21344)
- feat: allow setting custom debug block provider (#21345)
- perf: avoid creating RocksDB transactions for legacy MDBX-only nodes (#21325)
- feat(reth-bench): send-invalid-payload command (#21335)
- ci: align check-alloy workflow with main clippy job (#21329)
- chore(txpool): explicitly deref RwLockReadGuard in PartialEq impl (#21336)
- fix(rpc): use Default for SimulateError to prepare for alloy breaking change (#21319)
- fix(rocksdb): periodic batch commits in stages to prevent OOM (#21334)
- feat: bump alloy and alloy-evm (#21337)
- fix(net): limit pending pool imports for broadcast transactions (#21254)
- fix: use unwrap_or_else for lazy evaluation of StorageSettings::legacy (#21332)
- chore(trie): Cleanup unused trie changesets code (#21323)
- feat(storage): warn storage settings diff at startup (#21320)
- fix(cli): handle invalid hex in
db list --search(#21315) - test: add e2e tests for invalid payload handling via Engine API (#21288)
- fix: always check upper subtrie for keys (#21276)
- feat(trie): add V2 account proof computation and refactor proof types (reapply) (#21316)
- fix: remove collect (#21318)
- feat: add StaticFileSegment::StorageChangeSets (#20896)
- feat(rpc): respect history expiry in eth_getLogs per EIP-4444 (#21304)
- fix(provider): add CommitOrder for RocksDB/MDBX unwind atomicity (#21311)
- chore: rm patches (#21317)
- feat(rocksdb): disable bloom filter for default column family (#21312)
- perf(rocksdb): disable compression and bloom filters for TransactionHashNumbers CF (#21310)
- perf(prune): use bulk table clear for PruneMode::Full (#21302)
- fix: remove redundant clone (#21300)
- perf(prune): sort tx hashes for efficient TransactionLookup pruning (#21297)
- fix(cli): clear rocksdb tables in drop-stage command (#21299)
- fix(mdbx): mark
reserveas unsafe (#21263) - fix: handle incomplete receipts gracefully in receipt root task (#21285)
- chore(release): prep v1.10.2 release (#21287)
- ci: add on-demand workflow to check alloy breaking changes (#21267)
- perf(db): use ArrayVec for StoredNibbles key encoding (#21279)
- fix(engine): clear execution cache when block validation fails (#21282)
- refactor: use Default::default() for Header in tests (#21277)
- feat(rpc): respect history expiry in block() and map to PrunedHistoryUnavailable (#21270)
- feat(grafana): add RocksDB metrics dashboard (#21243)
- fix(prune): avoid panic in tx lookup (#21275)
- revert: feat(trie): add V2 account proof computation and refactor proof types (#21214) (#21274)
- feat(reth-bench): accept short notation for --target-gas-limit (#21273)
- feat(engine): add metric for execution cache unavailability due to concurrent use (#21265)
- perf(trie): parallelize merge_ancestors_into_overlay (#21202)
- chore(chainspec): use ..Default::default() in create_chain_config (#21266)
- feat(stages): add RocksDB support for IndexStorageHistoryStage (#21175)
- refactor: remove static_files.to_settings() and add edge feature to RocksDB flags (#21225)
- fix(stages): clear ETL collectors on HeaderStage error paths (#21258)
- feat(reth-bench): add --target-gas-limit option to gas-limit-ramp (#21262)
- fix: fix payload file filter prefix in replay-payloads (#21255)
- chore: update CODEOWNERS (#21223)
- fix: supply a real ptr to mdbx_dbi_flags_ex (#21230)
- feat(trie): add V2 account proof computation and refactor proof types (#21214)
- feat(rocksdb): add missing observability (#21253)
- fix(rocksdb): flush all column families on drop and show SST/memtable sizes (#21251)
- fix: clear
overlay_cacheinwith_extended_hashed_state_overlay(#21233) - refactor(engine): move execution logic from metrics to payload_validator (#21226)
- feat(txpool): add IntoIterator for AllPoolTransactions (#21241)
- feat(execution-types): add receipts_iter and logs_iter helpers to Chain (#21240)
- feat(trie): Add
serde-bincode-compatfeature toreth-trie(#21235) - fix: sigsegv handler (#21231)
- feat(cli): add RocksDB table stats to
reth db statscommand (#21221) - fix(rocksdb): flush memtables before dropping (#21234)
- feat(node): log storage settings after genesis init (#21229)
- chore(trie): remove unnecessary clone in into_sorted_ref (#21232)
- feat(engine): add --engine.disable-cache-metrics flag (#21228)
- feat(engine): add time_between_forkchoice_updated metric (#21227)
- feat(edge): enable transaction_hash_numbers_in_rocksdb for edge builds (#21224)
- perf(db): use Cow::Borrowed in walk_dup to avoid allocation (#21220)
- feat(cli): add --rocksdb.* flags for RocksDB table routing (#21191)
- feat(cli): add
reth db checksum rocksdbcommand (#21217) - fix: properly save history indices in pipeline (#21222)
- fix(reth-bench): replay-payloads prefix (#21219)
- perf(trie): dispatch storage proofs in lexicographical order (#21213)
- chore(db-api): remove sharded_key_encode benchmark (#21215)
- feat(pruning): add
DefaultPruningValuesfor overridable pruning defaults (#21207) - perf(chain-state): parallelize into_sorted with rayon (#21193)
- feat(cli): add
reth db checksum mdbx/static-filecommand (#21211) - feat(storage): add read-only mode for RocksDB provider (#21210)
- perf(db): stack-allocate ShardedKey and StorageShardedKey encoding (#21200)
- chore: remove deprecated and unused ExecuteOutput struct (#20887)
- ci: partition bench codspeed job (#20332)
- feat(stages): add RocksDB support for IndexAccountHistoryStage (#21165)
- feat: Check CL/Reth capability compatibility (#20348)
- feat(trie): add AsyncAccountValueEncoder for V2 proof computation (#21197)
- perf(trie): use HashMap reserve heuristic in MultiProof::extend (#21199)
- perf(trie): defer child RLP conversion in proof_v2 for async encoder support (#20873)
- feat(trie): Add V2 reveal method and target types (#21196)
- fix: set
StaticFileArgsdefaults foredge(#21208) - chore(trie): Move hybrid check for trie input merges into common code (#21198)
- feat(engine-api): add EIP-7928 BAL stub methods (#21204)
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.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | reth-v1.11.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| x86_64 | reth-v1.11.0-x86_64-apple-darwin.tar.gz | PGP Signature | |
| aarch64 | reth-v1.11.0-aarch64-apple-darwin.tar.gz | PGP Signature | |
| Docker | paradigmxyz/reth | - |