Skip to content

Bump reth to v2.10.0 - #87

Merged
sduchesneau merged 38 commits into
release/reth-2.xfrom
bump/reth-2.10.0
Nov 6, 2026
Merged

sduchesneau merged 38 commits into
release/reth-2.xfrom
bump/reth-2.10.0

Conversation

@dfuse-bot

@dfuse-bot dfuse-bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Merges upstream reth v2.10.0 into release/reth-2.x. Release as reth-v2.10.0-fh3.1 (the newest tag on the branch is reth-v2.9.0-fh3.1-1; the Firehose block model does not change, so fh3.1 stays).

Merge order: streamingfast/evm2#1 must be merged and its merge commit tagged reth-v2.10.0-sf first. This PR pins that tag in Cargo.toml. It builds today only because Cargo fetches the commit Cargo.lock records (e1f625f1, the evm2 PR's head), which is still reachable on the evm2 PR branch. If the tag lands on another commit (a merge commit), run cargo update -p evm2 -p evm2-inspectors -p evm2-jit here before merging, so the lock file matches the tag.

Besides the merge, one Firehose change: FirehoseBlockExecutor::execute_transaction_with_commit_condition passes the transaction's state changes to the callback, following the upstream SDK change (paradigmxyz#28207).

CHANGELOG

## reth-v2.10.0-fh3.1

### Changed

