github paradigmxyz/reth v1.11.0
Reth v1.11.0

6 hours ago

image

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.v2 requires 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-stateless crate (#22115)
  • Removed ress crates from workspace (#22057)
  • Removed TypesAnd1-5 staging types from ProviderFactoryBuilder (#22049)
  • Removed SerialSparseTrie — always use ParallelSparseTrie (#21808, #21435)
  • Use hashed state as canonical state representation (#21115)
  • Merged SparseTrieExt into SparseTrie trait (#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 Block associated type to TransactionValidator trait (#21359)

CLI

  • Renamed --engine.enable-sparse-trie-as-cache to --engine.legacy-trie (#21851)
  • Removed --edge feature flag in favor of --storage.v2 (#21868)
  • Removed Windows build and release support (#21902)
  • jemalloc, asm-keccak, and min-debug-logs are 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 HashedPostState updates (#21836)
  • Cache fetched proof targets in SparseTrieCacheTask to 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_overlay and COW extend operations (#21379, #21375)
  • Treat hashes as bytes in BranchNodeCompact to avoid conversion overhead (#22089)
  • Use TrieMask iterator for efficient bit iteration (#21676)
  • Fix allocation hot paths with capacity hints and buffer reuse (#21466)
  • Use Entry API to avoid empty Vec allocations (#21645)
  • Add memory_size heuristic for ParallelSparseTrie (#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::Skipped to 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 EvmState metrics 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_blocks and prune into single MDBX commit (#21927)
  • Batch finalized/safe block commits with SaveBlocks (#21663)
  • Use separate pool for save_blocks (#21764)
  • Flatten HashedPostState before persisting (#21422)
  • Stack-allocate ShardedKey and StorageShardedKey encoding (#21200)
  • Use Cow::Borrowed in walk_dup to avoid allocation (#21220)
  • Use alloy_primitives hasher for DashMaps (#21726)
  • Replace RwLock<HashMap/HashSet> with DashMap/DashSet (#21692)
  • Switch to unstable sort where ordering guarantees aren't needed (#21803)
  • Build Docker images for target-cpu=x86-64-v3 by default (#21761)
  • Reduce tracing span noise in prewarm and proof workers (#22101, #22044)
  • Parallelize into_sorted with rayon (#21193)
  • RocksDB: increase write buffer size to 128 MB (#21696)
  • RocksDB: disable compression and bloom filters for TransactionHashNumbers CF (#21310)

RPC

  • Add subscribeFinalizedChainNotifications endpoint (#22011)
  • Add EIP-7928 eth_getBalanceWithProof and eth_getAccountWithProof (#21720)
  • Add getPayloadBodiesV2 endpoint 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 movePrecompileToAddress for eth_simulateV1 (#21414)
  • Respect history expiry in eth_getLogs and block() per EIP-4444 (#21304, #21270)
  • Add transaction hash caching to EthStateCache (#21180)
  • Propagate TransactionOrigin through send_transaction and 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_peers metric (#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 newPayload gas bucket metrics (#22136, #22067)

SDK

  • Make backfill thresholds configurable for ExEx (#22037)
  • Add build_with_ordering_and_spawn_maintenance_task to TxPoolBuilder (#21979)
  • Add is_transaction_ready to TransactionPool trait (#21742)
  • Add public prune_transactions method to TransactionPool (#21765)
  • Add DefaultPruningValues for 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 blockHash constraint in append_matching_block_logs (#22007)
  • Validate toBlock in trace_filter (#21718)
  • Consistent sidecar check in fill_transaction for EIP-7594 support (#21763)
  • Multiple eth_simulateV1 fixes: block timestamp/number validation, prevrandao, gas cap, error codes, log population (#21396, #21397, #21399, #21402, #21412, #21413)

P2P

  • Correct EthMessageID::max for eth70 and later versions (#22076)
  • Fix FetchFullBlockRangeFuture getting 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 copy subcommand (#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_task to TxPoolBuilder (#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_*_opt builder methods to StorageSettings (#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 subscribeFinalizedChainNotifications endpoint (#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_transactions method 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 RUSTFLAGS in 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 prune command (#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 rand feature 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_ready to TransactionPool trait (#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 consts to 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 state command 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 StreamCodec by using Result::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 enode command (#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 reserve as 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_cache in with_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-compat feature to reth-trie (#21235)
  • fix: sigsegv handler (#21231)
  • feat(cli): add RocksDB table stats to reth db stats command (#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 rocksdb command (#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 DefaultPruningValues for overridable pruning defaults (#21207)
  • perf(chain-state): parallelize into_sorted with rayon (#21193)
  • feat(cli): add reth db checksum mdbx/static-file command (#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 StaticFileArgs defaults for edge (#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 -

Don't miss a new reth release

NewReleases is sending notifications on new releases.