@aztec/simulator 0.41.0 → 0.42.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.d.ts +2 -2
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/acvm.js +3 -3
- package/dest/acvm/oracle/oracle.d.ts +6 -4
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +20 -11
- package/dest/acvm/oracle/typed_oracle.d.ts +5 -3
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +10 -4
- package/dest/acvm/serialize.js +2 -2
- package/dest/avm/avm_gas.d.ts +1 -5
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +67 -73
- package/dest/avm/avm_simulator.d.ts +5 -0
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +8 -1
- package/dest/avm/fixtures/index.d.ts +3 -0
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +13 -1
- package/dest/avm/index.d.ts +2 -0
- package/dest/avm/index.d.ts.map +1 -0
- package/dest/avm/index.js +2 -0
- 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/journal.d.ts +2 -0
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +6 -2
- package/dest/avm/journal/trace.d.ts +2 -0
- package/dest/avm/journal/trace.d.ts.map +1 -1
- package/dest/avm/journal/trace.js +7 -1
- package/dest/avm/journal/trace_types.d.ts +1 -0
- package/dest/avm/journal/trace_types.d.ts.map +1 -1
- package/dest/avm/journal/trace_types.js +1 -1
- package/dest/avm/opcodes/arithmetic.d.ts +1 -7
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +1 -12
- package/dest/avm/opcodes/conversion.js +2 -2
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +4 -3
- package/dest/avm/opcodes/instruction.d.ts +1 -1
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +6 -4
- package/dest/avm/opcodes/memory.d.ts +0 -4
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +1 -7
- package/dest/avm/opcodes/storage.d.ts +0 -5
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +1 -7
- package/dest/avm/serialization/bytecode_serialization.js +2 -2
- package/dest/client/client_execution_context.d.ts +11 -19
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +26 -43
- package/dest/client/db_oracle.d.ts +7 -1
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/execution_note_cache.d.ts +0 -17
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +1 -24
- package/dest/client/execution_result.d.ts +8 -4
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +16 -6
- package/dest/client/private_execution.d.ts +2 -3
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +20 -9
- package/dest/client/simulator.d.ts +0 -16
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +8 -25
- package/dest/client/unconstrained_execution.d.ts +2 -3
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +5 -7
- package/dest/client/view_data_oracle.d.ts +2 -0
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +7 -1
- package/dest/index.d.ts +3 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +4 -2
- package/dest/mocks/fixtures.d.ts +14 -10
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +22 -16
- package/dest/{simulator → providers}/acvm_native.d.ts.map +1 -1
- package/dest/{simulator → providers}/acvm_native.js +13 -14
- package/dest/providers/acvm_wasm.d.ts.map +1 -0
- package/dest/providers/acvm_wasm.js +15 -0
- package/dest/providers/index.d.ts.map +1 -0
- package/dest/{simulator → providers}/index.js +1 -1
- package/dest/{simulator → providers}/simulation_provider.d.ts.map +1 -1
- package/dest/{simulator → providers}/simulation_provider.js +1 -1
- package/dest/public/abstract_phase_manager.d.ts +43 -42
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +77 -106
- package/dest/public/app_logic_phase_manager.d.ts +6 -7
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/public/app_logic_phase_manager.js +14 -14
- package/dest/public/{db.d.ts → db_interfaces.d.ts} +3 -3
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +2 -0
- package/dest/public/execution.d.ts +16 -9
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -1
- package/dest/public/executor.d.ts +3 -30
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +32 -282
- package/dest/public/fee_payment.d.ts +11 -0
- package/dest/public/fee_payment.d.ts.map +1 -0
- package/dest/public/fee_payment.js +24 -0
- package/dest/public/hints_builder.d.ts +1 -0
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +6 -2
- package/dest/public/index.d.ts +4 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +5 -3
- package/dest/public/phase_manager_factory.d.ts +1 -1
- package/dest/public/phase_manager_factory.d.ts.map +1 -1
- package/dest/public/{public_executor.d.ts → public_db_sources.d.ts} +3 -2
- package/dest/public/public_db_sources.d.ts.map +1 -0
- package/dest/public/public_db_sources.js +198 -0
- package/dest/public/public_kernel.js +14 -14
- package/dest/public/public_processor.d.ts +6 -4
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +46 -27
- package/dest/public/setup_phase_manager.d.ts +6 -8
- package/dest/public/setup_phase_manager.d.ts.map +1 -1
- package/dest/public/setup_phase_manager.js +11 -20
- package/dest/public/tail_phase_manager.d.ts +4 -10
- package/dest/public/tail_phase_manager.d.ts.map +1 -1
- package/dest/public/tail_phase_manager.js +15 -35
- package/dest/public/teardown_phase_manager.d.ts +6 -8
- package/dest/public/teardown_phase_manager.d.ts.map +1 -1
- package/dest/public/teardown_phase_manager.js +15 -21
- package/dest/public/transitional_adaptors.d.ts +1 -1
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +8 -6
- package/dest/public/utils.d.ts +2 -2
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +21 -14
- package/package.json +12 -9
- package/src/acvm/acvm.ts +0 -3
- package/src/acvm/oracle/oracle.ts +36 -13
- package/src/acvm/oracle/typed_oracle.ts +12 -3
- package/src/acvm/serialize.ts +1 -1
- package/src/avm/avm_gas.ts +66 -73
- package/src/avm/avm_simulator.ts +9 -0
- package/src/avm/fixtures/index.ts +20 -0
- package/src/avm/index.ts +1 -0
- package/src/avm/journal/host_storage.ts +1 -1
- package/src/avm/journal/journal.ts +6 -1
- package/src/avm/journal/trace.ts +12 -0
- package/src/avm/journal/trace_types.ts +1 -0
- package/src/avm/opcodes/arithmetic.ts +1 -14
- package/src/avm/opcodes/conversion.ts +1 -1
- package/src/avm/opcodes/external_calls.ts +3 -1
- package/src/avm/opcodes/instruction.ts +5 -3
- package/src/avm/opcodes/memory.ts +1 -8
- package/src/avm/opcodes/storage.ts +1 -8
- package/src/avm/serialization/bytecode_serialization.ts +1 -1
- package/src/client/client_execution_context.ts +33 -45
- package/src/client/db_oracle.ts +8 -1
- package/src/client/execution_note_cache.ts +0 -28
- package/src/client/execution_result.ts +21 -7
- package/src/client/private_execution.ts +36 -21
- package/src/client/simulator.ts +7 -27
- package/src/client/unconstrained_execution.ts +9 -12
- package/src/client/view_data_oracle.ts +8 -0
- package/src/index.ts +3 -1
- package/src/mocks/fixtures.ts +30 -32
- package/src/{simulator → providers}/acvm_native.ts +21 -19
- package/src/{simulator → providers}/acvm_wasm.ts +2 -16
- package/src/public/abstract_phase_manager.ts +138 -205
- package/src/public/app_logic_phase_manager.ts +23 -39
- package/src/public/{db.ts → db_interfaces.ts} +2 -2
- package/src/public/execution.ts +15 -8
- package/src/public/executor.ts +51 -398
- package/src/public/fee_payment.ts +26 -0
- package/src/public/hints_builder.ts +6 -0
- package/src/public/index.ts +4 -2
- package/src/public/phase_manager_factory.ts +1 -1
- package/src/public/{public_executor.ts → public_db_sources.ts} +3 -2
- package/src/public/public_kernel.ts +24 -24
- package/src/public/public_processor.ts +77 -33
- package/src/public/setup_phase_manager.ts +20 -45
- package/src/public/tail_phase_manager.ts +17 -65
- package/src/public/teardown_phase_manager.ts +22 -41
- package/src/public/transitional_adaptors.ts +7 -11
- package/src/public/utils.ts +20 -14
- package/dest/public/db.d.ts.map +0 -1
- package/dest/public/db.js +0 -2
- package/dest/public/public_execution_context.d.ts +0 -121
- package/dest/public/public_execution_context.d.ts.map +0 -1
- package/dest/public/public_execution_context.js +0 -214
- package/dest/public/public_executor.d.ts.map +0 -1
- package/dest/public/public_executor.js +0 -197
- package/dest/public/state_actions.d.ts +0 -39
- package/dest/public/state_actions.d.ts.map +0 -1
- package/dest/public/state_actions.js +0 -80
- package/dest/simulator/acvm_wasm.d.ts.map +0 -1
- package/dest/simulator/acvm_wasm.js +0 -22
- package/dest/simulator/index.d.ts.map +0 -1
- package/src/public/public_execution_context.ts +0 -289
- package/src/public/state_actions.ts +0 -102
- /package/dest/{simulator → providers}/acvm_native.d.ts +0 -0
- /package/dest/{simulator → providers}/acvm_wasm.d.ts +0 -0
- /package/dest/{simulator → providers}/index.d.ts +0 -0
- /package/dest/{simulator → providers}/simulation_provider.d.ts +0 -0
- /package/src/{simulator → providers}/index.ts +0 -0
- /package/src/{simulator → providers}/simulation_provider.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// All code in this file needs to die once the public executor is phased out in favor of the AVM.
|
|
2
2
|
import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
|
|
3
|
-
import { CallContext
|
|
3
|
+
import { CallContext } from '@aztec/circuits.js';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { promisify } from 'util';
|
|
6
6
|
import { gunzip } from 'zlib';
|
|
@@ -16,7 +16,7 @@ import { createSimulationError } from '../common/errors.js';
|
|
|
16
16
|
*/
|
|
17
17
|
export function createAvmExecutionEnvironment(current, header, globalVariables, gasSettings, transactionFee) {
|
|
18
18
|
return new AvmExecutionEnvironment(current.contractAddress, current.callContext.storageContractAddress, current.callContext.msgSender, globalVariables.gasFees.feePerL2Gas, globalVariables.gasFees.feePerDaGas,
|
|
19
|
-
/*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, gasSettings, transactionFee, current.
|
|
19
|
+
/*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, gasSettings, transactionFee, current.functionSelector);
|
|
20
20
|
}
|
|
21
21
|
export function createPublicExecution(startSideEffectCounter, avmEnvironment, calldata) {
|
|
22
22
|
const callContext = CallContext.from({
|
|
@@ -27,16 +27,15 @@ export function createPublicExecution(startSideEffectCounter, avmEnvironment, ca
|
|
|
27
27
|
isStaticCall: avmEnvironment.isStaticCall,
|
|
28
28
|
sideEffectCounter: startSideEffectCounter,
|
|
29
29
|
});
|
|
30
|
-
const functionData = new FunctionData(avmEnvironment.temporaryFunctionSelector, /*isPrivate=*/ false);
|
|
31
30
|
const execution = {
|
|
32
31
|
contractAddress: avmEnvironment.address,
|
|
33
32
|
callContext,
|
|
34
33
|
args: calldata,
|
|
35
|
-
|
|
34
|
+
functionSelector: avmEnvironment.temporaryFunctionSelector,
|
|
36
35
|
};
|
|
37
36
|
return execution;
|
|
38
37
|
}
|
|
39
|
-
export function convertAvmResultsToPxResult(avmResult, startSideEffectCounter, fromPx, startGas, endAvmContext) {
|
|
38
|
+
export function convertAvmResultsToPxResult(avmResult, startSideEffectCounter, fromPx, startGas, endAvmContext, bytecode) {
|
|
40
39
|
const endPersistableState = endAvmContext.persistableState;
|
|
41
40
|
const endMachineState = endAvmContext.machineState;
|
|
42
41
|
return {
|
|
@@ -52,6 +51,9 @@ export function convertAvmResultsToPxResult(avmResult, startSideEffectCounter, f
|
|
|
52
51
|
startGasLeft: startGas,
|
|
53
52
|
endGasLeft: endMachineState.gasLeft,
|
|
54
53
|
transactionFee: endAvmContext.environment.transactionFee,
|
|
54
|
+
bytecode: bytecode,
|
|
55
|
+
calldata: endAvmContext.environment.calldata,
|
|
56
|
+
avmHints: endPersistableState.trace.toHints(),
|
|
55
57
|
};
|
|
56
58
|
}
|
|
57
59
|
const AVM_MAGIC_SUFFIX = Buffer.from([
|
|
@@ -79,4 +81,4 @@ export async function isAvmBytecode(bytecode) {
|
|
|
79
81
|
const magicSize = AVM_MAGIC_SUFFIX.length;
|
|
80
82
|
return decompressedBytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
|
|
81
83
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUdBQWlHO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQWlFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEgsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHNUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxPQUF3QixFQUN4QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsV0FBd0IsRUFDeEIsY0FBa0I7SUFFbEIsT0FBTyxJQUFJLHVCQUF1QixDQUNoQyxPQUFPLENBQUMsZUFBZSxFQUN2QixPQUFPLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUMxQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFDN0IsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVztJQUNuQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQ2hDLE1BQU0sRUFDTixlQUFlLEVBQ2YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQ2hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUNsQyxPQUFPLENB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
|
package/dest/public/utils.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
|
|
2
2
|
/**
|
|
3
3
|
* Looks at the side effects of a transaction and returns the highest counter
|
|
4
4
|
* @param tx - A transaction
|
|
5
5
|
* @returns The highest side effect counter in the transaction so far
|
|
6
6
|
*/
|
|
7
|
-
export declare function lastSideEffectCounter(
|
|
7
|
+
export declare function lastSideEffectCounter(inputs: PublicKernelCircuitPublicInputs): number;
|
|
8
8
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/public/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/public/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,+BAA+B,GAAG,MAAM,CA+BrF"}
|
package/dest/public/utils.js
CHANGED
|
@@ -1,31 +1,38 @@
|
|
|
1
|
-
import { CallRequest } from '@aztec/circuits.js';
|
|
2
1
|
/**
|
|
3
2
|
* Looks at the side effects of a transaction and returns the highest counter
|
|
4
3
|
* @param tx - A transaction
|
|
5
4
|
* @returns The highest side effect counter in the transaction so far
|
|
6
5
|
*/
|
|
7
|
-
export function lastSideEffectCounter(
|
|
8
|
-
const data = tx.data.forPublic;
|
|
6
|
+
export function lastSideEffectCounter(inputs) {
|
|
9
7
|
const sideEffectCounters = [
|
|
10
|
-
...
|
|
11
|
-
...
|
|
12
|
-
...
|
|
13
|
-
...
|
|
14
|
-
...
|
|
15
|
-
...
|
|
16
|
-
...
|
|
17
|
-
...
|
|
8
|
+
...inputs.endNonRevertibleData.newNoteHashes,
|
|
9
|
+
...inputs.endNonRevertibleData.newNullifiers,
|
|
10
|
+
...inputs.endNonRevertibleData.noteEncryptedLogsHashes,
|
|
11
|
+
...inputs.endNonRevertibleData.encryptedLogsHashes,
|
|
12
|
+
...inputs.endNonRevertibleData.unencryptedLogsHashes,
|
|
13
|
+
...inputs.endNonRevertibleData.publicCallStack,
|
|
14
|
+
...inputs.endNonRevertibleData.publicDataUpdateRequests,
|
|
15
|
+
...inputs.end.newNoteHashes,
|
|
16
|
+
...inputs.end.newNullifiers,
|
|
17
|
+
...inputs.end.noteEncryptedLogsHashes,
|
|
18
|
+
...inputs.end.encryptedLogsHashes,
|
|
19
|
+
...inputs.end.unencryptedLogsHashes,
|
|
20
|
+
...inputs.end.publicCallStack,
|
|
21
|
+
...inputs.end.publicDataUpdateRequests,
|
|
18
22
|
];
|
|
19
23
|
let max = 0;
|
|
20
24
|
for (const sideEffect of sideEffectCounters) {
|
|
21
|
-
if (
|
|
25
|
+
if ('startSideEffectCounter' in sideEffect) {
|
|
22
26
|
// look at both start and end counters because for enqueued public calls start > 0 while end === 0
|
|
23
27
|
max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber());
|
|
24
28
|
}
|
|
25
|
-
else {
|
|
29
|
+
else if ('counter' in sideEffect) {
|
|
26
30
|
max = Math.max(max, sideEffect.counter);
|
|
27
31
|
}
|
|
32
|
+
else {
|
|
33
|
+
throw new Error('Unknown side effect type');
|
|
34
|
+
}
|
|
28
35
|
}
|
|
29
36
|
return max;
|
|
30
37
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBdUM7SUFDM0UsTUFBTSxrQkFBa0IsR0FBRztRQUN6QixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhO1FBQzVDLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7UUFDNUMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCO1FBQ3RELEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQjtRQUNsRCxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUI7UUFDcEQsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZUFBZTtRQUM5QyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0I7UUFDdkQsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWE7UUFDM0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWE7UUFDM0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QjtRQUNyQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1FBQ2pDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUI7UUFDbkMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWU7UUFDN0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QjtLQUN2QyxDQUFDO0lBRUYsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLElBQUksd0JBQXdCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDM0Msa0dBQWtHO1lBQ2xHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEgsQ0FBQzthQUFNLElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"exports":
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./dest/index.js",
|
|
7
|
+
"./avm/fixtures": "./dest/avm/fixtures/index.js"
|
|
8
|
+
},
|
|
6
9
|
"typedocOptions": {
|
|
7
10
|
"entryPoints": [
|
|
8
11
|
"./src/index.ts"
|
|
@@ -45,13 +48,13 @@
|
|
|
45
48
|
]
|
|
46
49
|
},
|
|
47
50
|
"dependencies": {
|
|
48
|
-
"@aztec/circuit-types": "0.
|
|
49
|
-
"@aztec/circuits.js": "0.
|
|
50
|
-
"@aztec/foundation": "0.
|
|
51
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
52
|
-
"@aztec/protocol-contracts": "0.
|
|
53
|
-
"@aztec/types": "0.
|
|
54
|
-
"@aztec/world-state": "0.
|
|
51
|
+
"@aztec/circuit-types": "0.42.0",
|
|
52
|
+
"@aztec/circuits.js": "0.42.0",
|
|
53
|
+
"@aztec/foundation": "0.42.0",
|
|
54
|
+
"@aztec/noir-protocol-circuits-types": "0.42.0",
|
|
55
|
+
"@aztec/protocol-contracts": "0.42.0",
|
|
56
|
+
"@aztec/types": "0.42.0",
|
|
57
|
+
"@aztec/world-state": "0.42.0",
|
|
55
58
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
56
59
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
57
60
|
"levelup": "^5.1.1",
|
package/src/acvm/acvm.ts
CHANGED
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
type ExecutionError,
|
|
7
7
|
type ForeignCallInput,
|
|
8
8
|
type ForeignCallOutput,
|
|
9
|
-
type WasmBlackBoxFunctionSolver,
|
|
10
9
|
executeCircuitWithReturnWitness,
|
|
11
10
|
} from '@noir-lang/acvm_js';
|
|
12
11
|
|
|
@@ -85,7 +84,6 @@ export function resolveOpcodeLocations(
|
|
|
85
84
|
* The function call that executes an ACIR.
|
|
86
85
|
*/
|
|
87
86
|
export async function acvm(
|
|
88
|
-
solver: WasmBlackBoxFunctionSolver,
|
|
89
87
|
acir: Buffer,
|
|
90
88
|
initialWitness: ACVMWitness,
|
|
91
89
|
callback: ACIRCallback,
|
|
@@ -93,7 +91,6 @@ export async function acvm(
|
|
|
93
91
|
const logger = createDebugLogger('aztec:simulator:acvm');
|
|
94
92
|
|
|
95
93
|
const solvedAndReturnWitness = await executeCircuitWithReturnWitness(
|
|
96
|
-
solver,
|
|
97
94
|
acir,
|
|
98
95
|
initialWitness,
|
|
99
96
|
async (name: string, args: ForeignCallInput[]) => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
+
import { KeyValidationRequest } from '@aztec/circuits.js';
|
|
2
3
|
import { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
|
|
3
4
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
5
|
import { Fr, Point } from '@aztec/foundation/fields';
|
|
@@ -40,12 +41,18 @@ export class Oracle {
|
|
|
40
41
|
return unpacked.map(toACVMField);
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
async
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
async getBlockNumber(): Promise<ACVMField> {
|
|
45
|
+
return toACVMField(await this.typedOracle.getBlockNumber());
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async getContractAddress(): Promise<ACVMField> {
|
|
49
|
+
return toACVMField(await this.typedOracle.getContractAddress());
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
|
|
53
|
+
const { pkM, skApp } = await this.typedOracle.getKeyValidationRequest(fromACVMField(pkMHash));
|
|
47
54
|
|
|
48
|
-
return [toACVMField(
|
|
55
|
+
return [toACVMField(pkM.x), toACVMField(pkM.y), toACVMField(skApp)];
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
async getContractInstance([address]: ACVMField[]) {
|
|
@@ -282,32 +289,48 @@ export class Oracle {
|
|
|
282
289
|
return newValues.map(toACVMField);
|
|
283
290
|
}
|
|
284
291
|
|
|
285
|
-
emitEncryptedLog(
|
|
292
|
+
emitEncryptedLog(
|
|
293
|
+
[contractAddress]: ACVMField[],
|
|
294
|
+
[randomness]: ACVMField[],
|
|
295
|
+
encryptedLog: ACVMField[],
|
|
296
|
+
[counter]: ACVMField[],
|
|
297
|
+
): void {
|
|
286
298
|
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
287
299
|
const processedInput = Buffer.from(encryptedLog.map(fromACVMField).map(f => f.toNumber()));
|
|
288
|
-
this.typedOracle.emitEncryptedLog(
|
|
300
|
+
this.typedOracle.emitEncryptedLog(
|
|
301
|
+
AztecAddress.fromString(contractAddress),
|
|
302
|
+
Fr.fromString(randomness),
|
|
303
|
+
processedInput,
|
|
304
|
+
+counter,
|
|
305
|
+
);
|
|
289
306
|
}
|
|
290
307
|
|
|
291
|
-
emitEncryptedNoteLog([
|
|
308
|
+
emitEncryptedNoteLog([noteHashCounter]: ACVMField[], encryptedNote: ACVMField[], [counter]: ACVMField[]): void {
|
|
292
309
|
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
293
310
|
const processedInput = Buffer.from(encryptedNote.map(fromACVMField).map(f => f.toNumber()));
|
|
294
|
-
this.typedOracle.emitEncryptedNoteLog(
|
|
311
|
+
this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
|
|
295
312
|
}
|
|
296
313
|
|
|
297
314
|
computeEncryptedLog(
|
|
298
315
|
[contractAddress]: ACVMField[],
|
|
299
316
|
[storageSlot]: ACVMField[],
|
|
300
317
|
[noteTypeId]: ACVMField[],
|
|
301
|
-
[
|
|
302
|
-
[
|
|
318
|
+
[ovskApp]: ACVMField[],
|
|
319
|
+
[ovpkMX]: ACVMField[],
|
|
320
|
+
[ovpkMY]: ACVMField[],
|
|
321
|
+
[ivpkMX]: ACVMField[],
|
|
322
|
+
[ivpkMY]: ACVMField[],
|
|
303
323
|
preimage: ACVMField[],
|
|
304
324
|
): ACVMField[] {
|
|
305
|
-
const
|
|
325
|
+
const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY));
|
|
326
|
+
const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
|
|
327
|
+
const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY));
|
|
306
328
|
const encLog = this.typedOracle.computeEncryptedLog(
|
|
307
329
|
AztecAddress.fromString(contractAddress),
|
|
308
330
|
Fr.fromString(storageSlot),
|
|
309
331
|
Fr.fromString(noteTypeId),
|
|
310
|
-
|
|
332
|
+
ovKeys,
|
|
333
|
+
ivpkM,
|
|
311
334
|
preimage.map(fromACVMField),
|
|
312
335
|
);
|
|
313
336
|
const bytes: ACVMField[] = [];
|
|
@@ -82,6 +82,14 @@ export abstract class TypedOracle {
|
|
|
82
82
|
throw new OracleMethodNotAvailableError('unpackReturns');
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
getBlockNumber(): Promise<number> {
|
|
86
|
+
throw new OracleMethodNotAvailableError('getBlockNumber');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
getContractAddress(): Promise<AztecAddress> {
|
|
90
|
+
throw new OracleMethodNotAvailableError('getContractAddress');
|
|
91
|
+
}
|
|
92
|
+
|
|
85
93
|
getKeyValidationRequest(_pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
86
94
|
throw new OracleMethodNotAvailableError('getKeyValidationRequest');
|
|
87
95
|
}
|
|
@@ -176,11 +184,11 @@ export abstract class TypedOracle {
|
|
|
176
184
|
throw new OracleMethodNotAvailableError('storageWrite');
|
|
177
185
|
}
|
|
178
186
|
|
|
179
|
-
emitEncryptedLog(_encryptedNote: Buffer, _counter: number): void {
|
|
187
|
+
emitEncryptedLog(_contractAddress: AztecAddress, _randomness: Fr, _encryptedNote: Buffer, _counter: number): void {
|
|
180
188
|
throw new OracleMethodNotAvailableError('emitEncryptedLog');
|
|
181
189
|
}
|
|
182
190
|
|
|
183
|
-
emitEncryptedNoteLog(
|
|
191
|
+
emitEncryptedNoteLog(_noteHashCounter: number, _encryptedNote: Buffer, _counter: number): void {
|
|
184
192
|
throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
|
|
185
193
|
}
|
|
186
194
|
|
|
@@ -188,7 +196,8 @@ export abstract class TypedOracle {
|
|
|
188
196
|
_contractAddress: AztecAddress,
|
|
189
197
|
_storageSlot: Fr,
|
|
190
198
|
_noteTypeId: Fr,
|
|
191
|
-
|
|
199
|
+
_ovKeys: KeyValidationRequest,
|
|
200
|
+
_ivpkM: PublicKey,
|
|
192
201
|
_preimage: Fr[],
|
|
193
202
|
): Buffer {
|
|
194
203
|
throw new OracleMethodNotAvailableError('computeEncryptedLog');
|
package/src/acvm/serialize.ts
CHANGED
|
@@ -55,7 +55,7 @@ export function toACVMField(
|
|
|
55
55
|
export function toAcvmEnqueuePublicFunctionResult(item: PublicCallRequest): ACVMField[] {
|
|
56
56
|
const fields = [
|
|
57
57
|
item.contractAddress.toField(),
|
|
58
|
-
|
|
58
|
+
item.functionSelector.toField(),
|
|
59
59
|
...item.callContext.toFields(),
|
|
60
60
|
item.getArgsHash(),
|
|
61
61
|
];
|
package/src/avm/avm_gas.ts
CHANGED
|
@@ -49,93 +49,86 @@ export const EmptyGas: Gas = {
|
|
|
49
49
|
/** Dimensions of gas usage: L1, L2, and DA. */
|
|
50
50
|
export const GasDimensions = ['l2Gas', 'daGas'] as const;
|
|
51
51
|
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
/** Temporary default gas cost. We should eventually remove all usage of this variable in favor of actual gas for each opcode. */
|
|
56
|
-
const TemporaryDefaultGasCost = { l2Gas: 10, daGas: 0 };
|
|
52
|
+
/** Default gas cost for an opcode. */
|
|
53
|
+
const DefaultBaseGasCost: Gas = { l2Gas: 10, daGas: 0 };
|
|
57
54
|
|
|
58
55
|
/** Base gas costs for each instruction. Additional gas cost may be added on top due to memory or storage accesses, etc. */
|
|
59
|
-
|
|
60
|
-
[Opcode.ADD]:
|
|
61
|
-
[Opcode.SUB]:
|
|
62
|
-
[Opcode.MUL]:
|
|
63
|
-
[Opcode.DIV]:
|
|
64
|
-
[Opcode.FDIV]:
|
|
65
|
-
[Opcode.EQ]:
|
|
66
|
-
[Opcode.LT]:
|
|
67
|
-
[Opcode.LTE]:
|
|
68
|
-
[Opcode.AND]:
|
|
69
|
-
[Opcode.OR]:
|
|
70
|
-
[Opcode.XOR]:
|
|
71
|
-
[Opcode.NOT]:
|
|
72
|
-
[Opcode.SHL]:
|
|
73
|
-
[Opcode.SHR]:
|
|
74
|
-
[Opcode.CAST]:
|
|
56
|
+
const BaseGasCosts: Record<Opcode, Gas> = {
|
|
57
|
+
[Opcode.ADD]: DefaultBaseGasCost,
|
|
58
|
+
[Opcode.SUB]: DefaultBaseGasCost,
|
|
59
|
+
[Opcode.MUL]: DefaultBaseGasCost,
|
|
60
|
+
[Opcode.DIV]: DefaultBaseGasCost,
|
|
61
|
+
[Opcode.FDIV]: DefaultBaseGasCost,
|
|
62
|
+
[Opcode.EQ]: DefaultBaseGasCost,
|
|
63
|
+
[Opcode.LT]: DefaultBaseGasCost,
|
|
64
|
+
[Opcode.LTE]: DefaultBaseGasCost,
|
|
65
|
+
[Opcode.AND]: DefaultBaseGasCost,
|
|
66
|
+
[Opcode.OR]: DefaultBaseGasCost,
|
|
67
|
+
[Opcode.XOR]: DefaultBaseGasCost,
|
|
68
|
+
[Opcode.NOT]: DefaultBaseGasCost,
|
|
69
|
+
[Opcode.SHL]: DefaultBaseGasCost,
|
|
70
|
+
[Opcode.SHR]: DefaultBaseGasCost,
|
|
71
|
+
[Opcode.CAST]: DefaultBaseGasCost,
|
|
75
72
|
// Execution environment
|
|
76
|
-
[Opcode.ADDRESS]:
|
|
77
|
-
[Opcode.STORAGEADDRESS]:
|
|
78
|
-
[Opcode.SENDER]:
|
|
79
|
-
[Opcode.FEEPERL2GAS]:
|
|
80
|
-
[Opcode.FEEPERDAGAS]:
|
|
81
|
-
[Opcode.TRANSACTIONFEE]:
|
|
82
|
-
[Opcode.CONTRACTCALLDEPTH]:
|
|
83
|
-
[Opcode.CHAINID]:
|
|
84
|
-
[Opcode.VERSION]:
|
|
85
|
-
[Opcode.BLOCKNUMBER]:
|
|
86
|
-
[Opcode.TIMESTAMP]:
|
|
87
|
-
[Opcode.COINBASE]:
|
|
88
|
-
[Opcode.BLOCKL2GASLIMIT]:
|
|
89
|
-
[Opcode.BLOCKDAGASLIMIT]:
|
|
90
|
-
[Opcode.CALLDATACOPY]:
|
|
73
|
+
[Opcode.ADDRESS]: DefaultBaseGasCost,
|
|
74
|
+
[Opcode.STORAGEADDRESS]: DefaultBaseGasCost,
|
|
75
|
+
[Opcode.SENDER]: DefaultBaseGasCost,
|
|
76
|
+
[Opcode.FEEPERL2GAS]: DefaultBaseGasCost,
|
|
77
|
+
[Opcode.FEEPERDAGAS]: DefaultBaseGasCost,
|
|
78
|
+
[Opcode.TRANSACTIONFEE]: DefaultBaseGasCost,
|
|
79
|
+
[Opcode.CONTRACTCALLDEPTH]: DefaultBaseGasCost,
|
|
80
|
+
[Opcode.CHAINID]: DefaultBaseGasCost,
|
|
81
|
+
[Opcode.VERSION]: DefaultBaseGasCost,
|
|
82
|
+
[Opcode.BLOCKNUMBER]: DefaultBaseGasCost,
|
|
83
|
+
[Opcode.TIMESTAMP]: DefaultBaseGasCost,
|
|
84
|
+
[Opcode.COINBASE]: DefaultBaseGasCost,
|
|
85
|
+
[Opcode.BLOCKL2GASLIMIT]: DefaultBaseGasCost,
|
|
86
|
+
[Opcode.BLOCKDAGASLIMIT]: DefaultBaseGasCost,
|
|
87
|
+
[Opcode.CALLDATACOPY]: DefaultBaseGasCost,
|
|
91
88
|
// Gas
|
|
92
|
-
[Opcode.L2GASLEFT]:
|
|
93
|
-
[Opcode.DAGASLEFT]:
|
|
89
|
+
[Opcode.L2GASLEFT]: DefaultBaseGasCost,
|
|
90
|
+
[Opcode.DAGASLEFT]: DefaultBaseGasCost,
|
|
94
91
|
// Control flow
|
|
95
|
-
[Opcode.JUMP]:
|
|
96
|
-
[Opcode.JUMPI]:
|
|
97
|
-
[Opcode.INTERNALCALL]:
|
|
98
|
-
[Opcode.INTERNALRETURN]:
|
|
92
|
+
[Opcode.JUMP]: DefaultBaseGasCost,
|
|
93
|
+
[Opcode.JUMPI]: DefaultBaseGasCost,
|
|
94
|
+
[Opcode.INTERNALCALL]: DefaultBaseGasCost,
|
|
95
|
+
[Opcode.INTERNALRETURN]: DefaultBaseGasCost,
|
|
99
96
|
// Memory
|
|
100
|
-
[Opcode.SET]:
|
|
101
|
-
[Opcode.MOV]:
|
|
102
|
-
[Opcode.CMOV]:
|
|
97
|
+
[Opcode.SET]: DefaultBaseGasCost,
|
|
98
|
+
[Opcode.MOV]: DefaultBaseGasCost,
|
|
99
|
+
[Opcode.CMOV]: DefaultBaseGasCost,
|
|
103
100
|
// World state
|
|
104
|
-
[Opcode.SLOAD]:
|
|
105
|
-
[Opcode.SSTORE]:
|
|
106
|
-
[Opcode.NOTEHASHEXISTS]:
|
|
107
|
-
[Opcode.EMITNOTEHASH]:
|
|
108
|
-
[Opcode.NULLIFIEREXISTS]:
|
|
109
|
-
[Opcode.EMITNULLIFIER]:
|
|
110
|
-
[Opcode.L1TOL2MSGEXISTS]:
|
|
111
|
-
[Opcode.HEADERMEMBER]:
|
|
112
|
-
[Opcode.EMITUNENCRYPTEDLOG]:
|
|
113
|
-
[Opcode.SENDL2TOL1MSG]:
|
|
114
|
-
[Opcode.GETCONTRACTINSTANCE]:
|
|
101
|
+
[Opcode.SLOAD]: DefaultBaseGasCost,
|
|
102
|
+
[Opcode.SSTORE]: DefaultBaseGasCost,
|
|
103
|
+
[Opcode.NOTEHASHEXISTS]: DefaultBaseGasCost,
|
|
104
|
+
[Opcode.EMITNOTEHASH]: DefaultBaseGasCost,
|
|
105
|
+
[Opcode.NULLIFIEREXISTS]: DefaultBaseGasCost,
|
|
106
|
+
[Opcode.EMITNULLIFIER]: DefaultBaseGasCost,
|
|
107
|
+
[Opcode.L1TOL2MSGEXISTS]: DefaultBaseGasCost,
|
|
108
|
+
[Opcode.HEADERMEMBER]: DefaultBaseGasCost,
|
|
109
|
+
[Opcode.EMITUNENCRYPTEDLOG]: DefaultBaseGasCost,
|
|
110
|
+
[Opcode.SENDL2TOL1MSG]: DefaultBaseGasCost,
|
|
111
|
+
[Opcode.GETCONTRACTINSTANCE]: DefaultBaseGasCost,
|
|
115
112
|
// External calls
|
|
116
|
-
[Opcode.CALL]:
|
|
117
|
-
[Opcode.STATICCALL]:
|
|
118
|
-
[Opcode.DELEGATECALL]:
|
|
119
|
-
[Opcode.RETURN]:
|
|
120
|
-
[Opcode.REVERT]:
|
|
113
|
+
[Opcode.CALL]: DefaultBaseGasCost,
|
|
114
|
+
[Opcode.STATICCALL]: DefaultBaseGasCost,
|
|
115
|
+
[Opcode.DELEGATECALL]: DefaultBaseGasCost,
|
|
116
|
+
[Opcode.RETURN]: DefaultBaseGasCost,
|
|
117
|
+
[Opcode.REVERT]: DefaultBaseGasCost,
|
|
121
118
|
// Misc
|
|
122
|
-
[Opcode.DEBUGLOG]:
|
|
119
|
+
[Opcode.DEBUGLOG]: DefaultBaseGasCost,
|
|
123
120
|
// Gadgets
|
|
124
|
-
[Opcode.KECCAK]:
|
|
125
|
-
[Opcode.POSEIDON2]:
|
|
126
|
-
[Opcode.SHA256]:
|
|
127
|
-
[Opcode.PEDERSEN]:
|
|
121
|
+
[Opcode.KECCAK]: DefaultBaseGasCost,
|
|
122
|
+
[Opcode.POSEIDON2]: DefaultBaseGasCost,
|
|
123
|
+
[Opcode.SHA256]: DefaultBaseGasCost,
|
|
124
|
+
[Opcode.PEDERSEN]: DefaultBaseGasCost,
|
|
128
125
|
// Conversions
|
|
129
|
-
[Opcode.TORADIXLE]:
|
|
126
|
+
[Opcode.TORADIXLE]: DefaultBaseGasCost,
|
|
130
127
|
};
|
|
131
128
|
|
|
132
|
-
/** Returns the fixed base gas cost for a given opcode
|
|
129
|
+
/** Returns the fixed base gas cost for a given opcode. */
|
|
133
130
|
export function getBaseGasCost(opcode: Opcode): Gas {
|
|
134
|
-
|
|
135
|
-
if (cost === DynamicGasCost) {
|
|
136
|
-
throw new Error(`Opcode ${Opcode[opcode]} has dynamic gas cost`);
|
|
137
|
-
}
|
|
138
|
-
return cost;
|
|
131
|
+
return BaseGasCosts[opcode];
|
|
139
132
|
}
|
|
140
133
|
|
|
141
134
|
/** Returns the gas cost associated with the memory operations performed. */
|
package/src/avm/avm_simulator.ts
CHANGED
|
@@ -17,6 +17,7 @@ import { decodeFromBytecode } from './serialization/bytecode_serialization.js';
|
|
|
17
17
|
|
|
18
18
|
export class AvmSimulator {
|
|
19
19
|
private log: DebugLogger;
|
|
20
|
+
private bytecode: Buffer | undefined;
|
|
20
21
|
|
|
21
22
|
constructor(private context: AvmContext) {
|
|
22
23
|
this.log = createDebugLogger(
|
|
@@ -43,6 +44,13 @@ export class AvmSimulator {
|
|
|
43
44
|
return await this.executeBytecode(bytecode);
|
|
44
45
|
}
|
|
45
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Return the bytecode used for execution, if any.
|
|
49
|
+
*/
|
|
50
|
+
public getBytecode(): Buffer | undefined {
|
|
51
|
+
return this.bytecode;
|
|
52
|
+
}
|
|
53
|
+
|
|
46
54
|
/**
|
|
47
55
|
* Executes the provided bytecode in the current context.
|
|
48
56
|
* This method is useful for testing and debugging.
|
|
@@ -51,6 +59,7 @@ export class AvmSimulator {
|
|
|
51
59
|
const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode);
|
|
52
60
|
assert(isAvmBytecode(decompressedBytecode), "AVM simulator can't execute non-AVM bytecode");
|
|
53
61
|
|
|
62
|
+
this.bytecode = decompressedBytecode;
|
|
54
63
|
return await this.executeInstructions(decodeFromBytecode(decompressedBytecode));
|
|
55
64
|
}
|
|
56
65
|
|
|
@@ -3,7 +3,9 @@ import { FunctionSelector } from '@aztec/foundation/abi';
|
|
|
3
3
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
|
+
import { AvmNestedCallsTestContractArtifact, AvmTestContractArtifact } from '@aztec/noir-contracts.js';
|
|
6
7
|
|
|
8
|
+
import { strict as assert } from 'assert';
|
|
7
9
|
import { mock } from 'jest-mock-extended';
|
|
8
10
|
import merge from 'lodash.merge';
|
|
9
11
|
|
|
@@ -125,3 +127,21 @@ export function randomMemoryBytes(length: number): Uint8[] {
|
|
|
125
127
|
export function randomMemoryFields(length: number): Field[] {
|
|
126
128
|
return [...Array(length)].map(_ => new Field(Fr.random()));
|
|
127
129
|
}
|
|
130
|
+
|
|
131
|
+
export function getAvmTestContractBytecode(functionName: string): Buffer {
|
|
132
|
+
const artifact = AvmTestContractArtifact.functions.find(f => f.name === functionName)!;
|
|
133
|
+
assert(
|
|
134
|
+
!!artifact?.bytecode,
|
|
135
|
+
`No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`,
|
|
136
|
+
);
|
|
137
|
+
return artifact.bytecode;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export function getAvmNestedCallsTestContractBytecode(functionName: string): Buffer {
|
|
141
|
+
const artifact = AvmNestedCallsTestContractArtifact.functions.find(f => f.name === functionName)!;
|
|
142
|
+
assert(
|
|
143
|
+
!!artifact?.bytecode,
|
|
144
|
+
`No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`,
|
|
145
|
+
);
|
|
146
|
+
return artifact.bytecode;
|
|
147
|
+
}
|
package/src/avm/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './avm_simulator.js';
|
|
@@ -56,8 +56,10 @@ export type JournalData = {
|
|
|
56
56
|
|
|
57
57
|
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
58
58
|
type PartialPublicExecutionResult = {
|
|
59
|
+
noteHashReadRequests: ReadRequest[];
|
|
59
60
|
nullifierReadRequests: ReadRequest[];
|
|
60
61
|
nullifierNonExistentReadRequests: ReadRequest[];
|
|
62
|
+
l1ToL2MsgReadRequests: ReadRequest[];
|
|
61
63
|
newNoteHashes: NoteHash[];
|
|
62
64
|
newL2ToL1Messages: L2ToL1Message[];
|
|
63
65
|
startSideEffectCounter: number;
|
|
@@ -108,8 +110,10 @@ export class AvmPersistableStateManager {
|
|
|
108
110
|
this.trace = new WorldStateAccessTrace(parent?.trace);
|
|
109
111
|
|
|
110
112
|
this.transitionalExecutionResult = {
|
|
113
|
+
noteHashReadRequests: [],
|
|
111
114
|
nullifierReadRequests: [],
|
|
112
115
|
nullifierNonExistentReadRequests: [],
|
|
116
|
+
l1ToL2MsgReadRequests: [],
|
|
113
117
|
newNoteHashes: [],
|
|
114
118
|
newL2ToL1Messages: [],
|
|
115
119
|
startSideEffectCounter: this.trace.accessCounter,
|
|
@@ -308,7 +312,8 @@ export class AvmPersistableStateManager {
|
|
|
308
312
|
this.transitionalExecutionResult.allUnencryptedLogs.push(ulog);
|
|
309
313
|
// this duplicates exactly what happens in the trace just for the purpose of transitional integration with the kernel
|
|
310
314
|
this.transitionalExecutionResult.unencryptedLogsHashes.push(
|
|
311
|
-
|
|
315
|
+
// TODO(6578): explain magic number 4 here
|
|
316
|
+
new LogHash(logHash, this.trace.accessCounter, new Fr(ulog.length + 4)),
|
|
312
317
|
);
|
|
313
318
|
// TODO(6206): likely need to track this here and not just in the transitional logic.
|
|
314
319
|
|
package/src/avm/journal/trace.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AvmExecutionHints, AvmHint, Vector } from '@aztec/circuits.js';
|
|
1
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
3
|
|
|
3
4
|
import {
|
|
@@ -131,6 +132,7 @@ export class WorldStateAccessTrace {
|
|
|
131
132
|
leafIndex: msgLeafIndex,
|
|
132
133
|
msgHash: msgHash,
|
|
133
134
|
exists: exists,
|
|
135
|
+
counter: new Fr(this.accessCounter),
|
|
134
136
|
//endLifetime: Fr.ZERO, // FIXME
|
|
135
137
|
};
|
|
136
138
|
this.l1ToL2MessageChecks.push(traced);
|
|
@@ -169,4 +171,14 @@ export class WorldStateAccessTrace {
|
|
|
169
171
|
// it is assumed that the incoming trace was initialized with this as parent, so accept counter
|
|
170
172
|
this.accessCounter = incomingTrace.accessCounter;
|
|
171
173
|
}
|
|
174
|
+
|
|
175
|
+
// TODO(dbanks12): should only return hints for one call.... shouldn't include nested calls (merged in traces)
|
|
176
|
+
public toHints(): AvmExecutionHints {
|
|
177
|
+
return new AvmExecutionHints(
|
|
178
|
+
new Vector(this.publicStorageReads.map(read => new AvmHint(read.counter, read.value))),
|
|
179
|
+
new Vector(this.noteHashChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
|
|
180
|
+
new Vector(this.nullifierChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
|
|
181
|
+
new Vector(this.l1ToL2MessageChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
|
|
182
|
+
);
|
|
183
|
+
}
|
|
172
184
|
}
|