No source resolved for the code this transaction ran, so this recording is at instruction level: every step is a program counter into the contract's bytecode. A chain publishes the bytecode that ran and not the source it was built from, so source has to be obtained separately and proved against that bytecode — which has not happened for this contract. Stepping is complete either way.
Stepping continues at instruction level.
Frames are recorded and carry the names this recording gives them. Nothing resolved a source position, so they carry no file or line. They are listed once the session is live.
Calls and storage writes are recorded against program counters rather than source lines.
This recording carries no variable names. Naming a local needs the debug symbols from the contract's compiled artifact, and none resolved for this contract.
0x2867a050ad877080bf7754126707aa35fbb137fcbd2fc6b13e4e09c36a94742e
Blocks and transactions taken from the live network. This is a preliminary export covering 13 July to 28 September 2026.
Source code is shown for 1 of the 2 contracts this transaction ran. It matches the code that ran on the chain. Published by npm:@aztec/[email protected] FeeJuice. The chain proves the code that ran, not the source text beside it — that comes from a single publisher. The rest step as instructions.
BlockTracer holds no call data for this transaction, so there is nothing here for an ABI to decode. Whether none was published or the body was pruned before it was captured is not something this section can tell; where that is known, it is stated above.
{
"l2BlockNumber": 47032,
"txIndexInBlock": 0,
"revertCode": 0,
"bodyRetainedAtCapture": true,
"effectVisibleAtCapture": true,
"replay": {
"instructionsExecuted": 459,
"hydrationRounds": 3,
"preStateReadAt": 47031,
"effectsMatched": 10,
"effectsMismatched": 0,
"effectsReproduced": true,
"rootsAnyAgree": false,
"roots": [
{
"tree": "noteHashTree",
"resident": "0x2590f2aab19dd791700b4a43d3f52bb88ef2409a3731da8e848663559202e4c6",
"chain": "0x16b2aa9db83c48b6d576fc2942b1717abb9ec9d74b9de4c0dbd2a664b34cf45a",
"agrees": false
},
{
"tree": "nullifierTree",
"resident": "0x2455f8e4e3ac4728e604618bc60a386984da034dd8a90eb54ff5404720198977",
"chain": "0x19d9ab9289b3ebb872356d08fa19923007935a6ca811ecdb7ee770dacc0e4c02",
"agrees": false
},
{
"tree": "publicDataTree",
"resident": "0x1fda3064681c089bf789f40b8672a1429f91df6527a2589dc3007dbb6b05bb5a",
"chain": "0x1811ffb40cb02637446e23b0fdcf3d5edac1c50b8965403bcaec4a3b40906ef5",
"agrees": false
},
{
"tree": "l1ToL2MessageTree",
"resident": "0x0fef6d80d31109ddb56d6b3f607cbc9c0af0bff3ea0d43e8f278983c64c11f7a",
"chain": "0x1bf3b773f7492455bf0cc24cad568fe294f5ab66a2167b673d3198039bcd7809",
"agrees": false
}
],
"declaredRung": 3,
"stepsPositioned": 86,
"stepsUnpositioned": 373,
"sourceLevel": false,
"contractRungs": [
{
"address": "0x0000000000000000000000000000000000000000000000000000000000000003",
"rung": 2,
"reason": "86 of 108 executed step(s) of this contract resolve to a source position; the remaining 22 are in regions the artifact's brillig_locations does not key — compiled procedures are appended after the main body (avm-transpiler transpile.rs:489,505), SOURCE-MAPPING.md section 2.4 hole 2 — first at pc 0. The artifact itself is rung 1: 314 pc(s) in [130, 1785] map to source spans over 32 file(s), and avm-transpiler re-keys brillig_locations by AVM byte offset (transpile.rs:1803), so each is a real (path, line, column)",
"steps": 108,
"positioned": 86,
"firstUnpositionedPc": 0,
"resolved": true
},
{
"address": "0x2fcd3dd598380bd949f7d6cb9d57e0251e512bde7d05c36f7257bf8db6c3041f",
"rung": 3,
"reason": "RUNG 3 (BYTECODE) IS THE CEILING FOR A CHAIN-FETCHED CONTRACT, BY PROTOCOL DESIGN AND NOT BY OMISSION. Rungs 1 and 2 need the compiled artifact's debug_symbols, and rung 1 additionally needs its file_map WITH SOURCE TEXT. An Aztec node serves neither: getContractClass returns ContractClassPublic, which is exactly { id, privateFunctionsRoot, version, artifactHash, packedBytecode } — no debug symbols, no file map, no function table, no source. Upstream's own doc comment on artifactHash says it is \"intended to be used by clients to verify that an OFFCHAIN FETCHED ARTIFACT matches a registered class\", i.e. the chain holds a commitment to the artifact and not the artifact. No method on AztecNode serves one either. THAT OFF-CHAIN RESOLUTION IS BUILT (replay/src/artifact_resolution.ts) AND IT WAS RUN FOR THIS CONTRACT AND PROVED NOTHING: no candidate artifact matched this class's artifactHash, its packedBytecode and its class id, so there is no debug map to position a program counter with and the rung is 3. See ct.source-provenance in this container for which sources were asked and what each answered.",
"steps": 351,
"positioned": 0,
"firstUnpositionedPc": 0,
"resolved": false
}
],
"artifacts": [
{
"address": "0x0000000000000000000000000000000000000000000000000000000000000003",
"contractClassId": "0x1f85d8b901a87b3fa9b93a44ab569ca2f5eb62412dfd58c894fdfff218be11a4",
"resolved": true,
"origin": "npm:@aztec/[email protected] FeeJuice",
"corroboration": "single-distributor",
"measuredPostHoc": false
},
{
"address": "0x2fcd3dd598380bd949f7d6cb9d57e0251e512bde7d05c36f7257bf8db6c3041f",
"contractClassId": "0x18e71511d56a60456b0e17c109e4227faa28ab4d2fd1799361fe47fa2ea6d32b",
"resolved": false,
"origin": null,
"corroboration": null,
"measuredPostHoc": false
}
],
"artifactsMeasuredAt": null,
"artifactsMeasuredByRuntime": null
}
}No row is selected.