feat(firehose): port FirehoseLiveHooks to release/reth-2.x - #35
Merged
maoueh merged 1 commit intoSep 17, 2026
Merged
Conversation
The live engine path wrapped the traced executor without chain hooks, so OP Stack chains lost fee-vault credits and deposit nonces in their traces.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ports
FirehoseLiveHooksfromrelease/base-2.x(511a2bb) torelease/reth-2.x.On
reth-v2.5.2-fh3.1,execute_and_trace_blockwraps the live executor withFirehoseWrappedExecutor::new, so a chain'sPreTxAdjust/PostTxExtrasonly run on the staged-sync path (throughChainHooks). Blocks imported through the engine API are traced without them. Chains that consume the generic line and customize fee handling need the hooks on both paths; we hit this while integrating Morph (morph-reth, built on upstream reth v2.5.2).The commit is a cherry-pick of 511a2bb. The only conflict was the doc comment of
execute_and_trace_block, where the JIT paragraph ofrelease/reth-2.xis kept. As onrelease/base-2.x, the live path now takes aStateProviderBox, since the hooks are typed againstLiveTracedEvm.This is the first of four PRs needed by the Morph integration: #36 (post-tx gas accounting, stacked on this one), #37 (undefined SELFDESTRUCT) and #38 (
Executor::executere-emitting blocks).Testing
cargo test -p reth-firehose --lib,cargo test -p reth-firehose-tests.cargo test -p reth-engine-tree --test firehose_live_tracing,cargo check -p reth-bb -p example-custom-beacon-withdrawals -p example-custom-state-root.https://claude.ai/code/session_017NVMdn2RC1Nv5tfSTCkvro