@aztec/simulator 0.35.0 → 0.36.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/oracle/oracle.d.ts +6 -5
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +30 -23
- package/dest/acvm/oracle/typed_oracle.d.ts +15 -21
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +10 -10
- package/dest/avm/avm_execution_environment.d.ts +1 -5
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +5 -8
- package/dest/avm/avm_gas.d.ts +1 -9
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +6 -13
- package/dest/avm/avm_machine_state.d.ts +1 -3
- package/dest/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/avm/avm_machine_state.js +8 -9
- package/dest/avm/avm_simulator.js +2 -2
- package/dest/avm/fixtures/index.d.ts +2 -6
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +3 -12
- package/dest/avm/journal/journal.d.ts +2 -1
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +8 -17
- package/dest/avm/journal/trace.d.ts +3 -1
- package/dest/avm/journal/trace.d.ts.map +1 -1
- package/dest/avm/journal/trace.js +11 -1
- package/dest/avm/journal/trace_types.d.ts +4 -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.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +1 -1
- package/dest/avm/opcodes/context_getters.d.ts +0 -5
- package/dest/avm/opcodes/context_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/context_getters.js +1 -8
- package/dest/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/avm/opcodes/contract.js +1 -3
- package/dest/avm/opcodes/environment_getters.d.ts +0 -15
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +1 -35
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +5 -6
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +3 -3
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +1 -1
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +3 -8
- package/dest/avm/serialization/instruction_serialization.d.ts +42 -47
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +43 -48
- package/dest/client/client_execution_context.d.ts +13 -16
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +36 -34
- package/dest/client/db_oracle.d.ts +5 -16
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/db_oracle.js +1 -1
- package/dest/client/execution_note_cache.d.ts +6 -2
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +10 -7
- package/dest/client/execution_result.d.ts +10 -5
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +7 -1
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +4 -10
- package/dest/client/simulator.d.ts +1 -3
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +5 -9
- package/dest/client/view_data_oracle.d.ts +7 -11
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +8 -14
- package/dest/mocks/fixtures.d.ts +1 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +9 -5
- package/dest/public/abstract_phase_manager.d.ts +4 -4
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +28 -43
- package/dest/public/app_logic_phase_manager.d.ts +1 -7
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/public/app_logic_phase_manager.js +1 -7
- package/dest/public/db.d.ts +6 -7
- package/dest/public/db.d.ts.map +1 -1
- package/dest/public/execution.d.ts +15 -6
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +7 -9
- package/dest/public/executor.d.ts +2 -2
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +19 -10
- package/dest/public/hints_builder.d.ts +10 -8
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +29 -35
- package/dest/public/public_execution_context.d.ts +8 -13
- package/dest/public/public_execution_context.d.ts.map +1 -1
- package/dest/public/public_execution_context.js +12 -29
- package/dest/public/public_executor.d.ts +2 -2
- package/dest/public/public_executor.d.ts.map +1 -1
- package/dest/public/public_executor.js +4 -5
- package/dest/public/public_processor.d.ts +1 -2
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +1 -1
- package/dest/public/setup_phase_manager.d.ts +0 -6
- package/dest/public/setup_phase_manager.d.ts.map +1 -1
- package/dest/public/setup_phase_manager.js +1 -7
- package/dest/public/state_actions.d.ts.map +1 -1
- package/dest/public/state_actions.js +3 -1
- package/dest/public/tail_phase_manager.d.ts +3 -6
- package/dest/public/tail_phase_manager.d.ts.map +1 -1
- package/dest/public/tail_phase_manager.js +47 -16
- package/dest/public/teardown_phase_manager.d.ts +3 -7
- package/dest/public/teardown_phase_manager.d.ts.map +1 -1
- package/dest/public/teardown_phase_manager.js +14 -7
- package/dest/public/transitional_adaptors.d.ts +2 -2
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +19 -21
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -2
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +3 -5
- package/package.json +16 -8
- package/src/acvm/oracle/oracle.ts +39 -21
- package/src/acvm/oracle/typed_oracle.ts +18 -26
- package/src/avm/avm_execution_environment.ts +0 -13
- package/src/avm/avm_gas.ts +6 -14
- package/src/avm/avm_machine_state.ts +8 -11
- package/src/avm/avm_simulator.ts +1 -1
- package/src/avm/fixtures/index.ts +2 -24
- package/src/avm/journal/journal.ts +14 -25
- package/src/avm/journal/trace.ts +12 -0
- package/src/avm/journal/trace_types.ts +7 -0
- package/src/avm/opcodes/arithmetic.ts +2 -2
- package/src/avm/opcodes/context_getters.ts +0 -9
- package/src/avm/opcodes/contract.ts +0 -2
- package/src/avm/opcodes/environment_getters.ts +0 -45
- package/src/avm/opcodes/external_calls.ts +5 -6
- package/src/avm/opcodes/memory.ts +5 -5
- package/src/avm/opcodes/storage.ts +1 -1
- package/src/avm/serialization/bytecode_serialization.ts +2 -10
- package/src/avm/serialization/instruction_serialization.ts +1 -6
- package/src/client/client_execution_context.ts +79 -54
- package/src/client/db_oracle.ts +5 -17
- package/src/client/execution_note_cache.ts +16 -7
- package/src/client/execution_result.ts +17 -6
- package/src/client/private_execution.ts +4 -9
- package/src/client/simulator.ts +3 -15
- package/src/client/view_data_oracle.ts +25 -29
- package/src/mocks/fixtures.ts +7 -16
- package/src/public/abstract_phase_manager.ts +45 -56
- package/src/public/app_logic_phase_manager.ts +6 -6
- package/src/public/db.ts +7 -8
- package/src/public/execution.ts +22 -18
- package/src/public/executor.ts +31 -5
- package/src/public/hints_builder.ts +62 -62
- package/src/public/public_execution_context.ts +30 -36
- package/src/public/public_executor.ts +4 -6
- package/src/public/public_processor.ts +1 -1
- package/src/public/setup_phase_manager.ts +6 -6
- package/src/public/state_actions.ts +2 -0
- package/src/public/tail_phase_manager.ts +98 -23
- package/src/public/teardown_phase_manager.ts +24 -6
- package/src/public/transitional_adaptors.ts +25 -19
- package/src/public/utils.ts +3 -1
- package/src/test/utils.ts +2 -4
|
@@ -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, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
3
|
-
import { CallContext, ContractStorageRead, ContractStorageUpdateRequest, FunctionData, Gas, L2ToL1Message, ReadRequest, SideEffect,
|
|
3
|
+
import { CallContext, ContractStorageRead, ContractStorageUpdateRequest, FunctionData, Gas, L2ToL1Message, NoteHash, Nullifier, ReadRequest, SideEffect, } from '@aztec/circuits.js';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
6
6
|
import { AvmContractCallResults } from '../avm/avm_message_call_result.js';
|
|
@@ -15,24 +15,19 @@ import { PublicExecutionContext } from './public_execution_context.js';
|
|
|
15
15
|
* @param globalVariables
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
|
-
export function createAvmExecutionEnvironment(current, header, globalVariables) {
|
|
19
|
-
return new AvmExecutionEnvironment(current.contractAddress, current.callContext.storageContractAddress, current.callContext.msgSender,
|
|
20
|
-
current.callContext.
|
|
21
|
-
/*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, current.callContext.gasSettings, current.callContext.transactionFee, current.functionData.selector);
|
|
18
|
+
export function createAvmExecutionEnvironment(current, header, globalVariables, gasSettings, transactionFee) {
|
|
19
|
+
return new AvmExecutionEnvironment(current.contractAddress, current.callContext.storageContractAddress, current.callContext.msgSender, globalVariables.gasFees.feePerL2Gas, globalVariables.gasFees.feePerDaGas,
|
|
20
|
+
/*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, gasSettings, transactionFee, current.functionData.selector);
|
|
22
21
|
}
|
|
23
22
|
export function createPublicExecutionContext(avmContext, calldata) {
|
|
24
23
|
const sideEffectCounter = avmContext.persistableState.trace.accessCounter;
|
|
25
24
|
const callContext = CallContext.from({
|
|
26
25
|
msgSender: avmContext.environment.sender,
|
|
27
26
|
storageContractAddress: avmContext.environment.storageAddress,
|
|
28
|
-
portalContractAddress: avmContext.environment.portal,
|
|
29
27
|
functionSelector: avmContext.environment.temporaryFunctionSelector,
|
|
30
|
-
gasLeft: Gas.from(avmContext.machineState.gasLeft),
|
|
31
28
|
isDelegateCall: avmContext.environment.isDelegateCall,
|
|
32
29
|
isStaticCall: avmContext.environment.isStaticCall,
|
|
33
30
|
sideEffectCounter: sideEffectCounter,
|
|
34
|
-
gasSettings: avmContext.environment.gasSettings,
|
|
35
|
-
transactionFee: avmContext.environment.transactionFee,
|
|
36
31
|
});
|
|
37
32
|
const functionData = new FunctionData(avmContext.environment.temporaryFunctionSelector, /*isPrivate=*/ false);
|
|
38
33
|
const execution = {
|
|
@@ -42,7 +37,7 @@ export function createPublicExecutionContext(avmContext, calldata) {
|
|
|
42
37
|
functionData,
|
|
43
38
|
};
|
|
44
39
|
const packedArgs = PackedValuesCache.create([]);
|
|
45
|
-
const context = new PublicExecutionContext(execution, avmContext.environment.header, avmContext.environment.globals, packedArgs, new SideEffectCounter(sideEffectCounter), avmContext.persistableState.hostStorage.publicStateDb, avmContext.persistableState.hostStorage.contractsDb, avmContext.persistableState.hostStorage.commitmentsDb);
|
|
40
|
+
const context = new PublicExecutionContext(execution, avmContext.environment.header, avmContext.environment.globals, packedArgs, new SideEffectCounter(sideEffectCounter), avmContext.persistableState.hostStorage.publicStateDb, avmContext.persistableState.hostStorage.contractsDb, avmContext.persistableState.hostStorage.commitmentsDb, Gas.from(avmContext.machineState.gasLeft), avmContext.environment.transactionFee, avmContext.environment.gasSettings);
|
|
46
41
|
return context;
|
|
47
42
|
}
|
|
48
43
|
/**
|
|
@@ -55,25 +50,25 @@ export function createPublicExecutionContext(avmContext, calldata) {
|
|
|
55
50
|
*/
|
|
56
51
|
export async function convertAvmResults(executionContext, newWorldState, result, endMachineState) {
|
|
57
52
|
const execution = executionContext.execution;
|
|
58
|
-
const contractStorageReads = newWorldState.storageReads.map(read => new ContractStorageRead(read.slot, read.value, read.counter.toNumber()));
|
|
59
|
-
const contractStorageUpdateRequests = newWorldState.storageWrites.map(write => new ContractStorageUpdateRequest(write.slot, write.value, write.counter.toNumber()));
|
|
53
|
+
const contractStorageReads = newWorldState.storageReads.map(read => new ContractStorageRead(read.slot, read.value, read.counter.toNumber(), read.storageAddress));
|
|
54
|
+
const contractStorageUpdateRequests = newWorldState.storageWrites.map(write => new ContractStorageUpdateRequest(write.slot, write.value, write.counter.toNumber(), write.storageAddress));
|
|
60
55
|
// We need to write the storage updates to the DB, because that's what the ACVM expects.
|
|
61
56
|
// Assumes the updates are in the right order.
|
|
62
57
|
for (const write of newWorldState.storageWrites) {
|
|
63
58
|
await executionContext.stateDb.storageWrite(write.storageAddress, write.slot, write.value);
|
|
64
59
|
}
|
|
65
|
-
const newNoteHashes = newWorldState.newNoteHashes.map(noteHash => new
|
|
60
|
+
const newNoteHashes = newWorldState.newNoteHashes.map(noteHash => new NoteHash(noteHash.noteHash, noteHash.counter.toNumber()));
|
|
66
61
|
const nullifierReadRequests = newWorldState.nullifierChecks
|
|
67
62
|
.filter(nullifierCheck => nullifierCheck.exists)
|
|
68
63
|
.map(nullifierCheck => new ReadRequest(nullifierCheck.nullifier, nullifierCheck.counter.toNumber()));
|
|
69
64
|
const nullifierNonExistentReadRequests = newWorldState.nullifierChecks
|
|
70
65
|
.filter(nullifierCheck => !nullifierCheck.exists)
|
|
71
66
|
.map(nullifierCheck => new ReadRequest(nullifierCheck.nullifier, nullifierCheck.counter.toNumber()));
|
|
72
|
-
const newNullifiers = newWorldState.newNullifiers.map(tracedNullifier => new
|
|
73
|
-
/*value=*/ tracedNullifier.nullifier,
|
|
74
|
-
/*noteHash=*/ Fr.ZERO
|
|
75
|
-
tracedNullifier.counter));
|
|
67
|
+
const newNullifiers = newWorldState.newNullifiers.map(tracedNullifier => new Nullifier(
|
|
68
|
+
/*value=*/ tracedNullifier.nullifier, tracedNullifier.counter.toNumber(),
|
|
69
|
+
/*noteHash=*/ Fr.ZERO));
|
|
76
70
|
const unencryptedLogs = new UnencryptedFunctionL2Logs(newWorldState.newLogs.map(log => new UnencryptedL2Log(log.contractAddress, log.selector, log.data)));
|
|
71
|
+
const unencryptedLogsHashes = newWorldState.newLogsHashes.map(logHash => new SideEffect(logHash.logHash, logHash.counter));
|
|
77
72
|
const newL2ToL1Messages = newWorldState.newL1Messages.map(m => new L2ToL1Message(m.recipient, m.content));
|
|
78
73
|
const returnValues = result.output;
|
|
79
74
|
// TODO: Support nested executions.
|
|
@@ -94,10 +89,13 @@ export async function convertAvmResults(executionContext, newWorldState, result,
|
|
|
94
89
|
contractStorageUpdateRequests,
|
|
95
90
|
returnValues,
|
|
96
91
|
nestedExecutions,
|
|
92
|
+
unencryptedLogsHashes,
|
|
97
93
|
unencryptedLogs,
|
|
98
94
|
reverted: result.reverted,
|
|
99
95
|
revertReason: result.revertReason ? createSimulationError(result.revertReason) : undefined,
|
|
100
|
-
|
|
96
|
+
startGasLeft: executionContext.availableGas,
|
|
97
|
+
endGasLeft: endMachineState.gasLeft,
|
|
98
|
+
transactionFee: executionContext.transactionFee,
|
|
101
99
|
};
|
|
102
100
|
}
|
|
103
101
|
export function convertPublicExecutionResult(res) {
|
|
@@ -129,14 +127,14 @@ export function updateAvmContextFromPublicExecutionResult(ctx, result) {
|
|
|
129
127
|
ctx.persistableState.trace.newNullifiers.push({
|
|
130
128
|
storageAddress: ctx.environment.storageAddress,
|
|
131
129
|
nullifier: nullifier.value,
|
|
132
|
-
counter: nullifier.counter,
|
|
130
|
+
counter: new Fr(nullifier.counter),
|
|
133
131
|
});
|
|
134
132
|
}
|
|
135
133
|
for (const noteHash of result.newNoteHashes) {
|
|
136
134
|
ctx.persistableState.trace.newNoteHashes.push({
|
|
137
135
|
storageAddress: ctx.environment.storageAddress,
|
|
138
136
|
noteHash: noteHash.value,
|
|
139
|
-
counter: noteHash.counter,
|
|
137
|
+
counter: new Fr(noteHash.counter),
|
|
140
138
|
});
|
|
141
139
|
}
|
|
142
140
|
for (const message of result.newL2ToL1Messages) {
|
|
@@ -159,4 +157,4 @@ export function isAvmBytecode(bytecode) {
|
|
|
159
157
|
const magicSize = AVM_MAGIC_SUFFIX.length;
|
|
160
158
|
return bytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
|
|
161
159
|
}
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUdBQWlHO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixZQUFZLEVBQ1osR0FBRyxFQUlILGFBQWEsRUFDYixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEdBQ1gsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHOUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFM0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RTs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLE9BQXdCLEVBQ3hCLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxXQUF3QixFQUN4QixjQUFrQjtJQUVsQixPQUFPLElBQUksdUJBQXVCLENBQ2hDLE9BQU8sQ0FBQyxlQUFlLEVBQ3ZCLE9BQU8sQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQzFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUM3QixlQUFlLENBQUMsT0FBTyxDQUFD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/public/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAG/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/public/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAG/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAwBpD"}
|
package/dest/public/utils.js
CHANGED
|
@@ -12,6 +12,7 @@ export function lastSideEffectCounter(tx) {
|
|
|
12
12
|
...data.endNonRevertibleData.publicCallStack,
|
|
13
13
|
...data.end.newNoteHashes,
|
|
14
14
|
...data.end.newNullifiers,
|
|
15
|
+
...data.end.unencryptedLogsHashes,
|
|
15
16
|
...data.end.publicCallStack,
|
|
16
17
|
];
|
|
17
18
|
let max = 0;
|
|
@@ -21,9 +22,10 @@ export function lastSideEffectCounter(tx) {
|
|
|
21
22
|
max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber());
|
|
22
23
|
}
|
|
23
24
|
else {
|
|
24
|
-
|
|
25
|
+
const counter = typeof sideEffect.counter === 'number' ? sideEffect.counter : sideEffect.counter.toNumber();
|
|
26
|
+
max = Math.max(max, counter);
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
29
|
return max;
|
|
28
30
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEVBQU07SUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFVLENBQUM7SUFDaEMsTUFBTSxrQkFBa0IsR0FBRztRQUN6QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhO1FBQzFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7UUFDMUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZTtRQUM1QyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtRQUN6QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtRQUN6QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCO1FBQ2pDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlO0tBQzVCLENBQUM7SUFFRixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixLQUFLLE1BQU0sVUFBVSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDNUMsSUFBSSxVQUFVLFlBQVksV0FBVyxFQUFFLENBQUM7WUFDdEMsa0dBQWtHO1lBQ2xHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEgsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxPQUFPLFVBQVUsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
|
package/dest/test/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAW,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,KAAK,YAAY,EAAc,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAI5E;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,aACnB,MAAM,mBACC,EAAE,EAAE,kBACL,YAAY,UACpB,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAW,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,KAAK,YAAY,EAAc,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAI5E;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,aACnB,MAAM,mBACC,EAAE,EAAE,kBACL,YAAY,UACpB,EAAE,kBASX,CAAC"}
|
package/dest/test/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { L1Actor, L1ToL2Message, L2Actor } from '@aztec/circuit-types';
|
|
2
2
|
import { EthAddress } from '@aztec/circuits.js';
|
|
3
|
-
import {
|
|
3
|
+
import { computeSecretHash } from '@aztec/circuits.js/hash';
|
|
4
4
|
import { sha256ToField } from '@aztec/foundation/crypto';
|
|
5
5
|
/**
|
|
6
6
|
* Test utility function to craft an L1 to L2 message.
|
|
@@ -14,9 +14,7 @@ export const buildL1ToL2Message = (selector, contentPreimage, targetContract, se
|
|
|
14
14
|
// Write the selector into a buffer.
|
|
15
15
|
const selectorBuf = Buffer.from(selector, 'hex');
|
|
16
16
|
const content = sha256ToField([selectorBuf, ...contentPreimage]);
|
|
17
|
-
const secretHash =
|
|
18
|
-
// Eventually the kernel will need to prove the kernel portal pair exists within the contract tree,
|
|
19
|
-
// EthAddress.random() will need to be replaced when this happens
|
|
17
|
+
const secretHash = computeSecretHash(secret);
|
|
20
18
|
return new L1ToL2Message(new L1Actor(EthAddress.random(), 1), new L2Actor(targetContract, 1), content, secretHash);
|
|
21
19
|
};
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQXFCLFVBQVUsRUFBVyxNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsUUFBZ0IsRUFDaEIsZUFBcUIsRUFDckIsY0FBNEIsRUFDNUIsTUFBVSxFQUNWLEVBQUU7SUFDRixvQ0FBb0M7SUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFakQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU3QyxPQUFPLElBQUksYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3JILENBQUMsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -34,16 +34,24 @@
|
|
|
34
34
|
},
|
|
35
35
|
"extensionsToTreatAsEsm": [
|
|
36
36
|
".ts"
|
|
37
|
+
],
|
|
38
|
+
"reporters": [
|
|
39
|
+
[
|
|
40
|
+
"default",
|
|
41
|
+
{
|
|
42
|
+
"summaryThreshold": 9999
|
|
43
|
+
}
|
|
44
|
+
]
|
|
37
45
|
]
|
|
38
46
|
},
|
|
39
47
|
"dependencies": {
|
|
40
|
-
"@aztec/circuit-types": "0.
|
|
41
|
-
"@aztec/circuits.js": "0.
|
|
42
|
-
"@aztec/foundation": "0.
|
|
43
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
44
|
-
"@aztec/protocol-contracts": "0.
|
|
45
|
-
"@aztec/types": "0.
|
|
46
|
-
"@aztec/world-state": "0.
|
|
48
|
+
"@aztec/circuit-types": "0.36.0",
|
|
49
|
+
"@aztec/circuits.js": "0.36.0",
|
|
50
|
+
"@aztec/foundation": "0.36.0",
|
|
51
|
+
"@aztec/noir-protocol-circuits-types": "0.36.0",
|
|
52
|
+
"@aztec/protocol-contracts": "0.36.0",
|
|
53
|
+
"@aztec/types": "0.36.0",
|
|
54
|
+
"@aztec/world-state": "0.36.0",
|
|
47
55
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
48
56
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
49
57
|
"levelup": "^5.1.1",
|
|
@@ -21,8 +21,13 @@ export class Oracle {
|
|
|
21
21
|
return toACVMField(val);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
async
|
|
25
|
-
const packed = await this.typedOracle.
|
|
24
|
+
async packArgumentsArray(args: ACVMField[]): Promise<ACVMField> {
|
|
25
|
+
const packed = await this.typedOracle.packArgumentsArray(args.map(fromACVMField));
|
|
26
|
+
return toACVMField(packed);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async packArguments(_length: ACVMField[], values: ACVMField[]): Promise<ACVMField> {
|
|
30
|
+
const packed = await this.typedOracle.packArgumentsArray(values.map(fromACVMField));
|
|
26
31
|
return toACVMField(packed);
|
|
27
32
|
}
|
|
28
33
|
|
|
@@ -37,13 +42,14 @@ export class Oracle {
|
|
|
37
42
|
return unpacked.map(toACVMField);
|
|
38
43
|
}
|
|
39
44
|
|
|
40
|
-
async
|
|
41
|
-
const {
|
|
45
|
+
async getNullifierKeys([accountAddress]: ACVMField[]): Promise<ACVMField[]> {
|
|
46
|
+
const { masterNullifierPublicKey, appNullifierSecretKey } = await this.typedOracle.getNullifierKeys(
|
|
47
|
+
fromACVMField(accountAddress),
|
|
48
|
+
);
|
|
42
49
|
return [
|
|
43
|
-
toACVMField(
|
|
44
|
-
toACVMField(
|
|
45
|
-
toACVMField(
|
|
46
|
-
toACVMField(secretKey.low),
|
|
50
|
+
toACVMField(masterNullifierPublicKey.x),
|
|
51
|
+
toACVMField(masterNullifierPublicKey.y),
|
|
52
|
+
toACVMField(appNullifierSecretKey),
|
|
47
53
|
];
|
|
48
54
|
}
|
|
49
55
|
|
|
@@ -62,7 +68,6 @@ export class Oracle {
|
|
|
62
68
|
instance.deployer,
|
|
63
69
|
instance.contractClassId,
|
|
64
70
|
instance.initializationHash,
|
|
65
|
-
instance.portalContractAddress,
|
|
66
71
|
instance.publicKeysHash,
|
|
67
72
|
].map(toACVMField);
|
|
68
73
|
}
|
|
@@ -233,18 +238,24 @@ export class Oracle {
|
|
|
233
238
|
[noteTypeId]: ACVMField[],
|
|
234
239
|
note: ACVMField[],
|
|
235
240
|
[innerNoteHash]: ACVMField[],
|
|
241
|
+
[counter]: ACVMField[],
|
|
236
242
|
): ACVMField {
|
|
237
243
|
this.typedOracle.notifyCreatedNote(
|
|
238
244
|
fromACVMField(storageSlot),
|
|
239
245
|
fromACVMField(noteTypeId),
|
|
240
246
|
note.map(fromACVMField),
|
|
241
247
|
fromACVMField(innerNoteHash),
|
|
248
|
+
+counter,
|
|
242
249
|
);
|
|
243
250
|
return toACVMField(0);
|
|
244
251
|
}
|
|
245
252
|
|
|
246
|
-
async notifyNullifiedNote(
|
|
247
|
-
|
|
253
|
+
async notifyNullifiedNote(
|
|
254
|
+
[innerNullifier]: ACVMField[],
|
|
255
|
+
[innerNoteHash]: ACVMField[],
|
|
256
|
+
[counter]: ACVMField[],
|
|
257
|
+
): Promise<ACVMField> {
|
|
258
|
+
await this.typedOracle.notifyNullifiedNote(fromACVMField(innerNullifier), fromACVMField(innerNoteHash), +counter);
|
|
248
259
|
return toACVMField(0);
|
|
249
260
|
}
|
|
250
261
|
|
|
@@ -266,12 +277,6 @@ export class Oracle {
|
|
|
266
277
|
return message.toFields().map(toACVMField);
|
|
267
278
|
}
|
|
268
279
|
|
|
269
|
-
async getPortalContractAddress([aztecAddress]: ACVMField[]): Promise<ACVMField> {
|
|
270
|
-
const contractAddress = AztecAddress.fromString(aztecAddress);
|
|
271
|
-
const portalContactAddress = await this.typedOracle.getPortalContractAddress(contractAddress);
|
|
272
|
-
return toACVMField(portalContactAddress);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
280
|
async storageRead([startStorageSlot]: ACVMField[], [numberOfElements]: ACVMField[]): Promise<ACVMField[]> {
|
|
276
281
|
const values = await this.typedOracle.storageRead(fromACVMField(startStorageSlot), +numberOfElements);
|
|
277
282
|
return values.map(toACVMField);
|
|
@@ -291,14 +296,14 @@ export class Oracle {
|
|
|
291
296
|
log: ACVMField[],
|
|
292
297
|
): ACVMField {
|
|
293
298
|
const publicKey = new Point(fromACVMField(publicKeyX), fromACVMField(publicKeyY));
|
|
294
|
-
this.typedOracle.emitEncryptedLog(
|
|
299
|
+
const logHash = this.typedOracle.emitEncryptedLog(
|
|
295
300
|
AztecAddress.fromString(contractAddress),
|
|
296
301
|
Fr.fromString(storageSlot),
|
|
297
302
|
Fr.fromString(noteTypeId),
|
|
298
303
|
publicKey,
|
|
299
304
|
log.map(fromACVMField),
|
|
300
305
|
);
|
|
301
|
-
return toACVMField(
|
|
306
|
+
return toACVMField(logHash);
|
|
302
307
|
}
|
|
303
308
|
|
|
304
309
|
emitUnencryptedLog([contractAddress]: ACVMField[], [eventSelector]: ACVMField[], message: ACVMField[]): ACVMField {
|
|
@@ -309,8 +314,8 @@ export class Oracle {
|
|
|
309
314
|
logPayload,
|
|
310
315
|
);
|
|
311
316
|
|
|
312
|
-
this.typedOracle.emitUnencryptedLog(log);
|
|
313
|
-
return toACVMField(
|
|
317
|
+
const logHash = this.typedOracle.emitUnencryptedLog(log);
|
|
318
|
+
return toACVMField(logHash);
|
|
314
319
|
}
|
|
315
320
|
|
|
316
321
|
debugLog(...args: ACVMField[][]): ACVMField {
|
|
@@ -379,4 +384,17 @@ export class Oracle {
|
|
|
379
384
|
);
|
|
380
385
|
return toAcvmEnqueuePublicFunctionResult(enqueuedRequest);
|
|
381
386
|
}
|
|
387
|
+
|
|
388
|
+
aes128Encrypt(input: ACVMField[], initializationVector: ACVMField[], key: ACVMField[]): ACVMField[] {
|
|
389
|
+
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
390
|
+
const processedInput = Buffer.from(input.map(fromACVMField).map(f => f.toNumber()));
|
|
391
|
+
const processedIV = Buffer.from(initializationVector.map(fromACVMField).map(f => f.toNumber()));
|
|
392
|
+
const processedKey = Buffer.from(key.map(fromACVMField).map(f => f.toNumber()));
|
|
393
|
+
|
|
394
|
+
// Encrypt the input
|
|
395
|
+
const ciphertext = this.typedOracle.aes128Encrypt(processedInput, processedIV, processedKey);
|
|
396
|
+
|
|
397
|
+
// Convert each byte of ciphertext to a field and return it
|
|
398
|
+
return Array.from(ciphertext).map(byte => toACVMField(byte));
|
|
399
|
+
}
|
|
382
400
|
}
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
type UnencryptedL2Log,
|
|
11
11
|
} from '@aztec/circuit-types';
|
|
12
12
|
import {
|
|
13
|
-
type GrumpkinPrivateKey,
|
|
14
13
|
type Header,
|
|
15
14
|
type L1_TO_L2_MSG_TREE_HEIGHT,
|
|
16
15
|
type PrivateCallStackItem,
|
|
@@ -18,22 +17,15 @@ import {
|
|
|
18
17
|
} from '@aztec/circuits.js';
|
|
19
18
|
import { type FunctionSelector } from '@aztec/foundation/abi';
|
|
20
19
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
21
|
-
import { type EthAddress } from '@aztec/foundation/eth-address';
|
|
22
20
|
import { Fr } from '@aztec/foundation/fields';
|
|
23
21
|
import { type ContractInstance } from '@aztec/types/contracts';
|
|
24
22
|
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
*/
|
|
32
|
-
publicKey: PublicKey;
|
|
33
|
-
/**
|
|
34
|
-
* Secret Key.
|
|
35
|
-
*/
|
|
36
|
-
secretKey: GrumpkinPrivateKey;
|
|
23
|
+
/** Nullifier keys which both correspond to the same master nullifier secret key. */
|
|
24
|
+
export interface NullifierKeys {
|
|
25
|
+
/** Master nullifier public key. */
|
|
26
|
+
masterNullifierPublicKey: PublicKey;
|
|
27
|
+
/** App nullifier secret key. */
|
|
28
|
+
appNullifierSecretKey: Fr;
|
|
37
29
|
}
|
|
38
30
|
|
|
39
31
|
/**
|
|
@@ -85,8 +77,8 @@ export abstract class TypedOracle {
|
|
|
85
77
|
return Fr.random();
|
|
86
78
|
}
|
|
87
79
|
|
|
88
|
-
|
|
89
|
-
throw new OracleMethodNotAvailableError('
|
|
80
|
+
packArgumentsArray(_args: Fr[]): Promise<Fr> {
|
|
81
|
+
throw new OracleMethodNotAvailableError('packArgumentsArray');
|
|
90
82
|
}
|
|
91
83
|
|
|
92
84
|
packReturns(_returns: Fr[]): Promise<Fr> {
|
|
@@ -97,8 +89,8 @@ export abstract class TypedOracle {
|
|
|
97
89
|
throw new OracleMethodNotAvailableError('unpackReturns');
|
|
98
90
|
}
|
|
99
91
|
|
|
100
|
-
|
|
101
|
-
throw new OracleMethodNotAvailableError('
|
|
92
|
+
getNullifierKeys(_accountAddress: AztecAddress): Promise<NullifierKeys> {
|
|
93
|
+
throw new OracleMethodNotAvailableError('getNullifierKeys');
|
|
102
94
|
}
|
|
103
95
|
|
|
104
96
|
getPublicKeyAndPartialAddress(_address: AztecAddress): Promise<Fr[] | undefined> {
|
|
@@ -167,11 +159,11 @@ export abstract class TypedOracle {
|
|
|
167
159
|
throw new OracleMethodNotAvailableError('getNotes');
|
|
168
160
|
}
|
|
169
161
|
|
|
170
|
-
notifyCreatedNote(_storageSlot: Fr, _noteTypeId: Fr, _note: Fr[], _innerNoteHash: Fr): void {
|
|
162
|
+
notifyCreatedNote(_storageSlot: Fr, _noteTypeId: Fr, _note: Fr[], _innerNoteHash: Fr, _counter: number): void {
|
|
171
163
|
throw new OracleMethodNotAvailableError('notifyCreatedNote');
|
|
172
164
|
}
|
|
173
165
|
|
|
174
|
-
notifyNullifiedNote(_innerNullifier: Fr, _innerNoteHash: Fr): Promise<void> {
|
|
166
|
+
notifyNullifiedNote(_innerNullifier: Fr, _innerNoteHash: Fr, _counter: number): Promise<void> {
|
|
175
167
|
throw new OracleMethodNotAvailableError('notifyNullifiedNote');
|
|
176
168
|
}
|
|
177
169
|
|
|
@@ -187,10 +179,6 @@ export abstract class TypedOracle {
|
|
|
187
179
|
throw new OracleMethodNotAvailableError('getL1ToL2MembershipWitness');
|
|
188
180
|
}
|
|
189
181
|
|
|
190
|
-
getPortalContractAddress(_contractAddress: AztecAddress): Promise<EthAddress> {
|
|
191
|
-
throw new OracleMethodNotAvailableError('getPortalContractAddress');
|
|
192
|
-
}
|
|
193
|
-
|
|
194
182
|
storageRead(_startStorageSlot: Fr, _numberOfElements: number): Promise<Fr[]> {
|
|
195
183
|
throw new OracleMethodNotAvailableError('storageRead');
|
|
196
184
|
}
|
|
@@ -205,11 +193,11 @@ export abstract class TypedOracle {
|
|
|
205
193
|
_noteTypeId: Fr,
|
|
206
194
|
_publicKey: PublicKey,
|
|
207
195
|
_log: Fr[],
|
|
208
|
-
):
|
|
196
|
+
): Fr {
|
|
209
197
|
throw new OracleMethodNotAvailableError('emitEncryptedLog');
|
|
210
198
|
}
|
|
211
199
|
|
|
212
|
-
emitUnencryptedLog(_log: UnencryptedL2Log):
|
|
200
|
+
emitUnencryptedLog(_log: UnencryptedL2Log): Fr {
|
|
213
201
|
throw new OracleMethodNotAvailableError('emitUnencryptedLog');
|
|
214
202
|
}
|
|
215
203
|
|
|
@@ -245,4 +233,8 @@ export abstract class TypedOracle {
|
|
|
245
233
|
): Promise<PublicCallRequest> {
|
|
246
234
|
throw new OracleMethodNotAvailableError('enqueuePublicFunctionCall');
|
|
247
235
|
}
|
|
236
|
+
|
|
237
|
+
aes128Encrypt(_input: Buffer, _initializationVector: Buffer, _key: Buffer): Buffer {
|
|
238
|
+
throw new OracleMethodNotAvailableError('encrypt');
|
|
239
|
+
}
|
|
248
240
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { FunctionSelector, type GasSettings, type GlobalVariables, type Header } from '@aztec/circuits.js';
|
|
2
2
|
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
3
3
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
|
-
import { type EthAddress } from '@aztec/foundation/eth-address';
|
|
5
4
|
import { type Fr } from '@aztec/foundation/fields';
|
|
6
5
|
|
|
7
6
|
export class AvmContextInputs {
|
|
@@ -23,10 +22,7 @@ export class AvmExecutionEnvironment {
|
|
|
23
22
|
constructor(
|
|
24
23
|
public readonly address: AztecAddress,
|
|
25
24
|
public readonly storageAddress: AztecAddress,
|
|
26
|
-
public readonly origin: AztecAddress,
|
|
27
25
|
public readonly sender: AztecAddress,
|
|
28
|
-
public readonly portal: EthAddress,
|
|
29
|
-
public readonly feePerL1Gas: Fr,
|
|
30
26
|
public readonly feePerL2Gas: Fr,
|
|
31
27
|
public readonly feePerDaGas: Fr,
|
|
32
28
|
public readonly contractCallDepth: Fr,
|
|
@@ -57,10 +53,7 @@ export class AvmExecutionEnvironment {
|
|
|
57
53
|
return new AvmExecutionEnvironment(
|
|
58
54
|
targetAddress,
|
|
59
55
|
/*storageAddress=*/ targetAddress,
|
|
60
|
-
this.origin,
|
|
61
56
|
this.address,
|
|
62
|
-
this.portal,
|
|
63
|
-
this.feePerL1Gas,
|
|
64
57
|
this.feePerL2Gas,
|
|
65
58
|
this.feePerDaGas,
|
|
66
59
|
this.contractCallDepth,
|
|
@@ -83,10 +76,7 @@ export class AvmExecutionEnvironment {
|
|
|
83
76
|
return new AvmExecutionEnvironment(
|
|
84
77
|
address,
|
|
85
78
|
/*storageAddress=*/ address,
|
|
86
|
-
this.origin,
|
|
87
79
|
this.sender,
|
|
88
|
-
this.portal,
|
|
89
|
-
this.feePerL1Gas,
|
|
90
80
|
this.feePerL2Gas,
|
|
91
81
|
this.feePerDaGas,
|
|
92
82
|
this.contractCallDepth,
|
|
@@ -109,10 +99,7 @@ export class AvmExecutionEnvironment {
|
|
|
109
99
|
return new AvmExecutionEnvironment(
|
|
110
100
|
address,
|
|
111
101
|
this.storageAddress,
|
|
112
|
-
this.origin,
|
|
113
102
|
this.sender,
|
|
114
|
-
this.portal,
|
|
115
|
-
this.feePerL1Gas,
|
|
116
103
|
this.feePerL2Gas,
|
|
117
104
|
this.feePerDaGas,
|
|
118
105
|
this.contractCallDepth,
|
package/src/avm/avm_gas.ts
CHANGED
|
@@ -5,19 +5,18 @@ import { Opcode } from './serialization/instruction_serialization.js';
|
|
|
5
5
|
|
|
6
6
|
/** Gas counters in L1, L2, and DA. */
|
|
7
7
|
export type Gas = {
|
|
8
|
-
l1Gas: number;
|
|
9
8
|
l2Gas: number;
|
|
10
9
|
daGas: number;
|
|
11
10
|
};
|
|
12
11
|
|
|
13
12
|
/** Maps a Gas struct to gasLeft properties. */
|
|
14
13
|
export function gasToGasLeft(gas: Gas) {
|
|
15
|
-
return {
|
|
14
|
+
return { l2GasLeft: gas.l2Gas, daGasLeft: gas.daGas };
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
/** Maps gasLeft properties to a gas struct. */
|
|
19
|
-
export function gasLeftToGas(gasLeft: {
|
|
20
|
-
return {
|
|
18
|
+
export function gasLeftToGas(gasLeft: { l2GasLeft: number; daGasLeft: number }) {
|
|
19
|
+
return { l2Gas: gasLeft.l2GasLeft, daGas: gasLeft.daGasLeft };
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
/** Creates a new instance with all values set to zero except the ones set. */
|
|
@@ -29,7 +28,6 @@ export function makeGas(gasCost: Partial<Gas>) {
|
|
|
29
28
|
export function sumGas(...gases: Partial<Gas>[]) {
|
|
30
29
|
return gases.reduce(
|
|
31
30
|
(acc: Gas, gas) => ({
|
|
32
|
-
l1Gas: acc.l1Gas + (gas.l1Gas ?? 0),
|
|
33
31
|
l2Gas: acc.l2Gas + (gas.l2Gas ?? 0),
|
|
34
32
|
daGas: acc.daGas + (gas.daGas ?? 0),
|
|
35
33
|
}),
|
|
@@ -39,24 +37,23 @@ export function sumGas(...gases: Partial<Gas>[]) {
|
|
|
39
37
|
|
|
40
38
|
/** Multiplies a gas instance by a scalar. */
|
|
41
39
|
export function mulGas(gas: Partial<Gas>, scalar: number) {
|
|
42
|
-
return {
|
|
40
|
+
return { l2Gas: (gas.l2Gas ?? 0) * scalar, daGas: (gas.daGas ?? 0) * scalar };
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
/** Zero gas across all gas dimensions. */
|
|
46
44
|
export const EmptyGas: Gas = {
|
|
47
|
-
l1Gas: 0,
|
|
48
45
|
l2Gas: 0,
|
|
49
46
|
daGas: 0,
|
|
50
47
|
};
|
|
51
48
|
|
|
52
49
|
/** Dimensions of gas usage: L1, L2, and DA. */
|
|
53
|
-
export const GasDimensions = ['
|
|
50
|
+
export const GasDimensions = ['l2Gas', 'daGas'] as const;
|
|
54
51
|
|
|
55
52
|
/** Null object to represent a gas cost that's dynamic instead of fixed for a given instruction. */
|
|
56
53
|
export const DynamicGasCost = Symbol('DynamicGasCost');
|
|
57
54
|
|
|
58
55
|
/** Temporary default gas cost. We should eventually remove all usage of this variable in favor of actual gas for each opcode. */
|
|
59
|
-
const TemporaryDefaultGasCost = {
|
|
56
|
+
const TemporaryDefaultGasCost = { l2Gas: 10, daGas: 0 };
|
|
60
57
|
|
|
61
58
|
/** Base gas costs for each instruction. Additional gas cost may be added on top due to memory or storage accesses, etc. */
|
|
62
59
|
export const GasCosts: Record<Opcode, Gas | typeof DynamicGasCost> = {
|
|
@@ -78,10 +75,7 @@ export const GasCosts: Record<Opcode, Gas | typeof DynamicGasCost> = {
|
|
|
78
75
|
// Execution environment
|
|
79
76
|
[Opcode.ADDRESS]: TemporaryDefaultGasCost,
|
|
80
77
|
[Opcode.STORAGEADDRESS]: TemporaryDefaultGasCost,
|
|
81
|
-
[Opcode.ORIGIN]: TemporaryDefaultGasCost,
|
|
82
78
|
[Opcode.SENDER]: TemporaryDefaultGasCost,
|
|
83
|
-
[Opcode.PORTAL]: TemporaryDefaultGasCost,
|
|
84
|
-
[Opcode.FEEPERL1GAS]: TemporaryDefaultGasCost,
|
|
85
79
|
[Opcode.FEEPERL2GAS]: TemporaryDefaultGasCost,
|
|
86
80
|
[Opcode.FEEPERDAGAS]: TemporaryDefaultGasCost,
|
|
87
81
|
[Opcode.CONTRACTCALLDEPTH]: TemporaryDefaultGasCost,
|
|
@@ -90,12 +84,10 @@ export const GasCosts: Record<Opcode, Gas | typeof DynamicGasCost> = {
|
|
|
90
84
|
[Opcode.BLOCKNUMBER]: TemporaryDefaultGasCost,
|
|
91
85
|
[Opcode.TIMESTAMP]: TemporaryDefaultGasCost,
|
|
92
86
|
[Opcode.COINBASE]: TemporaryDefaultGasCost,
|
|
93
|
-
[Opcode.BLOCKL1GASLIMIT]: TemporaryDefaultGasCost,
|
|
94
87
|
[Opcode.BLOCKL2GASLIMIT]: TemporaryDefaultGasCost,
|
|
95
88
|
[Opcode.BLOCKDAGASLIMIT]: TemporaryDefaultGasCost,
|
|
96
89
|
[Opcode.CALLDATACOPY]: TemporaryDefaultGasCost,
|
|
97
90
|
// Gas
|
|
98
|
-
[Opcode.L1GASLEFT]: TemporaryDefaultGasCost,
|
|
99
91
|
[Opcode.L2GASLEFT]: TemporaryDefaultGasCost,
|
|
100
92
|
[Opcode.DAGASLEFT]: TemporaryDefaultGasCost,
|
|
101
93
|
// Control flow
|