github paradigmxyz/reth v2.11.0
Reth v2.11.0

50 minutes ago

image

Summary

Reth v2.11.0 is a hardening and performance release. RPC calls that can do unbounded work are now capped or cancellable (eth_callMany, trace_callMany, debug_traceCallMany, eth_getProof, mev_simBundle, eth_simulateV1), and the release brings a broad set of transaction pool, P2P and storage correctness fixes. EIP-7702 authorization recovery is parallelized, P2P skips decoding responses it never asked for, and overlay provider setup is cheaper.

SDK users: Ethereum block execution now runs on evm2::block, and reth's executor types are thin adapters over it (see Breaking Changes).

Action Required

  • Removed no-op CLI flags. The node now refuses to start if you still pass --engine.legacy-state-root, --engine.caching-and-prewarming, --engine.parallel-sparse-trie, --engine.disable-parallel-sparse-trie, --engine.precompile-cache or --rpc-cache.max-headers (alias --rpc-cache.max-envs). Drop them from your config (#28369)

  • With --instance N and no explicit --auth-ipc.path, the Engine API IPC socket is now /tmp/reth_engine_api.ipc-N. Set --auth-ipc.path if your consensus client expects the old path (#28257)

  • Explicit IPC socket permissions are now validated at startup, and an invalid mode is a startup error. On platforms that can't set the mode before binding (including macOS), explicit permissions fail startup (#28326)

  • eth_callMany, trace_callMany and debug_traceCallMany now allow at most 1,024 calls and share one --rpc.gascap budget across the request. No additional call starts more than five seconds after the first. Previously successful requests may now fail; callers should review request sizes and gas budgets (#28314)

  • eth_getProof now allows at most 1,024 storage keys. eth_getMultiProof allows at most 1,024 targets and 1,024 storage keys in total. Requests exceeding these limits fail with invalid params (#27716)

Backwards Compatibility

Verification pending: Database migration and resync requirements, and supported downgrade versions, must be confirmed against the final v2.11.0 release build before publication.

Update Priority

User Class Priority
Payload Builders High
Non-Payload Builders High

Breaking Changes

SDK

  • Ethereum block execution moved into evm2::block: BundleState, BlockState/StateUpdate, the block execution errors, GasOutput/CommitChanges and the Ethereum executor now come from evm2, and EthBlockExecutor wraps evm2::block::ethereum::EthBlockExecutor. EthApiError::MuxTracerError now holds the error message (#28238)
  • MessageInput no longer dereferences to bytes. Custom precompile integrations should read inputs through Evm::message_input (#28413)
  • Discovery dependencies moved to discv5 0.12, ENR 0.14 and secp256k1 0.33. Downstream integrations using public discovery/key types must update their dependency versions and key APIs (#28289)
  • EnrCombinedKeyWrapper implements TryFrom<Enr<SecretKey>> instead of From, and Discv5::add_node returns Error::InvalidEnr for records the discv5 key backend rejects (#28345)
  • RpcServerArgs::auth_ipc_path is now Option<String>; read the effective endpoint with auth_ipc_path() (#28257)
  • schnellru caches are replaced with reth-lru (#28291)
  • Removed the unused DEFAULT_HEADER_CACHE_MAX_LEN constant (#28369)

Features

Performance

  • Parallelized EIP-7702 authorization recovery (#28307)
  • P2P skips decoding responses that weren't requested (#28403)
  • Reduced overlay provider setup and state-sharing overhead (#28373, #28333)
  • The engine's balance tracker only steps on the opcodes it needs (#28334)
  • Replaced schnellru with the faster reth-lru caches (#28291)
  • Reduced RPC serialization and authentication overhead (#28295, #28294)

RPC

  • Block transaction replay now runs through the block executor (#28266)

Transaction Pool

  • Subscribers can follow events of transactions held outside the pool (#28387)

Bug Fixes

RPC

  • mev_simBundle work is bounded (#28386)
  • eth_simulateV1 stops once its request is dropped (#28312), checks cancellation once per simulated block (#28390) and picks each simulated block's fork from its timestamp (#28431)
  • The default eth_call gas limit is capped, so calls without gas no longer fail with intrinsic gas too high under --rpc.gascap max on Amsterdam (#28315)
  • The builder validation API defaults to a 3-block validation window; --rpc.eth-proof-window can only widen it (#28424)
  • eth_sendTransaction serializes nonce assignment (#28418)
  • Transactions with conflicting fee fields are rejected (#28324)
  • Consensus errors map to invalid params (#28398)
  • testing_buildBlockV1 skips blob transactions (#28379)
  • Namespace checks honor the default HTTP, WS and IPC module sets (#28327)
  • debug_intermediateRoots replays bad blocks (#28331)
  • Fixed a tracer panic on frameless logs (#28330)
  • Restored depth-zero root handling in tracers and tracing of unlisted precompiles as contracts (#28389)
  • Retained receipt history is reported correctly (#28201)
  • reth_getBalanceChangesInBlock omits account creation and deletion when the balance remains zero (#28282)

Engine, EVM & Trie

  • Closed the SSZ gaps from execution-apis#885 (#28417)
  • Invalid block hook output on disk is capped (#28286) and invalid block diagnostics run off the engine thread (#28284)
  • The EIP-8037 total transaction gas cap is published to the pool (#28353)
  • Request system calls run without a code check (#28311)
  • Configured JIT settings apply when the JIT is enabled at runtime (#28374)
  • Range proof node counts are capped (#28375)
  • Redundant proof requests are suppressed (#28365)
  • A panicking proof job now sends an error instead of hanging (#28313)
  • Bumped alloy-trie to 0.9.9 (#28367)

Transaction Pool

  • Transactions exceeding the local size limit remain rejected, but no longer penalize the relaying peer (#28355)
  • The blob replacement overdraft check runs for head replacements (#28356)
  • The validator head refreshes on deep canonical commits (#28359)
  • Blob store cleanup runs on every finalized block advance (#28357)
  • Same-nonce replacement works for senders at slot capacity (#28358)
  • Local senders are skipped when selecting pending eviction candidates (#28352)
  • The tx fee cap applies based on submission origin (#28354)

P2P

  • Banned and untrusted inbound peers are rejected before session activation (#28360)
  • Shared capabilities that overflow the message ID space are rejected (#28414)
  • Malformed disconnect payloads are bounded (#28280)
  • The satellite mux eth send queue is bounded (#28381)
  • Snap ranges are served off the eth handler (#28378)
  • Disconnecting peers stay disconnected on repeated removal (#28423)
  • Re-announcements from peers that failed to deliver a hash are ignored (#28362), and hash fetching moves past the eviction fallback search (#28361)
  • Pending sessions and the listener get a turn under load (#28332)
  • netrestrict applies to startup peers (#28198)
  • DNS discovery retries links whose initial root lookup failed (#28346) and handles whitespace in entries (#28310)
  • Discv5 ENR conversion no longer panics on unsupported key encodings (#28345)
  • The status payload is truncated in handshake decode logs (#28322)

Storage & Pruning

  • Stages unwind on unrecoverable senders (#28420)
  • Fixed a lock inversion in the MDBX read transaction timeout monitor (#28254), and the monitor stops when the environment is dropped (#28404)
  • Snap trie reverts are no longer cached (#28401)
  • Snap ranges are refused on unverified state (#28392)
  • Interrupted genesis initialization resumes (#28376)
  • Static file truncation is deferred on reorg (#28370)
  • The pruner caps the ExEx height at the persisted tip (#28325)

CLI & Node

  • The Unix IPC socket mode is set before bind, and invalid modes fail startup (#28326)
  • --instance suffixes the default Engine API IPC path (#28257)
  • --to block is re-executed (#28269)
  • Zero blocks per archive is rejected (#28328)

Dependencies

  • evm2 66687c1
  • alloy-* 2.5.0
  • alloy-primitives 1.6.1
  • alloy-trie 0.9.9
  • discv5 0.12, ENR 0.14, secp256k1 0.33

Full changelog: v2.10.1...v2.11.0 (available when the v2.11.0 tag is published).

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.11.0-x86_64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 reth-v2.11.0-aarch64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 reth-v2.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.