Skip to content

Switch Arbitrum Firehose tracing to the shared tracer - #71

Merged
sduchesneau merged 3 commits into
release/arbitrum-3.xfrom
feature/arbitrum-shared-firehose-tracer
Oct 1, 2026
Merged

sduchesneau merged 3 commits into
release/arbitrum-3.xfrom
feature/arbitrum-shared-firehose-tracer

Conversation

@sduchesneau

@sduchesneau sduchesneau commented Sep 30, 2026 •

Copy link
Copy Markdown

Moves the Arbitrum Firehose instrumentation onto evm-firehose-tracer-go/v5, like the geth and Polygon branches (#70).

Uses the shared tracer from streamingfast/evm-firehose-tracer-go master at feb9613, which contains #8 (Polygon hooks), #11 and #12 (Arbitrum hooks, keccak filter).

Kept as-is, through the adapter or new tracer-go support:

  • Simulated root call for deposit, submit-retryable and internal transactions, and a synthesized root call for transactions that skip EVM execution
  • Transactions ending without a receipt (skipped while building the block) are left out
  • The system call ArbOS runs within its internal transaction, and ArbOS storage writes outside an EVM call
  • Arbitrum transaction types, and balance change reasons 128 and above recorded as transfers
  • Keccak preimage filter (now in tracer-go, for all chains) and the SlotNumber / BlockAccessListHash header fields

Output changes (live blocks included, Arbitrum always ran the compatibility mode):

  • The Firehose 2.3 backward compatibility mode is gone, blocks are ver: 5:
    • accountCreations is no longer recorded.
    • executedCode is true when an opcode ran.
    • CREATE calls keep their input.
    • Transaction returnData is set.
    • Root calls keep their begin ordinal.
    • Selfdestruct balance changes are no longer reordered or duplicated.
  • Gas changes and no-op state changes (old == new) are no longer recorded.
  • Receipt log index counts logs of reverted calls, like the other chains, and reverted-call logs keep their index instead of 0.
  • addressDelegatesTo (EIP-7702) is now set from ArbOS 40. The fork rules previously used the header difficulty, which is always 1 on Arbitrum, so Prague never activated for the tracer.
  • LIB never trails the block by more than 200 and never exceeds the block number.
  • Protocol 3.1 lines: FIRE INIT 3.1 firehose-evm-tracer/arbitrum … and a flash block index field (always 0) on FIRE BLOCK. Needs fireeth v2.14.4 or later.
  • An output write that keeps failing now panics instead of dropping the block.

The OnBlockUpdate hook, which nitro never called, and the OnNewAccount hook are removed.

go.mod moves to go 1.25.4 and picks up newer x/crypto, x/tools and protobuf versions required by the shared tracer; nitro's go.mod will need the same bumps.

Golden files were regenerated. Every difference falls into the categories above.

Battlefield

Ran battlefield-ethereum (arbitrum-nitro-dev) against nitro built from streamingfast/nitro#31 (this branch as submodule): 67 passing, 26 pending, and the Firehose vs RPC block comparison passes.

New fh3.0/v5/arbitrum-nitro-dev snapshots compared with the old fh2.3/arbitrum-nitro-dev ones (61 files): the differences are the compatibility-mode changes listed above (no accountCreations, executedCode, CREATE input, returnData, ordinals), the duplicated selfdestruct withdraw removed, no-op balance and code changes removed, 2 reverted-call log indexes, and keccak preimages dropped by the filter. The remaining value differences are ArbOS L1 pricing storage and balances, which vary with gas prices on each fresh dev chain.

The EIP-7702 battlefield tests are skipped on this network, the ArbOS 40 delegation fix is covered by a unit test only.

The battlefield run used an earlier tracer-go commit (c3c68f5). The final pin only adds master's faster FIRE BLOCK printing and a fix for dropped transactions in the parallel commit path, and the Firehose unit and golden tests pass unchanged with it.

Arbitrum specific handling stays in the adapter. Output drops the Firehose 2.3
backward compatibility mode, gas changes and no-op state changes.
@sduchesneau
sduchesneau marked this pull request as ready for review October 1, 2026 13:22
@sduchesneau
sduchesneau requested a review from maoueh October 1, 2026 14:32
@sduchesneau
sduchesneau merged commit 3e48286 into release/arbitrum-3.x Oct 1, 2026
@sduchesneau
sduchesneau deleted the feature/arbitrum-shared-firehose-tracer branch October 1, 2026 15:59
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.

2 participants