@aztec/simulator 0.26.5 → 0.27.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 (70) hide show
  1. package/dest/acvm/acvm.js +2 -2
  2. package/dest/acvm/serialize.d.ts.map +1 -1
  3. package/dest/acvm/serialize.js +8 -3
  4. package/dest/avm/avm_context.d.ts +3 -3
  5. package/dest/avm/avm_context.d.ts.map +1 -1
  6. package/dest/avm/avm_context.js +6 -5
  7. package/dest/avm/avm_execution_environment.d.ts +3 -3
  8. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  9. package/dest/avm/avm_execution_environment.js +16 -17
  10. package/dest/avm/avm_memory_types.d.ts +10 -0
  11. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  12. package/dest/avm/avm_memory_types.js +39 -4
  13. package/dest/avm/avm_simulator.d.ts.map +1 -1
  14. package/dest/avm/avm_simulator.js +3 -3
  15. package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
  16. package/dest/avm/opcodes/addressing_mode.js +3 -3
  17. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
  18. package/dest/avm/opcodes/arithmetic.js +2 -1
  19. package/dest/avm/opcodes/comparators.d.ts.map +1 -1
  20. package/dest/avm/opcodes/comparators.js +5 -7
  21. package/dest/avm/opcodes/control_flow.d.ts +0 -20
  22. package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
  23. package/dest/avm/opcodes/control_flow.js +2 -46
  24. package/dest/avm/opcodes/external_calls.d.ts +24 -2
  25. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  26. package/dest/avm/opcodes/external_calls.js +74 -17
  27. package/dest/avm/opcodes/storage.d.ts +4 -3
  28. package/dest/avm/opcodes/storage.d.ts.map +1 -1
  29. package/dest/avm/opcodes/storage.js +23 -12
  30. package/dest/avm/serialization/instruction_serialization.d.ts +1 -2
  31. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  32. package/dest/avm/serialization/instruction_serialization.js +9 -3
  33. package/dest/avm/temporary_executor_migration.d.ts.map +1 -1
  34. package/dest/avm/temporary_executor_migration.js +6 -1
  35. package/dest/client/client_execution_context.d.ts.map +1 -1
  36. package/dest/client/client_execution_context.js +4 -6
  37. package/dest/client/simulator.d.ts.map +1 -1
  38. package/dest/client/simulator.js +3 -3
  39. package/dest/index.d.ts +2 -1
  40. package/dest/index.d.ts.map +1 -1
  41. package/dest/index.js +3 -2
  42. package/dest/public/execution.d.ts +13 -12
  43. package/dest/public/execution.d.ts.map +1 -1
  44. package/dest/public/execution.js +2 -2
  45. package/dest/public/executor.d.ts +22 -1
  46. package/dest/public/executor.d.ts.map +1 -1
  47. package/dest/public/executor.js +137 -13
  48. package/dest/public/public_execution_context.d.ts.map +1 -1
  49. package/dest/public/public_execution_context.js +2 -3
  50. package/package.json +5 -5
  51. package/src/acvm/acvm.ts +1 -1
  52. package/src/acvm/serialize.ts +9 -3
  53. package/src/avm/avm_context.ts +21 -5
  54. package/src/avm/avm_execution_environment.ts +27 -12
  55. package/src/avm/avm_memory_types.ts +42 -3
  56. package/src/avm/avm_simulator.ts +10 -3
  57. package/src/avm/opcodes/addressing_mode.ts +3 -2
  58. package/src/avm/opcodes/arithmetic.ts +2 -0
  59. package/src/avm/opcodes/comparators.ts +4 -6
  60. package/src/avm/opcodes/control_flow.ts +1 -47
  61. package/src/avm/opcodes/external_calls.ts +88 -14
  62. package/src/avm/opcodes/storage.ts +37 -18
  63. package/src/avm/serialization/instruction_serialization.ts +8 -2
  64. package/src/avm/temporary_executor_migration.ts +6 -0
  65. package/src/client/client_execution_context.ts +1 -13
  66. package/src/client/simulator.ts +1 -2
  67. package/src/index.ts +2 -1
  68. package/src/public/execution.ts +15 -14
  69. package/src/public/executor.ts +157 -13
  70. package/src/public/public_execution_context.ts +1 -2
@@ -1,5 +1,9 @@
1
+ import { FunctionL2Logs } from '@aztec/circuit-types';
1
2
  import { PublicCircuitPublicInputs } from '@aztec/circuits.js';
2
3
  import { createDebugLogger } from '@aztec/foundation/log';
