Methodology

What a same-path estimate is, where the data comes from, and why some transactions get a warning instead of a number.

The pipeline at a glance

  1. Hosted archive nodedebug_traceTransaction re-executes the transaction under its original fork rules
  2. Three built-in tracesprestateTracer, callTracer and the struct/opcode logger — no custom tracer code
  3. Normalized trace IRframes, warm sets, storage journals, refund and state-refill ledgers
  4. Devnet 8 repricingordered simulation with the state-gas reservoir and per-frame 63/64 forwarding
  5. Same-path estimate — or replay-requirednumbers are withheld whenever the path itself could change

The same-path model

Gasworks takes a transaction already included on Ethereum mainnet, obtains its original execution trace, and re-prices every step under the pinned Glamsterdam Devnet 8 gas rules — assuming the execution path stays exactly the same. We never claim a transaction would succeed or fail under Glamsterdam: extra gas charges can change how much gas inner calls receive, trigger out-of-gas where there was none, or flip gasleft()-dependent branches. Results are therefore always labeled same-path estimate.

Where the data comes from

Gasworks calls a hosted archive node's debug_traceTransaction with the built-in prestateTracer, callTracer and struct/opcode logger, alongside the transaction, receipt and block. The node re-executes the transaction under its original fork rules to produce those traces; this service runs no EVM of its own and never accepts user-supplied tracer code. Trace provenance (client version, tracer config, payload hash) is recorded with every analysis.

What gets repriced

User gas vs block accounting

Under EIP-7778 a block accumulates execution gas and state gas independently, and the block header records the maximum of the two cumulative dimensions. A single transaction therefore has two block contributions that must not be added together, and neither replaces the user-paid gas shown in the summary.

Why per-EIP deltas are not independent

The calldata floor is a max, refunds are capped, and state refills net out charges that did not stick. Attribution therefore includes explicit interaction-adjustment rows. If the source receipt contains gas that the trace cannot attribute to an EIP, it is shown separately as baseline reconciliation rather than mislabeled as EIP-7778. The rows still sum exactly to the net change. Toggling one EIP on its own would not produce the same numbers.

When numbers are withheld

If the analysis cannot stand behind a same-path number, it returns replay required with reasons instead of a plausible-looking total:

Incomplete traces never produce partial numbers presented as success — that is an invariant of the whole pipeline.

Determinism and caching

Results are cached by transaction hash, ruleset and analyzer version, and are immutable: publishing a new ruleset never rewrites an old analysis. The ruleset pins the Devnet 8 release tag, EELS commit and fixture SHA-256 that its parameters were extracted from.

Fees

Gas, not ETH, is the primary unit everywhere. Fee amounts depend on a base-fee assumption the protocol does not fix, so they are intentionally not shown.