@aztec/simulator 0.0.1-commit.1142ef1 → 0.0.1-commit.1bea0213

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 (139) hide show
  1. package/README.md +2 -0
  2. package/dest/common/errors.d.ts +7 -1
  3. package/dest/common/errors.d.ts.map +1 -1
  4. package/dest/public/avm/avm_context.d.ts +3 -3
  5. package/dest/public/avm/avm_context.d.ts.map +1 -1
  6. package/dest/public/avm/avm_contract_call_result.d.ts +6 -6
  7. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  8. package/dest/public/avm/avm_contract_call_result.js +3 -3
  9. package/dest/public/avm/avm_execution_environment.d.ts +6 -5
  10. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  11. package/dest/public/avm/avm_machine_state.d.ts +6 -5
  12. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  13. package/dest/public/avm/avm_machine_state.js +3 -2
  14. package/dest/public/avm/avm_memory_types.d.ts +1 -1
  15. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  16. package/dest/public/avm/avm_memory_types.js +3 -0
  17. package/dest/public/avm/avm_simulator.d.ts +3 -2
  18. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  19. package/dest/public/avm/avm_simulator.js +5 -4
  20. package/dest/public/avm/calldata.d.ts +51 -0
  21. package/dest/public/avm/calldata.d.ts.map +1 -0
  22. package/dest/public/avm/calldata.js +63 -0
  23. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +1 -1
  24. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  25. package/dest/public/avm/fixtures/avm_simulation_tester.js +3 -2
  26. package/dest/public/avm/fixtures/initializers.d.ts +1 -1
  27. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
  28. package/dest/public/avm/fixtures/initializers.js +2 -1
  29. package/dest/public/avm/opcodes/accrued_substate.d.ts +15 -15
  30. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  31. package/dest/public/avm/opcodes/accrued_substate.js +32 -28
  32. package/dest/public/avm/opcodes/arithmetic.d.ts +8 -8
  33. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  34. package/dest/public/avm/opcodes/arithmetic.js +1 -1
  35. package/dest/public/avm/opcodes/bitwise.d.ts +7 -7
  36. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  37. package/dest/public/avm/opcodes/bitwise.js +5 -5
  38. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  39. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  40. package/dest/public/avm/opcodes/comparators.js +1 -1
  41. package/dest/public/avm/opcodes/contract.d.ts +3 -3
  42. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  43. package/dest/public/avm/opcodes/contract.js +8 -8
  44. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  45. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  46. package/dest/public/avm/opcodes/control_flow.js +4 -4
  47. package/dest/public/avm/opcodes/conversion.d.ts +3 -3
  48. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  49. package/dest/public/avm/opcodes/conversion.js +4 -4
  50. package/dest/public/avm/opcodes/ec_add.d.ts +4 -4
  51. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  52. package/dest/public/avm/opcodes/ec_add.js +15 -6
  53. package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
  54. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  55. package/dest/public/avm/opcodes/environment_getters.js +4 -4
  56. package/dest/public/avm/opcodes/external_calls.d.ts +9 -9
  57. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  58. package/dest/public/avm/opcodes/external_calls.js +23 -23
  59. package/dest/public/avm/opcodes/hashing.d.ts +8 -8
  60. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  61. package/dest/public/avm/opcodes/hashing.js +12 -12
  62. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  63. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  64. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  65. package/dest/public/avm/opcodes/memory.d.ts +14 -14
  66. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  67. package/dest/public/avm/opcodes/memory.js +25 -25
  68. package/dest/public/avm/opcodes/misc.d.ts +3 -3
  69. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  70. package/dest/public/avm/opcodes/misc.js +4 -4
  71. package/dest/public/avm/opcodes/storage.d.ts +16 -15
  72. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  73. package/dest/public/avm/opcodes/storage.js +34 -24
  74. package/dest/public/debug_fn_name.d.ts +4 -4
  75. package/dest/public/debug_fn_name.d.ts.map +1 -1
  76. package/dest/public/debug_fn_name.js +7 -5
  77. package/dest/public/fixtures/bulk_test.d.ts +3 -3
  78. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  79. package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -11
  80. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
  81. package/dest/public/fixtures/custom_bytecode_tests.js +18 -18
  82. package/dest/public/fixtures/minimal_public_tx.js +2 -2
  83. package/dest/public/fixtures/opcode_spammer.d.ts +1 -1
  84. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -1
  85. package/dest/public/fixtures/opcode_spammer.js +92 -80
  86. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +21 -7
  87. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  88. package/dest/public/fuzzing/avm_fuzzer_simulator.js +42 -10
  89. package/dest/public/fuzzing/avm_simulator_bin.js +15 -8
  90. package/dest/public/public_processor/public_processor.d.ts +2 -2
  91. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  92. package/dest/public/public_processor/public_processor.js +3 -1
  93. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +1 -1
  94. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
  95. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +2 -1
  96. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +1 -1
  97. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +4 -3
  98. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  99. package/dest/public/public_tx_simulator/public_tx_simulator.js +9 -6
  100. package/dest/public/side_effect_trace.d.ts +2 -1
  101. package/dest/public/side_effect_trace.d.ts.map +1 -1
  102. package/dest/public/state_manager/state_manager.d.ts +1 -1
  103. package/dest/public/state_manager/state_manager.d.ts.map +1 -1
  104. package/dest/public/state_manager/state_manager.js +2 -2
  105. package/package.json +17 -17
  106. package/src/public/avm/avm_context.ts +2 -2
  107. package/src/public/avm/avm_contract_call_result.ts +8 -6
  108. package/src/public/avm/avm_execution_environment.ts +9 -4
  109. package/src/public/avm/avm_machine_state.ts +6 -5
  110. package/src/public/avm/avm_memory_types.ts +4 -0
  111. package/src/public/avm/avm_simulator.ts +8 -5
  112. package/src/public/avm/calldata.ts +100 -0
  113. package/src/public/avm/fixtures/avm_simulation_tester.ts +8 -2
  114. package/src/public/avm/fixtures/initializers.ts +2 -1
  115. package/src/public/avm/opcodes/accrued_substate.ts +20 -14
  116. package/src/public/avm/opcodes/arithmetic.ts +1 -1
  117. package/src/public/avm/opcodes/bitwise.ts +3 -3
  118. package/src/public/avm/opcodes/comparators.ts +1 -1
  119. package/src/public/avm/opcodes/contract.ts +4 -7
  120. package/src/public/avm/opcodes/control_flow.ts +2 -2
  121. package/src/public/avm/opcodes/conversion.ts +3 -3
  122. package/src/public/avm/opcodes/ec_add.ts +13 -4
  123. package/src/public/avm/opcodes/environment_getters.ts +3 -3
  124. package/src/public/avm/opcodes/external_calls.ts +17 -16
  125. package/src/public/avm/opcodes/hashing.ts +6 -6
  126. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  127. package/src/public/avm/opcodes/memory.ts +19 -19
  128. package/src/public/avm/opcodes/misc.ts +2 -2
  129. package/src/public/avm/opcodes/storage.ts +30 -22
  130. package/src/public/debug_fn_name.ts +10 -8
  131. package/src/public/fixtures/custom_bytecode_tests.ts +27 -18
  132. package/src/public/fixtures/minimal_public_tx.ts +2 -2
  133. package/src/public/fixtures/opcode_spammer.ts +197 -81
  134. package/src/public/fuzzing/avm_fuzzer_simulator.ts +60 -12
  135. package/src/public/fuzzing/avm_simulator_bin.ts +26 -4
  136. package/src/public/public_processor/public_processor.ts +3 -2
  137. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +2 -1
  138. package/src/public/public_tx_simulator/public_tx_simulator.ts +12 -5
  139. package/src/public/state_manager/state_manager.ts +2 -16
