@aztec/simulator 0.65.2 → 0.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dest/acvm/acvm.js +3 -3
  2. package/dest/acvm/oracle/oracle.d.ts +1 -4
  3. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  4. package/dest/acvm/oracle/oracle.js +3 -19
  5. package/dest/acvm/oracle/typed_oracle.d.ts +2 -7
  6. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  7. package/dest/acvm/oracle/typed_oracle.js +3 -12
  8. package/dest/acvm/serialize.js +2 -2
  9. package/dest/avm/avm_context.d.ts +2 -2
  10. package/dest/avm/avm_context.d.ts.map +1 -1
  11. package/dest/avm/avm_context.js +3 -4
  12. package/dest/avm/avm_execution_environment.d.ts +4 -6
  13. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  14. package/dest/avm/avm_execution_environment.js +8 -13
  15. package/dest/avm/avm_memory_types.d.ts +2 -2
  16. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  17. package/dest/avm/avm_memory_types.js +7 -7
  18. package/dest/avm/avm_simulator.d.ts +3 -3
  19. package/dest/avm/avm_simulator.d.ts.map +1 -1
  20. package/dest/avm/avm_simulator.js +26 -16
  21. package/dest/avm/avm_tree.d.ts +31 -14
  22. package/dest/avm/avm_tree.d.ts.map +1 -1
  23. package/dest/avm/avm_tree.js +34 -40
  24. package/dest/avm/errors.d.ts +3 -3
  25. package/dest/avm/errors.d.ts.map +1 -1
  26. package/dest/avm/errors.js +8 -15
  27. package/dest/avm/fixtures/index.d.ts.map +1 -1
  28. package/dest/avm/fixtures/index.js +4 -4
  29. package/dest/avm/journal/journal.d.ts +15 -4
  30. package/dest/avm/journal/journal.d.ts.map +1 -1
  31. package/dest/avm/journal/journal.js +121 -36
  32. package/dest/avm/opcodes/environment_getters.d.ts +10 -11
  33. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  34. package/dest/avm/opcodes/environment_getters.js +12 -15
  35. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  36. package/dest/avm/opcodes/external_calls.js +4 -11
  37. package/dest/avm/opcodes/misc.d.ts.map +1 -1
  38. package/dest/avm/opcodes/misc.js +3 -3
  39. package/dest/client/client_execution_context.d.ts +6 -33
  40. package/dest/client/client_execution_context.d.ts.map +1 -1
  41. package/dest/client/client_execution_context.js +18 -54
  42. package/dest/client/db_oracle.d.ts +2 -2
  43. package/dest/client/db_oracle.d.ts.map +1 -1
  44. package/dest/client/execution_note_cache.d.ts +9 -1
  45. package/dest/client/execution_note_cache.d.ts.map +1 -1
  46. package/dest/client/execution_note_cache.js +10 -3
  47. package/dest/client/private_execution.d.ts.map +1 -1
  48. package/dest/client/private_execution.js +5 -7
  49. package/dest/client/simulator.d.ts.map +1 -1
  50. package/dest/client/simulator.js +4 -4
  51. package/dest/client/unconstrained_execution.d.ts.map +1 -1
  52. package/dest/client/unconstrained_execution.js +3 -3
  53. package/dest/client/view_data_oracle.d.ts +2 -2
  54. package/dest/client/view_data_oracle.d.ts.map +1 -1
  55. package/dest/client/view_data_oracle.js +5 -6
  56. package/dest/common/debug_fn_name.d.ts +2 -2
  57. package/dest/common/debug_fn_name.d.ts.map +1 -1
  58. package/dest/common/debug_fn_name.js +8 -14
  59. package/dest/providers/acvm_native.js +4 -4
  60. package/dest/providers/factory.d.ts +2 -2
  61. package/dest/providers/factory.d.ts.map +1 -1
  62. package/dest/providers/factory.js +4 -4
  63. package/dest/public/enqueued_call_side_effect_trace.d.ts +11 -23
  64. package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
  65. package/dest/public/enqueued_call_side_effect_trace.js +51 -72
  66. package/dest/public/executor_metrics.d.ts.map +1 -1
  67. package/dest/public/executor_metrics.js +2 -5
  68. package/dest/public/fixtures/index.d.ts +25 -7
  69. package/dest/public/fixtures/index.d.ts.map +1 -1
  70. package/dest/public/fixtures/index.js +20 -17
  71. package/dest/public/index.d.ts +0 -1
  72. package/dest/public/index.d.ts.map +1 -1
  73. package/dest/public/index.js +1 -2
  74. package/dest/public/public_db_sources.d.ts.map +1 -1
  75. package/dest/public/public_db_sources.js +30 -16
  76. package/dest/public/public_processor.d.ts +7 -8
  77. package/dest/public/public_processor.d.ts.map +1 -1
  78. package/dest/public/public_processor.js +37 -26
  79. package/dest/public/public_processor_metrics.d.ts +1 -1
  80. package/dest/public/public_processor_metrics.d.ts.map +1 -1
  81. package/dest/public/public_tx_context.d.ts +13 -14
  82. package/dest/public/public_tx_context.d.ts.map +1 -1
  83. package/dest/public/public_tx_context.js +63 -54
  84. package/dest/public/public_tx_simulator.d.ts +2 -2
  85. package/dest/public/public_tx_simulator.d.ts.map +1 -1
  86. package/dest/public/public_tx_simulator.js +43 -25
  87. package/dest/public/side_effect_trace_interface.d.ts +4 -17
  88. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  89. package/dest/public/transitional_adapters.d.ts +2 -6
  90. package/dest/public/transitional_adapters.d.ts.map +1 -1
  91. package/dest/public/transitional_adapters.js +29 -88
  92. package/package.json +16 -9
  93. package/src/acvm/acvm.ts +2 -2
  94. package/src/acvm/oracle/oracle.ts +2 -32
  95. package/src/acvm/oracle/typed_oracle.ts +3 -20
  96. package/src/acvm/serialize.ts +1 -1
  97. package/src/avm/avm_context.ts +2 -3
  98. package/src/avm/avm_execution_environment.ts +6 -31
  99. package/src/avm/avm_memory_types.ts +6 -6
  100. package/src/avm/avm_simulator.ts +28 -23
  101. package/src/avm/avm_tree.ts +67 -53
  102. package/src/avm/errors.ts +12 -14
  103. package/src/avm/fixtures/index.ts +2 -3
  104. package/src/avm/journal/journal.ts +206 -68
  105. package/src/avm/opcodes/environment_getters.ts +1 -4
  106. package/src/avm/opcodes/external_calls.ts +3 -19
  107. package/src/avm/opcodes/misc.ts +2 -2
  108. package/src/client/client_execution_context.ts +22 -68
  109. package/src/client/db_oracle.ts +2 -2
  110. package/src/client/execution_note_cache.ts +13 -3
  111. package/src/client/private_execution.ts +3 -7
  112. package/src/client/simulator.ts +4 -4
  113. package/src/client/unconstrained_execution.ts +2 -2
  114. package/src/client/view_data_oracle.ts +5 -6
  115. package/src/common/debug_fn_name.ts +7 -13
  116. package/src/providers/acvm_native.ts +3 -3
  117. package/src/providers/factory.ts +3 -3
  118. package/src/public/enqueued_call_side_effect_trace.ts +68 -90
  119. package/src/public/executor_metrics.ts +0 -4
  120. package/src/public/fixtures/index.ts +28 -17
  121. package/src/public/index.ts +0 -1
  122. package/src/public/public_db_sources.ts +32 -19
  123. package/src/public/public_processor.ts +52 -55
  124. package/src/public/public_processor_metrics.ts +1 -1
  125. package/src/public/public_tx_context.ts +89 -76
  126. package/src/public/public_tx_simulator.ts +58 -49
  127. package/src/public/side_effect_trace_interface.ts +8 -15
  128. package/src/public/transitional_adapters.ts +43 -215
  129. package/dest/public/dual_side_effect_trace.d.ts +0 -77
  130. package/dest/public/dual_side_effect_trace.d.ts.map +0 -1
  131. package/dest/public/dual_side_effect_trace.js +0 -119
  132. package/dest/public/side_effect_trace.d.ts +0 -96
  133. package/dest/public/side_effect_trace.d.ts.map +0 -1
  134. package/dest/public/side_effect_trace.js +0 -309
  135. package/src/public/dual_side_effect_trace.ts +0 -242
  136. package/src/public/side_effect_trace.ts +0 -536
