@aztec/simulator 0.23.0 → 0.26.1
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/deserialize.d.ts +5 -0
- package/dest/acvm/deserialize.d.ts.map +1 -1
- package/dest/acvm/deserialize.js +8 -1
- package/dest/acvm/oracle/oracle.d.ts +7 -6
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +28 -15
- package/dest/acvm/oracle/typed_oracle.d.ts +9 -11
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +11 -11
- package/dest/avm/avm_context.d.ts +4 -4
- package/dest/avm/avm_context.d.ts.map +1 -1
- package/dest/avm/avm_context.js +6 -6
- package/dest/avm/avm_execution_environment.d.ts +3 -2
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +6 -5
- package/dest/avm/avm_memory_types.d.ts +127 -37
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +98 -106
- package/dest/avm/avm_simulator.d.ts +6 -4
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +17 -19
- package/dest/avm/errors.d.ts +3 -1
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/errors.js +9 -3
- package/dest/avm/fixtures/index.d.ts +21 -5
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +28 -9
- package/dest/avm/journal/host_storage.d.ts +1 -1
- package/dest/avm/journal/host_storage.d.ts.map +1 -1
- package/dest/avm/journal/host_storage.js +1 -1
- package/dest/avm/journal/journal.d.ts +78 -50
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +125 -169
- package/dest/avm/journal/nullifiers.d.ts +85 -0
- package/dest/avm/journal/nullifiers.d.ts.map +1 -0
- package/dest/avm/journal/nullifiers.js +147 -0
- package/dest/avm/journal/public_storage.d.ts +88 -0
- package/dest/avm/journal/public_storage.d.ts.map +1 -0
- package/dest/avm/journal/public_storage.js +135 -0
- package/dest/avm/journal/trace.d.ts +43 -0
- package/dest/avm/journal/trace.d.ts.map +1 -0
- package/dest/avm/journal/trace.js +204 -0
- package/dest/avm/journal/trace_types.d.ts +26 -0
- package/dest/avm/journal/trace_types.d.ts.map +1 -0
- package/dest/avm/journal/trace_types.js +6 -0
- package/dest/avm/opcodes/accrued_substate.d.ts +37 -4
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +109 -12
- package/dest/avm/opcodes/addressing_mode.d.ts +24 -0
- package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -0
- package/dest/avm/opcodes/addressing_mode.js +62 -0
- package/dest/avm/opcodes/environment_getters.d.ts +14 -13
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +1 -1
- package/dest/avm/opcodes/external_calls.js +5 -5
- package/dest/avm/opcodes/hashing.d.ts +48 -0
- package/dest/avm/opcodes/hashing.d.ts.map +1 -0
- package/dest/avm/opcodes/hashing.js +127 -0
- package/dest/avm/opcodes/instruction.d.ts +4 -4
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +1 -1
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +5 -3
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +3 -3
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +28 -22
- package/dest/avm/serialization/instruction_serialization.d.ts +21 -16
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +23 -18
- package/dest/avm/temporary_executor_migration.d.ts +25 -0
- package/dest/avm/temporary_executor_migration.d.ts.map +1 -0
- package/dest/avm/temporary_executor_migration.js +71 -0
- package/dest/client/client_execution_context.d.ts +13 -7
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +52 -27
- package/dest/client/db_oracle.d.ts +7 -0
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/db_oracle.js +1 -1
- package/dest/client/execution_note_cache.js +1 -1
- package/dest/client/execution_result.d.ts +4 -2
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +1 -1
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +4 -4
- package/dest/client/simulator.d.ts +11 -6
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +21 -12
- package/dest/client/unconstrained_execution.js +2 -2
- package/dest/client/view_data_oracle.d.ts +9 -2
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +13 -5
- package/dest/public/db.d.ts +17 -4
- package/dest/public/db.d.ts.map +1 -1
- package/dest/public/execution.d.ts +9 -4
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +18 -5
- package/dest/public/executor.d.ts +7 -0
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +40 -6
- package/dest/public/public_execution_context.d.ts +5 -4
- package/dest/public/public_execution_context.d.ts.map +1 -1
- package/dest/public/public_execution_context.js +24 -13
- package/dest/public/state_actions.d.ts +1 -1
- package/dest/public/state_actions.d.ts.map +1 -1
- package/dest/public/state_actions.js +6 -7
- package/dest/test/utils.js +4 -4
- package/dest/utils.d.ts +5 -20
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +4 -21
- package/package.json +9 -6
- package/src/acvm/acvm.ts +156 -0
- package/src/acvm/acvm_types.ts +11 -0
- package/src/acvm/deserialize.ts +44 -0
- package/src/acvm/index.ts +5 -0
- package/src/acvm/oracle/debug.ts +109 -0
- package/src/acvm/oracle/index.ts +17 -0
- package/src/acvm/oracle/oracle.ts +356 -0
- package/src/acvm/oracle/typed_oracle.ts +225 -0
- package/src/acvm/serialize.ts +75 -0
- package/src/avm/avm_context.ts +63 -0
- package/src/avm/avm_execution_environment.ts +98 -0
- package/src/avm/avm_machine_state.ts +93 -0
- package/src/avm/avm_memory_types.ts +324 -0
- package/src/avm/avm_message_call_result.ts +29 -0
- package/src/avm/avm_simulator.ts +87 -0
- package/src/avm/errors.ts +57 -0
- package/src/avm/fixtures/index.ts +115 -0
- package/src/avm/journal/host_storage.ts +14 -0
- package/src/avm/journal/index.ts +2 -0
- package/src/avm/journal/journal.ts +231 -0
- package/src/avm/journal/nullifiers.ts +170 -0
- package/src/avm/journal/public_storage.ts +149 -0
- package/src/avm/journal/trace.ts +223 -0
- package/src/avm/journal/trace_types.ts +79 -0
- package/src/avm/opcodes/.eslintrc.cjs +8 -0
- package/src/avm/opcodes/accrued_substate.ts +214 -0
- package/src/avm/opcodes/addressing_mode.ts +66 -0
- package/src/avm/opcodes/arithmetic.ts +79 -0
- package/src/avm/opcodes/bitwise.ts +129 -0
- package/src/avm/opcodes/comparators.ts +69 -0
- package/src/avm/opcodes/control_flow.ts +129 -0
- package/src/avm/opcodes/environment_getters.ts +201 -0
- package/src/avm/opcodes/external_calls.ts +122 -0
- package/src/avm/opcodes/hashing.ts +170 -0
- package/src/avm/opcodes/index.ts +10 -0
- package/src/avm/opcodes/instruction.ts +64 -0
- package/src/avm/opcodes/instruction_impl.ts +52 -0
- package/src/avm/opcodes/memory.ts +194 -0
- package/src/avm/opcodes/storage.ts +79 -0
- package/src/avm/serialization/buffer_cursor.ts +109 -0
- package/src/avm/serialization/bytecode_serialization.ts +179 -0
- package/src/avm/serialization/instruction_serialization.ts +170 -0
- package/src/avm/temporary_executor_migration.ts +109 -0
- package/src/client/client_execution_context.ts +502 -0
- package/src/client/db_oracle.ts +192 -0
- package/src/client/execution_note_cache.ts +90 -0
- package/src/client/execution_result.ts +89 -0
- package/src/client/index.ts +3 -0
- package/src/client/pick_notes.ts +125 -0
- package/src/client/private_execution.ts +79 -0
- package/src/client/simulator.ts +317 -0
- package/src/client/unconstrained_execution.ts +49 -0
- package/src/client/view_data_oracle.ts +253 -0
- package/src/common/errors.ts +61 -0
- package/src/common/index.ts +3 -0
- package/src/common/packed_args_cache.ts +55 -0
- package/src/common/side_effect_counter.ts +12 -0
- package/src/index.ts +3 -0
- package/src/public/db.ts +100 -0
- package/src/public/execution.ts +161 -0
- package/src/public/executor.ts +178 -0
- package/src/public/index.ts +9 -0
- package/src/public/public_execution_context.ts +241 -0
- package/src/public/state_actions.ts +100 -0
- package/src/test/utils.ts +38 -0
- package/src/utils.ts +18 -0
package/dest/public/executor.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { PublicCircuitPublicInputs } from '@aztec/circuits.js';
|
|
2
2
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { Oracle, acvm, extractCallStack, extractReturnWitness } from '../acvm/index.js';
|
|
4
|
+
import { AvmContext } from '../avm/avm_context.js';
|
|
5
|
+
import { AvmMachineState } from '../avm/avm_machine_state.js';
|
|
6
|
+
import { AvmSimulator } from '../avm/avm_simulator.js';
|
|
7
|
+
import { HostStorage } from '../avm/journal/host_storage.js';
|
|
8
|
+
import { AvmPersistableStateManager } from '../avm/journal/index.js';
|
|
9
|
+
import { temporaryConvertAvmResults, temporaryCreateAvmExecutionEnvironment, } from '../avm/temporary_executor_migration.js';
|
|
4
10
|
import { ExecutionError, createSimulationError } from '../common/errors.js';
|
|
5
11
|
import { SideEffectCounter } from '../common/index.js';
|
|
6
12
|
import { PackedArgsCache } from '../common/packed_args_cache.js';
|
|
7
13
|
import { AcirSimulator } from '../index.js';
|
|
14
|
+
import { checkValidStaticCall } from './execution.js';
|
|
8
15
|
import { PublicExecutionContext } from './public_execution_context.js';
|
|
9
16
|
/**
|
|
10
17
|
* Execute a public function and return the execution result.
|
|
@@ -23,19 +30,22 @@ export async function executePublicFunction(context, acir, log = createDebugLogg
|
|
|
23
30
|
}, extractCallStack(err), { cause: err });
|
|
24
31
|
});
|
|
25
32
|
const returnWitness = extractReturnWitness(acir, partialWitness);
|
|
26
|
-
const { returnValues, newL2ToL1Msgs,
|
|
27
|
-
const newL2ToL1Messages = newL2ToL1Msgs.filter(v => !v.
|
|
28
|
-
const
|
|
33
|
+
const { returnValues, newL2ToL1Msgs, newNoteHashes: newNoteHashesPadded, newNullifiers: newNullifiersPadded, } = PublicCircuitPublicInputs.fromFields(returnWitness);
|
|
34
|
+
const newL2ToL1Messages = newL2ToL1Msgs.filter(v => !v.isEmpty());
|
|
35
|
+
const newNoteHashes = newNoteHashesPadded.filter(v => !v.isEmpty());
|
|
29
36
|
const newNullifiers = newNullifiersPadded.filter(v => !v.isEmpty());
|
|
30
37
|
const { contractStorageReads, contractStorageUpdateRequests } = context.getStorageActionData();
|
|
31
38
|
log(`Contract storage reads: ${contractStorageReads
|
|
32
39
|
.map(r => r.toFriendlyJSON() + ` - sec: ${r.sideEffectCounter}`)
|
|
33
40
|
.join(', ')}`);
|
|
41
|
+
log(`Contract storage update requests: ${contractStorageUpdateRequests
|
|
42
|
+
.map(r => r.toFriendlyJSON() + ` - sec: ${r.sideEffectCounter}`)
|
|
43
|
+
.join(', ')}`);
|
|
34
44
|
const nestedExecutions = context.getNestedExecutions();
|
|
35
45
|
const unencryptedLogs = context.getUnencryptedLogs();
|
|
36
46
|
return {
|
|
37
47
|
execution,
|
|
38
|
-
|
|
48
|
+
newNoteHashes,
|
|
39
49
|
newL2ToL1Messages,
|
|
40
50
|
newNullifiers,
|
|
41
51
|
contractStorageReads,
|
|
@@ -72,12 +82,36 @@ export class PublicExecutor {
|
|
|
72
82
|
const packedArgs = PackedArgsCache.create([]);
|
|
73
83
|
const sideEffectCounter = new SideEffectCounter();
|
|
74
84
|
const context = new PublicExecutionContext(execution, this.header, globalVariables, packedArgs, sideEffectCounter, this.stateDb, this.contractsDb, this.commitmentsDb);
|
|
85
|
+
let executionResult;
|
|
75
86
|
try {
|
|
76
|
-
|
|
87
|
+
executionResult = await executePublicFunction(context, acir);
|
|
77
88
|
}
|
|
78
89
|
catch (err) {
|
|
79
90
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during public execution'));
|
|
80
91
|
}
|
|
92
|
+
if (executionResult.execution.callContext.isStaticCall) {
|
|
93
|
+
checkValidStaticCall(executionResult.newNoteHashes, executionResult.newNullifiers, executionResult.contractStorageUpdateRequests, executionResult.newL2ToL1Messages, executionResult.unencryptedLogs);
|
|
94
|
+
}
|
|
95
|
+
return executionResult;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Executes a public execution request in the avm.
|
|
99
|
+
* @param execution - The execution to run.
|
|
100
|
+
* @param globalVariables - The global variables to use.
|
|
101
|
+
* @returns The result of the run plus all nested runs.
|
|
102
|
+
*/
|
|
103
|
+
async simulateAvm(execution, globalVariables) {
|
|
104
|
+
// Temporary code to construct the AVM context
|
|
105
|
+
// These data structures will permiate across the simulator when the public executor is phased out
|
|
106
|
+
const hostStorage = new HostStorage(this.stateDb, this.contractsDb, this.commitmentsDb);
|
|
107
|
+
const worldStateJournal = new AvmPersistableStateManager(hostStorage);
|
|
108
|
+
const executionEnv = temporaryCreateAvmExecutionEnvironment(execution, globalVariables);
|
|
109
|
+
const machineState = new AvmMachineState(0, 0, 0);
|
|
110
|
+
const context = new AvmContext(worldStateJournal, executionEnv, machineState);
|
|
111
|
+
const simulator = new AvmSimulator(context);
|
|
112
|
+
const result = await simulator.execute();
|
|
113
|
+
const newWorldState = context.persistableState.flush();
|
|
114
|
+
return temporaryConvertAvmResults(execution, newWorldState, result);
|
|
81
115
|
}
|
|
82
116
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHNDQUFzQyxHQUN2QyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBQTBDLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkU7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxPQUErQixFQUMvQixJQUFZ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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
1
|
+
import { FunctionL2Logs, NullifierMembershipWitness, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
2
|
import { FunctionSelector, GlobalVariables, Header } from '@aztec/circuits.js';
|
|
3
3
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
@@ -63,10 +63,10 @@ export declare class PublicExecutionContext extends TypedOracle {
|
|
|
63
63
|
packArguments(args: Fr[]): Promise<Fr>;
|
|
64
64
|
/**
|
|
65
65
|
* Fetches the a message from the db, given its key.
|
|
66
|
-
* @param
|
|
66
|
+
* @param entryKey - A buffer representing the entry key.
|
|
67
67
|
* @returns The l1 to l2 message data
|
|
68
68
|
*/
|
|
69
|
-
|
|
69
|
+
getL1ToL2MembershipWitness(entryKey: Fr): Promise<import("../acvm/index.js").MessageLoadOracleInputs<16>>;
|
|
70
70
|
/**
|
|
71
71
|
* Emit an unencrypted log.
|
|
72
72
|
* @param log - The unencrypted log to be emitted.
|
|
@@ -98,6 +98,7 @@ export declare class PublicExecutionContext extends TypedOracle {
|
|
|
98
98
|
* @param argsHash - The packed arguments to pass to the function.
|
|
99
99
|
* @returns The return values of the public function.
|
|
100
100
|
*/
|
|
101
|
-
callPublicFunction(targetContractAddress: AztecAddress, functionSelector: FunctionSelector, argsHash: Fr): Promise<Fr[]>;
|
|
101
|
+
callPublicFunction(targetContractAddress: AztecAddress, functionSelector: FunctionSelector, argsHash: Fr, isStaticCall: boolean, isDelegateCall: boolean): Promise<Fr[]>;
|
|
102
|
+
getNullifierMembershipWitness(blockNumber: number, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
102
103
|
}
|
|
103
104
|
//# sourceMappingURL=public_execution_context.d.ts.map
|
|
@@ -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,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
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"}
|
|
@@ -4,6 +4,7 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { TypedOracle, toACVMWitness } from '../acvm/index.js';
|
|
7
|
+
import { checkValidStaticCall } from './execution.js';
|
|
7
8
|
import { executePublicFunction } from './executor.js';
|
|
8
9
|
import { ContractStorageActionsCollector } from './state_actions.js';
|
|
9
10
|
/**
|
|
@@ -27,7 +28,7 @@ export class PublicExecutionContext extends TypedOracle {
|
|
|
27
28
|
this.log = log;
|
|
28
29
|
this.nestedExecutions = [];
|
|
29
30
|
this.unencryptedLogs = [];
|
|
30
|
-
this.storageActions = new ContractStorageActionsCollector(stateDb, execution.
|
|
31
|
+
this.storageActions = new ContractStorageActionsCollector(stateDb, execution.callContext.storageContractAddress);
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
34
|
* Generates the initial witness for a public function.
|
|
@@ -71,11 +72,11 @@ export class PublicExecutionContext extends TypedOracle {
|
|
|
71
72
|
}
|
|
72
73
|
/**
|
|
73
74
|
* Fetches the a message from the db, given its key.
|
|
74
|
-
* @param
|
|
75
|
+
* @param entryKey - A buffer representing the entry key.
|
|
75
76
|
* @returns The l1 to l2 message data
|
|
76
77
|
*/
|
|
77
|
-
async
|
|
78
|
-
return await this.commitmentsDb.
|
|
78
|
+
async getL1ToL2MembershipWitness(entryKey) {
|
|
79
|
+
return await this.commitmentsDb.getL1ToL2MembershipWitness(entryKey);
|
|
79
80
|
}
|
|
80
81
|
/**
|
|
81
82
|
* Emit an unencrypted log.
|
|
@@ -119,11 +120,11 @@ export class PublicExecutionContext extends TypedOracle {
|
|
|
119
120
|
async storageWrite(startStorageSlot, values) {
|
|
120
121
|
const newValues = [];
|
|
121
122
|
for (let i = 0; i < values.length; i++) {
|
|
122
|
-
const storageSlot = new Fr(startStorageSlot.
|
|
123
|
+
const storageSlot = new Fr(startStorageSlot.toBigInt() + BigInt(i));
|
|
123
124
|
const newValue = values[i];
|
|
124
125
|
const sideEffectCounter = this.sideEffectCounter.count();
|
|
125
|
-
|
|
126
|
-
await this.stateDb.storageWrite(this.execution.
|
|
126
|
+
this.storageActions.write(storageSlot, newValue, sideEffectCounter);
|
|
127
|
+
await this.stateDb.storageWrite(this.execution.callContext.storageContractAddress, storageSlot, newValue);
|
|
127
128
|
this.log(`Oracle storage write: slot=${storageSlot.toString()} value=${newValue.toString()}`);
|
|
128
129
|
newValues.push(newValue);
|
|
129
130
|
}
|
|
@@ -136,7 +137,8 @@ export class PublicExecutionContext extends TypedOracle {
|
|
|
136
137
|
* @param argsHash - The packed arguments to pass to the function.
|
|
137
138
|
* @returns The return values of the public function.
|
|
138
139
|
*/
|
|
139
|
-
async callPublicFunction(targetContractAddress, functionSelector, argsHash) {
|
|
140
|
+
async callPublicFunction(targetContractAddress, functionSelector, argsHash, isStaticCall, isDelegateCall) {
|
|
141
|
+
isStaticCall = isStaticCall || this.execution.callContext.isStaticCall;
|
|
140
142
|
const args = this.packedArgsCache.unpack(argsHash);
|
|
141
143
|
this.log(`Public function call: addr=${targetContractAddress} selector=${functionSelector} args=${args.join(',')}`);
|
|
142
144
|
const portalAddress = (await this.contractsDb.getPortalContractAddress(targetContractAddress)) ?? EthAddress.ZERO;
|
|
@@ -150,13 +152,13 @@ export class PublicExecutionContext extends TypedOracle {
|
|
|
150
152
|
}
|
|
151
153
|
const functionData = new FunctionData(functionSelector, isInternal, false, false);
|
|
152
154
|
const callContext = CallContext.from({
|
|
153
|
-
msgSender: this.execution.contractAddress,
|
|
155
|
+
msgSender: isDelegateCall ? this.execution.callContext.msgSender : this.execution.contractAddress,
|
|
156
|
+
storageContractAddress: isDelegateCall ? this.execution.contractAddress : targetContractAddress,
|
|
154
157
|
portalContractAddress: portalAddress,
|
|
155
|
-
storageContractAddress: targetContractAddress,
|
|
156
158
|
functionSelector,
|
|
157
159
|
isContractDeployment: false,
|
|
158
|
-
isDelegateCall
|
|
159
|
-
isStaticCall
|
|
160
|
+
isDelegateCall,
|
|
161
|
+
isStaticCall,
|
|
160
162
|
startSideEffectCounter: 0, // TODO use counters in public execution
|
|
161
163
|
});
|
|
162
164
|
const nestedExecution = {
|
|
@@ -167,9 +169,18 @@ export class PublicExecutionContext extends TypedOracle {
|
|
|
167
169
|
};
|
|
168
170
|
const context = new PublicExecutionContext(nestedExecution, this.header, this.globalVariables, this.packedArgsCache, this.sideEffectCounter, this.stateDb, this.contractsDb, this.commitmentsDb, this.log);
|
|
169
171
|
const childExecutionResult = await executePublicFunction(context, acir);
|
|
172
|
+
if (isStaticCall) {
|
|
173
|
+
checkValidStaticCall(childExecutionResult.newNoteHashes, childExecutionResult.newNullifiers, childExecutionResult.contractStorageUpdateRequests, childExecutionResult.newL2ToL1Messages, childExecutionResult.unencryptedLogs);
|
|
174
|
+
}
|
|
170
175
|
this.nestedExecutions.push(childExecutionResult);
|
|
171
176
|
this.log(`Returning from nested call: ret=${childExecutionResult.returnValues.join(', ')}`);
|
|
172
177
|
return childExecutionResult.returnValues;
|
|
173
178
|
}
|
|
179
|
+
async getNullifierMembershipWitness(blockNumber, nullifier) {
|
|
180
|
+
if (!this.header.globalVariables.blockNumber.equals(new Fr(blockNumber))) {
|
|
181
|
+
throw new Error(`Public execution oracle can only access nullifier membership witnesses for the current block`);
|
|
182
|
+
}
|
|
183
|
+
return await this.commitmentsDb.getNullifierMembershipWitnessAtLatestBlock(nullifier);
|
|
184
|
+
}
|
|
174
185
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2V4ZWN1dGlvbl9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy9wdWJsaWNfZXhlY3V0aW9uX2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBZ0QsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBNkMsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHOUQsT0FBTyxFQUEwQyxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRTs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxXQUFXO0lBS3JEO0lBQ0U7O09BRUc7SUFDYSxTQUEwQixFQUN6QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsZUFBZ0MsRUFDaEMsaUJBQW9DLEVBQ3BDLE9BQXNCLEVBQ3RCLFdBQThCLEVBQzlCLGFBQTRCLEVBQ3JDLE1BQU0saUJBQWlCLENBQUMsMENBQTBDLENBQUM7UUFFM0UsS0FBSyxFQUFFLENBQUM7UUFWUSxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxzQkFBaUIsR0FBakIs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
|
|
@@ -29,7 +29,7 @@ export declare class ContractStorageActionsCollector {
|
|
|
29
29
|
* @param newValue - Value to write to it.
|
|
30
30
|
* @param sideEffectCounter - Side effect counter associated with this storage action.
|
|
31
31
|
*/
|
|
32
|
-
write(storageSlot: Fr, newValue: Fr, sideEffectCounter: number):
|
|
32
|
+
write(storageSlot: Fr, newValue: Fr, sideEffectCounter: number): void;
|
|
33
33
|
/**
|
|
34
34
|
* Returns all storage reads and update requests performed.
|
|
35
35
|
* @returns All storage read and update requests.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state_actions.d.ts","sourceRoot":"","sources":["../../src/public/state_actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;GAIG;AACH,qBAAa,+BAA+B;
|
|
1
|
+
{"version":3,"file":"state_actions.d.ts","sourceRoot":"","sources":["../../src/public/state_actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;GAIG;AACH,qBAAa,+BAA+B;IAgB9B,OAAO,CAAC,EAAE;IAAiB,OAAO,CAAC,OAAO;IAdtD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAGvB;IAGd,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAMhC;gBAEM,EAAE,EAAE,aAAa,EAAU,OAAO,EAAE,YAAY;IAEpE;;;;;;;OAOG;IACU,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAe1E;;;;;;OAMG;IACI,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAmB5E;;;OAGG;IACI,OAAO,IAAI,CAAC,mBAAmB,EAAE,EAAE,4BAA4B,EAAE,CAAC;CAiB1E"}
|
|
@@ -43,21 +43,20 @@ export class ContractStorageActionsCollector {
|
|
|
43
43
|
* @param newValue - Value to write to it.
|
|
44
44
|
* @param sideEffectCounter - Side effect counter associated with this storage action.
|
|
45
45
|
*/
|
|
46
|
-
|
|
47
|
-
const slot = storageSlot.
|
|
46
|
+
write(storageSlot, newValue, sideEffectCounter) {
|
|
47
|
+
const slot = storageSlot.toBigInt();
|
|
48
48
|
const updateRequest = this.contractStorageUpdateRequests.get(slot);
|
|
49
49
|
if (updateRequest) {
|
|
50
|
-
this.contractStorageUpdateRequests.set(slot, {
|
|
50
|
+
this.contractStorageUpdateRequests.set(slot, { newValue, sideEffectCounter });
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
53
|
const read = this.contractStorageReads.get(slot);
|
|
54
54
|
if (read) {
|
|
55
55
|
this.contractStorageReads.delete(slot);
|
|
56
|
-
this.contractStorageUpdateRequests.set(slot, {
|
|
56
|
+
this.contractStorageUpdateRequests.set(slot, { newValue, sideEffectCounter });
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
|
-
|
|
60
|
-
this.contractStorageUpdateRequests.set(slot, { oldValue, newValue, sideEffectCounter });
|
|
59
|
+
this.contractStorageUpdateRequests.set(slot, { newValue, sideEffectCounter });
|
|
61
60
|
return;
|
|
62
61
|
}
|
|
63
62
|
/**
|
|
@@ -76,4 +75,4 @@ export class ContractStorageActionsCollector {
|
|
|
76
75
|
return [reads, updateRequests];
|
|
77
76
|
}
|
|
78
77
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVfYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvc3RhdGVfYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJOUM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTywrQkFBK0I7SUFnQjFDLFlBQW9CLEVBQWlCLEVBQVUsT0FBcUI7UUFBaEQsT0FBRSxHQUFGLEVBQUUsQ0FBZTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFmcEUsb0NBQW9DO1FBQ25CLHlCQUFvQixHQUdqQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWQsNkRBQTZEO1FBQzVDLGtDQUE2QixHQU0xQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXlELENBQUM7SUFFeEU7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBZSxFQUFFLGlCQUF5QjtRQUMxRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQy9CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkUsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMzQixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDaEYsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLFdBQWUsRUFBRSxRQUFZLEVBQUUsaUJBQXlCO1FBQ25FLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7WUFDOUUsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDOUUsT0FBTztJQUNULENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPO1FBQ1osTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQzVGLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUN2QixXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3pCLEdBQUcsZUFBZTtTQUNuQixDQUFDLENBQ0gsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQy9HLDRCQUE0QixDQUFDLElBQUksQ0FBQztZQUNoQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3pCLEdBQUcsZ0JBQWdCO1NBQ3BCLENBQUMsQ0FDSCxDQUFDO1FBRUYsT0FBTyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YifQ==
|
package/dest/test/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { L1Actor, L1ToL2Message, L2Actor } from '@aztec/circuit-types';
|
|
2
2
|
import { EthAddress, Fr } from '@aztec/circuits.js';
|
|
3
|
-
import {
|
|
3
|
+
import { computeMessageSecretHash } from '@aztec/circuits.js/hash';
|
|
4
4
|
import { sha256 } from '@aztec/foundation/crypto';
|
|
5
5
|
/**
|
|
6
6
|
* Test utility function to craft an L1 to L2 message.
|
|
@@ -15,9 +15,9 @@ export const buildL1ToL2Message = (selector, contentPreimage, targetContract, se
|
|
|
15
15
|
const selectorBuf = Buffer.from(selector, 'hex');
|
|
16
16
|
const contentBuf = Buffer.concat([selectorBuf, ...contentPreimage.map(field => field.toBuffer())]);
|
|
17
17
|
const content = Fr.fromBufferReduce(sha256(contentBuf));
|
|
18
|
-
const secretHash =
|
|
18
|
+
const secretHash = computeMessageSecretHash(secret);
|
|
19
19
|
// Eventually the kernel will need to prove the kernel portal pair exists within the contract tree,
|
|
20
20
|
// EthAddress.random() will need to be replaced when this happens
|
|
21
|
-
return new L1ToL2Message(new L1Actor(EthAddress.random(), 1), new L2Actor(targetContract, 1), content, secretHash,
|
|
21
|
+
return new L1ToL2Message(new L1Actor(EthAddress.random(), 1), new L2Actor(targetContract, 1), content, secretHash, 2 ** 32 - 1, 0);
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQWdCLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2hDLFFBQWdCLEVBQ2hCLGVBQXFCLEVBQ3JCLGNBQTRCLEVBQzVCLE1BQVUsRUFDVixFQUFFO0lBQ0Ysb0NBQW9DO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWpELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV4RCxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwRCxtR0FBbUc7SUFDbkcsaUVBQWlFO0lBQ2pFLE9BQU8sSUFBSSxhQUFhLENBQ3RCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFDbkMsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUM5QixPQUFPLEVBQ1AsVUFBVSxFQUNWLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUNYLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
|
package/dest/utils.d.ts
CHANGED
|
@@ -1,27 +1,12 @@
|
|
|
1
|
-
import { GrumpkinPrivateKey } from '@aztec/circuits.js';
|
|
2
|
-
import { Grumpkin } from '@aztec/circuits.js/barretenberg';
|
|
3
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
/**
|
|
5
|
-
* A point in the format that Aztec.nr uses.
|
|
6
|
-
*/
|
|
7
|
-
export type NoirPoint = {
|
|
8
|
-
/** The x coordinate. */
|
|
9
|
-
x: bigint;
|
|
10
|
-
/** The y coordinate. */
|
|
11
|
-
y: bigint;
|
|
12
|
-
};
|
|
13
2
|
/**
|
|
14
3
|
* Computes the resulting storage slot for an entry in a mapping.
|
|
15
4
|
* @param mappingSlot - The slot of the mapping within state.
|
|
16
|
-
* @param
|
|
5
|
+
* @param key - The key of the mapping.
|
|
17
6
|
* @returns The slot in the contract storage where the value is stored.
|
|
18
7
|
*/
|
|
19
|
-
export declare function computeSlotForMapping(mappingSlot: Fr,
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
* @param grumpkin - The grumpkin instance.
|
|
24
|
-
* @returns The public key.
|
|
25
|
-
*/
|
|
26
|
-
export declare function toPublicKey(privateKey: GrumpkinPrivateKey, grumpkin: Grumpkin): NoirPoint;
|
|
8
|
+
export declare function computeSlotForMapping(mappingSlot: Fr, key: {
|
|
9
|
+
/** Serialize to a field. */
|
|
10
|
+
toField: () => Fr;
|
|
11
|
+
}): Fr;
|
|
27
12
|
//# sourceMappingURL=utils.d.ts.map
|
package/dest/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,EAAE,EACf,GAAG,EAAE;IACH,4BAA4B;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,MAGF"}
|
package/dest/utils.js
CHANGED
|
@@ -1,28 +1,11 @@
|
|
|
1
|
-
import { Grumpkin } from '@aztec/circuits.js/barretenberg';
|
|
2
1
|
import { pedersenHash } from '@aztec/foundation/crypto';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
2
|
/**
|
|
5
3
|
* Computes the resulting storage slot for an entry in a mapping.
|
|
6
4
|
* @param mappingSlot - The slot of the mapping within state.
|
|
7
|
-
* @param
|
|
5
|
+
* @param key - The key of the mapping.
|
|
8
6
|
* @returns The slot in the contract storage where the value is stored.
|
|
9
7
|
*/
|
|
10
|
-
export function computeSlotForMapping(mappingSlot,
|
|
11
|
-
|
|
12
|
-
const ownerField = isFr(owner) ? owner : new Fr(owner.x);
|
|
13
|
-
return Fr.fromBuffer(pedersenHash([mappingSlot, ownerField].map(f => f.toBuffer())));
|
|
8
|
+
export function computeSlotForMapping(mappingSlot, key) {
|
|
9
|
+
return pedersenHash([mappingSlot, key.toField()].map(field => field.toBuffer()));
|
|
14
10
|
}
|
|
15
|
-
|
|
16
|
-
* Computes the public key for a private key.
|
|
17
|
-
* @param privateKey - The private key.
|
|
18
|
-
* @param grumpkin - The grumpkin instance.
|
|
19
|
-
* @returns The public key.
|
|
20
|
-
*/
|
|
21
|
-
export function toPublicKey(privateKey, grumpkin) {
|
|
22
|
-
const point = grumpkin.mul(Grumpkin.generator, privateKey);
|
|
23
|
-
return {
|
|
24
|
-
x: point.x.value,
|
|
25
|
-
y: point.y.value,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFZOUM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsV0FBZSxFQUFFLEtBQXFCO0lBQzFFLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBcUIsRUFBZSxFQUFFLENBQUMsT0FBUSxLQUFZLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztJQUM3RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpELE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsVUFBOEIsRUFBRSxRQUFrQjtJQUM1RSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDM0QsT0FBTztRQUNMLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDaEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztLQUNqQixDQUFDO0FBQ0osQ0FBQyJ9
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxXQUFlLEVBQ2YsR0FHQztJQUVELE9BQU8sWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkYsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -30,9 +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.
|
|
33
|
+
"@aztec/circuit-types": "0.26.1",
|
|
34
|
+
"@aztec/circuits.js": "0.26.1",
|
|
35
|
+
"@aztec/foundation": "0.26.1",
|
|
36
|
+
"@aztec/types": "0.26.1",
|
|
36
37
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
37
38
|
"levelup": "^5.1.1",
|
|
38
39
|
"memdown": "^6.1.1",
|
|
@@ -41,18 +42,20 @@
|
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@aztec/kv-store": "workspace:^",
|
|
43
44
|
"@aztec/merkle-tree": "workspace:^",
|
|
44
|
-
"@aztec/noir-contracts": "workspace:^",
|
|
45
|
+
"@aztec/noir-contracts.js": "workspace:^",
|
|
45
46
|
"@jest/globals": "^29.5.0",
|
|
46
47
|
"@types/jest": "^29.5.0",
|
|
47
48
|
"@types/levelup": "^5.1.3",
|
|
49
|
+
"@types/lodash.merge": "^4.6.9",
|
|
48
50
|
"@types/memdown": "^3.0.2",
|
|
49
51
|
"@types/node": "^18.7.23",
|
|
50
52
|
"jest": "^29.5.0",
|
|
51
53
|
"jest-mock-extended": "^3.0.4",
|
|
54
|
+
"lodash.merge": "^4.6.2",
|
|
52
55
|
"ts-jest": "^29.1.0",
|
|
53
56
|
"ts-node": "^10.9.1",
|
|
54
57
|
"typescript": "^5.0.4",
|
|
55
|
-
"viem": "^
|
|
58
|
+
"viem": "^2.7.15"
|
|
56
59
|
},
|
|
57
60
|
"files": [
|
|
58
61
|
"dest",
|
package/src/acvm/acvm.ts
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { NoirCallStack, SourceCodeLocation } from '@aztec/circuit-types';
|
|
2
|
+
import { FunctionDebugMetadata, OpcodeLocation } from '@aztec/foundation/abi';
|
|
3
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
ExecutionError,
|
|
7
|
+
ForeignCallInput,
|
|
8
|
+
ForeignCallOutput,
|
|
9
|
+
WasmBlackBoxFunctionSolver,
|
|
10
|
+
executeCircuitWithBlackBoxSolver,
|
|
11
|
+
} from '@noir-lang/acvm_js';
|
|
12
|
+
|
|
13
|
+
import { traverseCauseChain } from '../common/errors.js';
|
|
14
|
+
import { ACVMWitness } from './acvm_types.js';
|
|
15
|
+
import { ORACLE_NAMES } from './oracle/index.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The callback interface for the ACIR.
|
|
19
|
+
*/
|
|
20
|
+
type ACIRCallback = Record<
|
|
21
|
+
ORACLE_NAMES,
|
|
22
|
+
(...args: ForeignCallInput[]) => ForeignCallOutput | Promise<ForeignCallOutput>
|
|
23
|
+
>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The result of executing an ACIR.
|
|
27
|
+
*/
|
|
28
|
+
export interface ACIRExecutionResult {
|
|
29
|
+
/**
|
|
30
|
+
* The partial witness of the execution.
|
|
31
|
+
*/
|
|
32
|
+
partialWitness: ACVMWitness;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Extracts the call stack from the location of a failing opcode and the debug metadata.
|
|
37
|
+
* One opcode can point to multiple calls due to inlining.
|
|
38
|
+
*/
|
|
39
|
+
function getSourceCodeLocationsFromOpcodeLocation(
|
|
40
|
+
opcodeLocation: string,
|
|
41
|
+
debug: FunctionDebugMetadata,
|
|
42
|
+
): SourceCodeLocation[] {
|
|
43
|
+
const { debugSymbols, files } = debug;
|
|
44
|
+
|
|
45
|
+
const callStack = debugSymbols.locations[opcodeLocation] || [];
|
|
46
|
+
return callStack.map(call => {
|
|
47
|
+
const { file: fileId, span } = call;
|
|
48
|
+
|
|
49
|
+
const { path, source } = files[fileId];
|
|
50
|
+
|
|
51
|
+
const locationText = source.substring(span.start, span.end);
|
|
52
|
+
const precedingText = source.substring(0, span.start);
|
|
53
|
+
const previousLines = precedingText.split('\n');
|
|
54
|
+
// Lines and columns in stacks are one indexed.
|
|
55
|
+
const line = previousLines.length;
|
|
56
|
+
const column = previousLines[previousLines.length - 1].length + 1;
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
filePath: path,
|
|
60
|
+
line,
|
|
61
|
+
column,
|
|
62
|
+
fileSource: source,
|
|
63
|
+
locationText,
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Extracts the source code locations for an array of opcode locations
|
|
70
|
+
* @param opcodeLocations - The opcode locations that caused the error.
|
|
71
|
+
* @param debug - The debug metadata of the function.
|
|
72
|
+
* @returns The source code locations.
|
|
73
|
+
*/
|
|
74
|
+
export function resolveOpcodeLocations(
|
|
75
|
+
opcodeLocations: OpcodeLocation[],
|
|
76
|
+
debug: FunctionDebugMetadata,
|
|
77
|
+
): SourceCodeLocation[] {
|
|
78
|
+
return opcodeLocations.flatMap(opcodeLocation => getSourceCodeLocationsFromOpcodeLocation(opcodeLocation, debug));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The function call that executes an ACIR.
|
|
83
|
+
*/
|
|
84
|
+
export async function acvm(
|
|
85
|
+
solver: WasmBlackBoxFunctionSolver,
|
|
86
|
+
acir: Buffer,
|
|
87
|
+
initialWitness: ACVMWitness,
|
|
88
|
+
callback: ACIRCallback,
|
|
89
|
+
): Promise<ACIRExecutionResult> {
|
|
90
|
+
const logger = createDebugLogger('aztec:simulator:acvm');
|
|
91
|
+
|
|
92
|
+
const partialWitness = await executeCircuitWithBlackBoxSolver(
|
|
93
|
+
solver,
|
|
94
|
+
acir,
|
|
95
|
+
initialWitness,
|
|
96
|
+
async (name: string, args: ForeignCallInput[]) => {
|
|
97
|
+
try {
|
|
98
|
+
logger(`Oracle callback ${name}`);
|
|
99
|
+
const oracleFunction = callback[name as ORACLE_NAMES];
|
|
100
|
+
if (!oracleFunction) {
|
|
101
|
+
throw new Error(`Oracle callback ${name} not found`);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const result = await oracleFunction.call(callback, ...args);
|
|
105
|
+
return [result];
|
|
106
|
+
} catch (err) {
|
|
107
|
+
let typedError: Error;
|
|
108
|
+
if (err instanceof Error) {
|
|
109
|
+
typedError = err;
|
|
110
|
+
} else {
|
|
111
|
+
typedError = new Error(`Error in oracle callback ${err}`);
|
|
112
|
+
}
|
|
113
|
+
logger.error(`Error in oracle callback ${name}`);
|
|
114
|
+
throw typedError;
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
).catch((err: Error) => {
|
|
118
|
+
// Wasm callbacks act as a boundary for stack traces, so we capture it here and complete the error if it happens.
|
|
119
|
+
const stack = new Error().stack;
|
|
120
|
+
|
|
121
|
+
traverseCauseChain(err, cause => {
|
|
122
|
+
if (cause.stack) {
|
|
123
|
+
cause.stack += stack;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
throw err;
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
return { partialWitness };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Extracts the call stack from an thrown by the acvm.
|
|
135
|
+
* @param error - The error to extract from.
|
|
136
|
+
* @param debug - The debug metadata of the function called.
|
|
137
|
+
* @returns The call stack, if available.
|
|
138
|
+
*/
|
|
139
|
+
export function extractCallStack(
|
|
140
|
+
error: Error | ExecutionError,
|
|
141
|
+
debug?: FunctionDebugMetadata,
|
|
142
|
+
): NoirCallStack | undefined {
|
|
143
|
+
if (!('callStack' in error) || !error.callStack) {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
const { callStack } = error;
|
|
147
|
+
if (!debug) {
|
|
148
|
+
return callStack;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
try {
|
|
152
|
+
return resolveOpcodeLocations(callStack, debug);
|
|
153
|
+
} catch (err) {
|
|
154
|
+
return callStack;
|
|
155
|
+
}
|
|
156
|
+
}
|