@@ -4,6 +4,7 @@ import {
4
4
  MAX_NOTE_HASHES_PER_TX,
5
5
  MAX_NULLIFIERS_PER_TX,
6
6
  MAX_PRIVATE_LOGS_PER_TX,
7
+ MAX_PROTOCOL_CONTRACTS,
7
8
  } from '@aztec/constants';
8
9
  import { padArrayEnd } from '@aztec/foundation/collection';
9
10
  import { Fr } from '@aztec/foundation/curves/bn254';
@@ -19,8 +20,17 @@ import {
19
20
  import { PrivateLog } from '@aztec/stdlib/logs';
20
21
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
21
22
  import { ChonkProof } from '@aztec/stdlib/proofs';
22
- import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
23
- import { BlockHeader, GlobalVariables, HashedValues, Tx, TxConstantData, TxContext, TxHash } from '@aztec/stdlib/tx';
23
+ import { MerkleTreeId, type MerkleTreeWriteOperations, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
24
+ import {
25
+ BlockHeader,
26
+ GlobalVariables,
27
+ HashedValues,
28
+ ProtocolContracts,
29
+ Tx,
30
+ TxConstantData,
31
+ TxContext,
32
+ TxHash,
33
+ } from '@aztec/stdlib/tx';
24
34
  import type { NativeWorldStateService } from '@aztec/world-state';
25
35
 
26
36
  import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
@@ -40,6 +50,9 @@ export class FuzzerSimulationRequest {
40
50
  public readonly globals: GlobalVariables,
41
51
  public readonly contractClasses: any[], // Raw, processed by addContractClassFromCpp
42
52
  public readonly contractInstances: [any, any][], // Raw pairs [address, instance]
53
+ public readonly publicDataWrites: any[], // Raw public data tree writes to apply before simulation
54
+ public readonly noteHashes: any[], // Raw note hashes to apply before simulation
55
+ public readonly protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
43
56
  ) {}
44
57
 
45
58
  static fromPlainObject(obj: any): FuzzerSimulationRequest {
@@ -53,6 +66,9 @@ export class FuzzerSimulationRequest {
53
66
  GlobalVariables.fromPlainObject(obj.globals),
54
67
  obj.contractClasses,
55
68
  obj.contractInstances,
69
+ obj.publicDataWrites ?? [],
70
+ obj.noteHashes ?? [],
71
+ ProtocolContracts.fromPlainObject(obj.protocolContracts),
56
72
  );
57
73
  }
58
74
  }
@@ -181,16 +197,23 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
181
197
  merkleTrees: MerkleTreeWriteOperations,
182
198
  contractDataSource: SimpleContractDataSource,
183
199
  globals: GlobalVariables,
200
+ protocolContracts: ProtocolContracts,
184
201
  ) {
185
202
  super(contractDataSource, merkleTrees);
186
203
  const contractsDb = new PublicContractsDB(contractDataSource);
187
- this.simulator = new PublicTxSimulator(merkleTrees, contractsDb, globals, {
188
- skipFeeEnforcement: false,
189
- collectDebugLogs: false,
190
- collectHints: false,
191
- collectStatistics: false,
192
- collectCallMetadata: false,
193
- });
204
+ this.simulator = new PublicTxSimulator(
205
+ merkleTrees,
206
+ contractsDb,
207
+ globals,
208
+ {
209
+ skipFeeEnforcement: false,
210
+ collectDebugLogs: false,
211
+ collectHints: false,
212
+ collectStatistics: false,
213
+ collectCallMetadata: false,
214
+ },
215
+ protocolContracts,
216
+ );
194
217
  }