@@ -1,14 +1,10 @@
1
- import { ProvingRequestType } from '@aztec/circuit-types';
2
- import { AvmCircuitInputs, AvmCircuitPublicInputs, AztecAddress, ContractStorageRead, ContractStorageUpdateRequest, Fr, Gas, L2ToL1Message, LogHash, MAX_ENQUEUED_CALLS_PER_CALL, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_CALL, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_CALL, NoteHash, Nullifier, PrivateToAvmAccumulatedData, PrivateToAvmAccumulatedDataArrayLengths, PublicCallRequest, PublicCircuitPublicInputs, PublicDataWrite, PublicInnerCallRequest, ReadRequest, RevertCode, TreeLeafReadRequest, TreeSnapshots, countAccumulatedItems, mergeAccumulatedData, } from '@aztec/circuits.js';
3
- import { computeNoteHashNonce, computeUniqueNoteHash, computeVarArgsHash, siloNoteHash } from '@aztec/circuits.js/hash';
1
+ import { Fr, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PrivateToAvmAccumulatedData, PrivateToAvmAccumulatedDataArrayLengths, PublicCallRequest, PublicDataWrite, TreeSnapshots, countAccumulatedItems, mergeAccumulatedData, } from '@aztec/circuits.js';
2
+ import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash } from '@aztec/circuits.js/hash';
4
3
  import { padArrayEnd } from '@aztec/foundation/collection';
5
4
  import { assertLength } from '@aztec/foundation/serialize';
