@aztec/simulator 0.42.0 → 0.44.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 (191) hide show
  1. package/dest/acvm/oracle/oracle.d.ts +5 -2
  2. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  3. package/dest/acvm/oracle/oracle.js +25 -8
  4. package/dest/acvm/oracle/typed_oracle.d.ts +7 -4
  5. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  6. package/dest/acvm/oracle/typed_oracle.js +14 -5
  7. package/dest/avm/avm_execution_environment.d.ts +2 -0
  8. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  9. package/dest/avm/avm_execution_environment.js +9 -4
  10. package/dest/avm/avm_gas.d.ts.map +1 -1
  11. package/dest/avm/avm_gas.js +3 -1
  12. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  13. package/dest/avm/avm_memory_types.js +2 -4
  14. package/dest/avm/avm_simulator.d.ts.map +1 -1
  15. package/dest/avm/avm_simulator.js +2 -3
  16. package/dest/avm/fixtures/index.d.ts +10 -3
  17. package/dest/avm/fixtures/index.d.ts.map +1 -1
  18. package/dest/avm/fixtures/index.js +9 -11
  19. package/dest/avm/journal/journal.d.ts +57 -66
  20. package/dest/avm/journal/journal.d.ts.map +1 -1
  21. package/dest/avm/journal/journal.js +97 -131
  22. package/dest/avm/journal/nullifiers.d.ts +21 -8
  23. package/dest/avm/journal/nullifiers.d.ts.map +1 -1
  24. package/dest/avm/journal/nullifiers.js +26 -8
  25. package/dest/avm/journal/public_storage.d.ts +4 -0
  26. package/dest/avm/journal/public_storage.d.ts.map +1 -1
  27. package/dest/avm/journal/public_storage.js +10 -1
  28. package/dest/avm/opcodes/accrued_substate.d.ts +2 -2
  29. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  30. package/dest/avm/opcodes/accrued_substate.js +39 -24
  31. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
  32. package/dest/avm/opcodes/arithmetic.js +12 -9
  33. package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
  34. package/dest/avm/opcodes/bitwise.js +11 -8
  35. package/dest/avm/opcodes/comparators.d.ts.map +1 -1
  36. package/dest/avm/opcodes/comparators.js +7 -5
  37. package/dest/avm/opcodes/contract.d.ts.map +1 -1
  38. package/dest/avm/opcodes/contract.js +20 -24
  39. package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
  40. package/dest/avm/opcodes/control_flow.js +4 -2
  41. package/dest/avm/opcodes/ec_add.d.ts +19 -0
  42. package/dest/avm/opcodes/ec_add.d.ts.map +1 -0
  43. package/dest/avm/opcodes/ec_add.js +78 -0
  44. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  45. package/dest/avm/opcodes/external_calls.js +19 -29
  46. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  47. package/dest/avm/opcodes/hashing.js +10 -2
  48. package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -1
  49. package/dest/avm/opcodes/instruction_impl.js +4 -2
  50. package/dest/avm/opcodes/memory.d.ts +1 -1
  51. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  52. package/dest/avm/opcodes/memory.js +14 -12
  53. package/dest/avm/opcodes/multi_scalar_mul.d.ts +16 -0
  54. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -0
  55. package/dest/avm/opcodes/multi_scalar_mul.js +95 -0
  56. package/dest/avm/opcodes/storage.d.ts +1 -1
  57. package/dest/avm/opcodes/storage.d.ts.map +1 -1
  58. package/dest/avm/opcodes/storage.js +11 -8
  59. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  60. package/dest/avm/serialization/bytecode_serialization.js +5 -1
  61. package/dest/avm/serialization/instruction_serialization.d.ts +3 -1
  62. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  63. package/dest/avm/serialization/instruction_serialization.js +4 -2
  64. package/dest/avm/test_utils.d.ts +14 -0
  65. package/dest/avm/test_utils.d.ts.map +1 -0
  66. package/dest/avm/test_utils.js +36 -0
  67. package/dest/client/client_execution_context.d.ts +17 -5
  68. package/dest/client/client_execution_context.d.ts.map +1 -1
  69. package/dest/client/client_execution_context.js +32 -18
  70. package/dest/client/execution_note_cache.d.ts.map +1 -1
  71. package/dest/client/execution_note_cache.js +1 -1
  72. package/dest/client/execution_result.d.ts +2 -1
  73. package/dest/client/execution_result.d.ts.map +1 -1
  74. package/dest/client/execution_result.js +1 -1
  75. package/dest/client/index.d.ts +2 -0
  76. package/dest/client/index.d.ts.map +1 -1
  77. package/dest/client/index.js +3 -1
  78. package/dest/client/simulator.d.ts +4 -3
  79. package/dest/client/simulator.d.ts.map +1 -1
  80. package/dest/client/simulator.js +17 -9
  81. package/dest/client/view_data_oracle.d.ts +2 -0
  82. package/dest/client/view_data_oracle.d.ts.map +1 -1
  83. package/dest/client/view_data_oracle.js +7 -1
  84. package/dest/mocks/fixtures.d.ts.map +1 -1
  85. package/dest/mocks/fixtures.js +3 -2
  86. package/dest/public/abstract_phase_manager.d.ts +11 -11
  87. package/dest/public/abstract_phase_manager.d.ts.map +1 -1
  88. package/dest/public/abstract_phase_manager.js +84 -59
  89. package/dest/public/app_logic_phase_manager.d.ts +3 -3
  90. package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
  91. package/dest/public/app_logic_phase_manager.js +4 -3
  92. package/dest/public/db_interfaces.d.ts +1 -0
  93. package/dest/public/db_interfaces.d.ts.map +1 -1
  94. package/dest/public/execution.d.ts +28 -40
  95. package/dest/public/execution.d.ts.map +1 -1
  96. package/dest/public/execution.js +1 -51
  97. package/dest/public/executor.d.ts +9 -4
  98. package/dest/public/executor.d.ts.map +1 -1
  99. package/dest/public/executor.js +38 -27
  100. package/dest/public/hints_builder.d.ts +1 -1
  101. package/dest/public/index.d.ts +6 -6
  102. package/dest/public/index.d.ts.map +1 -1
  103. package/dest/public/index.js +7 -7
  104. package/dest/public/phase_manager_factory.d.ts +3 -3
  105. package/dest/public/phase_manager_factory.d.ts.map +1 -1
  106. package/dest/public/phase_manager_factory.js +5 -5
  107. package/dest/public/public_db_sources.d.ts +3 -1
  108. package/dest/public/public_db_sources.d.ts.map +1 -1
  109. package/dest/public/public_db_sources.js +54 -8
  110. package/dest/public/public_processor.d.ts +5 -2
  111. package/dest/public/public_processor.d.ts.map +1 -1
  112. package/dest/public/public_processor.js +143 -125
  113. package/dest/public/setup_phase_manager.d.ts +3 -3
  114. package/dest/public/setup_phase_manager.d.ts.map +1 -1
  115. package/dest/public/setup_phase_manager.js +3 -3
  116. package/dest/public/side_effect_trace.d.ts +86 -0
  117. package/dest/public/side_effect_trace.d.ts.map +1 -0
  118. package/dest/public/side_effect_trace.js +222 -0
  119. package/dest/public/side_effect_trace_interface.d.ts +36 -0
  120. package/dest/public/side_effect_trace_interface.d.ts.map +1 -0
  121. package/dest/public/side_effect_trace_interface.js +2 -0
  122. package/dest/public/tail_phase_manager.d.ts +3 -3
  123. package/dest/public/tail_phase_manager.d.ts.map +1 -1
  124. package/dest/public/tail_phase_manager.js +3 -3
  125. package/dest/public/teardown_phase_manager.d.ts +3 -3
  126. package/dest/public/teardown_phase_manager.d.ts.map +1 -1
  127. package/dest/public/teardown_phase_manager.js +4 -3
  128. package/dest/public/transitional_adaptors.d.ts +2 -6
  129. package/dest/public/transitional_adaptors.d.ts.map +1 -1
  130. package/dest/public/transitional_adaptors.js +1 -43
  131. package/package.json +18 -9
  132. package/src/acvm/oracle/oracle.ts +46 -9
  133. package/src/acvm/oracle/typed_oracle.ts +37 -7
  134. package/src/avm/avm_execution_environment.ts +10 -3
  135. package/src/avm/avm_gas.ts +2 -0
  136. package/src/avm/avm_memory_types.ts +1 -3
  137. package/src/avm/avm_simulator.ts +2 -3
  138. package/src/avm/fixtures/index.ts +19 -14
  139. package/src/avm/journal/journal.ts +127 -231
  140. package/src/avm/journal/nullifiers.ts +30 -13
  141. package/src/avm/journal/public_storage.ts +10 -0
  142. package/src/avm/opcodes/accrued_substate.ts +60 -23
  143. package/src/avm/opcodes/arithmetic.ts +17 -8
  144. package/src/avm/opcodes/bitwise.ts +13 -8
  145. package/src/avm/opcodes/comparators.ts +9 -4
  146. package/src/avm/opcodes/contract.ts +22 -26
  147. package/src/avm/opcodes/control_flow.ts +3 -1
  148. package/src/avm/opcodes/ec_add.ts +92 -0
  149. package/src/avm/opcodes/external_calls.ts +20 -36
  150. package/src/avm/opcodes/hashing.ts +11 -1
  151. package/src/avm/opcodes/instruction_impl.ts +4 -1
  152. package/src/avm/opcodes/memory.ts +18 -11
  153. package/src/avm/opcodes/multi_scalar_mul.ts +114 -0
  154. package/src/avm/opcodes/storage.ts +10 -10
  155. package/src/avm/serialization/bytecode_serialization.ts +4 -0
  156. package/src/avm/serialization/instruction_serialization.ts +2 -0
  157. package/src/avm/test_utils.ts +53 -0
  158. package/src/client/client_execution_context.ts +55 -21
  159. package/src/client/execution_note_cache.ts +0 -1
  160. package/src/client/execution_result.ts +2 -1
  161. package/src/client/index.ts +2 -0
  162. package/src/client/simulator.ts +26 -10
  163. package/src/client/view_data_oracle.ts +8 -0
  164. package/src/mocks/fixtures.ts +2 -1
  165. package/src/public/abstract_phase_manager.ts +99 -70
  166. package/src/public/app_logic_phase_manager.ts +3 -2
  167. package/src/public/db_interfaces.ts +2 -0
  168. package/src/public/execution.ts +35 -94
  169. package/src/public/executor.ts +56 -40
  170. package/src/public/index.ts +6 -12
  171. package/src/public/phase_manager_factory.ts +6 -6
  172. package/src/public/public_db_sources.ts +62 -7
  173. package/src/public/public_processor.ts +15 -9
  174. package/src/public/setup_phase_manager.ts +2 -2
  175. package/src/public/side_effect_trace.ts +323 -0
  176. package/src/public/side_effect_trace_interface.ts +41 -0
  177. package/src/public/tail_phase_manager.ts +2 -2
  178. package/src/public/teardown_phase_manager.ts +3 -2
  179. package/src/public/transitional_adaptors.ts +2 -60
  180. package/dest/avm/journal/trace.d.ts +0 -33
  181. package/dest/avm/journal/trace.d.ts.map +0 -1
  182. package/dest/avm/journal/trace.js +0 -151
  183. package/dest/avm/journal/trace_types.d.ts +0 -51
  184. package/dest/avm/journal/trace_types.d.ts.map +0 -1
  185. package/dest/avm/journal/trace_types.js +0 -6
  186. package/dest/public/utils.d.ts +0 -8
  187. package/dest/public/utils.d.ts.map +0 -1
  188. package/dest/public/utils.js +0 -38
  189. package/src/avm/journal/trace.ts +0 -184
  190. package/src/avm/journal/trace_types.ts +0 -88
  191. package/src/public/utils.ts +0 -39