4
+ import { spawn } from 'child_process';
5
+ import fs from 'fs/promises';
6
+ import path from 'path';
3
7
  import { Oracle, acvm, extractCallStack, extractReturnWitness } from '../acvm/index.js';
4
8
  import { AvmContext } from '../avm/avm_context.js';
5
9
  import { AvmMachineState } from '../avm/avm_machine_state.js';
@@ -7,30 +11,70 @@ import { AvmSimulator } from '../avm/avm_simulator.js';
7
11
  import { HostStorage } from '../avm/journal/host_storage.js';
8
12
  import { AvmPersistableStateManager } from '../avm/journal/index.js';
9
13
  import { temporaryConvertAvmResults, temporaryCreateAvmExecutionEnvironment, } from '../avm/temporary_executor_migration.js';
14
+ import { AcirSimulator } from '../client/simulator.js';
10
15
  import { ExecutionError, createSimulationError } from '../common/errors.js';
11
16
  import { SideEffectCounter } from '../common/index.js';
12
17
  import { PackedArgsCache } from '../common/packed_args_cache.js';
13
- import { AcirSimulator } from '../index.js';
14
18
  import { checkValidStaticCall } from './execution.js';
15
19
  import { PublicExecutionContext } from './public_execution_context.js';
16
20
  /**
17
21
  * Execute a public function and return the execution result.
18
22
  */
