alethia-reth v1.5.0
v1.5.0 is a routine maintenance release, and we recommend that all operators upgrade. It moves alethia-reth to reth v2.6.0 (OP Reth op-v2.6.0-2), upgrades proof-history storage to the v2 layout, and lets tx-pool selection continue past a transaction that overflows the zk gas budget. It contains no fork-schedule changes, and Taiko's block execution rules are unchanged.
CLI changes
alethia-reth:
--engine.num-state-masking-blocks(new in reth v2.6) defaults to0. alethia-reth does not support state masking and refuses to start with a nonzero value, whether it comes from the flag or fromRETH_ENGINE_NUM_STATE_MASKING_BLOCKS.- Startup now runs reth's engine argument checks, as reth's own
nodecommand does. For example,--engine.persistence-backpressure-thresholdmust be greater than--engine.persistence-threshold, and--engine.memory-block-buffer-targetmust not exceed it. Invalid combinations were previously accepted silently. The--engine.persistence-threshold 128 --engine.memory-block-buffer-target 128flags used in Taiko deployments pass.
Removed in reth v2.5:
--engine.sparse-trie-max-hot-slots,--engine.sparse-trie-max-hot-accounts, and the--engine.sparse-trie-max-storage-triesalias. Remove them from deployment configs before upgrading.
Default changes inherited from reth v2.6:
--engine.persistence-threshold:2→50. With default flags, the node persists about every 45 blocks instead of every 3, so a hard kill leaves up to ~50 blocks to re-sync. A graceful stop still flushes everything.--engine.memory-block-buffer-target:0→5.--engine.persistence-backpressure-threshold:16→max(100, 2 × persistence threshold). It now counts in-memory blocks minus the buffer target.--rpc-cache.max-cached-tx-hashes:30000→100000.--rpc-cache.max-headersis still accepted but does nothing.
New optional flags include --authrpc.jwtsecret-hex, --http.compression, --http.decompression, --engine.txpool-prewarming, --engine.sender-recovery-cache, and --dev.finality-depth. --rpc-cache.cache-computed-bals and --rpc-cache.prewarm-bals are for Amsterdam block access lists, which Taiko does not use.
Breaking and operator-visible changes
- Proof-history storage is rebuilt in the v2 layout on first start. See "Proof history" below, and upgrade proof-history nodes one at a time.
- The default
ethwire protocol is now eth/71, negotiated per peer. Peers that only speak eth/69, including taiko-geth, still connect. --txpool.minimum-priority-feenow also applies to local transactions.eth_getLogsnow returns an error for pruned ranges and for afromBlockbeyond the head.--txpool.max-batch-size 0is rejected.forkchoiceUpdatednow returns payload-job start failures as-32603(internal error) instead of-38003. These failures are node-local, and taiko-client does not depend on the code.- Blocks before Unzen are now state-rooted serially through the database, so replaying pre-Unzen history through the engine is slower. This works around reth's handling of a pre-EIP-6780
SELFDESTRUCTof a contract that holds storage. Blocks after Unzen keep reth's default path. - Building from source requires Rust 1.99.
- The reth database does not need a migration or resync. To roll back to v1.4.x, delete the proof-history storage first: v1.4.x cannot read the v2 layout.
Proof history
- On first start, the v1 store is deleted and rebuilt in the v2 layout from reth's on-disk tip. A store is also rebuilt when its current-state copy was interrupted, or when its earliest block is no longer canonical after a persisted reorg; previously every restart stopped on
PrependOutOfOrder. The rebuild deletes only the store's own files (mdbx.dat,mdbx.lck,database.version, and alethia-reth's marker files) and keeps the directory and anything else in it. - Window-only nodes (
--proofs-history.backfill-window-only) then backfill the window backward from reth changesets, checking every block's state root against its header. The backfill resumes after a restart. Raising--proofs-history.windowlater also backfills before proof RPCs become ready. - Default (non-window-only) nodes start their history over from the upgrade block.
- Until the backfill finishes, proof RPCs only serve the canonical fallback within 1024 blocks of the tip; deeper requests return an error.
- Proof history needs unpruned reth changesets for the whole window. Otherwise the backfill fails with an error that says so.
- The current-state copy holds one reth database reader for its whole run, which takes hours on mainnet. While it runs, a reorg below the persisted boundary waits for it, and the node can stop following the chain once its in-memory blocks reach the backpressure threshold. Watch for deep reorgs and reth database growth during the copy.
- The backfill does not observe shutdown, so a long first backfill can be killed at the pod's termination grace period. That is safe: the next start resumes from the stored earliest block.
- The backfill now waits while reth's persisted head is below the stored earliest block, instead of failing and stopping the node. This happened on hoodi when a reorg during the initial copy unwound persisted blocks.
Block building and tracing
taikoAuth_txPoolContent*and mempool-based payload building (payload attributes without a transaction list) no longer stop at the first transaction that overflows the Unzen zk gas block budget. They skip it, along with its sender's later nonces, and keep filling the list. Overflowing transactions are remembered by execution state: at the same state they are skipped without being re-run, and re-runs at a new state are capped per call. Block import, sealing, and prover execution still stop at the first overflow.- Traced execution (
debug_trace*,trace_*) now charges zk gas for CALL/CREATE-family opcodes and precompiles the same way block execution does, and a tracer that rewrites a precompile's result no longer changes the zk gas charged. Block execution is unchanged.
Dependencies
- reth moves from
paradigmxyz/reth@f2eecc6(v2.4.0 plus 9 commits) to OP Rethop-v2.6.0-2(ethereum-optimism/reth@3c5f2f1), which is reth v2.6.0 plus upstream backports, including the state-root fix from paradigmxyz/reth#28264.reth-optimism-triemoves to the OP Reth v2.8.1 release commit (ethereum-optimism/optimism@7220729). - Also upgraded: revm 41 → 43, alloy-evm 0.37 → 0.39, and alloy 2.2 → 2.4.
Full changelog: v1.4.1...v1.5.0