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.
0x2f8d65ef22f39bc8d00a6542b38f8f0076f35938c6937cbd11571116d8db5e6f
Blocks and transactions taken from the live network. This is a preliminary export covering 13 July to 28 September 2026.
You will see the contract's instructions here, not its source code. The source for this code has been published and matches what ran on the chain (from npm:@aztec/[email protected] FeeJuice), but this transaction was recorded before that could be checked, so its steps are not linked to any source lines. Nothing here can be re-recorded: Aztec stops serving a transaction's contents soon after it settles.
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": 15608,
"txIndexInBlock": 0,
"revertCode": 0,
"bodyRetainedAtCapture": true,
"effectVisibleAtCapture": true,
"replay": {
"instructionsExecuted": 17867,
"hydrationRounds": 5,
"preStateReadAt": 15607,
"effectsMatched": 1,
"effectsMismatched": 26,
"effectsReproduced": false,
"rootsAnyAgree": false,
"roots": [
{
"tree": "noteHashTree",
"resident": "0x2590f2aab19dd791700b4a43d3f52bb88ef2409a3731da8e848663559202e4c6",
"chain": "0x107030e88cd9959ec2005c4ed52d18140b00c87c84961eb08b207fd8c1efc728",
"agrees": false
},
{
"tree": "nullifierTree",
"resident": "0x13fb823ddf9707880466f50a66f6a1ba636984349d2902856bed0c3acc4da8bb",
"chain": "0x26c5480fa1008a0b7baa7a3af4b2af6427620bfb8eaf57442d8b2addcbfa9878",
"agrees": false
},
{
"tree": "publicDataTree",
"resident": "0x06b4711b61c99ccc78f751001893eea4fa65e4802ff399ae095f354d6dc3dd9c",
"chain": "0x27d534ed0b9b7e3a478d5edd2d77ac7ef3cec42ce2997c32cb3ba3499532ad37",
"agrees": false
},
{
"tree": "l1ToL2MessageTree",
"resident": "0x0fef6d80d31109ddb56d6b3f607cbc9c0af0bff3ea0d43e8f278983c64c11f7a",
"chain": "0x1a1230e7ddeb6a9405ca125d7bae9d86b6e0560e146288451113d080e4feba90",
"agrees": false
}
],
"declaredRung": 3,
"stepsPositioned": 0,
"stepsUnpositioned": 17867,
"sourceLevel": false,
"contractRungs": [
{
"address": "0x221d8451c3641dd8c08185e72a3cd33102f153e03de7a43b2d2e41a9b8cd269b",
"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": 17867,
"positioned": 0,
"firstUnpositionedPc": 0,
"resolved": false
},
{
"address": "0x1a424e25c55f6b1c64343839792f9d11ee9999df58be51d7348aa5051aaf47a5",
"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": 0,
"positioned": 0,
"firstUnpositionedPc": null,
"resolved": false
},
{
"address": "0x0000000000000000000000000000000000000000000000000000000000000003",
"rung": 3,
"reason": "an artifact WAS proved for this contract (class 0x1f85d8b901a87b3fa9b93a44ab569ca2f5eb62412dfd58c894fdfff218be11a4 is proved by npm:@aztec/[email protected] FeeJuice: computeArtifactHash = 0x1a57ff2a8e653094229bd15c028683e08b2086dfeadecac4c6b950c383b3ae1d equals the class's, public_dispatch is byte-equal to the class's packedBytecode (1947 bytes), and recomputing the class id from them returns 0x1f85d8b901a87b3fa9b93a44ab569ca2f5eb62412dfd58c894fdfff218be11a4. artifactHash does NOT commit to debug_symbols or file_map, and those are attested by 1 distributor(s) (npm) at digest f87f9cc0f91809b2) and NONE of its 0 executed step(s) resolved to a source position, so the recording is at instruction level for it. The artifact's own verdict 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). A proof is not a mapping, and this is the case where the difference shows.",
"steps": 0,
"positioned": 0,
"firstUnpositionedPc": null,
"resolved": true
}
],
"artifacts": [
{
"address": "0x221d8451c3641dd8c08185e72a3cd33102f153e03de7a43b2d2e41a9b8cd269b",
"contractClassId": "0x03dd82dd62ffee86d0d33e602d9bdf40b59ff0a4a571925c29f34b07137019c6",
"resolved": false,
"origin": null,
"corroboration": null,
"measuredPostHoc": false
},
{
"address": "0x1a424e25c55f6b1c64343839792f9d11ee9999df58be51d7348aa5051aaf47a5",
"contractClassId": "0x26c9a7f617fca176b7b72ee43769a38b0a06a18bd3434ef3e92a20f2edb5d7b4",
"resolved": false,
"origin": null,
"corroboration": null,
"measuredPostHoc": false
},
{
"address": "0x0000000000000000000000000000000000000000000000000000000000000003",
"contractClassId": "0x1f85d8b901a87b3fa9b93a44ab569ca2f5eb62412dfd58c894fdfff218be11a4",
"resolved": true,
"origin": "npm:@aztec/[email protected] FeeJuice",
"corroboration": "single-distributor",
"measuredPostHoc": false
}
],
"artifactsMeasuredAt": null,
"artifactsMeasuredByRuntime": null
}
}No row is selected.