Skip to content

Merge op-reth v2.8.1 - #28

Merged
sduchesneau merged 311 commits into
release/op-reth-2.xfrom
bump/op-reth-2.8.1
Nov 6, 2026
Merged

sduchesneau merged 311 commits into
release/op-reth-2.xfrom
bump/op-reth-2.8.1

Conversation

@dfuse-bot

Copy link
Copy Markdown

Merges upstream op-reth/v2.8.1 (307 commits on top of op-reth/v2.6.1) into release/op-reth-2.x. Release tag once merged: op-reth-v2.8.1-fh3.1 (newest tag on the branch is op-reth-v2.6.1-fh3.1; the Firehose block model is unchanged, so fh3.1 stays).

Depends on streamingfast/reth#90. rust/Cargo.toml pins streamingfast/reth tag op-reth-v2.8.1-fh3.1, which does not exist until that PR is merged and its merge commit is tagged. The build (and the sf-release.yml image build) fails until then. rust/Cargo.lock was resolved against the head of that PR's branch; if the tag ends up on a different commit (a merge commit), refresh it with cargo update -p reth-firehose in rust/ before merging.

What changed

  • Upstream moves reth to ethereum-optimism/reth op-v2.6.0-2 (reth v2.6.0), revm 42 → 43 and alloy-evm 0.38 → 0.39. All reth-* git dependencies now point at streamingfast/reth tag op-reth-v2.8.1-fh3.1, and the alloy-evm patch at streamingfast/evm v0.39.0-sf. firehose-tracer stays on 5.5.0.
  • Conflicts: rust/Cargo.toml (reth pins; reth-ipc and reth-engine-tree added upstream, our reth-execution-cache, reth-trie-parallel and reth-firehose kept), rust/Cargo.lock (regenerated from upstream's), node.rs imports, and proof_history.rs, which upstream deleted when it moved launch_node into node.rs. The Firehose on_component_initialized(init_blockchain) hook moved with it and now covers both the plain and the proofs-history launch.
  • Firehose crate: ConfigurePostExecEvm::Snapshot was removed upstream, and engine_validator.rs follows reth's payload validator (overlay state provider factory instead of StateProviderBuilder, blocks carrying an optional access list, BlockAccessListDecodeError, and a transaction whose sender cannot be recovered is now an invalid block rather than an internal error).
  • New ACTIVATIONS.md with every OpHardfork, its status on OP Mainnet and Unichain, and its effect on the Firehose block.

Firehose bug patterns

  1. Serial order: none found. parallel_bal_execution stays false in our validator; prewarm and BAL workers run without the inspector. Upstream's new derived payload service still calls build_payload, where firehose_trace_built_block runs.
  2. Block emitted only after acceptance: none found. The new extraData header check and the BAL gas-limit check both run before mark_verified().
  3. Activations: no OpHardfork added and no compiled-in timestamp changed for OP Mainnet or Unichain. Lagoon (not scheduled anywhere) enables the 0x7D post-exec transaction; firehose-tracer 5.5.0 has no such type and the reth mapper converts the type with expect(...), so the first such transaction would panic the node. This is a blocker to fix before any network schedules Lagoon, not for this release.
  4. Fields and enums: no change to OpTxEnvelope, OpTxType, OpReceipt, deposits or the header. The fee vault credits call upstream operator_fee_charge / calculate_tx_l1_cost; op-revm handler.rs changed only in comments.

Operator-visible changes from upstream

  • --engine.persistence-threshold default goes from 7 to 50: more blocks held in memory, and after an unclean shutdown the node re-executes (and re-emits) up to 50 blocks.
  • eth_capabilities no longer advertises history below the Bedrock block.
  • A deprecation warning is logged at startup when the database uses storage V1.
  • No CLI flag we pass was removed (cli_snapshot passes unchanged).

Test Execution Summary

op-reth op-reth/v2.8.1 merged into streamingfast/optimism release/op-reth-2.x (branch bump/op-reth-2.8.1), with reth op-v2.6.0-2 merged into streamingfast/reth release/optimism-2.x (branch bump/op-reth-2.8.1-fh3.1).

The op-reth workspace was built against the reth branch head through a local op-reth-v2.8.1-fh3.1 tag (never pushed), so rust/Cargo.lock already resolves streamingfast/reth.git?tag=op-reth-v2.8.1-fh3.1.

Build Status

  • streamingfast/reth: cargo check -p reth-firehose -p reth-firehose-tests --tests: PASSED
  • streamingfast/optimism (rust/): cargo check -p reth-optimism-firehose -p reth-optimism-node -p op-reth -p reth-optimism-payload-builder -p reth-optimism-evm -p alloy-op-evm -p op-alloy-consensus -p reth-optimism-cli --tests: PASSED
  • streamingfast/optimism: cargo build -p op-reth --bin op-reth (dev profile, used for Battlefield): PASSED
  • rustfmt +nightly-<mise pin> --edition 2024 --check on the edited Rust files: PASSED
  • Docker image (rust/op-reth/Dockerfile.sf): NOT RUN locally. It fetches the streamingfast/reth tag op-reth-v2.8.1-fh3.1, which does not exist until the reth PR is merged and tagged; the sf-release.yml PR build fails for the same reason until then.

Unit Tests

Repo Package / command Status Notes
streamingfast/reth cargo test -p reth-firehose -p reth-firehose-tests PASSED 33 unit tests, 2 prestate tests
streamingfast/optimism cargo test -p reth-optimism-firehose -p reth-optimism-node -p alloy-op-evm -p reth-optimism-payload-builder -p reth-optimism-evm -p op-alloy-consensus -p reth-optimism-cli -p op-reth --no-fail-fast PASSED alloy-op-evm 114, op-alloy-consensus 112, reth-optimism-evm 58, reth-optimism-node 51 + 25 (it) + 2 (e2e, 1 ignored), reth-optimism-payload-builder 41 + 1, reth-optimism-cli 15, op-reth 5; reth-optimism-firehose has no unit tests
streamingfast/optimism cargo test -p reth-optimism-cli --all-features --test cli_snapshot PASSED 5 tests; snapshot unchanged from upstream v2.8.1

Integration Tests

  • Status: NOT RUN (no Firehose integration suite in the op-reth workspace beyond the tests above).

Battlefield Tests

  • Status: PASSED
  • Pass/Fail: 78 passing / 0 failing, 26 pending (skipped by the suite on this network: Amsterdam, BAL, EIP-7708, blob transactions, other chains' features)
  • Setup: streamingfast/battlefield-ethereum master (879ea9a), op-reth-devnet target.
    1. builder-playground cook opstack --output=scripts/optimism/op-chain --external-builder op-rbuilder --flashblocks
    2. OP_RETH_BINARY=<optimism>/rust/target/debug/op-reth ./scripts/run_firehose_op_reth_devnet.sh (fireeth v2.24.1)
    3. local op-node built from the merged branch (go build ./op-node/cmd), with the arguments of scripts/optimism/run_optimism_devnet.sh
    4. pnpm test:fh3.0:op-reth-devnet
  • Deviation: scripts/optimism/run_optimism_devnet.sh could not be used as is. Its funding step sends the faucet transaction to the flashblocks-rpc node, which never synced past block 0 here, so the script aborts after 15 tries. The faucet transaction was sent to the op-rbuilder RPC (:8547, the RPC the tests use) and the other steps were run by hand with the script's arguments. Two earlier playground starts failed on container start ordering (bproxy and op-geth started before the containers they resolve); the third came up.
  • Block comparison: the in-suite "Firehose blocks match RPC blocks" was skipped because the devnet L1 never justified an epoch, so no L2 block became final. Instead fireeth tools compare-block-store-rpc <merged-blocks> http://localhost:8549 0 299 against the sequencer's op-geth reported blocks 0 to 299 identical (all Battlefield transactions are in that range), and fireeth tools compare-oneblock-rpc reported the 260 one-blocks from 300 to 556 identical.
  • Fork coverage: the devnet activates every fork up to Isthmus at genesis. Jovian and Karst, both active on OP Mainnet and Unichain, and Lagoon (not scheduled anywhere) are not exercised by Battlefield.

Firehose bug pattern review

  1. Serial order: none found. The clone in engine_validator.rs keeps parallel_bal_execution = false; prewarm and BAL workers run without the inspector; the new derived payload service goes through build_payload, where firehose_trace_built_block already runs.
  2. Emission after acceptance: none found. The new extraData header check and the BAL gas-limit check run before mark_verified().
  3. Activations: OpHardfork is unchanged (Bedrock to Karst, plus Lagoon) and no compiled-in timestamp changed for OP Mainnet or Unichain. Lagoon, not scheduled, enables the 0x7D post-exec transaction, which the reth mapper cannot convert (see ACTIVATIONS.md).
  4. Fields and enums: OpTxEnvelope, OpTxType, OpReceipt and the header are unchanged. The OpPostTxExtras fee formulas call upstream operator_fee_charge/calculate_tx_l1_cost; op-revm handler.rs changed only in comments and l1block.rs is unchanged.
  5. Transactions without a hash: not affected by this release.

Environment notes

  • /data/workspace was owned by root and not writable; fixed with sudo chown.
  • zip (apt) and yq (go install github.com/mikefarah/yq/v4@v4.44.3) were missing; op-node's build needs them to generate superchain-configs.zip.

CHANGELOG

## op-reth-v2.8.1-fh3.1

Bumps the SF op-reth fork to upstream `op-reth/v2.8.1` (307 upstream commits on top of
`op-reth/v2.6.1`).

### Changed

* Merged upstream `op-reth/v2.8.1`, which moves reth to ethereum-optimism/reth `op-v2.6.0-2`
  (reth v2.6.0), revm to 43 and alloy-evm to 0.39. The fee vault formulas, deposit handling and
  fork schedule the Firehose hooks depend on are unchanged. Upstream fixes `eth_capabilities` so it
  no longer advertises history below the Bedrock block.
* Reth now comes from `streamingfast/reth` tag `op-reth-v2.8.1-fh3.1`, which merges `op-v2.6.0-2`
  into `release/optimism-2.x`.
* `alloy-evm` now comes from `streamingfast/evm` tag `v0.39.0-sf`, so block traces keep their
  `systemCalls`.
* The Firehose engine validator follows upstream's payload validator: a block whose transaction
  sender cannot be recovered is now rejected as an invalid block instead of failing with an
  internal error.
* Add `ACTIVATIONS.md`, which lists every OP hardfork with its status on OP Mainnet and Unichain
  and its effect on the Firehose block.

Open questions

  • The Battlefield OP devnet stops at Isthmus, so Jovian and Karst (both live on OP Mainnet and Unichain) are not exercised; the first production host should run in test mode before the rest.
  • Lagoon needs a Firehose transaction type for 0x7D and a check of the gas used for post-exec refunds before any network schedules it (see ACTIVATIONS.md).
  • The Firehose init line reports node version 2.3.0, the stale reth-optimism-firehose crate version, not the op-reth version. Unchanged by this PR.

geoknee and others added 30 commits October 12, 2026 11:41
…-optimism#23191)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Anton Evangelatov <anton.evangelatov@oplabs.co>
…eGame.closeGame (ethereum-optimism#23267)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…um-optimism#23290)

Co-authored-by: oplabs-renovate[bot] <310106951+oplabs-renovate[bot]@users.noreply.github.com>
…eum-optimism#23291)

Co-authored-by: oplabs-renovate[bot] <310106951+oplabs-renovate[bot]@users.noreply.github.com>
…okup (ethereum-optimism#23275)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…um-optimism#23292)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e tests (ethereum-optimism#23277)

Co-authored-by: Karl Floersch <karl@Karls-Mac-Mini.local>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…es above 7 days (ethereum-optimism#23276)

Co-authored-by: Karl Floersch <karl@Karls-Mac-Mini.local>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…3320)

Co-authored-by: Mark Chen <292447144+mark-chen-mantle@users.noreply.github.com>
…um-optimism#23311)

Co-authored-by: Mark Chen <292447144+mark-chen-mantle@users.noreply.github.com>
…m#23353)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…eum-optimism#23355)

Co-authored-by: Karl Floersch <karl@Karls-Mac-Mini.local>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ism#23362)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…3328)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…mism#22965)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…m#23220)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: George Knee <georgeknee@googlemail.com>
…imism#23286)

Co-authored-by: Karl Floersch <karl@Karls-Mac-Mini.local>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…3347)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
geoknee and others added 25 commits November 4, 2026 13:28
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…thereum-optimism#23875)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: maurelian <23033765+maurelian@users.noreply.github.com>
)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…tsInvalidMessage (ethereum-optimism#23885)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…m#23896)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…v feature flag (ethereum-optimism#23868)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
… game in StandardValidator (ethereum-optimism#23869)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…tor (ethereum-optimism#23870)

Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…notice (ethereum-optimism#23919)

Co-authored-by: Claude Mythos 5.1 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Mythos 5.1 <noreply@anthropic.com>
…um-optimism#23814)

Co-authored-by: Claude Mythos 5.1 <noreply@anthropic.com>
Co-authored-by: Matt Solomon <matt@mattsolomon.dev>
…RPC errors (ethereum-optimism#23930)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Matt Solomon <matt@mattsolomon.dev>
…21 notice (ethereum-optimism#23934)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Mythos 5.1 <noreply@anthropic.com>
Mirror the upstream payload validator changes: overlay state provider
factory, blocks carrying access lists, and unrecoverable senders reported
as invalid blocks.
@dfuse-bot
dfuse-bot requested a review from sduchesneau November 6, 2026 21:23
@sduchesneau
sduchesneau merged commit 05c8750 into release/op-reth-2.x Nov 6, 2026
2 of 3 checks passed
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.