195
218
 
196
219
  /**
@@ -199,10 +222,11 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
199
222
  public static async create(
200
223
  worldStateService: NativeWorldStateService,
201
224
  globals: GlobalVariables,
225
+ protocolContracts: ProtocolContracts,
202
226
  ): Promise<AvmFuzzerSimulator> {
203
227
  const contractDataSource = new SimpleContractDataSource();
204
228
  const merkleTrees = await worldStateService.fork();
205
- return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals);
229
+ return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, protocolContracts);
206
230
  }
207
231
 
208
232
  /**
@@ -230,11 +254,35 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
230
254
 
231
255
  /**
232
256
  * Add a contract instance from C++ raw msgpack data.
233
- * This also inserts the contract address nullifier into the nullifier tree.
257
+ * This also inserts the contract address nullifier into the nullifier tree,
258
+ * unless the address is a protocol canonical address (1-11).
234
259
  */
235
260
  public async addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void> {
236
261
  const address = AztecAddress.fromPlainObject(rawAddress);
237
262
  const instance = contractInstanceWithAddressFromPlainObject(address, rawInstance);
238
- await this.addContractInstance(instance);
263
+ // Protocol canonical addresses (1-11) should not have nullifiers inserted
264
+ const isProtocolCanonicalAddress = address.toBigInt() <= MAX_PROTOCOL_CONTRACTS && address.toBigInt() >= 1n;
265
+ await this.addContractInstance(instance, /* skipNullifierInsertion */ isProtocolCanonicalAddress);
266
+ }
267
+
268
+ /**
269
+ * Apply public data tree writes from C++ raw msgpack data.
270
+ * This is used to pre-populate the public data tree before simulation (e.g., for bytecode upgrades).
271
+ */
272
+ public async applyPublicDataWrites(rawWrites: any[]): Promise<void> {
273
+ for (const rawWrite of rawWrites) {
274
+ const leaf = PublicDataTreeLeaf.fromPlainObject(rawWrite);
275
+ await this.merkleTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [leaf.toBuffer()]);
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Apply note hashes from C++ raw msgpack data.
281
+ * This is used to pre-populate the note hash tree before simulation.
282
+ */
283
+ public async applyNoteHashes(rawNoteHashes: any[]): Promise<void> {
284
+ const paddingLeaves = MAX_NOTE_HASHES_PER_TX - (rawNoteHashes.length % MAX_NOTE_HASHES_PER_TX);
285
+ const paddedNoteHashes = [...rawNoteHashes, ...Array(paddingLeaves).fill(Fr.ZERO)];
286
+ await this.merkleTrees.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, paddedNoteHashes);
239
287
  }
240
288
  }
@@ -3,10 +3,11 @@ import { EthAddress } from '@aztec/foundation/eth-address';
3
3
  import {
4
4
  AvmCircuitPublicInputs,
5
5
  type AvmTxHint,
6
+ PublicTxEffect,
6
7
  deserializeFromMessagePack,
7
8
  serializeWithMessagePack,
8
9
  } from '@aztec/stdlib/avm';
9
- import { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
10
+ import { GlobalVariables, ProtocolContracts, TreeSnapshots } from '@aztec/stdlib/tx';
10
11
  import { NativeWorldStateService } from '@aztec/world-state';
11
12
 
12
13
  import { createInterface } from 'readline';
@@ -55,12 +56,23 @@ async function simulateWithFuzzer(
55
56
  globals: GlobalVariables,
56
57
  rawContractClasses: any[], // Replace these when we are moving contract classes to TS
57
58
  rawContractInstances: [any, any][], // Replace these when we are moving contract instances to TS
58
- ): Promise<{ reverted: boolean; output: Fr[]; revertReason?: string; publicInputs: AvmCircuitPublicInputs }> {
59
+ rawPublicDataWrites: any[], // Public data tree writes to apply before simulation
60
+ rawNoteHashes: any[], // Note hashes to apply before simulation
61
+ protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
62
+ ): Promise<{
63
+ reverted: boolean;
64
+ output: Fr[];
65
+ revertReason?: string;
66
+ publicInputs: AvmCircuitPublicInputs;
67
+ publicTxEffect: PublicTxEffect;
68
+ }> {
59
69
  const worldStateService = await openExistingWorldState(dataDir, mapSizeKb);
60
70
 
61
- const simulator = await AvmFuzzerSimulator.create(worldStateService, globals);
71
+ const simulator = await AvmFuzzerSimulator.create(worldStateService, globals, protocolContracts);
62
72
 
63
- // Register contract classes from C++
73
+ await simulator.applyNoteHashes(rawNoteHashes);
74
+
75
+ // Register contract classes from C++ (must happen before public data writes to match C++ order)
64
76
  for (const rawClass of rawContractClasses) {
65
77
  await simulator.addContractClassFromCpp(rawClass);
66
78
  }
@@ -70,6 +82,10 @@ async function simulateWithFuzzer(
70
82
  await simulator.addContractInstanceFromCpp(rawAddress, rawInstance);
71
83
  }
72
84
 
85
+ // Apply public data writes after contract registration (e.g., for bytecode upgrades)
86
+ // This must happen last to match C++ setup_fuzzer_state ordering
87
+ await simulator.applyPublicDataWrites(rawPublicDataWrites);
88
+
73
89
  const result = await simulator.simulate(txHint);
74
90
 
75
91
  const output = result
@@ -81,6 +97,7 @@ async function simulateWithFuzzer(
81
97
  output,
82
98
  revertReason: result.findRevertReason()?.message,
83
99
  publicInputs: result.publicInputs!,
100
+ publicTxEffect: result.publicTxEffect,
84
101
  };
85
102
  }
86
103
 
@@ -99,6 +116,9 @@ async function execute(base64Line: string): Promise<void> {
99
116
  request.globals,
100
117
  request.contractClasses,
101
118
  request.contractInstances,
119
+ request.publicDataWrites,
120
+ request.noteHashes,
121
+ request.protocolContracts,
102
122
  );
103
123
 
104
124
  // Serialize the result to msgpack and encode it in base64 for output
@@ -107,6 +127,7 @@ async function execute(base64Line: string): Promise<void> {
107
127
  output: result.output,
108
128
  revertReason: result.revertReason ?? '',
109
129
  endTreeSnapshots: result.publicInputs.endTreeSnapshots,
130
+ publicTxEffect: result.publicTxEffect,
110
131
  });
111
132
  const base64Response = resultBuffer.toString('base64') + '\n';
112
133
  await writeOutput(base64Response);
@@ -117,6 +138,7 @@ async function execute(base64Line: string): Promise<void> {
117
138
  output: [] as Fr[],
118
139
  revertReason: `Unexpected Error ${error.message}`,
119
140
  endTreeSnapshots: TreeSnapshots.empty(),
141
+ publicTxEffect: PublicTxEffect.empty(),
120
142
  });
121
143
  await writeOutput(errorResult.toString('base64') + '\n');
122
144
  }
@@ -146,7 +146,7 @@ export class PublicProcessor implements Traceable {
146
146
  txs: Iterable<Tx> | AsyncIterable<Tx>,
147
147
  limits: PublicProcessorLimits = {},
148
148
  validator: PublicProcessorValidator = {},
149
- ): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[]]> {
149
+ ): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], number]> {
150
150
  const { maxTransactions, maxBlockSize, deadline, maxBlockGas, maxBlobFields } = limits;
151
151
  const { preprocessValidator, nullifierCache } = validator;
152
152
  const result: ProcessedTx[] = [];
@@ -254,6 +254,7 @@ export class PublicProcessor implements Traceable {
254
254
  }
255
255
 
256
256
  // If the actual blob fields of this tx would exceed the limit, skip it
257
+ // Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
257
258
  if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
258
259
  this.log.debug(
259
260
  `Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`,
@@ -349,7 +350,7 @@ export class PublicProcessor implements Traceable {
349
350
  totalSizeInBytes,
350
351
  });
351
352
 
352
- return [result, failed, usedTxs, returns];
353
+ return [result, failed, usedTxs, returns, totalBlobFields];
353
354
  }
354
355
 
355
356
  private async checkWorldStateUnchanged(
@@ -100,7 +100,8 @@ export class CppPublicTxSimulator extends PublicTxSimulator implements PublicTxS
100
100
  contractProvider,
101
101
  wsCppHandle,
102
102
  logLevel,
103
- this.log,
103
+ // TODO: re-enable logging
104
+ undefined,
104
105
  this.cancellationToken,
105
106
  );
106
107
 
