@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.
- package/dest/acvm/acvm.js +2 -2
- package/dest/acvm/serialize.d.ts.map +1 -1
- package/dest/acvm/serialize.js +8 -3
- package/dest/avm/avm_context.d.ts +3 -3
- package/dest/avm/avm_context.d.ts.map +1 -1
- package/dest/avm/avm_context.js +6 -5
- package/dest/avm/avm_execution_environment.d.ts +3 -3
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +16 -17
- package/dest/avm/avm_memory_types.d.ts +10 -0
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +39 -4
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +3 -3
- package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/avm/opcodes/addressing_mode.js +3 -3
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +2 -1
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +5 -7
- package/dest/avm/opcodes/control_flow.d.ts +0 -20
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/avm/opcodes/control_flow.js +2 -46
- package/dest/avm/opcodes/external_calls.d.ts +24 -2
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +74 -17
- package/dest/avm/opcodes/storage.d.ts +4 -3
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +23 -12
- package/dest/avm/serialization/instruction_serialization.d.ts +1 -2
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +9 -3
- package/dest/avm/temporary_executor_migration.d.ts.map +1 -1
- package/dest/avm/temporary_executor_migration.js +6 -1
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +4 -6
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +3 -3
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +3 -2
- package/dest/public/execution.d.ts +13 -12
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +2 -2
- package/dest/public/executor.d.ts +22 -1
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +137 -13
- package/dest/public/public_execution_context.d.ts.map +1 -1
- package/dest/public/public_execution_context.js +2 -3
- package/package.json +5 -5
- package/src/acvm/acvm.ts +1 -1
- package/src/acvm/serialize.ts +9 -3
- package/src/avm/avm_context.ts +21 -5
- package/src/avm/avm_execution_environment.ts +27 -12
- package/src/avm/avm_memory_types.ts +42 -3
- package/src/avm/avm_simulator.ts +10 -3
- package/src/avm/opcodes/addressing_mode.ts +3 -2
- package/src/avm/opcodes/arithmetic.ts +2 -0
- package/src/avm/opcodes/comparators.ts +4 -6
- package/src/avm/opcodes/control_flow.ts +1 -47
- package/src/avm/opcodes/external_calls.ts +88 -14
- package/src/avm/opcodes/storage.ts +37 -18
- package/src/avm/serialization/instruction_serialization.ts +8 -2
- package/src/avm/temporary_executor_migration.ts +6 -0
- package/src/client/client_execution_context.ts +1 -13
- package/src/client/simulator.ts +1 -2
- package/src/index.ts +2 -1
- package/src/public/execution.ts +15 -14
- package/src/public/executor.ts +157 -13
- package/src/public/public_execution_context.ts +1 -2
package/dest/public/executor.js
CHANGED
|
@@ -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)
|
|
27
|
-
|
|
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
|
-
|
|
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;
|
|
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,
|
|
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.
|
|
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.
|
|
34
|
-
"@aztec/circuits.js": "0.
|
|
35
|
-
"@aztec/foundation": "0.
|
|
36
|
-
"@aztec/types": "0.
|
|
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
|
},
|
package/src/acvm/serialize.ts
CHANGED
|
@@ -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
|
-
|
|
56
|
+
const fields = [
|
|
57
57
|
item.contractAddress.toField(),
|
|
58
58
|
...item.functionData.toFields(),
|
|
59
59
|
...item.callContext.toFields(),
|
|
60
60
|
item.getArgsHash(),
|
|
61
|
-
]
|
|
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
|
/**
|
package/src/avm/avm_context.ts
CHANGED
|
@@ -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(
|
|
39
|
-
|
|
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(
|
|
58
|
-
|
|
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(
|
|
45
|
+
public deriveEnvironmentForNestedCall(
|
|
46
|
+
address: AztecAddress,
|
|
47
|
+
calldata: Fr[],
|
|
48
|
+
temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
|
|
49
|
+
): AvmExecutionEnvironment {
|
|
43
50
|
return new AvmExecutionEnvironment(
|
|
44
|
-
|
|
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
|
-
|
|
57
|
-
|
|
63
|
+
calldata,
|
|
64
|
+
temporaryFunctionSelector,
|
|
58
65
|
);
|
|
59
66
|
}
|
|
60
67
|
|
|
61
|
-
public deriveEnvironmentForNestedStaticCall(
|
|
68
|
+
public deriveEnvironmentForNestedStaticCall(
|
|
69
|
+
address: AztecAddress,
|
|
70
|
+
calldata: Fr[],
|
|
71
|
+
temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
|
|
72
|
+
): AvmExecutionEnvironment {
|
|
62
73
|
return new AvmExecutionEnvironment(
|
|
63
|
-
|
|
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
|
-
|
|
76
|
-
|
|
86
|
+
calldata,
|
|
87
|
+
temporaryFunctionSelector,
|
|
77
88
|
);
|
|
78
89
|
}
|
|
79
90
|
|
|
80
|
-
public newDelegateCall(
|
|
91
|
+
public newDelegateCall(
|
|
92
|
+
address: AztecAddress,
|
|
93
|
+
calldata: Fr[],
|
|
94
|
+
temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
|
|
95
|
+
): AvmExecutionEnvironment {
|
|
81
96
|
return new AvmExecutionEnvironment(
|
|
82
|
-
|
|
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
|
-
|
|
95
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
}
|
package/src/avm/avm_simulator.ts
CHANGED
|
@@ -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
|
|
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(
|
|
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
|
|
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
|
-
|
|
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:
|