@@ -1,6 +1,6 @@
1
1
  import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
2
2
  import { KeyValidationRequest } from '@aztec/circuits.js';
3
- import { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
3
+ import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/foundation/abi';
4
4
  import { AztecAddress } from '@aztec/foundation/aztec-address';
5
5
  import { Fr, Point } from '@aztec/foundation/fields';
6
6
 
@@ -49,6 +49,14 @@ export class Oracle {
49
49
  return toACVMField(await this.typedOracle.getContractAddress());
50
50
  }
51
51
 
52
+ async getVersion(): Promise<ACVMField> {
53
+ return toACVMField(await this.typedOracle.getVersion());
54
+ }
55
+
56
+ async getChainId(): Promise<ACVMField> {
57
+ return toACVMField(await this.typedOracle.getChainId());
58
+ }
59
+
52
60
  async getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
53
61
  const { pkM, skApp } = await this.typedOracle.getKeyValidationRequest(fromACVMField(pkMHash));
54
62
 
@@ -244,7 +252,7 @@ export class Oracle {
244
252
  ): ACVMField {
245
253
  this.typedOracle.notifyCreatedNote(
246
254
  fromACVMField(storageSlot),
247
- fromACVMField(noteTypeId),
255
+ NoteSelector.fromField(fromACVMField(noteTypeId)),
248
256
  note.map(fromACVMField),
249
257
  fromACVMField(innerNoteHash),
250
258
  +counter,
@@ -289,15 +297,15 @@ export class Oracle {
289
297
  return newValues.map(toACVMField);
290
298
  }
291
299
 
292
- emitEncryptedLog(
300
+ emitEncryptedEventLog(
293
301
  [contractAddress]: ACVMField[],
294
302
  [randomness]: ACVMField[],
295
- encryptedLog: ACVMField[],
303
+ encryptedEvent: ACVMField[],
296
304
  [counter]: ACVMField[],
297
305
  ): void {
298
306
  // Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
299
- const processedInput = Buffer.from(encryptedLog.map(fromACVMField).map(f => f.toNumber()));
300
- this.typedOracle.emitEncryptedLog(
307
+ const processedInput = Buffer.from(encryptedEvent.map(fromACVMField).map(f => f.toNumber()));
308
+ this.typedOracle.emitEncryptedEventLog(
301
309
  AztecAddress.fromString(contractAddress),
302
310
  Fr.fromString(randomness),
303
311
  processedInput,
@@ -311,7 +319,36 @@ export class Oracle {
311
319
  this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
312
320
  }
313
321
 
314
- computeEncryptedLog(
322
+ computeEncryptedEventLog(
323
+ [contractAddress]: ACVMField[],
324
+ [randomness]: ACVMField[],
325
+ [eventTypeId]: ACVMField[],
326
+ [ovskApp]: ACVMField[],
327
+ [ovpkMX]: ACVMField[],
328
+ [ovpkMY]: ACVMField[],
329
+ [ivpkMX]: ACVMField[],
330
+ [ivpkMY]: ACVMField[],
331
+ preimage: ACVMField[],
332
+ ): ACVMField[] {
333
+ const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY));
334
+ const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
335
+ const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY));
336
+ const encLog = this.typedOracle.computeEncryptedEventLog(
337
+ AztecAddress.fromString(contractAddress),
338
+ Fr.fromString(randomness),
339
+ Fr.fromString(eventTypeId),
340
+ ovKeys,
341
+ ivpkM,
342
+ preimage.map(fromACVMField),
343
+ );
344
+ const bytes: ACVMField[] = [];
345
+ encLog.forEach(v => {
346
+ bytes.push(toACVMField(v));
347
+ });
348
+ return bytes;
349
+ }
350
+
351
+ computeEncryptedNoteLog(
315
352
  [contractAddress]: ACVMField[],
316
353
  [storageSlot]: ACVMField[],
317
354
  [noteTypeId]: ACVMField[],
@@ -325,10 +362,10 @@ export class Oracle {
325
362
  const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY));
326
363
  const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
327
364
  const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY));
328
- const encLog = this.typedOracle.computeEncryptedLog(
365
+ const encLog = this.typedOracle.computeEncryptedNoteLog(
329
366
  AztecAddress.fromString(contractAddress),
330
367
  Fr.fromString(storageSlot),
331
- Fr.fromString(noteTypeId),
368
+ NoteSelector.fromField(Fr.fromString(noteTypeId)),
332
369
  ovKeys,
333
370
  ivpkM,
334
371
  preimage.map(fromACVMField),
@@ -16,7 +16,7 @@ import {
16
16
  type PrivateCallStackItem,
17
17
  type PublicCallRequest,
18
18
  } from '@aztec/circuits.js';
19
- import { type FunctionSelector } from '@aztec/foundation/abi';
19
+ import { type FunctionSelector, type NoteSelector } from '@aztec/foundation/abi';
20
20
  import { type AztecAddress } from '@aztec/foundation/aztec-address';
21
21
  import { Fr } from '@aztec/foundation/fields';
22
22
  import { type ContractInstance } from '@aztec/types/contracts';
@@ -90,6 +90,14 @@ export abstract class TypedOracle {
90
90
  throw new OracleMethodNotAvailableError('getContractAddress');
91
91
  }
92
92
 
93
+ getChainId(): Promise<Fr> {
94
+ throw new OracleMethodNotAvailableError('getChainId');
95
+ }
96
+
97
+ getVersion(): Promise<Fr> {
98
+ throw new OracleMethodNotAvailableError('getVersion');
99
+ }
100
+
93
101
  getKeyValidationRequest(_pkMHash: Fr): Promise<KeyValidationRequest> {
94
102
  throw new OracleMethodNotAvailableError('getKeyValidationRequest');
95
103
  }
@@ -156,7 +164,13 @@ export abstract class TypedOracle {
156
164
  throw new OracleMethodNotAvailableError('getNotes');
157
165
  }
158
166
 
159
- notifyCreatedNote(_storageSlot: Fr, _noteTypeId: Fr, _note: Fr[], _innerNoteHash: Fr, _counter: number): void {
167
+ notifyCreatedNote(
168
+ _storageSlot: Fr,
169
+ _noteTypeId: NoteSelector,
170
+ _note: Fr[],
171
+ _innerNoteHash: Fr,
172
+ _counter: number,
173
+ ): void {
160
174
  throw new OracleMethodNotAvailableError('notifyCreatedNote');
161
175
  }
162
176
 
@@ -184,23 +198,39 @@ export abstract class TypedOracle {
184
198
  throw new OracleMethodNotAvailableError('storageWrite');
185
199
  }
186
200
 
187
- emitEncryptedLog(_contractAddress: AztecAddress, _randomness: Fr, _encryptedNote: Buffer, _counter: number): void {
188
- throw new OracleMethodNotAvailableError('emitEncryptedLog');
201
+ emitEncryptedEventLog(
202
+ _contractAddress: AztecAddress,
203
+ _randomness: Fr,
204
+ _encryptedEvent: Buffer,
205
+ _counter: number,
206
+ ): void {
207
+ throw new OracleMethodNotAvailableError('emitEncryptedEventLog');
189
208
  }
190
209
 
191
210
  emitEncryptedNoteLog(_noteHashCounter: number, _encryptedNote: Buffer, _counter: number): void {
192
211
  throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
193
212
  }
194
213
 
195
- computeEncryptedLog(
214
+ computeEncryptedEventLog(
215
+ _contractAddress: AztecAddress,
216
+ _randomness: Fr,
217
+ _eventTypeId: Fr,
218
+ _ovKeys: KeyValidationRequest,
219
+ _ivpkM: PublicKey,
220
+ _preimage: Fr[],
221
+ ): Buffer {
222
+ throw new OracleMethodNotAvailableError('computeEncryptedEventLog');
223
+ }
224
+
225
+ computeEncryptedNoteLog(
196
226
  _contractAddress: AztecAddress,
197
227
  _storageSlot: Fr,
198
- _noteTypeId: Fr,
228
+ _noteTypeId: NoteSelector,
199
229
  _ovKeys: KeyValidationRequest,
200
230
  _ivpkM: PublicKey,
201
231
  _preimage: Fr[],
202
232
  ): Buffer {
203
- throw new OracleMethodNotAvailableError('computeEncryptedLog');
233
+ throw new OracleMethodNotAvailableError('computeEncryptedNoteLog');
204
234
  }
205
235
 
206
236
  emitUnencryptedLog(_log: UnencryptedL2Log, _counter: number): void {
@@ -19,6 +19,7 @@ export class AvmContextInputs {
19
19
  */
20
20
  // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3992): gas not implemented
21
21
  export class AvmExecutionEnvironment {
22
+ private readonly calldataPrefixLength;
22
23
  constructor(
23
24
  public readonly address: AztecAddress,
24
25
  public readonly storageAddress: AztecAddress,
@@ -45,8 +46,9 @@ export class AvmExecutionEnvironment {
45
46
  temporaryFunctionSelector.toField(),
46
47
  computeVarArgsHash(calldata),
47
48
  isStaticCall,
48
- );
49
- this.calldata = [...inputs.toFields(), ...calldata];
49
+ ).toFields();
50
+ this.calldata = [...inputs, ...calldata];
51
+ this.calldataPrefixLength = inputs.length;
50
52
  }
51
53
 
52
54
  private deriveEnvironmentForNestedCallInternal(
@@ -62,7 +64,7 @@ export class AvmExecutionEnvironment {
62
64
  /*sender=*/ this.address,
63
65
  this.feePerL2Gas,
64
66
  this.feePerDaGas,
65
- this.contractCallDepth,
67
+ this.contractCallDepth.add(Fr.ONE),
66
68
  this.header,
67
69
  this.globals,
68
70
  isStaticCall,
@@ -109,4 +111,9 @@ export class AvmExecutionEnvironment {
109
111
  ): AvmExecutionEnvironment {
110
112
  throw new Error('Delegate calls not supported!');
111
113
  }
114
+
115
+ public getCalldataWithoutPrefix(): Fr[] {
116
+ // clip off the first few entries
117
+ return this.calldata.slice(this.calldataPrefixLength);
118
+ }
112
119
  }
@@ -122,6 +122,8 @@ const BaseGasCosts: Record<Opcode, Gas> = {
122
122
  [Opcode.POSEIDON2]: DefaultBaseGasCost,
123
123
  [Opcode.SHA256]: DefaultBaseGasCost,
124
124
  [Opcode.PEDERSEN]: DefaultBaseGasCost,
125
+ [Opcode.ECADD]: DefaultBaseGasCost,
126
+ [Opcode.MSM]: DefaultBaseGasCost,
125
127
  // Conversions
126
128
  [Opcode.TORADIXLE]: DefaultBaseGasCost,
127
129
  };
@@ -298,9 +298,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
298
298
  }
299
299
 
300
300
  public checkIsValidMemoryOffsetTag(offset: number) {
301
- if (this.getTag(offset) > TypeTag.UINT64) {
302
- throw TagCheckError.forOffset(offset, TypeTag[this.getTag(offset)], 'UINT64');
303
- }
301
+ this.checkTag(TypeTag.UINT32, offset);
304
302
  }
305
303
 
306
304
  public static checkIsIntegralTag(tag: TypeTag) {
@@ -29,10 +29,9 @@ export class AvmSimulator {
29
29
  * Fetch the bytecode and execute it in the current context.
30
30
  */
31
31
  public async execute(): Promise<AvmContractCallResults> {
32
- const selector = this.context.environment.temporaryFunctionSelector;
33
- const bytecode = await this.context.persistableState.hostStorage.contractsDb.getBytecode(
32
+ const bytecode = await this.context.persistableState.getBytecode(
34
33
  this.context.environment.address,
35
- selector,
34
+ this.context.environment.temporaryFunctionSelector,
36
35
  );
37
36
 
38
37
  // This assumes that we will not be able to send messages to accounts without code
@@ -3,19 +3,22 @@ import { FunctionSelector } from '@aztec/foundation/abi';
3
3
  import { AztecAddress } from '@aztec/foundation/aztec-address';
4
4
  import { EthAddress } from '@aztec/foundation/eth-address';
5
5
  import { Fr } from '@aztec/foundation/fields';
6
- import { AvmNestedCallsTestContractArtifact, AvmTestContractArtifact } from '@aztec/noir-contracts.js';
6
+ import { AvmTestContractArtifact } from '@aztec/noir-contracts.js';
7
7
 
8
8
  import { strict as assert } from 'assert';
9
9
  import { mock } from 'jest-mock-extended';
10
10
  import merge from 'lodash.merge';
11
11
 
12
12
  import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../index.js';
13
+ import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js';
13
14
  import { AvmContext } from '../avm_context.js';
14
15
  import { AvmContextInputs, AvmExecutionEnvironment } from '../avm_execution_environment.js';
15
16
  import { AvmMachineState } from '../avm_machine_state.js';
16
17
  import { Field, Uint8 } from '../avm_memory_types.js';
17
18
  import { HostStorage } from '../journal/host_storage.js';
18
19
  import { AvmPersistableStateManager } from '../journal/journal.js';
20
+ import { NullifierManager } from '../journal/nullifiers.js';
21
+ import { PublicStorage } from '../journal/public_storage.js';
19
22
 
20
23
  /**
21
24
  * Create a new AVM context with default values.
@@ -26,7 +29,7 @@ export function initContext(overrides?: {
26
29
  machineState?: AvmMachineState;
27
30
  }): AvmContext {
28
31
  return new AvmContext(
29
- overrides?.persistableState || initMockPersistableStateManager(),
32
+ overrides?.persistableState || initPersistableStateManager(),
30
33
  overrides?.env || initExecutionEnvironment(),
31
34
  overrides?.machineState || initMachineState(),
32
35
  );
@@ -45,9 +48,20 @@ export function initHostStorage(overrides?: {
45
48
  );
46
49
  }
47
50
 
48
- /** Creates an empty state manager with mocked storage. */
49
- export function initMockPersistableStateManager(): AvmPersistableStateManager {
50
- return new AvmPersistableStateManager(initHostStorage());
51
+ /** Creates an empty state manager with mocked host storage. */
52
+ export function initPersistableStateManager(overrides?: {
53
+ hostStorage?: HostStorage;
54
+ trace?: PublicSideEffectTraceInterface;
55
+ publicStorage?: PublicStorage;
56
+ nullifiers?: NullifierManager;
57
+ }): AvmPersistableStateManager {
58
+ const hostStorage = overrides?.hostStorage || initHostStorage();
59
+ return new AvmPersistableStateManager(
60
+ hostStorage,
61
+ overrides?.trace || mock<PublicSideEffectTraceInterface>(),
62
+ overrides?.publicStorage || new PublicStorage(hostStorage.publicStateDb),
63
+ overrides?.nullifiers || new NullifierManager(hostStorage.commitmentsDb),
64
+ );
51
65
  }
52
66
 
53
67
  /**
@@ -136,12 +150,3 @@ export function getAvmTestContractBytecode(functionName: string): Buffer {
136
150
  );
137
151
  return artifact.bytecode;
138
152
  }
139
-
140
- export function getAvmNestedCallsTestContractBytecode(functionName: string): Buffer {
141
- const artifact = AvmNestedCallsTestContractArtifact.functions.find(f => f.name === functionName)!;
142
- assert(
143
- !!artifact?.bytecode,
144
- `No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`,
145
- );
146
- return artifact.bytecode;
147
- }