@aztec/simulator 0.56.0 → 0.57.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 (156) hide show
  1. package/dest/acvm/oracle/oracle.d.ts +2 -5
  2. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  3. package/dest/acvm/oracle/oracle.js +6 -37
  4. package/dest/acvm/oracle/typed_oracle.d.ts +3 -6
  5. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  6. package/dest/acvm/oracle/typed_oracle.js +1 -10
  7. package/dest/avm/avm_execution_environment.d.ts +2 -3
  8. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  9. package/dest/avm/avm_execution_environment.js +3 -4
  10. package/dest/avm/avm_gas.d.ts.map +1 -1
  11. package/dest/avm/avm_gas.js +1 -2
  12. package/dest/avm/avm_memory_types.d.ts +3 -2
  13. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  14. package/dest/avm/avm_memory_types.js +3 -3
  15. package/dest/avm/errors.d.ts +1 -1
  16. package/dest/avm/errors.d.ts.map +1 -1
  17. package/dest/avm/errors.js +12 -3
  18. package/dest/avm/fixtures/index.d.ts.map +1 -1
  19. package/dest/avm/fixtures/index.js +3 -3
  20. package/dest/avm/journal/journal.d.ts +2 -1
  21. package/dest/avm/journal/journal.d.ts.map +1 -1
  22. package/dest/avm/journal/journal.js +7 -6
  23. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  24. package/dest/avm/opcodes/accrued_substate.js +37 -30
  25. package/dest/avm/opcodes/addressing_mode.d.ts +3 -2
  26. package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
  27. package/dest/avm/opcodes/addressing_mode.js +25 -21
  28. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
  29. package/dest/avm/opcodes/arithmetic.js +6 -5
  30. package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
  31. package/dest/avm/opcodes/bitwise.js +11 -9
  32. package/dest/avm/opcodes/commitment.d.ts.map +1 -1
  33. package/dest/avm/opcodes/commitment.js +6 -5
  34. package/dest/avm/opcodes/comparators.d.ts.map +1 -1
  35. package/dest/avm/opcodes/comparators.js +6 -5
  36. package/dest/avm/opcodes/contract.d.ts.map +1 -1
  37. package/dest/avm/opcodes/contract.js +6 -5
  38. package/dest/avm/opcodes/control_flow.js +6 -6
  39. package/dest/avm/opcodes/conversion.d.ts.map +1 -1
  40. package/dest/avm/opcodes/conversion.js +7 -6
  41. package/dest/avm/opcodes/ec_add.d.ts.map +1 -1
  42. package/dest/avm/opcodes/ec_add.js +8 -7
  43. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  44. package/dest/avm/opcodes/environment_getters.js +6 -5
  45. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  46. package/dest/avm/opcodes/external_calls.js +27 -16
  47. package/dest/avm/opcodes/hashing.d.ts +1 -3
  48. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  49. package/dest/avm/opcodes/hashing.js +31 -40
  50. package/dest/avm/opcodes/instruction.d.ts +2 -6
  51. package/dest/avm/opcodes/instruction.d.ts.map +1 -1
  52. package/dest/avm/opcodes/instruction.js +3 -9
  53. package/dest/avm/opcodes/memory.d.ts +0 -12
  54. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  55. package/dest/avm/opcodes/memory.js +21 -51
  56. package/dest/avm/opcodes/misc.d.ts.map +1 -1
  57. package/dest/avm/opcodes/misc.js +6 -5
  58. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
  59. package/dest/avm/opcodes/multi_scalar_mul.js +12 -12
  60. package/dest/avm/opcodes/storage.d.ts.map +1 -1
  61. package/dest/avm/opcodes/storage.js +11 -9
  62. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  63. package/dest/avm/serialization/bytecode_serialization.js +2 -3
  64. package/dest/avm/serialization/instruction_serialization.d.ts +32 -34
  65. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  66. package/dest/avm/serialization/instruction_serialization.js +33 -36
  67. package/dest/client/client_execution_context.d.ts +6 -30
  68. package/dest/client/client_execution_context.d.ts.map +1 -1
  69. package/dest/client/client_execution_context.js +31 -53
  70. package/dest/client/index.d.ts +0 -1
  71. package/dest/client/index.d.ts.map +1 -1
  72. package/dest/client/index.js +1 -2
  73. package/dest/client/private_execution.d.ts +2 -2
  74. package/dest/client/private_execution.d.ts.map +1 -1
  75. package/dest/client/private_execution.js +5 -19
  76. package/dest/client/simulator.d.ts +2 -3
  77. package/dest/client/simulator.d.ts.map +1 -1
  78. package/dest/client/simulator.js +1 -1
  79. package/dest/common/debug_fn_name.d.ts +4 -0
  80. package/dest/common/debug_fn_name.d.ts.map +1 -0
  81. package/dest/common/debug_fn_name.js +15 -0
  82. package/dest/common/index.d.ts +0 -1
  83. package/dest/common/index.d.ts.map +1 -1
  84. package/dest/common/index.js +1 -2
  85. package/dest/public/enqueued_call_simulator.d.ts.map +1 -1
  86. package/dest/public/enqueued_call_simulator.js +3 -4
  87. package/dest/public/execution.d.ts +8 -1
  88. package/dest/public/execution.d.ts.map +1 -1
  89. package/dest/public/execution.js +13 -1
  90. package/dest/public/executor.d.ts +2 -3
  91. package/dest/public/executor.d.ts.map +1 -1
  92. package/dest/public/executor.js +8 -8
  93. package/dest/public/hints_builder.d.ts.map +1 -1
  94. package/dest/public/hints_builder.js +2 -2
  95. package/dest/public/public_processor.d.ts +1 -0
  96. package/dest/public/public_processor.d.ts.map +1 -1
  97. package/dest/public/public_processor.js +5 -2
  98. package/dest/public/side_effect_errors.d.ts +4 -0
  99. package/dest/public/side_effect_errors.d.ts.map +1 -0
  100. package/dest/public/side_effect_errors.js +7 -0
  101. package/dest/public/side_effect_trace.d.ts +2 -2
  102. package/dest/public/side_effect_trace.d.ts.map +1 -1
  103. package/dest/public/side_effect_trace.js +53 -28
  104. package/dest/public/side_effect_trace_interface.d.ts +1 -1
  105. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  106. package/package.json +12 -9
  107. package/src/acvm/oracle/oracle.ts +7 -85
  108. package/src/acvm/oracle/typed_oracle.ts +2 -31
  109. package/src/avm/avm_execution_environment.ts +1 -3
  110. package/src/avm/avm_gas.ts +0 -1
  111. package/src/avm/avm_memory_types.ts +10 -5
  112. package/src/avm/errors.ts +11 -3
  113. package/src/avm/fixtures/index.ts +1 -2
  114. package/src/avm/journal/journal.ts +11 -6
  115. package/src/avm/opcodes/accrued_substate.ts +36 -44
  116. package/src/avm/opcodes/addressing_mode.ts +27 -24
  117. package/src/avm/opcodes/arithmetic.ts +5 -7
  118. package/src/avm/opcodes/bitwise.ts +10 -11
  119. package/src/avm/opcodes/commitment.ts +6 -7
  120. package/src/avm/opcodes/comparators.ts +5 -7
  121. package/src/avm/opcodes/contract.ts +5 -7
  122. package/src/avm/opcodes/control_flow.ts +5 -5
  123. package/src/avm/opcodes/conversion.ts +6 -8
  124. package/src/avm/opcodes/ec_add.ts +14 -16
  125. package/src/avm/opcodes/environment_getters.ts +5 -4
  126. package/src/avm/opcodes/external_calls.ts +27 -20
  127. package/src/avm/opcodes/hashing.ts +30 -55
  128. package/src/avm/opcodes/instruction.ts +3 -10
  129. package/src/avm/opcodes/memory.ts +20 -64
  130. package/src/avm/opcodes/misc.ts +5 -7
  131. package/src/avm/opcodes/multi_scalar_mul.ts +11 -14
  132. package/src/avm/opcodes/storage.ts +10 -8
  133. package/src/avm/serialization/bytecode_serialization.ts +0 -2
  134. package/src/avm/serialization/instruction_serialization.ts +0 -3
  135. package/src/client/client_execution_context.ts +40 -96
  136. package/src/client/index.ts +0 -1
  137. package/src/client/private_execution.ts +9 -9
  138. package/src/client/simulator.ts +2 -3
  139. package/src/common/debug_fn_name.ts +22 -0
  140. package/src/common/index.ts +0 -1
  141. package/src/public/enqueued_call_simulator.ts +2 -3
  142. package/src/public/execution.ts +13 -2
  143. package/src/public/executor.ts +6 -12
  144. package/src/public/hints_builder.ts +7 -9
  145. package/src/public/public_processor.ts +5 -1
  146. package/src/public/side_effect_errors.ts +6 -0
  147. package/src/public/side_effect_trace.ts +72 -27
  148. package/src/public/side_effect_trace_interface.ts +2 -2
  149. package/dest/client/execution_result.d.ts +0 -104
  150. package/dest/client/execution_result.d.ts.map +0 -1
  151. package/dest/client/execution_result.js +0 -136
  152. package/dest/common/return_values.d.ts +0 -11
  153. package/dest/common/return_values.d.ts.map +0 -1
  154. package/dest/common/return_values.js +0 -13
  155. package/src/client/execution_result.ts +0 -228
  156. package/src/common/return_values.ts +0 -18