6
- import { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
7
- import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
8
- export function generateAvmCircuitPublicInputs(trace, globalVariables, startStateReference, startGasUsed, gasSettings, setupCallRequests, appLogicCallRequests, teardownCallRequests, nonRevertibleAccumulatedDataFromPrivate, revertibleAccumulatedDataFromPrivate, endStateReference, endGasUsed, transactionFee, revertCode) {
5
+ export function generateAvmCircuitPublicInputs(trace, globalVariables, startStateReference, startGasUsed, gasSettings, feePayer, setupCallRequests, appLogicCallRequests, teardownCallRequests, nonRevertibleAccumulatedDataFromPrivate, revertibleAccumulatedDataFromPrivate, endTreeSnapshots, endGasUsed, transactionFee, revertCode) {
9
6
  const startTreeSnapshots = new TreeSnapshots(startStateReference.l1ToL2MessageTree, startStateReference.partial.noteHashTree, startStateReference.partial.nullifierTree, startStateReference.partial.publicDataTree);
10
- const endTreeSnapshots = new TreeSnapshots(endStateReference.l1ToL2MessageTree, endStateReference.partial.noteHashTree, endStateReference.partial.nullifierTree, endStateReference.partial.publicDataTree);
11
- const avmCircuitPublicInputs = trace.toAvmCircuitPublicInputs(globalVariables, startTreeSnapshots, startGasUsed, gasSettings, setupCallRequests, appLogicCallRequests, teardownCallRequests.length ? teardownCallRequests[0] : PublicCallRequest.empty(), endTreeSnapshots, endGasUsed, transactionFee, !revertCode.isOK());
7
+ const avmCircuitPublicInputs = trace.toAvmCircuitPublicInputs(globalVariables, startTreeSnapshots, startGasUsed, gasSettings, feePayer, setupCallRequests, appLogicCallRequests, teardownCallRequests.length ? teardownCallRequests[0] : PublicCallRequest.empty(), endTreeSnapshots, endGasUsed, transactionFee, !revertCode.isOK());
12
8
  const getArrayLengths = (from) => new PrivateToAvmAccumulatedDataArrayLengths(countAccumulatedItems(from.noteHashes), countAccumulatedItems(from.nullifiers), countAccumulatedItems(from.l2ToL1Msgs));
13
9
  const convertAccumulatedData = (from) => new PrivateToAvmAccumulatedData(from.noteHashes, from.nullifiers, from.l2ToL1Msgs);
14
10
  // Temporary overrides as these entries aren't yet populated in trace
@@ -16,12 +12,26 @@ export function generateAvmCircuitPublicInputs(trace, globalVariables, startStat
16
12
  avmCircuitPublicInputs.previousRevertibleAccumulatedDataArrayLengths = getArrayLengths(revertibleAccumulatedDataFromPrivate);
17
13
  avmCircuitPublicInputs.previousNonRevertibleAccumulatedData = convertAccumulatedData(nonRevertibleAccumulatedDataFromPrivate);
18
14
  avmCircuitPublicInputs.previousRevertibleAccumulatedData = convertAccumulatedData(revertibleAccumulatedDataFromPrivate);
15
+ const txHash = avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.nullifiers[0];
16
+ // Add nonces to revertible note hashes from private. These don't have nonces since we don't know
17
+ // the final position in the tx until the AVM has executed.
18
+ // TODO: Use the final position in the tx
19
+ for (let revertibleIndex = 0; revertibleIndex < avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes.length; revertibleIndex++) {
20
+ const noteHash = avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes[revertibleIndex];
21
+ if (noteHash.isZero()) {
22
+ continue;
23
+ }
24
+ const indexInTx = revertibleIndex + avmCircuitPublicInputs.previousNonRevertibleAccumulatedDataArrayLengths.noteHashes;
25
+ const nonce = computeNoteHashNonce(txHash, indexInTx);
26
+ const uniqueNoteHash = computeUniqueNoteHash(nonce, noteHash);
27
+ avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes[revertibleIndex] = uniqueNoteHash;
28
+ }
19
29
  // merge all revertible & non-revertible side effects into output accumulated data
20
30
  const noteHashesFromPrivate = revertCode.isOK()
21
31
  ? mergeAccumulatedData(avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.noteHashes, avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes)
22
32
  : avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.noteHashes;
23
33
  avmCircuitPublicInputs.accumulatedData.noteHashes = assertLength(mergeAccumulatedData(noteHashesFromPrivate, avmCircuitPublicInputs.accumulatedData.noteHashes), MAX_NOTE_HASHES_PER_TX);
24
- const txHash = avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.nullifiers[0];
34
+ // Silo and add nonces for note hashes emitted by the AVM
25
35
  const scopedNoteHashesFromPublic = trace.getSideEffects().noteHashes;
26
36
  for (let i = 0; i < scopedNoteHashesFromPublic.length; i++) {
27
37
  const scopedNoteHash = scopedNoteHashesFromPublic[i];
@@ -29,93 +39,24 @@ export function generateAvmCircuitPublicInputs(trace, globalVariables, startStat
29
39
  if (!noteHash.isZero()) {
30
40
  const noteHashIndexInTx = i + countAccumulatedItems(noteHashesFromPrivate);
31
41
  const nonce = computeNoteHashNonce(txHash, noteHashIndexInTx);
32
- const uniqueNoteHash = computeUniqueNoteHash(nonce, noteHash);
33
- const siloedNoteHash = siloNoteHash(scopedNoteHash.contractAddress, uniqueNoteHash);
34
- avmCircuitPublicInputs.accumulatedData.noteHashes[noteHashIndexInTx] = siloedNoteHash;
42
+ const siloedNoteHash = siloNoteHash(scopedNoteHash.contractAddress, noteHash);
43
+ const uniqueNoteHash = computeUniqueNoteHash(nonce, siloedNoteHash);
44
+ avmCircuitPublicInputs.accumulatedData.noteHashes[noteHashIndexInTx] = uniqueNoteHash;
35
45
  }
36
46
  }
37
47
  const msgsFromPrivate = revertCode.isOK()
38
48
  ? mergeAccumulatedData(avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs, avmCircuitPublicInputs.previousRevertibleAccumulatedData.l2ToL1Msgs)
39
49
  : avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs;
40
50
  avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs = assertLength(mergeAccumulatedData(msgsFromPrivate, avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs), MAX_L2_TO_L1_MSGS_PER_TX);
41
- const dedupedPublicDataWrites = [];
42
- const leafSlotOccurences = new Map();
51
+ // Maps slot to value. Maps in TS are iterable in insertion order, which is exactly what we want for
52
+ // squashing "to the left", where the first occurrence of a slot uses the value of the last write to it,
53
+ // and the rest occurrences are omitted
54
+ const squashedPublicDataWrites = new Map();
43
55
  for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
44
- const slot = publicDataWrite.leafSlot.toBigInt();
45
- const prevOccurrences = leafSlotOccurences.get(slot) || 0;
46
- leafSlotOccurences.set(slot, prevOccurrences + 1);
47
- }
48
- for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
49
- const slot = publicDataWrite.leafSlot.toBigInt();
50
- const prevOccurrences = leafSlotOccurences.get(slot) || 0;
51
- if (prevOccurrences === 1) {
52
- dedupedPublicDataWrites.push(publicDataWrite);
53
- }
54
- else {
55
- leafSlotOccurences.set(slot, prevOccurrences - 1);
56
- }
56
+ squashedPublicDataWrites.set(publicDataWrite.leafSlot.toBigInt(), publicDataWrite.value);
57
57
  }
58
- avmCircuitPublicInputs.accumulatedData.publicDataWrites = padArrayEnd(dedupedPublicDataWrites, PublicDataWrite.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
58
+ avmCircuitPublicInputs.accumulatedData.publicDataWrites = padArrayEnd(Array.from(squashedPublicDataWrites.entries()).map(([slot, value]) => new PublicDataWrite(new Fr(slot), value)), PublicDataWrite.empty(), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
59
59
  //console.log(`AvmCircuitPublicInputs:\n${inspect(avmCircuitPublicInputs)}`);
60
60
  return avmCircuitPublicInputs;
61
61
  }
62
- export function generateAvmProvingRequest(real, fnName, stateManager, historicalHeader, globalVariables, executionRequest, result, allocatedGas, transactionFee) {
63
- const avmExecutionEnv = new AvmExecutionEnvironment(executionRequest.callContext.contractAddress, executionRequest.callContext.msgSender, executionRequest.callContext.functionSelector,
64
- /*contractCallDepth=*/ Fr.zero(), transactionFee, globalVariables, executionRequest.callContext.isStaticCall, executionRequest.args);
65
- const avmCallResult = new AvmFinalizedCallResult(result.reverted, result.returnValues, result.endGasLeft);
66
- // Generate an AVM proving request
67
- let avmProvingRequest;
68
- if (real) {
69
- const deprecatedFunctionCallResult = stateManager.trace.toPublicFunctionCallResult(avmExecutionEnv,
70
- /*startGasLeft=*/ allocatedGas, Buffer.alloc(0), avmCallResult, fnName);
71
- const publicInputs = getPublicCircuitPublicInputs(historicalHeader, globalVariables, deprecatedFunctionCallResult);
72
- avmProvingRequest = makeAvmProvingRequest(publicInputs, deprecatedFunctionCallResult);
73
- }
74
- else {
75
- avmProvingRequest = emptyAvmProvingRequest();
76
- }
77
- return avmProvingRequest;
78
- }
79
- function emptyAvmProvingRequest() {
80
- return {
81
- type: ProvingRequestType.PUBLIC_VM,
82
- inputs: AvmCircuitInputs.empty(),
83
- };
84
- }
85
- function makeAvmProvingRequest(inputs, result) {
86
- return {
87
- type: ProvingRequestType.PUBLIC_VM,
88
- inputs: new AvmCircuitInputs(result.functionName, result.calldata, inputs, result.avmCircuitHints, AvmCircuitPublicInputs.empty()),
89
- };
90
- }
91
- function getPublicCircuitPublicInputs(historicalHeader, globalVariables, result) {
92
- const header = historicalHeader.clone(); // don't modify the original
93
- header.state.partial.publicDataTree.root = Fr.zero(); // AVM doesn't check this yet
94
- return PublicCircuitPublicInputs.from({
95
- callContext: result.executionRequest.callContext,
96
- proverAddress: AztecAddress.ZERO,
97
- argsHash: computeVarArgsHash(result.executionRequest.args),
98
- noteHashes: padArrayEnd(result.noteHashes, NoteHash.empty(), MAX_NOTE_HASHES_PER_CALL, `Too many note hashes. Got ${result.noteHashes.length} with max being ${MAX_NOTE_HASHES_PER_CALL}`),
99
- nullifiers: padArrayEnd(result.nullifiers, Nullifier.empty(), MAX_NULLIFIERS_PER_CALL, `Too many nullifiers. Got ${result.nullifiers.length} with max being ${MAX_NULLIFIERS_PER_CALL}`),
100
- l2ToL1Msgs: padArrayEnd(result.l2ToL1Messages, L2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_CALL, `Too many L2 to L1 messages. Got ${result.l2ToL1Messages.length} with max being ${MAX_L2_TO_L1_MSGS_PER_CALL}`),
101
- startSideEffectCounter: result.startSideEffectCounter,
102
- endSideEffectCounter: result.endSideEffectCounter,
103
- returnsHash: computeVarArgsHash(result.returnValues),
104
- noteHashReadRequests: padArrayEnd(result.noteHashReadRequests, TreeLeafReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, `Too many note hash read requests. Got ${result.noteHashReadRequests.length} with max being ${MAX_NOTE_HASH_READ_REQUESTS_PER_CALL}`),
105
- nullifierReadRequests: padArrayEnd(result.nullifierReadRequests, ReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_CALL, `Too many nullifier read requests. Got ${result.nullifierReadRequests.length} with max being ${MAX_NULLIFIER_READ_REQUESTS_PER_CALL}`),
106
- nullifierNonExistentReadRequests: padArrayEnd(result.nullifierNonExistentReadRequests, ReadRequest.empty(), MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, `Too many nullifier non-existent read requests. Got ${result.nullifierNonExistentReadRequests.length} with max being ${MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL}`),
107
- l1ToL2MsgReadRequests: padArrayEnd(result.l1ToL2MsgReadRequests, TreeLeafReadRequest.empty(), MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, `Too many L1 to L2 message read requests. Got ${result.l1ToL2MsgReadRequests.length} with max being ${MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL}`),
108
- contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL, `Too many public data reads. Got ${result.contractStorageReads.length} with max being ${MAX_PUBLIC_DATA_READS_PER_CALL}`),
109
- contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, `Too many public data update requests. Got ${result.contractStorageUpdateRequests.length} with max being ${MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL}`),
110
- publicCallRequests: padArrayEnd(result.publicCallRequests, PublicInnerCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_CALL, `Too many public call requests. Got ${result.publicCallRequests.length} with max being ${MAX_ENQUEUED_CALLS_PER_CALL}`),
111
- unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL, `Too many unencrypted logs. Got ${result.unencryptedLogsHashes.length} with max being ${MAX_UNENCRYPTED_LOGS_PER_CALL}`),
112
- historicalHeader: header,
113
- globalVariables: globalVariables,
114
- startGasLeft: Gas.from(result.startGasLeft),
115
- endGasLeft: Gas.from(result.endGasLeft),
116
- transactionFee: result.transactionFee,
117
- // TODO(@just-mitch): need better mapping from simulator to revert code.
118
- revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK,
119
- });
120
- }
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQixrQkFBa0IsRUFBK0IsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixFQUFFLEVBQ0YsR0FBRyxFQUlILGFBQWEsRUFDYixPQUFPLEVBQ1AsMkJBQTJCLEVBQzNCLHVDQUF1QyxFQUN2QywwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsb0NBQW9DLEVBQ3BDLHVCQUF1QixFQUN2QixpREFBaUQsRUFDakQsb0NBQW9DLEVBQ3BDLDhCQUE4QixFQUM5Qix3Q0FBd0MsRUFDeEMsc0NBQXNDLEVBQ3RDLDZCQUE2QixFQUM3QixRQUFRLEVBQ1IsU0FBUyxFQUNULDJCQUEyQixFQUMzQix1Q0FBdUMsRUFFdkMsaUJBQWlCLEVBQ2pCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2Ysc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxVQUFVLEVBRVYsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsb0JBQW9CLEdBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLHVCQUF1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
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLEVBQUUsRUFJRix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLDRDQUE0QyxFQUM1QywyQkFBMkIsRUFDM0IsdUNBQXVDLEVBRXZDLGlCQUFpQixFQUNqQixlQUFlLEVBR2YsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixvQkFBb0IsR0FDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUkzRCxNQUFNLFVBQVUsOEJBQThCLENBQzVDLEtBQXdDLEVBQ3hDLGVBQWdDLEVBQ2hDLG1CQUFtQyxFQUNuQyxZQUFpQixFQUNqQixXQUF3QixFQUN4QixRQUFzQixFQUN0QixpQkFBc0MsRUFDdEMsb0JBQXlDLEVBQ3pDLG9CQUF5QyxFQUN6Qyx1Q0FBdUUsRUFDdkUsb0NBQW9FLEVBQ3BFLGdCQUErQixFQUMvQixVQUFlLEVBQ2YsY0FBa0IsRUFDbEIsVUFBc0I7SUFFdEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGFBQWEsQ0FDMUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQ3JDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQ3hDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ3pDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQzNDLENBQUM7SUFFRixNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyx3QkFBd0IsQ0FDM0QsZUFBZSxFQUNmLGtCQUFrQixF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
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "@aztec/simulator",
3
- "version": "0.65.2",
3
+ "version": "0.67.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
7
+ "./client": "./dest/client/index.js",
8
+ "./acvm": "./dest/acvm/index.js",
9
+ "./errors": "./dest/common/errors.js",
7
10
  "./public/fixtures": "./dest/public/fixtures/index.js"
8
11
  },
9
12
  "typedocOptions": {
@@ -56,17 +59,21 @@
56
59
  "summaryThreshold": 9999
57
60
  }
58
61
  ]
62
+ ],
63
+ "testTimeout": 30000,
64
+ "setupFiles": [
65
+ "../../foundation/src/jest/setup.mjs"
59
66
  ]
60
67
  },
61
68
  "dependencies": {
62
- "@aztec/circuit-types": "0.65.2",
63
- "@aztec/circuits.js": "0.65.2",
64
- "@aztec/foundation": "0.65.2",
65
- "@aztec/noir-protocol-circuits-types": "0.65.2",
66
- "@aztec/protocol-contracts": "0.65.2",
67
- "@aztec/telemetry-client": "0.65.2",
68
- "@aztec/types": "0.65.2",
69
- "@aztec/world-state": "0.65.2",
69
+ "@aztec/circuit-types": "0.67.0",
70
+ "@aztec/circuits.js": "0.67.0",
71
+ "@aztec/foundation": "0.67.0",
72
+ "@aztec/noir-protocol-circuits-types": "0.67.0",
73
+ "@aztec/protocol-contracts": "0.67.0",
74
+ "@aztec/telemetry-client": "0.67.0",
75
+ "@aztec/types": "0.67.0",
76
+ "@aztec/world-state": "0.67.0",
70
77
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
71
78
  "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
72
79
  "@noir-lang/types": "portal:../../noir/packages/types",
package/src/acvm/acvm.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type NoirCallStack } from '@aztec/circuit-types';
2
2
  import type { FunctionDebugMetadata } from '@aztec/foundation/abi';