@@ -10,6 +10,7 @@ import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
10
10
  import {
11
11
  type GlobalVariables,
12
12
  NestedProcessReturnValues,
13
+ ProtocolContracts,
13
14
  PublicCallRequestWithCalldata,
14
15
  Tx,
15
16
  TxExecutionPhase,
@@ -18,6 +19,7 @@ import {
18
19
  import { strict as assert } from 'assert';
19
20
 
20
21
  import type { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
22
+ import { CallDataArray } from '../avm/calldata.js';
21
23
  import { AvmSimulator } from '../avm/index.js';
22
24
  import { getPublicFunctionDebugName } from '../debug_fn_name.js';
23
25
  import { HintingMerkleWriteOperations, HintingPublicContractsDB } from '../hinting_db_sources.js';
@@ -85,6 +87,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
85
87
  protected contractsDB: PublicContractsDB,
86
88
  protected globalVariables: GlobalVariables,
87
89
  config?: Partial<PublicSimulatorConfig>,
90
+ protected protocolContracts: ProtocolContracts = ProtocolContractsList,
88
91
  ) {
89
92
  this.config = PublicSimulatorConfig.from(config ?? {});
90
93
  this.log = createLogger(`simulator:public_tx_simulator`);
@@ -103,7 +106,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
103
106
  const hints = new AvmExecutionHints(
104
107
  this.globalVariables,
105
108
  AvmTxHint.fromTx(tx, this.globalVariables.gasFees),
106
- ProtocolContractsList, // imported from file
109
+ this.protocolContracts,
107
110
  );
108
111
  const hintingMerkleTree = await HintingMerkleWriteOperations.create(this.merkleTree, hints);
109
112
  const hintingTreesDB = new PublicTreesDB(hintingMerkleTree);
@@ -114,7 +117,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
114
117
  hintingContractsDB,
115
118
  tx,
116
119
  this.globalVariables,
117
- ProtocolContractsList, // imported from file
120
+ this.protocolContracts,
118
121
  this.config.proverId,
119
122
  );
120
123
 
@@ -265,7 +268,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
265
268
 
266
269
  const enqueuedCallResult = await this.simulateEnqueuedCall(phase, context, callRequest);
267
270
 
268
- returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.output));
271
+ returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.output.bestEffortReadAll()));
269
272
 
270
273
  if (enqueuedCallResult.reverted) {
271
274
  reverted = true;
@@ -295,7 +298,11 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
295
298
  ): Promise<AvmFinalizedCallResult> {
296
299
  const stateManager = context.state.getActiveStateManager();
297
300
  const contractAddress = callRequest.request.contractAddress;
298
- const fnName = await getPublicFunctionDebugName(this.contractsDB, contractAddress, callRequest.calldata);
301
+ const fnName = await getPublicFunctionDebugName(
302
+ this.contractsDB,
303
+ contractAddress,
304
+ new CallDataArray(callRequest.calldata),
305
+ );
299
306
 
300
307
  const allocatedGas = context.getGasLeftAtPhase(phase);
301
308
 
@@ -355,7 +362,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
355
362
  transactionFee,
356
363
  this.globalVariables,
357
364
  request.isStaticCall,
358
- calldata,
365
+ new CallDataArray(calldata),
359
366
  allocatedGas,
360
367
  this.config,
361
368
  );
@@ -1,11 +1,4 @@
1
- import {
2
- CANONICAL_AUTH_REGISTRY_ADDRESS,
3
- CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,
4
- CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
5
- FEE_JUICE_ADDRESS,
6
- MULTI_CALL_ENTRYPOINT_ADDRESS,
7
- ROUTER_ADDRESS,
8
- } from '@aztec/constants';
1
+ import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS, MAX_PROTOCOL_CONTRACTS } from '@aztec/constants';
9
2
  import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
10
3
  import { Fr } from '@aztec/foundation/curves/bn254';
11
4
  import { jsonStringify } from '@aztec/foundation/json-rpc';
@@ -549,12 +542,5 @@ export class PublicPersistableStateManager {
549
542
  }
550
543
 
551
544
  function contractAddressIsCanonical(contractAddress: AztecAddress): boolean {
552
- return (
553
- contractAddress.equals(AztecAddress.fromNumber(CANONICAL_AUTH_REGISTRY_ADDRESS)) ||
554
- contractAddress.equals(AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS)) ||
555
- contractAddress.equals(AztecAddress.fromNumber(CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS)) ||
556
- contractAddress.equals(AztecAddress.fromNumber(MULTI_CALL_ENTRYPOINT_ADDRESS)) ||
557
- contractAddress.equals(AztecAddress.fromNumber(FEE_JUICE_ADDRESS)) ||
558
- contractAddress.equals(AztecAddress.fromNumber(ROUTER_ADDRESS))
559
- );
545
+ return contractAddress.toBigInt() >= 1 && contractAddress.toBigInt() <= MAX_PROTOCOL_CONTRACTS;
560
546
  }