@@ -1,9 +1,10 @@
1
1
  import { PublicExecutionRequest, UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
2
- import { AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, AztecAddress, CallContext, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, Gas, L2ToL1Message, LogHash, NoteHash, Nullifier, ReadRequest, TreeLeafReadRequest, } from '@aztec/circuits.js';
2
+ import { AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, AztecAddress, CallContext, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, Gas, L2ToL1Message, LogHash, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_TX, NoteHash, Nullifier, ReadRequest, TreeLeafReadRequest, } from '@aztec/circuits.js';
3
3
  import { Fr } from '@aztec/foundation/fields';
4
4
  import { createDebugLogger } from '@aztec/foundation/log';
5
5
  import { createSimulationError } from '../common/errors.js';
6
6
  import { resultToPublicCallRequest } from './execution.js';
7
+ import { SideEffectLimitReachedError } from './side_effect_errors.js';
7
8
  export class PublicSideEffectTrace {
8
9
  constructor(
9
10
  /** The counter of this trace's first side effect. */
@@ -23,7 +24,6 @@ export class PublicSideEffectTrace {
23
24
  this.allUnencryptedLogs = [];
24
25
  this.unencryptedLogsHashes = [];
25
26
  this.publicCallRequests = [];
26
- this.gotContractInstances = [];
27
27
  this.nestedExecutions = [];
28
28
  this.sideEffectCounter = startSideEffectCounter;
29
29
  this.avmCircuitHints = AvmExecutionHints.empty();
@@ -37,46 +37,47 @@ export class PublicSideEffectTrace {
37
37
  incrementSideEffectCounter() {
38
38
  this.sideEffectCounter++;
39
39
  }
40
+ // TODO(dbanks12): checks against tx-wide limit need access to parent trace's length
40
41
  tracePublicStorageRead(storageAddress, slot, value, _exists, _cached) {
41
- // TODO(4805): check if some threshold is reached for max storage reads
42
- // (need access to parent length, or trace needs to be initialized with parent's contents)
43
42
  // NOTE: exists and cached are unused for now but may be used for optimizations or kernel hints later
43
+ if (this.contractStorageReads.length >= MAX_PUBLIC_DATA_READS_PER_TX) {
44
+ throw new SideEffectLimitReachedError('contract storage read', MAX_PUBLIC_DATA_READS_PER_TX);
45
+ }
44
46
  this.contractStorageReads.push(new ContractStorageRead(slot, value, this.sideEffectCounter, AztecAddress.fromField(storageAddress)));
45
47
  this.avmCircuitHints.storageValues.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ value));
46
48
  this.logger.debug(`SLOAD cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
47
49
  this.incrementSideEffectCounter();
48
50
  }
49
51
  tracePublicStorageWrite(storageAddress, slot, value) {
50
- // TODO(4805): check if some threshold is reached for max storage writes
51
- // (need access to parent length, or trace needs to be initialized with parent's contents)
52
+ if (this.contractStorageUpdateRequests.length >= MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
53
+ throw new SideEffectLimitReachedError('contract storage write', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
54
+ }
52
55
  this.contractStorageUpdateRequests.push(new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, storageAddress));
53
56
  this.logger.debug(`SSTORE cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
54
57
  this.incrementSideEffectCounter();
55
58
  }
56
59
  // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
57
60
  traceNoteHashCheck(_storageAddress, noteHash, leafIndex, exists) {
58
- // TODO(4805): check if some threshold is reached for max note hash checks
59
61
  // NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
60
- // TODO(dbanks12): leafIndex is unused for now but later must be used by kernel to constrain that the kernel
61
- // is in fact checking the leaf indicated by the user
62
+ if (this.noteHashReadRequests.length >= MAX_NOTE_HASH_READ_REQUESTS_PER_TX) {
63
+ throw new SideEffectLimitReachedError('note hash read request', MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
64
+ }
62
65
  this.noteHashReadRequests.push(new TreeLeafReadRequest(noteHash, leafIndex));
63
66
  this.avmCircuitHints.noteHashExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(leafIndex), /*value=*/ exists ? Fr.ONE : Fr.ZERO));
67
+ // NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
64
68
  }
65
69
  traceNewNoteHash(_storageAddress, noteHash) {
66
- // TODO(4805): check if some threshold is reached for max new note hash
67
- // NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
68
- // TODO(dbanks12): non-existent note hashes should emit a read request of the note hash that actually
69
- // IS there, and the AVM circuit should accept THAT noteHash as a hint. The circuit will then compare
70
- // the noteHash against the one provided by the user code to determine what to return to the user (exists or not),
71
- // and will then propagate the actually-present noteHash to its public inputs.
70
+ if (this.noteHashes.length >= MAX_NOTE_HASHES_PER_TX) {
71
+ throw new SideEffectLimitReachedError('note hash', MAX_NOTE_HASHES_PER_TX);
72
+ }
72
73
  this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
73
74
  this.logger.debug(`NEW_NOTE_HASH cnt: ${this.sideEffectCounter}`);
74
75
  this.incrementSideEffectCounter();
75
76
  }
76
77
  traceNullifierCheck(_storageAddress, nullifier, _leafIndex, exists, _isPending) {
77
- // TODO(4805): check if some threshold is reached for max new nullifier
78
78
  // NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
79
79
  // NOTE: isPending and leafIndex are unused for now but may be used for optimizations or kernel hints later
80
+ this.enforceLimitOnNullifierChecks();
80
81
  const readRequest = new ReadRequest(nullifier, this.sideEffectCounter);
81
82
  if (exists) {
82
83
  this.nullifierReadRequests.push(readRequest);
@@ -89,30 +90,37 @@ export class PublicSideEffectTrace {
89
90
  this.incrementSideEffectCounter();
90
91
  }
91
92
  traceNewNullifier(_storageAddress, nullifier) {
92
- // TODO(4805): check if some threshold is reached for max new nullifier
93
93
  // NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
94
+ if (this.nullifiers.length >= MAX_NULLIFIERS_PER_TX) {
95
+ throw new SideEffectLimitReachedError('nullifier', MAX_NULLIFIERS_PER_TX);
96
+ }
94
97
  this.nullifiers.push(new Nullifier(nullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
95
98
  this.logger.debug(`NEW_NULLIFIER cnt: ${this.sideEffectCounter}`);
96
99
  this.incrementSideEffectCounter();
97
100
  }
98
101
  // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
99
102
  traceL1ToL2MessageCheck(_contractAddress, msgHash, msgLeafIndex, exists) {
100
- // TODO(4805): check if some threshold is reached for max message reads
101
103
  // NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
102
- // TODO(dbanks12): leafIndex is unused for now but later must be used by kernel to constrain that the kernel
103
- // is in fact checking the leaf indicated by the user
104
+ if (this.l1ToL2MsgReadRequests.length >= MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX) {
105
+ throw new SideEffectLimitReachedError('l1 to l2 message read request', MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX);
106
+ }
104
107
  this.l1ToL2MsgReadRequests.push(new TreeLeafReadRequest(msgHash, msgLeafIndex));
105
108
  this.avmCircuitHints.l1ToL2MessageExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(msgLeafIndex), /*value=*/ exists ? Fr.ONE : Fr.ZERO));
109
+ // NOTE: counter does not increment for l1tol2 message checks (because it doesn't rely on pending messages)
106
110
  }
107
- traceNewL2ToL1Message(recipient, content) {
108
- // TODO(4805): check if some threshold is reached for max messages
111
+ traceNewL2ToL1Message(_contractAddress, recipient, content) {
112
+ if (this.newL2ToL1Messages.length >= MAX_L2_TO_L1_MSGS_PER_TX) {
113
+ throw new SideEffectLimitReachedError('l2 to l1 message', MAX_L2_TO_L1_MSGS_PER_TX);
114
+ }
109
115
  const recipientAddress = EthAddress.fromField(recipient);
110
116
  this.newL2ToL1Messages.push(new L2ToL1Message(recipientAddress, content, this.sideEffectCounter));
111
117
  this.logger.debug(`NEW_L2_TO_L1_MSG cnt: ${this.sideEffectCounter}`);
112
118
  this.incrementSideEffectCounter();
113
119
  }
114
120
  traceUnencryptedLog(contractAddress, log) {
115
- // TODO(4805): check if some threshold is reached for max logs
121
+ if (this.unencryptedLogs.length >= MAX_UNENCRYPTED_LOGS_PER_TX) {
122
+ throw new SideEffectLimitReachedError('unencrypted log', MAX_UNENCRYPTED_LOGS_PER_TX);
123
+ }
116
124
  const ulog = new UnencryptedL2Log(AztecAddress.fromField(contractAddress), Buffer.concat(log.map(f => f.toBuffer())));
117
125
  const basicLogHash = Fr.fromBuffer(ulog.hash());
118
126
  this.unencryptedLogs.push(ulog);
@@ -124,8 +132,8 @@ export class PublicSideEffectTrace {
124
132
  this.incrementSideEffectCounter();
125
133
  }
126
134
  traceGetContractInstance(instance) {
127
- // TODO(4805): check if some threshold is reached for max contract instance retrievals
128
- this.gotContractInstances.push(instance);
135
+ this.enforceLimitOnNullifierChecks('(contract address nullifier from GETCONTRACTINSTANCE)');
136
+ // TODO(dbanks12): should emit a nullifier read request
129
137
  this.avmCircuitHints.contractInstances.items.push(new AvmContractInstanceHint(instance.address, new Fr(instance.exists ? 1 : 0), instance.salt, instance.deployer, instance.contractClassId, instance.initializationHash, instance.publicKeysHash));
130
138
  this.logger.debug(`CONTRACT_INSTANCE cnt: ${this.sideEffectCounter}`);
131
139
  this.incrementSideEffectCounter();
@@ -149,6 +157,11 @@ export class PublicSideEffectTrace {
149
157
  avmCallResults,
150
158
  /** Function name for logging */
151
159
  functionName = 'unknown') {
160
+ // TODO(4805): check if some threshold is reached for max nested calls (to unique contracts?)
161
+ // TODO(dbanks12): should emit a nullifier read request. There should be two thresholds.
162
+ // one for max unique contract calls, and another based on max nullifier reads.
163
+ // Since this trace function happens _after_ a nested call, such threshold limits must take
164
+ // place in another trace function that occurs _before_ a nested call.
152
165
  const result = nestedCallTrace.toPublicExecutionResult(nestedEnvironment, startGasLeft, endGasLeft, bytecode, avmCallResults, functionName);
153
166
  this.sideEffectCounter = result.endSideEffectCounter.toNumber();
154
167
  // when a nested call returns, caller accepts its updated counter
@@ -202,14 +215,26 @@ export class PublicSideEffectTrace {
202
215
  unencryptedLogs: new UnencryptedFunctionL2Logs(this.unencryptedLogs),
203
216
  allUnencryptedLogs: new UnencryptedFunctionL2Logs(this.allUnencryptedLogs),
204
217
  unencryptedLogsHashes: this.unencryptedLogsHashes,
205
- // TODO(dbanks12): process contract instance read requests in public kernel
206
- //gotContractInstances: this.gotContractInstances,
207
218
  publicCallRequests: this.publicCallRequests,
208
219
  nestedExecutions: this.nestedExecutions,
209
220
  avmCircuitHints: this.avmCircuitHints,
210
221
  functionName,
211
222
  };
212
223
  }
224
+ enforceLimitOnNullifierChecks(errorMsgOrigin = '') {
225
+ // NOTE: Why error if _either_ limit was reached? If user code emits either an existent or non-existent
226
+ // nullifier read request (NULLIFIEREXISTS, GETCONTRACTINSTANCE, *CALL), and one of the limits has been
227
+ // reached (MAX_NULLIFIER_NON_EXISTENT_RRS vs MAX_NULLIFIER_RRS), but not the other, we must prevent the
228
+ // sequencer from lying and saying "this nullifier exists, but MAX_NULLIFIER_RRS has been reached, so I'm
229
+ // going to skip the read request and just revert instead" when the nullifier actually doesn't exist
230
+ // (or vice versa). So, if either maximum has been reached, any nullifier-reading operation must error.
231
+ if (this.nullifierReadRequests.length >= MAX_NULLIFIER_READ_REQUESTS_PER_TX) {
232
+ throw new SideEffectLimitReachedError(`nullifier read request ${errorMsgOrigin}`, MAX_NULLIFIER_READ_REQUESTS_PER_TX);
233
+ }
234
+ if (this.nullifierNonExistentReadRequests.length >= MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX) {
235
+ throw new SideEffectLimitReachedError(`nullifier non-existent read request ${errorMsgOrigin}`, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX);
236
+ }
237
+ }
213
238
  }
214
239
  /**
215
240
  * Helper function to create a public execution request from an AVM execution environment
@@ -224,4 +249,4 @@ function createPublicExecutionRequest(avmEnvironment) {
224
249
  });
225
250
  return new PublicExecutionRequest(avmEnvironment.address, callContext, avmEnvironment.calldata);
226
251
  }
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixHQUFHLEVBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUVULFdBQVcsRUFDWCxtQkFBbUIsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUE4Qix5QkFBeUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3ZGLE1BQU0sT0FBTyxxQkFBcUI7SUErQmhDO0lBQ0UscURBQXFEO0lBQ3JDLHlCQUFpQyxDQUFDO1FBQWxDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBWTtRQWhDN0MsV0FBTSxHQUFHLGlCQUFpQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFLNUQseUJBQW9CLEdBQTBCLEVBQUUsQ0FBQztRQUNqRCxrQ0FBNkIsR0FBbUMsRUFBRSxDQUFDO1FBRW5FLHlCQUFvQixHQUEwQixFQUFFLENBQUM7UUFDakQsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUU1QiwwQkFBcUIsR0FBa0IsRUFBRSxDQUFDO1FBQzFDLHFDQUFnQyxHQUFrQixFQUFFLENBQUM7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
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixHQUFHLEVBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCxxQ0FBcUMsRUFDckMsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixrQ0FBa0MsRUFDbEMscUJBQXFCLEVBQ3JCLCtDQUErQyxFQUMvQyxrQ0FBa0MsRUFDbEMsNEJBQTRCLEVBQzVCLHNDQUFzQyxFQUN0QywyQkFBMkIsRUFDM0IsUUFBUSxFQUNSLFNBQVMsRUFFVCxXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBOEIseUJBQXlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUt0RSxNQUFNLE9BQU8scUJBQXFCO0lBNkJoQztJQUNFLHFEQUFxRDtJQUNyQyx5QkFBaUMsQ0FBQztRQUFsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQVk7UUE5QjdDLFdBQU0sR0FBRyxpQkFBaUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxD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
@@ -14,7 +14,7 @@ export interface PublicSideEffectTraceInterface {
14
14
  traceNullifierCheck(storageAddress: Fr, nullifier: Fr, leafIndex: Fr, exists: boolean, isPending: boolean): void;
15
15
  traceNewNullifier(storageAddress: Fr, nullifier: Fr): void;
16
16
  traceL1ToL2MessageCheck(contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr, exists: boolean): void;
17
- traceNewL2ToL1Message(recipient: Fr, content: Fr): void;
17
+ traceNewL2ToL1Message(contractAddress: Fr, recipient: Fr, content: Fr): void;
18
18
  traceUnencryptedLog(contractAddress: Fr, log: Fr[]): void;
19
19
  traceGetContractInstance(instance: TracedContractInstance): void;
20
20
  traceNestedCall(
@@ -1 +1 @@
1
- {"version":3,"file":"side_effect_trace_interface.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace_interface.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,IAAI,8BAA8B,CAAC;IACvC,UAAU,IAAI,MAAM,CAAC;IACrB,sBAAsB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACxG,uBAAuB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;IACvE,kBAAkB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3F,gBAAgB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC;IACzD,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACjH,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC;IAC3D,uBAAuB,CAAC,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnG,qBAAqB,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;IACxD,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAE1D,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACjE,eAAe;IACb,oCAAoC;IACpC,eAAe,EAAE,8BAA8B;IAC/C,oDAAoD;IACpD,iBAAiB,EAAE,uBAAuB;IAC1C,4DAA4D;IAE5D,YAAY,EAAE,GAAG;IACjB,yDAAyD;IAEzD,UAAU,EAAE,GAAG;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM;IAChB,yBAAyB;IACzB,cAAc,EAAE,qBAAqB;IACrC,oBAAoB;IACpB,YAAY,EAAE,MAAM,GACnB,IAAI,CAAC;CACT"}
1
+ {"version":3,"file":"side_effect_trace_interface.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace_interface.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,IAAI,8BAA8B,CAAC;IACvC,UAAU,IAAI,MAAM,CAAC;IAErB,sBAAsB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACxG,uBAAuB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;IACvE,kBAAkB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3F,gBAAgB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC;IACzD,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACjH,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC;IAC3D,uBAAuB,CAAC,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACnG,qBAAqB,CAAC,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;IAC7E,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAE1D,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACjE,eAAe;IACb,oCAAoC;IACpC,eAAe,EAAE,8BAA8B;IAC/C,oDAAoD;IACpD,iBAAiB,EAAE,uBAAuB;IAC1C,4DAA4D;IAE5D,YAAY,EAAE,GAAG;IACjB,yDAAyD;IAEzD,UAAU,EAAE,GAAG;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM;IAChB,yBAAyB;IACzB,cAAc,EAAE,qBAAqB;IACrC,oBAAoB;IACpB,YAAY,EAAE,MAAM,GACnB,IAAI,CAAC;CACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/simulator",
3
- "version": "0.56.0",
3
+ "version": "0.57.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -38,6 +38,9 @@
38
38
  "parser": {
39
39
  "syntax": "typescript",
40
40
  "decorators": true
41
+ },
42
+ "transform": {
43
+ "decoratorVersion": "2022-03"
41
44
  }
42
45
  }
43
46
  }
@@ -56,14 +59,14 @@
56
59
  ]
57
60
  },
58
61
  "dependencies": {
59
- "@aztec/circuit-types": "0.56.0",
60
- "@aztec/circuits.js": "0.56.0",
61
- "@aztec/foundation": "0.56.0",
62
- "@aztec/noir-protocol-circuits-types": "0.56.0",
63
- "@aztec/protocol-contracts": "0.56.0",
64
- "@aztec/telemetry-client": "0.56.0",
65
- "@aztec/types": "0.56.0",
66
- "@aztec/world-state": "0.56.0",
62
+ "@aztec/circuit-types": "0.57.0",
63
+ "@aztec/circuits.js": "0.57.0",
64
+ "@aztec/foundation": "0.57.0",
65
+ "@aztec/noir-protocol-circuits-types": "0.57.0",
66
+ "@aztec/protocol-contracts": "0.57.0",
67
+ "@aztec/telemetry-client": "0.57.0",
68
+ "@aztec/types": "0.57.0",
69
+ "@aztec/world-state": "0.57.0",
67
70
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
68
71
  "@noir-lang/types": "portal:../../noir/packages/types",
69
72
  "levelup": "^5.1.1",
@@ -1,8 +1,7 @@
1
1
  import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
2
- import { KeyValidationRequest } from '@aztec/circuits.js';
3
2
  import { FunctionSelector, NoteSelector } from '@aztec/foundation/abi';
4
3
  import { AztecAddress } from '@aztec/foundation/aztec-address';
5
- import { Fr, Point } from '@aztec/foundation/fields';
4
+ import { Fr } from '@aztec/foundation/fields';
6
5
 
7
6
  import { type ACVMField } from '../acvm_types.js';
8
7
  import { frToBoolean, frToNumber, fromACVMField } from '../deserialize.js';
@@ -329,72 +328,6 @@ export class Oracle {
329
328
  this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
330
329
  }
331
330
 
332
- computeEncryptedEventLog(
333
- [contractAddress]: ACVMField[],
334
- [randomness]: ACVMField[],
335
- [eventTypeId]: ACVMField[],
336
- [ovskApp]: ACVMField[],
337
- [ovpkMX]: ACVMField[],
338
- [ovpkMY]: ACVMField[],
339
- [ovpkMIsInfinite]: ACVMField[],
340
- [ivpkMX]: ACVMField[],
341
- [ivpkMY]: ACVMField[],
342
- [ivpkMIsInfinite]: ACVMField[],
343
- [recipient]: ACVMField[],
344
- preimage: ACVMField[],
345
- ): ACVMField[] {
346
- const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY), !fromACVMField(ovpkMIsInfinite).isZero());
347
- const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
348
- const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY), !fromACVMField(ivpkMIsInfinite).isZero());
349
- const encLog = this.typedOracle.computeEncryptedEventLog(
350
- AztecAddress.fromString(contractAddress),
351
- Fr.fromString(randomness),
352
- Fr.fromString(eventTypeId),
353
- ovKeys,
354
- ivpkM,
355
- AztecAddress.fromString(recipient),
356
- preimage.map(fromACVMField),
357
- );
358
- const bytes: ACVMField[] = [];
359
- encLog.forEach(v => {
360
- bytes.push(toACVMField(v));
361
- });
362
- return bytes;
363
- }
364
-
365
- computeEncryptedNoteLog(
366
- [contractAddress]: ACVMField[],
367
- [storageSlot]: ACVMField[],
368
- [noteTypeId]: ACVMField[],
369
- [ovskApp]: ACVMField[],
370
- [ovpkMX]: ACVMField[],
371
- [ovpkMY]: ACVMField[],
372
- [ovpkMIsInfinite]: ACVMField[],
373
- [ivpkMX]: ACVMField[],
374
- [ivpkMY]: ACVMField[],
375
- [ivpkMIsInfinite]: ACVMField[],
376
- [recipient]: ACVMField[],
377
- preimage: ACVMField[],
378
- ): ACVMField[] {
379
- const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY), !fromACVMField(ovpkMIsInfinite).isZero());
380
- const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
381
- const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY), !fromACVMField(ivpkMIsInfinite).isZero());
382
- const encLog = this.typedOracle.computeEncryptedNoteLog(
383
- AztecAddress.fromString(contractAddress),
384
- Fr.fromString(storageSlot),
385
- NoteSelector.fromField(Fr.fromString(noteTypeId)),
386
- ovKeys,
387
- ivpkM,
388
- AztecAddress.fromString(recipient),
389
- preimage.map(fromACVMField),
390
- );
391
- const bytes: ACVMField[] = [];
392
- encLog.forEach(v => {
393
- bytes.push(toACVMField(v));
394
- });
395
- return bytes;
396
- }
397
-
398
331
  emitUnencryptedLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): ACVMField {
399
332
  const logPayload = Buffer.concat(message.map(fromACVMField).map(f => f.toBuffer()));
400
333
  const log = new UnencryptedL2Log(AztecAddress.fromString(contractAddress), logPayload);
@@ -447,8 +380,8 @@ export class Oracle {
447
380
  [sideEffectCounter]: ACVMField[],
448
381
  [isStaticCall]: ACVMField[],
449
382
  [isDelegateCall]: ACVMField[],
450
- ) {
451
- await this.typedOracle.enqueuePublicFunctionCall(
383
+ ): Promise<ACVMField> {
384
+ const newArgsHash = await this.typedOracle.enqueuePublicFunctionCall(
452
385
  AztecAddress.fromString(contractAddress),
453
386
  FunctionSelector.fromField(fromACVMField(functionSelector)),
454
387
  fromACVMField(argsHash),
@@ -456,6 +389,7 @@ export class Oracle {
456
389
  frToBoolean(fromACVMField(isStaticCall)),
457
390
  frToBoolean(fromACVMField(isDelegateCall)),
458
391
  );
392
+ return toACVMField(newArgsHash);
459
393
  }
460
394
 
461
395
  async setPublicTeardownFunctionCall(
@@ -465,8 +399,8 @@ export class Oracle {
465
399
  [sideEffectCounter]: ACVMField[],
466
400
  [isStaticCall]: ACVMField[],
467
401
  [isDelegateCall]: ACVMField[],
468
- ) {
469
- await this.typedOracle.setPublicTeardownFunctionCall(
402
+ ): Promise<ACVMField> {
403
+ const newArgsHash = await this.typedOracle.setPublicTeardownFunctionCall(
470
404
  AztecAddress.fromString(contractAddress),
471
405
  FunctionSelector.fromField(fromACVMField(functionSelector)),
472
406
  fromACVMField(argsHash),
@@ -474,22 +408,10 @@ export class Oracle {
474
408
  frToBoolean(fromACVMField(isStaticCall)),
475
409
  frToBoolean(fromACVMField(isDelegateCall)),
476
410
  );
411
+ return toACVMField(newArgsHash);
477
412
  }
478
413
 
479
414
  notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]) {
480
415
  this.typedOracle.notifySetMinRevertibleSideEffectCounter(frToNumber(fromACVMField(minRevertibleSideEffectCounter)));
481
416
  }
482
-
483
- aes128Encrypt(input: ACVMField[], initializationVector: ACVMField[], key: ACVMField[]): ACVMField[] {
484
- // Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
485
- const processedInput = Buffer.from(input.map(fromACVMField).map(f => f.toNumber()));
486
- const processedIV = Buffer.from(initializationVector.map(fromACVMField).map(f => f.toNumber()));
487
- const processedKey = Buffer.from(key.map(fromACVMField).map(f => f.toNumber()));
488
-
489
- // Encrypt the input
490
- const ciphertext = this.typedOracle.aes128Encrypt(processedInput, processedIV, processedKey);
491
-
492
- // Convert each byte of ciphertext to a field and return it
493
- return Array.from(ciphertext).map(byte => toACVMField(byte));
494
- }
495
417
  }
@@ -5,7 +5,6 @@ import {
5
5
  type NoteStatus,
6
6
  type NullifierMembershipWitness,
7
7
  type PublicDataWitness,
8
- type PublicKey,
9
8
  type SiblingPath,
10
9
  type UnencryptedL2Log,
11
10
  } from '@aztec/circuit-types';
@@ -204,30 +203,6 @@ export abstract class TypedOracle {
204
203
  throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
205
204
  }
206
205
 
207
- computeEncryptedEventLog(
208
- _contractAddress: AztecAddress,
209
- _randomness: Fr,
210
- _eventTypeId: Fr,
211
- _ovKeys: KeyValidationRequest,
212
- _ivpkM: PublicKey,
213
- _recipient: AztecAddress,
214
- _preimage: Fr[],
215
- ): Buffer {
216
- throw new OracleMethodNotAvailableError('computeEncryptedEventLog');
217
- }
218
-
219
- computeEncryptedNoteLog(
220
- _contractAddress: AztecAddress,
221
- _storageSlot: Fr,
222
- _noteTypeId: NoteSelector,
223
- _ovKeys: KeyValidationRequest,
224
- _ivpkM: PublicKey,
225
- _recipient: AztecAddress,
226
- _preimage: Fr[],
227
- ): Buffer {
228
- throw new OracleMethodNotAvailableError('computeEncryptedNoteLog');
229
- }
230
-
231
206
  emitUnencryptedLog(_log: UnencryptedL2Log, _counter: number): void {
232
207
  throw new OracleMethodNotAvailableError('emitUnencryptedLog');
233
208
  }
@@ -254,7 +229,7 @@ export abstract class TypedOracle {
254
229
  _sideEffectCounter: number,
255
230
  _isStaticCall: boolean,
256
231
  _isDelegateCall: boolean,
257
- ): Promise<void> {
232
+ ): Promise<Fr> {
258
233
  throw new OracleMethodNotAvailableError('enqueuePublicFunctionCall');
259
234
  }
260
235
 
@@ -265,7 +240,7 @@ export abstract class TypedOracle {
265
240
  _sideEffectCounter: number,
266
241
  _isStaticCall: boolean,
267
242
  _isDelegateCall: boolean,
268
- ): Promise<void> {
243
+ ): Promise<Fr> {
269
244
  throw new OracleMethodNotAvailableError('setPublicTeardownFunctionCall');
270
245
  }
271
246
 
@@ -273,10 +248,6 @@ export abstract class TypedOracle {
273
248
  throw new OracleMethodNotAvailableError('notifySetMinRevertibleSideEffectCounter');
274
249
  }
275
250
 
276
- aes128Encrypt(_input: Buffer, _initializationVector: Buffer, _key: Buffer): Buffer {
277
- throw new OracleMethodNotAvailableError('encrypt');
278
- }
279
-
280
251
  debugLog(_message: string, _fields: Fr[]): void {
281
252
  throw new OracleMethodNotAvailableError('debugLog');
282
253
  }
@@ -1,4 +1,4 @@
1
- import { FunctionSelector, type GlobalVariables, type Header } from '@aztec/circuits.js';
1
+ import { FunctionSelector, 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
 
@@ -14,7 +14,6 @@ export class AvmExecutionEnvironment {
14
14
  public readonly functionSelector: FunctionSelector, // may be temporary (#7224)
15
15
  public readonly contractCallDepth: Fr,
16
16
  public readonly transactionFee: Fr,
17
- public readonly header: Header,
18
17
  public readonly globals: GlobalVariables,
19
18
  public readonly isStaticCall: boolean,
20
19
  public readonly isDelegateCall: boolean,
@@ -35,7 +34,6 @@ export class AvmExecutionEnvironment {
35
34
  functionSelector,
36
35
  this.contractCallDepth.add(Fr.ONE),
37
36
  this.transactionFee,
38
- this.header,
39
37
  this.globals,
40
38
  isStaticCall,
41
39
  isDelegateCall,
@@ -101,7 +101,6 @@ const BASE_GAS_COSTS: Record<Opcode, Gas> = {
101
101
  [Opcode.SET_FF]: makeCost(c.AVM_SET_BASE_L2_GAS, 0),
102
102
  [Opcode.MOV_8]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0),
103
103
  [Opcode.MOV_16]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0),
104
- [Opcode.CMOV]: makeCost(c.AVM_CMOV_BASE_L2_GAS, 0),
105
104
  [Opcode.SLOAD]: makeCost(c.AVM_SLOAD_BASE_L2_GAS, 0),
106
105
  [Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS, c.AVM_SSTORE_BASE_DA_GAS),
107
106
  [Opcode.NOTEHASHEXISTS]: makeCost(c.AVM_NOTEHASHEXISTS_BASE_L2_GAS, 0),
@@ -413,7 +413,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
413
413
  }
414
414
 
415
415
  /** No-op. Implemented here for compatibility with the MeteredTaggedMemory. */
416
- public assert(_operations: Partial<MemoryOperations & { indirect: number }>) {}
416
+ public assert(_operations: Partial<MemoryOperations & { addressing: Addressing }>) {}
417
417
  }
418
418
 
419
419
  /** Tagged memory wrapper with metering for each memory read and write operation. */
@@ -435,10 +435,15 @@ export class MeteredTaggedMemory implements TaggedMemoryInterface {
435
435
  * Asserts that the exact number of memory operations have been performed.
436
436
  * Indirect represents the flags for indirect accesses: each bit set to one counts as an extra read.
437
437
  */
438
- public assert(operations: Partial<MemoryOperations & { indirect: number }>) {
439
- const { reads: expectedReads, writes: expectedWrites, indirect } = { reads: 0, writes: 0, ...operations };
440
-
441
- const totalExpectedReads = expectedReads + Addressing.fromWire(indirect ?? 0).count(AddressingMode.INDIRECT);
438
+ public assert(operations: Partial<MemoryOperations & { addressing: Addressing }>) {
439
+ const {
440
+ reads: expectedReads,
441
+ writes: expectedWrites,
442
+ addressing,
443
+ } = { reads: 0, writes: 0, addressing: new Addressing([]), ...operations };
444
+
445
+ const totalExpectedReads =
446
+ expectedReads + addressing.count(AddressingMode.INDIRECT) + addressing.count(AddressingMode.RELATIVE);
442
447
  const { reads: actualReads, writes: actualWrites } = this.reset();
443
448
  if (actualReads !== totalExpectedReads) {
444
449
  throw new InstructionExecutionError(
package/src/avm/errors.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type FailingFunction, type NoirCallStack } from '@aztec/circuit-types';
2
- import { type AztecAddress, type Fr } from '@aztec/circuits.js';
2
+ import { type AztecAddress, Fr, FunctionSelector, PUBLIC_DISPATCH_SELECTOR } from '@aztec/circuits.js';
3
3
 
4
4
  import { ExecutionError } from '../common/errors.js';
5
5
  import { type AvmContext } from './avm_context.js';
@@ -109,13 +109,21 @@ export class AvmRevertReason extends ExecutionError {
109
109
  * @param nestedError - the error that caused this one (if this is not the root-cause itself)
110
110
  */
111
111
  function createRevertReason(message: string, context: AvmContext, nestedError?: AvmRevertReason): AvmRevertReason {
112
+ // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Properly fix this.
113
+ // If the function selector is the public dispatch selector, we need to extract the actual function selector from the calldata.
114
+ // We should remove this because the AVM (or public protocol) shouldn't be aware of the public dispatch calling convention.
115
+ let functionSelector = context.environment.functionSelector;
116
+ const internalCallStack = context.machineState.internalCallStack;
117
+ if (functionSelector.toField().equals(new Fr(PUBLIC_DISPATCH_SELECTOR)) && context.environment.calldata.length > 0) {
118
+ functionSelector = FunctionSelector.fromField(context.environment.calldata[0]);
119
+ }
112
120
  return new AvmRevertReason(
113
121
  message,
114
122
  /*failingFunction=*/ {
115
123
  contractAddress: context.environment.address,
116
- functionSelector: context.environment.functionSelector,
124
+ functionSelector: functionSelector,
117
125
  },
118
- /*noirCallStack=*/ [...context.machineState.internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
126
+ /*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
119
127
  /*options=*/ { cause: nestedError },
120
128
  );
121
129
  }
@@ -1,5 +1,5 @@
1
1
  import { isNoirCallStackUnresolved } from '@aztec/circuit-types';
2
- import { GasFees, GlobalVariables, Header } from '@aztec/circuits.js';
2
+ import { GasFees, GlobalVariables } from '@aztec/circuits.js';
3
3
  import { FunctionSelector, getFunctionDebugMetadata } from '@aztec/foundation/abi';
4
4
  import { AztecAddress } from '@aztec/foundation/aztec-address';
5
5
  import { EthAddress } from '@aztec/foundation/eth-address';
@@ -63,7 +63,6 @@ export function initExecutionEnvironment(overrides?: Partial<AvmExecutionEnviron
63
63
  overrides?.functionSelector ?? FunctionSelector.empty(),
64
64
  overrides?.contractCallDepth ?? Fr.zero(),
65
65
  overrides?.transactionFee ?? Fr.zero(),
66
- overrides?.header ?? Header.empty(),
67
66
  overrides?.globals ?? GlobalVariables.empty(),
68
67
  overrides?.isStaticCall ?? false,
69
68
  overrides?.isDelegateCall ?? false,