- Update to upstream reth [v2.10.0](https://github.com/paradigmxyz/reth/releases/tag/v2.10.0).
  evm2 comes from the `streamingfast/evm2` fork tag `reth-v2.10.0-sf`. No hardfork is scheduled
  or changed, and the Firehose block output does not change.

Test Execution Summary

Branch bump/reth-2.10.0 (merge of upstream v2.10.0 into release/reth-2.x). Local builds point the evm2 patch at the streamingfast/evm2 branch bump/reth-2.10.0 (head e1f625f1), the commit the reth-v2.10.0-sf tag is meant for. The committed Cargo.toml pins the tag.

Build Status

  • cargo check -p reth -p reth-firehose -p reth-firehose-tests -p reth-engine-tree -p reth-evm -p reth-rpc --all-targets: PASSED
  • cargo check --workspace --all-targets: PASSED
  • cargo +nightly-2026-10-31 fmt --all -- --check: PASSED
  • cargo build --release --locked -p reth --bin reth: PASSED (binary used for Battlefield)
  • CI Build, push and release (if tag) (Dockerfile.sf image build) on the PR head: PASSED

Unit Tests

Package Status Notes
cargo test -p reth-firehose -p reth-firehose-tests (mandatory) PASSED reth-firehose 80, batch_executor 1, prestate 7 (golden files unchanged), staged_sync_bal 1
cargo test -p reth-engine-tree --lib --test firehose_live_tracing --test firehose_live_tracing_amsterdam --test firehose_live_tracing_prewarm_reuse PASSED 240 lib tests (includes the parallel BAL Firehose tests), 3 live tracing tests
cargo test -p reth-evm -p reth-evm-ethereum PASSED 16 + 25 + 14 + 1 (6 ignored upstream)
cargo test -p evm2 --lib (in streamingfast/evm2 bump/reth-2.10.0) PASSED 722 tests

Integration Tests

  • Status: covered by the engine-tree live tracing tests above (they run the engine with the Firehose tracer and assert the emitted blocks).

Battlefield Tests

streamingfast/battlefield-ethereum at 879ea9a, fireeth v2.24.1, reth built from this branch.

  1. Reth Dev, Amsterdam genesis (default)
    • ./scripts/run_firehose_reth_dev.sh then pnpm test:fh3.0:reth-dev
    • Status: PASSED. 94 passing, 0 failing, 10 pending (network-specific tests that skip on reth-dev).
  2. Reth Dev, Prague genesis
    • ./scripts/run_firehose_reth_dev.sh prague then pnpm test:fh3.0:reth-dev
    • Status: FAILED, 19 passing, 64 failing, 21 pending. All 64 are snapshot value diffs, no failed transaction trace. The reth-dev snapshots are recorded on Amsterdam (EIP-8037 gas, EIP-7708 logs), so a Prague chain differs from them. Expected diff, not caused by this merge: reth-v2.9.0-fh3.1-1 built from source gives the same 64 failures on the same setup, and the traces of both binaries are identical once identity fields (addresses, hashes, nonces, signatures and the logs bloom built from them), which vary with deployment order between runs, are masked. The one remaining difference is a transaction the baseline dev node packed second in its block (cumulativeGasUsed, same gasUsed).
  3. Reth Devnet (builder-playground: reth v1.9.3 primary EL, Lighthouse v8.1.0, Prague/Osaka-era forks, no Amsterdam)
    • ./scripts/ethereum_devnet/run_playground_devnet.sh, ./scripts/run_firehose_reth_devnet.sh, then pnpm test:fh3.0:reth-devnet
    • Status: PASSED on a fresh chain. 84 passing, 0 failing, 21 pending (network-specific tests that skip on reth-devnet).
    • An earlier run against a chain reused from a previous run had 82 passing and 2 failing, both tests that need a fresh chain (the prague/setcode_set_delegations ordinal shift the Battlefield README describes, and the precompile-without-balance guard). Both pass on the fresh chain above.

scripts/compare-blocks.sh, which the chain-update skill asks for after each run, does not exist in Battlefield anymore, so it was not run.

Fork coverage: Amsterdam (Glamsterdam on the execution layer) is covered by Reth Dev's default genesis, the amsterdam_* prestate goldens and firehose_live_tracing_amsterdam. The pre-Amsterdam forks mainnet and Hoodi run are covered by the devnet and the Prague dev run.

Firehose review

  • Upstream range: 34 commits v2.9.0..v2.10.0. Conflicts only in Cargo.toml (version, evm2 patch), Cargo.lock and docs/vocs/vocs.config.ts (version).
  • evm2: upstream moved to evm2 592bf18 and now patches evm2 itself through [patch."https://github.com/alloy-rs/evm2"]. That table now points at streamingfast/evm2 tag reth-v2.10.0-sf (592bf18 plus the system-call inspection commit), and our separate patch table is gone, since Cargo rejects the same table twice.
  • Breaking SDK change (feat(evm)!: pass state changes to the commit-condition callback paradigmxyz/reth#28207): execute_transaction_with_commit_condition passes evm2::TxStateChanges to the callback. FirehoseBlockExecutor overrides it and now passes the pending state changes, like upstream's default implementation. No other Firehose code calls it.
  • Pattern 1 (serial tracer order): checked. No new parallel or out-of-order execution path. Upstream touched payload_processor (bal/execute.rs test imports, prewarm.rs test imports, a refactor in CacheTaskHandle); db repair-trie verification is the only new parallelism, and it does not execute transactions.
  • Pattern 2 (emit after acceptance): checked. Upstream changes to payload_validator.rs are span parents only; no new post-execution check. Blocks are still printed by FirehoseBlockTracer::mark_verified() after validation.
  • Pattern 3 (activations): checked. alloy-hardforks stays at 0.4.11 and the chain specs are unchanged: Amsterdam is active on Sepolia (block 11856337), unscheduled on Hoodi (u64::MAX) and mainnet; BPO3-5 unscheduled. This release neither schedules nor changes Glamsterdam. ACTIVATIONS.md refreshed.
  • Pattern 4 (unmapped fields): checked. alloy crates stay at 2.5.0, so header, transaction, receipt and log types are unchanged. evm2 removed Interpreter::failed_charge, which the inspector does not use.
  • Pattern 5 (hash-less transactions): not applicable to L1 reth.
  • Golden files: none changed.

Open questions

  • The Reth Dev Battlefield target fails 64 snapshot comparisons on a Prague genesis with this release and with reth-v2.9.0-fh3.1-1 alike, because its snapshots are recorded on Amsterdam. Should Battlefield get Prague snapshots for reth-dev, since mainnet and Hoodi are not on Amsterdam yet? Nothing in this PR depends on it.

emmajam and others added 30 commits October 29, 2026 11:15
Co-authored-by: Brian Picciano <933154+mediocregopher@users.noreply.github.com>
Co-authored-by: decofe <256792747+decofe@users.noreply.github.com>
…radigmxyz#28160)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
…igmxyz#28218)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ts/bench-reth-charts (paradigmxyz#28236)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matthias Seitz <19890894+mattsse@users.noreply.github.com>
Co-authored-by: Matthias Seitz <19890894+mattsse@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Matthias Seitz <19890894+mattsse@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
…igmxyz#28249)

Co-authored-by: Matthias Seitz <19890894+mattsse@users.noreply.github.com>
Co-authored-by: Brian Picciano <me@mediocregopher.com>
…28246)

Co-authored-by: Matthias Seitz <19890894+mattsse@users.noreply.github.com>
…igmxyz#28247)

Co-authored-by: Matthias Seitz <19890894+mattsse@users.noreply.github.com>
…xyz#28259)

Co-authored-by: Matthias Seitz <19890894+mattsse@users.noreply.github.com>

@UlysseCorbeil UlysseCorbeil left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm after the cargo update like desc. says

@sduchesneau
sduchesneau merged commit c2e122e into release/reth-2.x Nov 6, 2026
4 checks passed
@sduchesneau
sduchesneau deleted the bump/reth-2.10.0 branch November 6, 2026 21:03
@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown

Merging this PR will release reth-v2.10.0-fh3.1

  • Creates the tag reth-v2.10.0-fh3.1 on the merge commit
Release notes

Changed

  • Update to upstream reth v2.10.0.
    evm2 comes from the streamingfast/evm2 fork tag reth-v2.10.0-sf. No hardfork is scheduled
    or changed, and the Firehose block output does not change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.