3
- import { createDebugLogger } from '@aztec/foundation/log';
3
+ import { createLogger } from '@aztec/foundation/log';
4
4
 
5
5
  import {
6
6
  type ExecutionError,
@@ -42,7 +42,7 @@ export async function acvm(
42
42
  initialWitness: ACVMWitness,
43
43
  callback: ACIRCallback,
44
44
  ): Promise<ACIRExecutionResult> {
45
- const logger = createDebugLogger('aztec:simulator:acvm');
45
+ const logger = createLogger('simulator:acvm');
46
46
 
47
47
  const solvedAndReturnWitness = await executeCircuitWithReturnWitness(
48
48
  acir,
@@ -146,10 +146,10 @@ export class Oracle {
146
146
  return witness.toFields().map(toACVMField);
147
147
  }
148
148
 
149
- async getHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
149
+ async getBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
150
150
  const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
151
151
 
152
- const header = await this.typedOracle.getHeader(parsedBlockNumber);
152
+ const header = await this.typedOracle.getBlockHeader(parsedBlockNumber);
153
153
  if (!header) {
154
154
  throw new Error(`Block header not found for block ${parsedBlockNumber}.`);
155
155
  }
@@ -306,36 +306,6 @@ export class Oracle {
306
306
  return newValues.map(toACVMField);
307
307
  }
308
308
 
309
- emitEncryptedEventLog(
310
- [contractAddress]: ACVMField[],
311
- [randomness]: ACVMField[],
312
- encryptedEvent: ACVMField[],
313
- [counter]: ACVMField[],
314
- ): void {
315
- // Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
316
- const processedInput = Buffer.from(encryptedEvent.map(fromACVMField).map(f => f.toNumber()));
317
- this.typedOracle.emitEncryptedEventLog(
318
- AztecAddress.fromString(contractAddress),
319
- Fr.fromString(randomness),
320
- processedInput,
321
- +counter,
322
- );
323
- }
324
-
325
- emitEncryptedNoteLog([noteHashCounter]: ACVMField[], encryptedNote: ACVMField[], [counter]: ACVMField[]): void {
326
- // Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
327
- const processedInput = Buffer.from(encryptedNote.map(fromACVMField).map(f => f.toNumber()));
328
- this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
329
- }
330
-
331
- emitUnencryptedLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): ACVMField {
332
- const logPayload = Buffer.concat(message.map(fromACVMField).map(f => f.toBuffer()));
333
- const log = new UnencryptedL2Log(AztecAddress.fromString(contractAddress), logPayload);
334
-
335
- this.typedOracle.emitUnencryptedLog(log, +counter);
336
- return toACVMField(0);
337
- }
338
-
339
309
  emitContractClassLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): ACVMField {
340
310
  const logPayload = Buffer.concat(message.map(fromACVMField).map(f => f.toBuffer()));
341
311
  const log = new UnencryptedL2Log(AztecAddress.fromString(contractAddress), logPayload);
@@ -9,8 +9,8 @@ import {
9
9
  type UnencryptedL2Log,
10
10
  } from '@aztec/circuit-types';
11
11
  import {
12
+ type BlockHeader,
12
13
  type ContractInstance,
13
- type Header,
14
14
  type IndexedTaggingSecret,
15
15
  type KeyValidationRequest,
16
16
  type L1_TO_L2_MSG_TREE_HEIGHT,
@@ -127,8 +127,8 @@ export abstract class TypedOracle {
127
127
  throw new OracleMethodNotAvailableError('getLowNullifierMembershipWitness');
128
128
  }
129
129
 
130
- getHeader(_blockNumber: number): Promise<Header | undefined> {
131
- throw new OracleMethodNotAvailableError('getHeader');
130
+ getBlockHeader(_blockNumber: number): Promise<BlockHeader | undefined> {
131
+ throw new OracleMethodNotAvailableError('getBlockHeader');
132
132
  }
133
133
 
134
134
  getCompleteAddress(_account: AztecAddress): Promise<CompleteAddress> {
@@ -195,23 +195,6 @@ export abstract class TypedOracle {
195
195
  throw new OracleMethodNotAvailableError('storageWrite');
196
196
  }
197
197
 
198
- emitEncryptedEventLog(
199
- _contractAddress: AztecAddress,
200
- _randomness: Fr,
201
- _encryptedEvent: Buffer,
202
- _counter: number,
203
- ): void {
204
- throw new OracleMethodNotAvailableError('emitEncryptedEventLog');
205
- }
206
-
207
- emitEncryptedNoteLog(_noteHashCounter: number, _encryptedNote: Buffer, _counter: number): void {
208
- throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
209
- }
210
-
211
- emitUnencryptedLog(_log: UnencryptedL2Log, _counter: number): void {
212
- throw new OracleMethodNotAvailableError('emitUnencryptedLog');
213
- }
214
-
215
198
  emitContractClassLog(_log: UnencryptedL2Log, _counter: number): Fr {
216
199
  throw new OracleMethodNotAvailableError('emitContractClassUnencryptedLog');
217
200
  }
@@ -32,7 +32,7 @@ export function toACVMField(
32
32
  } else if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'bigint') {
33
33
  buffer = new Fr(value).toBuffer();
34
34
  } else if (typeof value === 'string') {
35
- buffer = Fr.fromString(value).toBuffer();
35
+ buffer = Fr.fromHexString(value).toBuffer();
36
36
  } else {
37
37
  buffer = value.toBuffer();
38
38
  }
@@ -1,4 +1,4 @@
1
- import { type AztecAddress, FunctionSelector } from '@aztec/circuits.js';
1
+ import { type AztecAddress } from '@aztec/circuits.js';
2
2
  import { type Fr } from '@aztec/foundation/fields';
3
3
 
4
4
  import { type AvmExecutionEnvironment } from './avm_execution_environment.js';
@@ -43,13 +43,12 @@ export class AvmContext {
43
43
  calldata: Fr[],
44
44
  allocatedGas: Gas,
45
45
  callType: 'CALL' | 'STATICCALL',
46
- functionSelector: FunctionSelector = FunctionSelector.empty(),
47
46
  ): AvmContext {
48
47
  const deriveFn =
49
48
  callType === 'CALL'
50
49
  ? this.environment.deriveEnvironmentForNestedCall
51
50
  : this.environment.deriveEnvironmentForNestedStaticCall;
52
- const newExecutionEnvironment = deriveFn.call(this.environment, address, calldata, functionSelector);
51
+ const newExecutionEnvironment = deriveFn.call(this.environment, address, calldata);
53
52
  const forkedWorldState = this.persistableState.fork();
54
53
  const machineState = AvmMachineState.fromState(gasToGasLeft(allocatedGas));
55
54
  return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
@@ -1,4 +1,4 @@
1
- import { FunctionSelector, type GlobalVariables } from '@aztec/circuits.js';
1
+ import { type GlobalVariables } from '@aztec/circuits.js';
2
2
  import { type AztecAddress } from '@aztec/foundation/aztec-address';
3
3
  import { Fr } from '@aztec/foundation/fields';
4
4
 
@@ -10,7 +10,6 @@ export class AvmExecutionEnvironment {
10
10
  constructor(
11
11
  public readonly address: AztecAddress,
12
12
  public readonly sender: AztecAddress,
13
- public readonly functionSelector: FunctionSelector, // may be temporary (#7224)
14
13
  public readonly contractCallDepth: Fr,
15
14
  public readonly transactionFee: Fr,
16
15
  public readonly globals: GlobalVariables,
@@ -18,16 +17,10 @@ export class AvmExecutionEnvironment {
18
17
  public readonly calldata: Fr[],
19
18
  ) {}
20
19
 
21
- private deriveEnvironmentForNestedCallInternal(
22
- targetAddress: AztecAddress,
23
- calldata: Fr[],
24
- functionSelector: FunctionSelector,
25
- isStaticCall: boolean,
26
- ) {
20
+ private deriveEnvironmentForNestedCallInternal(targetAddress: AztecAddress, calldata: Fr[], isStaticCall: boolean) {
27
21
  return new AvmExecutionEnvironment(
28
22
  /*address=*/ targetAddress,
29
23
  /*sender=*/ this.address,
30
- functionSelector,
31
24
  this.contractCallDepth.add(Fr.ONE),
32
25
  this.transactionFee,
33
26
  this.globals,
@@ -36,29 +29,11 @@ export class AvmExecutionEnvironment {
36
29
  );
37
30
  }
38
31
 
39
- public deriveEnvironmentForNestedCall(
40
- targetAddress: AztecAddress,
41
- calldata: Fr[],
42
- functionSelector: FunctionSelector = FunctionSelector.empty(),
43
- ): AvmExecutionEnvironment {
44
- return this.deriveEnvironmentForNestedCallInternal(
45
- targetAddress,
46
- calldata,
47
- functionSelector,
48
- /*isStaticCall=*/ false,
49
- );
32
+ public deriveEnvironmentForNestedCall(targetAddress: AztecAddress, calldata: Fr[]): AvmExecutionEnvironment {
33
+ return this.deriveEnvironmentForNestedCallInternal(targetAddress, calldata, /*isStaticCall=*/ false);
50
34
  }
51
35
 
52
- public deriveEnvironmentForNestedStaticCall(
53
- targetAddress: AztecAddress,
54
- calldata: Fr[],
55
- functionSelector: FunctionSelector,
56
- ): AvmExecutionEnvironment {
57
- return this.deriveEnvironmentForNestedCallInternal(
58
- targetAddress,
59
- calldata,
60
- functionSelector,
61
- /*isStaticCall=*/ true,
62
- );
36
+ public deriveEnvironmentForNestedStaticCall(targetAddress: AztecAddress, calldata: Fr[]): AvmExecutionEnvironment {
37
+ return this.deriveEnvironmentForNestedCallInternal(targetAddress, calldata, /*isStaticCall=*/ true);
63
38
  }
64
39
  }
@@ -10,7 +10,7 @@ import {
10
10
  import { AztecAddress } from '@aztec/foundation/aztec-address';
11
11
  import { toBufferBE } from '@aztec/foundation/bigint-buffer';
12
12
  import { Fr } from '@aztec/foundation/fields';
13
- import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
13
+ import { type Logger, createLogger } from '@aztec/foundation/log';
14
14
  import { type FunctionsOf } from '@aztec/foundation/types';
15
15
 
16
16
  import { strict as assert } from 'assert';
@@ -227,7 +227,7 @@ export enum TypeTag {
227
227
  export type TaggedMemoryInterface = FunctionsOf<TaggedMemory>;
228
228
 
229
229
  export class TaggedMemory implements TaggedMemoryInterface {
230
- static readonly log: DebugLogger = createDebugLogger('aztec:avm_simulator:memory');
230
+ static readonly log: Logger = createLogger('simulator:avm:memory');
231
231
 
232
232
  // Whether to track and validate memory accesses for each instruction.
233
233
  static readonly TRACK_MEMORY_ACCESSES = process.env.NODE_ENV === 'test';
@@ -259,7 +259,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
259
259
  public getAs<T>(offset: number): T {
260
260
  assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
261
261
  const word = this._mem[offset];
262
- TaggedMemory.log.debug(`get(${offset}) = ${word}`);
262
+ TaggedMemory.log.trace(`get(${offset}) = ${word}`);
263
263
  if (word === undefined) {
264
264
  TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
265
265
  return new Field(0) as T;
@@ -270,7 +270,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
270
270
  public getSlice(offset: number, size: number): MemoryValue[] {
271
271
  assert(offset + size <= TaggedMemory.MAX_MEMORY_SIZE);
272
272
  const value = this._mem.slice(offset, offset + size);
273
- TaggedMemory.log.debug(`getSlice(${offset}, ${size}) = ${value}`);
273
+ TaggedMemory.log.trace(`getSlice(${offset}, ${size}) = ${value}`);
274
274
  for (let i = 0; i < value.length; i++) {
275
275
  if (value[i] === undefined) {
276
276
  value[i] = new Field(0);
@@ -293,7 +293,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
293
293
  public set(offset: number, v: MemoryValue) {
294
294
  assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
295
295
  this._mem[offset] = v;
296
- TaggedMemory.log.debug(`set(${offset}, ${v})`);
296
+ TaggedMemory.log.trace(`set(${offset}, ${v})`);
297
297
  }
298
298
 
299
299
  public setSlice(offset: number, vs: MemoryValue[]) {
@@ -303,7 +303,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
303
303
  this._mem.length = offset + vs.length;
304
304
  }
305
305
  this._mem.splice(offset, vs.length, ...vs);
306
- TaggedMemory.log.debug(`setSlice(${offset}, ${vs})`);
306
+ TaggedMemory.log.trace(`setSlice(${offset}, ${vs})`);
307
307
  }
308
308
 
309
309
  public getTag(offset: number): TypeTag {
@@ -1,11 +1,5 @@
1
- import {
2
- type AztecAddress,
3
- Fr,
4
- type FunctionSelector,
5
- type GlobalVariables,
6
- MAX_L2_GAS_PER_ENQUEUED_CALL,
7
- } from '@aztec/circuits.js';
8
- import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
1
+ import { type AztecAddress, Fr, type GlobalVariables, MAX_L2_GAS_PER_TX_PUBLIC_PORTION } from '@aztec/circuits.js';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
9
3
 
10
4
  import { strict as assert } from 'assert';
11
5
 
@@ -41,7 +35,7 @@ type PcTally = {
41
35
  };
42
36
 
43
37
  export class AvmSimulator {
44
- private log: DebugLogger;
38
+ private log: Logger;
45
39
  private bytecode: Buffer | undefined;
46
40
  private opcodeTallies: Map<string, OpcodeTally> = new Map();
47
41
  private pcTallies: Map<number, PcTally> = new Map();
@@ -49,23 +43,35 @@ export class AvmSimulator {
49
43
  private tallyPrintFunction = () => {};
50
44
  private tallyInstructionFunction = (_a: number, _b: string, _c: Gas) => {};
51
45
 
46
+ // Test Purposes only: Logger will not have the proper function name. Use this constructor for testing purposes
47
+ // only. Otherwise, use build() below.
52
48
  constructor(private context: AvmContext, private instructionSet: InstructionSet = INSTRUCTION_SET()) {
53
49
  assert(
54
- context.machineState.gasLeft.l2Gas <= MAX_L2_GAS_PER_ENQUEUED_CALL,
55
- `Cannot allocate more than ${MAX_L2_GAS_PER_ENQUEUED_CALL} to the AVM for execution of an enqueued call`,
50
+ context.machineState.gasLeft.l2Gas <= MAX_L2_GAS_PER_TX_PUBLIC_PORTION,
51
+ `Cannot allocate more than ${MAX_L2_GAS_PER_TX_PUBLIC_PORTION} to the AVM for execution.`,
56
52
  );
57
- this.log = createDebugLogger(`aztec:avm_simulator:core(f:${context.environment.functionSelector.toString()})`);
58
- if (process.env.LOG_LEVEL === 'debug') {
53
+ this.log = createLogger(`simulator:avm(calldata[0]: ${context.environment.calldata[0]})`);
54
+ // TODO(palla/log): Should tallies be printed on debug, or only on trace?
55
+ if (this.log.isLevelEnabled('debug')) {
59
56
  this.tallyPrintFunction = this.printOpcodeTallies;
60
57
  this.tallyInstructionFunction = this.tallyInstruction;
61
58
  }
62
59
  }
63
60
 
64
- public static create(
61
+ // Factory to have a proper function name in the logger. Retrieving the name is asynchronous and
62
+ // cannot be done as part of the constructor.
63
+ public static async build(context: AvmContext): Promise<AvmSimulator> {
64
+ const simulator = new AvmSimulator(context);
65
+ const fnName = await context.persistableState.getPublicFunctionDebugName(context.environment);
66
+ simulator.log = createLogger(`simulator:avm(f:${fnName})`);
67
+
68
+ return simulator;
69
+ }
70
+
71
+ public static async create(
65
72
  stateManager: AvmPersistableStateManager,
66
73
  address: AztecAddress,
67
74
  sender: AztecAddress,
68
- functionSelector: FunctionSelector, // may be temporary (#7224)
69
75
  transactionFee: Fr,
70
76
  globals: GlobalVariables,
71
77
  isStaticCall: boolean,
@@ -75,7 +81,6 @@ export class AvmSimulator {
75
81
  const avmExecutionEnv = new AvmExecutionEnvironment(
76
82
  address,
77
83
  sender,
78
- functionSelector,
79
84
  /*contractCallDepth=*/ Fr.zero(),
80
85
  transactionFee,
81
86
  globals,
@@ -85,8 +90,7 @@ export class AvmSimulator {
85
90
 
86
91
  const avmMachineState = new AvmMachineState(allocatedGas);
87
92
  const avmContext = new AvmContext(stateManager, avmExecutionEnv, avmMachineState);
88
- const instructionSet = INSTRUCTION_SET();
89
- return new AvmSimulator(avmContext, instructionSet);
93
+ return await AvmSimulator.build(avmContext);
90
94
  }
91
95
 
92
96
  /**
@@ -97,11 +101,12 @@ export class AvmSimulator {
97
101
  if (!bytecode) {
98
102
  // revert, consuming all gas
99
103
  const message = `No bytecode found at: ${this.context.environment.address}. Reverting...`;
104
+ const fnName = await this.context.persistableState.getPublicFunctionDebugName(this.context.environment);
100
105
  const revertReason = new AvmRevertReason(
101
106
  message,
102
107
  /*failingFunction=*/ {
103
108
  contractAddress: this.context.environment.address,
104
- functionSelector: this.context.environment.functionSelector,
109
+ functionName: fnName,
105
110
  },
106
111
  /*noirCallStack=*/ [],
107
112
  );
@@ -144,7 +149,7 @@ export class AvmSimulator {
144
149
  const instrStartGas = machineState.gasLeft; // Save gas before executing instruction (for profiling)
145
150
  const instrPc = machineState.pc; // Save PC before executing instruction (for profiling)
146
151
 
147
- this.log.debug(
152
+ this.log.trace(
148
153
  `[PC:${machineState.pc}] [IC:${instrCounter++}] ${instruction.toString()} (gasLeft l2=${
149
154
  machineState.l2GasLeft
150
155
  } da=${machineState.daGasLeft})`,
@@ -175,7 +180,7 @@ export class AvmSimulator {
175
180
 
176
181
  const output = machineState.getOutput();
177
182
  const reverted = machineState.getReverted();
178
- const revertReason = reverted ? revertReasonFromExplicitRevert(output, this.context) : undefined;
183
+ const revertReason = reverted ? await revertReasonFromExplicitRevert(output, this.context) : undefined;
179
184
  const results = new AvmContractCallResult(reverted, output, machineState.gasLeft, revertReason);
180
185
  this.log.debug(`Context execution results: ${results.toString()}`);
181
186
 
@@ -185,11 +190,11 @@ export class AvmSimulator {
185
190
  } catch (err: any) {
186
191
  this.log.verbose('Exceptional halt (revert by something other than REVERT opcode)');
187
192
  if (!(err instanceof AvmExecutionError || err instanceof SideEffectLimitReachedError)) {
188
- this.log.verbose(`Unknown error thrown by AVM: ${err}`);
193
+ this.log.error(`Unknown error thrown by AVM: ${err}`);
189
194
  throw err;
190
195
  }
191
196
 
192
- const revertReason = revertReasonFromExceptionalHalt(err, this.context);
197
+ const revertReason = await revertReasonFromExceptionalHalt(err, this.context);
193
198
  // Note: "exceptional halts" cannot return data, hence [].
194
199
  const results = new AvmContractCallResult(/*reverted=*/ true, /*output=*/ [], machineState.gasLeft, revertReason);
195
200
  this.log.debug(`Context execution results: ${results.toString()}`);