19
- export async function executePublicFunction(context, acir, log = createDebugLogger('aztec:simulator:public_execution')) {
23
+ export async function executePublicFunction(context, acir, nested, log = createDebugLogger('aztec:simulator:public_execution')) {
20
24
  const execution = context.execution;
21
25
  const { contractAddress, functionData } = execution;
22
26
  const selector = functionData.selector;
23
27
  log(`Executing public external function ${contractAddress.toString()}:${selector}`);
24
28
  const initialWitness = context.getInitialWitness();
25
29
  const acvmCallback = new Oracle(context);
26
- const { partialWitness } = await acvm(await AcirSimulator.getSolver(), acir, initialWitness, acvmCallback).catch((err) => {
27
- throw new ExecutionError(err.message, {
30
+ const { partialWitness, reverted, revertReason } = await acvm(await AcirSimulator.getSolver(), acir, initialWitness, acvmCallback)
31
+ .then(result => ({
32
+ partialWitness: result.partialWitness,
33
+ reverted: false,
34
+ revertReason: undefined,
35
+ }))
36
+ .catch((err) => {
37
+ const ee = new ExecutionError(err.message, {
28
38
  contractAddress,
29
39
  functionSelector: selector,
30
40
  }, extractCallStack(err), { cause: err });
41
+ if (nested) {
42
+ // If we're nested, throw the error so the parent can handle it
43
+ throw ee;
44
+ }
45
+ else {
46
+ return {
47
+ partialWitness: undefined,
48
+ reverted: true,
49
+ revertReason: createSimulationError(ee),
50
+ };
51
+ }
31
52
  });
53
+ if (reverted) {
54
+ if (!revertReason) {
55
+ throw new Error('Reverted but no revert reason');
56
+ }
57
+ return {
58
+ execution,
59
+ returnValues: [],
60
+ newNoteHashes: [],
61
+ newL2ToL1Messages: [],
62
+ newNullifiers: [],
63
+ nullifierReadRequests: [],
64
+ contractStorageReads: [],
65
+ contractStorageUpdateRequests: [],
66
+ nestedExecutions: [],
67
+ unencryptedLogs: FunctionL2Logs.empty(),
68
+ reverted,
69
+ revertReason,
70
+ };
71
+ }
72
+ if (!partialWitness) {
73
+ throw new Error('No partial witness returned from ACVM');
74
+ }
32
75
  const returnWitness = extractReturnWitness(acir, partialWitness);
33
- const { returnValues, newL2ToL1Msgs, newNoteHashes: newNoteHashesPadded, newNullifiers: newNullifiersPadded, } = PublicCircuitPublicInputs.fromFields(returnWitness);
76
+ const { returnValues, nullifierReadRequests: nullifierReadRequestsPadded, newL2ToL1Msgs, newNoteHashes: newNoteHashesPadded, newNullifiers: newNullifiersPadded, } = PublicCircuitPublicInputs.fromFields(returnWitness);
77
+ const nullifierReadRequests = nullifierReadRequestsPadded.filter(v => !v.isEmpty());
34
78
  const newL2ToL1Messages = newL2ToL1Msgs.filter(v => !v.isEmpty());
35
79
  const newNoteHashes = newNoteHashesPadded.filter(v => !v.isEmpty());
36
80
  const newNullifiers = newNullifiersPadded.filter(v => !v.isEmpty());
@@ -48,11 +92,14 @@ export async function executePublicFunction(context, acir, log = createDebugLogg
48
92
  newNoteHashes,
49
93
  newL2ToL1Messages,
50
94
  newNullifiers,
95
+ nullifierReadRequests,
51
96
  contractStorageReads,
52
97
  contractStorageUpdateRequests,
53
98
  returnValues,
54
99
  nestedExecutions,
55
100
  unencryptedLogs,
101
+ reverted: false,
102
+ revertReason: undefined,
56
103
  };
57
104
  }
58
105
  /**
@@ -82,13 +129,7 @@ export class PublicExecutor {
82
129
  const packedArgs = PackedArgsCache.create([]);
83
130
  const sideEffectCounter = new SideEffectCounter();
84
131
  const context = new PublicExecutionContext(execution, this.header, globalVariables, packedArgs, sideEffectCounter, this.stateDb, this.contractsDb, this.commitmentsDb);
85
- let executionResult;
86
- try {
87
- executionResult = await executePublicFunction(context, acir);
88
- }
89
- catch (err) {
90
- throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during public execution'));
91
- }
132
+ const executionResult = await executePublicFunction(context, acir, false /** nested */);
92
133
  if (executionResult.execution.callContext.isStaticCall) {
93
134
  checkValidStaticCall(executionResult.newNoteHashes, executionResult.newNullifiers, executionResult.contractStorageUpdateRequests, executionResult.newL2ToL1Messages, executionResult.unencryptedLogs);
94
135
  }
@@ -113,5 +154,88 @@ export class PublicExecutor {
113
154
  const newWorldState = context.persistableState.flush();
114
155
  return temporaryConvertAvmResults(execution, newWorldState, result);
115
156
  }
157
+ /**
158
+ * These functions are currently housed in the temporary executor as it relies on access to
159
+ * oracles like the contractsDB and this is the least intrusive way to achieve this.
160
+ * When we remove this executor(tracking issue #4792) and have an interface that is compatible with the kernel circuits,
161
+ * this will be moved to sequencer-client/prover.
162
+ */
163
+ /**
164
+ * Generates a proof for an associated avm execution. This is currently only used for testing purposes,
165
+ * as proof generation is not fully complete in the AVM yet.
166
+ * @param execution - The execution to run.
167
+ * @returns An AVM proof and the verification key.
168
+ */
169
+ async getAvmProof(avmExecution) {
170
+ // The paths for the barretenberg binary and the write path are hardcoded for now.
171
+ // We additionally need the path to a valid crs for proof generation.
172
+ // const bbPath = '../../barretenberg/cpp';
173
+ const bbPath = path.resolve('../../barretenberg/cpp');
174
+ const artifactsPath = path.resolve('target');
175
+ // Create the directory if it does not exist
176
+ await fs.mkdir(artifactsPath, { recursive: true });
177
+ const calldataPath = path.join(artifactsPath, 'calldata.bin');
178
+ const bytecodePath = path.join(artifactsPath, 'avm_bytecode.bin');
179
+ const proofPath = path.join(artifactsPath, 'proof');
180
+ const { args, functionData, contractAddress } = avmExecution;
181
+ const bytecode = await this.contractsDb.getBytecode(contractAddress, functionData.selector);
182
+ // Write call data and bytecode to files.
183
+ await Promise.all([
184
+ fs.writeFile(calldataPath, args.map(c => c.toBuffer())),
185
+ fs.writeFile(bytecodePath, bytecode),
186
+ ]);
187
+ const bbBinary = spawn(path.join(bbPath, 'build', 'bin', 'bb'), [
188
+ 'avm_prove',
189
+ '-b',
190
+ bytecodePath,
191
+ '-d',
192
+ calldataPath,
193
+ '-c',
194
+ path.join(bbPath, 'srs_db', 'ignition'),
195
+ '-o',
196
+ proofPath,
197
+ ]);
198
+ // The binary writes the proof and the verification key to the write path.
199
+ return new Promise((resolve, reject) => {
200
+ bbBinary.on('close', () => {
201
+ resolve(Promise.all([fs.readFile(proofPath), fs.readFile(path.join(artifactsPath, 'vk'))]));
202
+ });
203
+ // Catch and propagate errors from spawning
204
+ bbBinary.on('error', err => {
205
+ reject(err);
206
+ });
207
+ });
208
+ }
209
+ /**
210
+ * Verifies an AVM proof. This function is currently only used for testing purposes, as verification
211
+ * is not fully complete in the AVM yet.
212
+ * @param vk - The verification key to use.
213
+ * @param proof - The proof to verify.
214
+ * @returns True if the proof is valid, false otherwise.
215
+ */
216
+ async verifyAvmProof(vk, proof) {
217
+ // The relative paths for the barretenberg binary and the write path are hardcoded for now.
218
+ const bbPath = path.resolve('../../barretenberg/cpp');
219
+ const artifactsPath = path.resolve('./target');
220
+ const vkPath = path.join(artifactsPath, 'vk');
221
+ const proofPath = path.join(artifactsPath, 'proof');
222
+ // Write the verification key and the proof to files.
223
+ await Promise.all([fs.writeFile(vkPath, vk), fs.writeFile(proofPath, proof)]);
224
+ const bbBinary = spawn(path.join(bbPath, 'build', 'bin', 'bb'), ['avm_verify', '-p', proofPath]);
225
+ // The binary prints to stdout 1 if the proof is valid and 0 if it is not.
226
+ return new Promise((resolve, reject) => {
227
+ let result = Buffer.alloc(0);
228
+ bbBinary.stdout.on('data', data => {
229
+ result += data;
230
+ });
231
+ bbBinary.on('close', () => {
232
+ resolve(result.toString() === '1');
233
+ });
234
+ // Catch and propagate errors from spawning
235
+ bbBinary.on('error', err => {
236
+ reject(err);
237
+ });
238
+ });
239
+ }
116
240
  }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHNDQUFzQyxHQUN2QyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBQTBDLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkU7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxPQUErQixFQUMvQixJQUFZ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
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQTJCLHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsc0NBQXNDLEdBQ3ZDLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFakUsT0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"public_execution_context.d.ts","sourceRoot":"","sources":["../../src/public/public_execution_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAA6B,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC;AAI9F;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;IAMnD;;OAEG;aACa,SAAS,EAAE,eAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,GAAG;IAhBb,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,eAAe,CAA0B;;IAG/C;;OAEG;IACa,SAAS,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EAAE,aAAa,EACrC,GAAG,8CAAgE;IAM7E;;;;;;;;OAQG;IACI,iBAAiB,CAAC,iBAAiB,SAAI;IAO9C;;OAEG;IACI,mBAAmB;IAI1B;;OAEG;IACI,kBAAkB;IAIzB;;OAEG;IACI,oBAAoB;;;;IAK3B;;;OAGG;IACI,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAI7C;;;;OAIG;IACU,0BAA0B,CAAC,QAAQ,EAAE,EAAE;IAIpD;;;OAGG;IACI,kBAAkB,CAAC,GAAG,EAAE,gBAAgB;IAM/C;;;;;OAKG;IACU,wBAAwB,CAAC,eAAe,EAAE,YAAY;IAInE;;;;OAIG;IACU,WAAW,CAAC,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM;IAYvE;;;;OAIG;IACU,YAAY,CAAC,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IAc5D;;;;;;OAMG;IACU,kBAAkB,CAC7B,qBAAqB,EAAE,YAAY,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,EAAE,EACZ,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO;IAoEZ,6BAA6B,CACxC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;CAMnD"}
1
+ {"version":3,"file":"public_execution_context.d.ts","sourceRoot":"","sources":["../../src/public/public_execution_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAA6B,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC;AAI9F;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;IAMnD;;OAEG;aACa,SAAS,EAAE,eAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,GAAG;IAhBb,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,eAAe,CAA0B;;IAG/C;;OAEG;IACa,SAAS,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EAAE,aAAa,EACrC,GAAG,8CAAgE;IAM7E;;;;;;;;OAQG;IACI,iBAAiB,CAAC,iBAAiB,SAAI;IAO9C;;OAEG;IACI,mBAAmB;IAI1B;;OAEG;IACI,kBAAkB;IAIzB;;OAEG;IACI,oBAAoB;;;;IAK3B;;;OAGG;IACI,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAI7C;;;;OAIG;IACU,0BAA0B,CAAC,QAAQ,EAAE,EAAE;IAIpD;;;OAGG;IACI,kBAAkB,CAAC,GAAG,EAAE,gBAAgB;IAM/C;;;;;OAKG;IACU,wBAAwB,CAAC,eAAe,EAAE,YAAY;IAInE;;;;OAIG;IACU,WAAW,CAAC,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM;IAYvE;;;;OAIG;IACU,YAAY,CAAC,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IAc5D;;;;;;OAMG;IACU,kBAAkB,CAC7B,qBAAqB,EAAE,YAAY,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,EAAE,EACZ,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO;IAmEZ,6BAA6B,CACxC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;CAMnD"}
@@ -156,7 +156,6 @@ export class PublicExecutionContext extends TypedOracle {
156
156
  storageContractAddress: isDelegateCall ? this.execution.contractAddress : targetContractAddress,
157
157
  portalContractAddress: portalAddress,
158
158
  functionSelector,
159
- isContractDeployment: false,
160
159
  isDelegateCall,
161
160
  isStaticCall,
162
161
  startSideEffectCounter: 0, // TODO use counters in public execution
@@ -168,7 +167,7 @@ export class PublicExecutionContext extends TypedOracle {
168
167
  callContext,
169
168
  };
170
169
  const context = new PublicExecutionContext(nestedExecution, this.header, this.globalVariables, this.packedArgsCache, this.sideEffectCounter, this.stateDb, this.contractsDb, this.commitmentsDb, this.log);
171
- const childExecutionResult = await executePublicFunction(context, acir);
170
+ const childExecutionResult = await executePublicFunction(context, acir, true /** nested */);
172
171
  if (isStaticCall) {
173
172
  checkValidStaticCall(childExecutionResult.newNoteHashes, childExecutionResult.newNullifiers, childExecutionResult.contractStorageUpdateRequests, childExecutionResult.newL2ToL1Messages, childExecutionResult.unencryptedLogs);
174
173
  }
@@ -183,4 +182,4 @@ export class PublicExecutionContext extends TypedOracle {
183
182
  return await this.commitmentsDb.getNullifierMembershipWitnessAtLatestBlock(nullifier);
184
183
  }
185
184
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2V4ZWN1dGlvbl9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy9wdWJsaWNfZXhlY3V0aW9uX2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBZ0QsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBNkMsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHOUQsT0FBTyxFQUEwQyxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRTs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxXQUFXO0lBS3JEO0lBQ0U7O09BRUc7SUFDYSxTQUEwQixFQUN6QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsZUFBZ0MsRUFDaEMsaUJBQW9DLEVBQ3BDLE9BQXNCLEVBQ3RCLFdBQThCLEVBQzlCLGFBQTRCLEVBQ3JDLE1BQU0saUJBQWlCLENBQUMsMENBQTBDLENBQUM7UUFFM0UsS0FBSyxFQUFFLENBQUM7UUFWUSxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxzQkFBaUIsR0FBakIs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
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2V4ZWN1dGlvbl9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy9wdWJsaWNfZXhlY3V0aW9uX2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBZ0QsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBNkMsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHOUQsT0FBTyxFQUEwQyxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRTs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxXQUFXO0lBS3JEO0lBQ0U7O09BRUc7SUFDYSxTQUEwQixFQUN6QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsZUFBZ0MsRUFDaEMsaUJBQW9DLEVBQ3BDLE9BQXNCLEVBQ3RCLFdBQThCLEVBQzlCLGFBQTRCLEVBQ3JDLE1BQU0saUJBQWlCLENBQUMsMENBQTBDLENBQUM7UUFFM0UsS0FBSyxFQUFFLENBQUM7UUFWUSxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxzQkFBaUIsR0FBakIs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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/simulator",
3
- "version": "0.26.5",
3
+ "version": "0.27.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -30,10 +30,10 @@
30
30
  "rootDir": "./src"
31
31
  },
32
32
  "dependencies": {
33
- "@aztec/circuit-types": "0.26.5",
34
- "@aztec/circuits.js": "0.26.5",
35
- "@aztec/foundation": "0.26.5",
36
- "@aztec/types": "0.26.5",
33
+ "@aztec/circuit-types": "0.27.0",
34
+ "@aztec/circuits.js": "0.27.0",
35
+ "@aztec/foundation": "0.27.0",
36
+ "@aztec/types": "0.27.0",
37
37
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
38
38
  "levelup": "^5.1.1",
39
39
  "memdown": "^6.1.1",
package/src/acvm/acvm.ts CHANGED
@@ -110,7 +110,7 @@ export async function acvm(
110
110
  } else {
111
111
  typedError = new Error(`Error in oracle callback ${err}`);
112
112
  }
113
- logger.error(`Error in oracle callback ${name}`);
113
+ logger.error(`Error in oracle callback ${name}: ${typedError.message}`);
114
114
  throw typedError;
115
115
  }
116
116
  },
@@ -1,4 +1,4 @@
1
- import { PublicCallRequest } from '@aztec/circuits.js';
1
+ import { ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH, PublicCallRequest } from '@aztec/circuits.js';
2
2
  import { AztecAddress } from '@aztec/foundation/aztec-address';
3
3
  import { EthAddress } from '@aztec/foundation/eth-address';
4
4
  import { Fr } from '@aztec/foundation/fields';
@@ -53,12 +53,18 @@ export function toACVMField(
53
53
  * TODO(#4380): Nuke this and replace it with PublicCallRequest.toFields()
54
54
  */
55
55
  export function toAcvmEnqueuePublicFunctionResult(item: PublicCallRequest): ACVMField[] {
56
- return [
56
+ const fields = [
57
57
  item.contractAddress.toField(),
58
58
  ...item.functionData.toFields(),
59
59
  ...item.callContext.toFields(),
60
60
  item.getArgsHash(),
61
- ].map(toACVMField);
61
+ ];
62
+ if (fields.length !== ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH) {
63
+ throw new Error(
64
+ `Invalid length for EnqueuePublicFunctionResult (got ${fields.length} expected ${ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH})`,
65
+ );
66
+ }
67
+ return fields.map(toACVMField);
62
68
  }
63
69
 
64
70
  /**
@@ -1,4 +1,4 @@
1
- import { AztecAddress } from '@aztec/circuits.js';
1
+ import { AztecAddress, FunctionSelector } from '@aztec/circuits.js';
2
2
  import { Fr } from '@aztec/foundation/fields';
3
3
 
4
4
  import { AvmExecutionEnvironment } from './avm_execution_environment.js';
@@ -35,8 +35,16 @@ export class AvmContext {
35
35
  * @param calldata - Data/arguments for nested call
36
36
  * @returns new AvmContext instance
37
37
  */
38
- public createNestedContractCallContext(address: AztecAddress, calldata: Fr[]): AvmContext {
39
- const newExecutionEnvironment = this.environment.deriveEnvironmentForNestedCall(address, calldata);
38
+ public createNestedContractCallContext(
39
+ address: AztecAddress,
40
+ calldata: Fr[],
41
+ temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
42
+ ): AvmContext {
43
+ const newExecutionEnvironment = this.environment.deriveEnvironmentForNestedCall(
44
+ address,
45
+ calldata,
46
+ temporaryFunctionSelector,
47
+ );
40
48
  const forkedWorldState = this.persistableState.fork();
41
49
  const machineState = AvmMachineState.fromState(this.machineState);
42
50
  return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
@@ -54,8 +62,16 @@ export class AvmContext {
54
62
  * @param calldata - Data/arguments for nested call
55
63
  * @returns new AvmContext instance
56
64
  */
57
- public createNestedContractStaticCallContext(address: AztecAddress, calldata: Fr[]): AvmContext {
58
- const newExecutionEnvironment = this.environment.deriveEnvironmentForNestedStaticCall(address, calldata);
65
+ public createNestedContractStaticCallContext(
66
+ address: AztecAddress,
67
+ calldata: Fr[],
68
+ temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
69
+ ): AvmContext {
70
+ const newExecutionEnvironment = this.environment.deriveEnvironmentForNestedStaticCall(
71
+ address,
72
+ calldata,
73
+ temporaryFunctionSelector,
74
+ );
59
75
  const forkedWorldState = this.persistableState.fork();
60
76
  const machineState = AvmMachineState.fromState(this.machineState);
61
77
  return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
@@ -36,12 +36,19 @@ export class AvmExecutionEnvironment {
36
36
 
37
37
  public readonly calldata: Fr[],
38
38
 
39
+ // Function selector is temporary since eventually public contract bytecode will be one blob
40
+ // containing all functions, and function selector will become an application-level mechanism
41
+ // (e.g. first few bytes of calldata + compiler-generated jump table)
39
42
  public readonly temporaryFunctionSelector: FunctionSelector,
40
43
  ) {}
41
44
 
42
- public deriveEnvironmentForNestedCall(address: AztecAddress, calldata: Fr[]): AvmExecutionEnvironment {
45
+ public deriveEnvironmentForNestedCall(
46
+ address: AztecAddress,
47
+ calldata: Fr[],
48
+ temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
49
+ ): AvmExecutionEnvironment {
43
50
  return new AvmExecutionEnvironment(
44
- /*address=*/ address,
51
+ address,
45
52
  /*storageAddress=*/ address,
46
53
  this.origin,
47
54
  this.sender,
@@ -53,14 +60,18 @@ export class AvmExecutionEnvironment {
53
60
  this.globals,
54
61
  this.isStaticCall,
55
62
  this.isDelegateCall,
56
- /*calldata=*/ calldata,
57
- this.temporaryFunctionSelector,
63
+ calldata,
64
+ temporaryFunctionSelector,
58
65
  );
59
66
  }
60
67
 
61
- public deriveEnvironmentForNestedStaticCall(address: AztecAddress, calldata: Fr[]): AvmExecutionEnvironment {
68
+ public deriveEnvironmentForNestedStaticCall(
69
+ address: AztecAddress,
70
+ calldata: Fr[],
71
+ temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
72
+ ): AvmExecutionEnvironment {
62
73
  return new AvmExecutionEnvironment(
63
- /*address=*/ address,
74
+ address,
64
75
  /*storageAddress=*/ address,
65
76
  this.origin,
66
77
  this.sender,
@@ -72,14 +83,18 @@ export class AvmExecutionEnvironment {
72
83
  this.globals,
73
84
  /*isStaticCall=*/ true,
74
85
  this.isDelegateCall,
75
- /*calldata=*/ calldata,
76
- this.temporaryFunctionSelector,
86
+ calldata,
87
+ temporaryFunctionSelector,
77
88
  );
78
89
  }
79
90
 
80
- public newDelegateCall(address: AztecAddress, calldata: Fr[]): AvmExecutionEnvironment {
91
+ public newDelegateCall(
92
+ address: AztecAddress,
93
+ calldata: Fr[],
94
+ temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
95
+ ): AvmExecutionEnvironment {
81
96
  return new AvmExecutionEnvironment(
82
- /*address=*/ address,
97
+ address,
83
98
  this.storageAddress,
84
99
  this.origin,
85
100
  this.sender,
@@ -91,8 +106,8 @@ export class AvmExecutionEnvironment {
91
106
  this.globals,
92
107
  this.isStaticCall,
93
108
  /*isDelegateCall=*/ true,
94
- /*calldata=*/ calldata,
95
- this.temporaryFunctionSelector,
109
+ calldata,
110
+ temporaryFunctionSelector,
96
111
  );
97
112
  }
98
113
  }
@@ -1,5 +1,6 @@
1
1
  import { toBufferBE } from '@aztec/foundation/bigint-buffer';
2
2
  import { Fr } from '@aztec/foundation/fields';
3
+ import { DebugLogger, createDebugLogger } from '@aztec/foundation/log';
3
4
 
4
5
  import { strict as assert } from 'assert';
5
6
 
@@ -28,6 +29,10 @@ export abstract class MemoryValue {
28
29
  public toFr(): Fr {
29
30
  return new Fr(this.toBigInt());
30
31
  }
32
+
33
+ public toString(): string {
34
+ return `${this.constructor.name}(0x${this.toBigInt().toString(16)})`;
35
+ }
31
36
  }
32
37
 
33
38
  /** IntegralValue gathers the common operations for all integral memory types. */
@@ -189,6 +194,8 @@ export enum TypeTag {
189
194
 
190
195
  // TODO: Consider automatic conversion when getting undefined values.
191
196
  export class TaggedMemory {
197
+ static readonly log: DebugLogger = createDebugLogger('aztec:avm_simulator:memory');
198
+
192
199
  // FIXME: memory should be 2^32, but TS doesn't allow for arrays that big.
193
200
  static readonly MAX_MEMORY_SIZE = Number((1n << 32n) - 2n);
194
201
  private _mem: MemoryValue[];
@@ -200,25 +207,29 @@ export class TaggedMemory {
200
207
 
201
208
  public get(offset: number): MemoryValue {
202
209
  assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
203
- return this.getAs<MemoryValue>(offset);
210
+ const value = this.getAs<MemoryValue>(offset);
211
+ return value;
204
212
  }
205
213
 
206
214
  public getAs<T>(offset: number): T {
207
215
  assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
208
216
  const word = this._mem[offset];
217
+ TaggedMemory.log(`get(${offset}) = ${word}`);
209
218
  return word as T;
210
219
  }
211
220
 
212
221
  public getSlice(offset: number, size: number): MemoryValue[] {
213
222
  assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
214
223
  assert(offset + size < TaggedMemory.MAX_MEMORY_SIZE);
215
- return this._mem.slice(offset, offset + size);
224
+ const value = this._mem.slice(offset, offset + size);
225
+ TaggedMemory.log(`getSlice(${offset}, ${size}) = ${value}`);
226
+ return value;
216
227
  }
217
228
 
218
229
  public getSliceAs<T>(offset: number, size: number): T[] {
219
230
  assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
220
231
  assert(offset + size < TaggedMemory.MAX_MEMORY_SIZE);
221
- return this._mem.slice(offset, offset + size) as T[];
232
+ return this.getSlice(offset, size) as T[];
222
233
  }
223
234
 
224
235
  public getSliceTags(offset: number, size: number): TypeTag[] {
@@ -230,6 +241,7 @@ export class TaggedMemory {
230
241
  public set(offset: number, v: MemoryValue) {
231
242
  assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
232
243
  this._mem[offset] = v;
244
+ TaggedMemory.log(`set(${offset}, ${v})`);
233
245
  }
234
246
 
235
247
  public setSlice(offset: number, vs: MemoryValue[]) {
@@ -240,6 +252,7 @@ export class TaggedMemory {
240
252
  this._mem.length = offset + vs.length;
241
253
  }
242
254
  this._mem.splice(offset, vs.length, ...vs);
255
+ TaggedMemory.log(`setSlice(${offset}, ${vs})`);
243
256
  }
244
257
 
245
258
  public getTag(offset: number): TypeTag {
@@ -255,6 +268,12 @@ export class TaggedMemory {
255
268
  }
256
269
  }
257
270
 
271
+ public checkIsValidMemoryOffsetTag(offset: number) {
272
+ if (this.getTag(offset) > TypeTag.UINT64) {
273
+ throw TagCheckError.forOffset(offset, TypeTag[this.getTag(offset)], 'UINT64');
274
+ }
275
+ }
276
+
258
277
  public static checkIsIntegralTag(tag: TypeTag) {
259
278
  if (![TypeTag.UINT8, TypeTag.UINT16, TypeTag.UINT32, TypeTag.UINT64, TypeTag.UINT128].includes(tag)) {
260
279
  throw TagCheckError.forTag(TypeTag[tag], 'integral');
@@ -321,4 +340,24 @@ export class TaggedMemory {
321
340
  throw new Error(`${TypeTag[tag]} is not a valid integral type.`);
322
341
  }
323
342
  }
343
+
344
+ // Does not truncate. Type constructor will check that it fits.
345
+ public static buildFromTagOrDie(v: bigint | number, tag: TypeTag): MemoryValue {
346
+ switch (tag) {
347
+ case TypeTag.UINT8:
348
+ return new Uint8(v);
349
+ case TypeTag.UINT16:
350
+ return new Uint16(v);
351
+ case TypeTag.UINT32:
352
+ return new Uint32(v);
353
+ case TypeTag.UINT64:
354
+ return new Uint64(v);
355
+ case TypeTag.UINT128:
356
+ return new Uint128(v);
357
+ case TypeTag.FIELD:
358
+ return new Field(v);
359
+ default:
360
+ throw new Error(`${TypeTag[tag]} is not a valid integral type.`);
361
+ }
362
+ }
324
363
  }
@@ -9,9 +9,13 @@ import type { Instruction } from './opcodes/index.js';
9
9
  import { decodeFromBytecode } from './serialization/bytecode_serialization.js';
10
10
 
11
11
  export class AvmSimulator {
12
- private log: DebugLogger = createDebugLogger('aztec:avm_simulator');
12
+ private log: DebugLogger;
13
13
 
14
- constructor(private context: AvmContext) {}
14
+ constructor(private context: AvmContext) {
15
+ this.log = createDebugLogger(
16
+ `aztec:avm_simulator:core(f:${context.environment.temporaryFunctionSelector.toString()})`,
17
+ );
18
+ }
15
19
 
16
20
  /**
17
21
  * Fetch the bytecode and execute it in the current context.
@@ -52,7 +56,10 @@ export class AvmSimulator {
52
56
  // continuing until the machine state signifies a halt
53
57
  while (!this.context.machineState.halted) {
54
58
  const instruction = instructions[this.context.machineState.pc];
55
- assert(!!instruction); // This should never happen
59
+ assert(
60
+ !!instruction,
61
+ 'AVM attempted to execute non-existent instruction. This should never happen (invalid bytecode or AVM simulator bug)!',
62
+ );
56
63
 
57
64
  this.log.debug(`@${this.context.machineState.pc} ${instruction.toString()}`);
58
65
  // Execute the instruction.
@@ -1,6 +1,6 @@
1
1
  import { strict as assert } from 'assert';
2
2
 
3
- import { TaggedMemory, TypeTag } from '../avm_memory_types.js';
3
+ import { TaggedMemory } from '../avm_memory_types.js';
4
4
 
5
5
  export enum AddressingMode {
6
6
  DIRECT,
@@ -51,7 +51,8 @@ export class Addressing {
51
51
  for (const [i, offset] of offsets.entries()) {
52
52
  switch (this.modePerOperand[i]) {
53
53
  case AddressingMode.INDIRECT:
54
- mem.checkTag(TypeTag.UINT32, offset);
54
+ // NOTE(reviewer): less than equal is a deviation from the spec - i dont see why this shouldnt be possible!
55
+ mem.checkIsValidMemoryOffsetTag(offset);
55
56
  resolved[i] = Number(mem.get(offset).toBigInt());
56
57
  break;
57
58
  case AddressingMode.DIRECT: