@aztec/simulator 0.65.2 → 0.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/acvm/acvm.js +3 -3
- package/dest/acvm/oracle/oracle.d.ts +1 -4
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +3 -19
- package/dest/acvm/oracle/typed_oracle.d.ts +2 -7
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +3 -12
- package/dest/acvm/serialize.js +2 -2
- package/dest/avm/avm_context.d.ts +2 -2
- package/dest/avm/avm_context.d.ts.map +1 -1
- package/dest/avm/avm_context.js +3 -4
- package/dest/avm/avm_execution_environment.d.ts +4 -6
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +8 -13
- package/dest/avm/avm_memory_types.d.ts +2 -2
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +7 -7
- package/dest/avm/avm_simulator.d.ts +3 -3
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +26 -16
- package/dest/avm/avm_tree.d.ts +31 -14
- package/dest/avm/avm_tree.d.ts.map +1 -1
- package/dest/avm/avm_tree.js +34 -40
- package/dest/avm/errors.d.ts +3 -3
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/errors.js +8 -15
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +4 -4
- package/dest/avm/journal/journal.d.ts +15 -4
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +121 -36
- package/dest/avm/opcodes/environment_getters.d.ts +10 -11
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +12 -15
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +4 -11
- package/dest/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/avm/opcodes/misc.js +3 -3
- package/dest/client/client_execution_context.d.ts +6 -33
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +18 -54
- package/dest/client/db_oracle.d.ts +2 -2
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/execution_note_cache.d.ts +9 -1
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +10 -3
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +5 -7
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +4 -4
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +3 -3
- package/dest/client/view_data_oracle.d.ts +2 -2
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +5 -6
- package/dest/common/debug_fn_name.d.ts +2 -2
- package/dest/common/debug_fn_name.d.ts.map +1 -1
- package/dest/common/debug_fn_name.js +8 -14
- package/dest/providers/acvm_native.js +4 -4
- package/dest/providers/factory.d.ts +2 -2
- package/dest/providers/factory.d.ts.map +1 -1
- package/dest/providers/factory.js +4 -4
- package/dest/public/enqueued_call_side_effect_trace.d.ts +11 -23
- package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
- package/dest/public/enqueued_call_side_effect_trace.js +51 -72
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +2 -5
- package/dest/public/fixtures/index.d.ts +25 -7
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +20 -17
- package/dest/public/index.d.ts +0 -1
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +1 -2
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +30 -16
- package/dest/public/public_processor.d.ts +7 -8
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +37 -26
- package/dest/public/public_processor_metrics.d.ts +1 -1
- package/dest/public/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_tx_context.d.ts +13 -14
- package/dest/public/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_context.js +63 -54
- package/dest/public/public_tx_simulator.d.ts +2 -2
- package/dest/public/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator.js +43 -25
- package/dest/public/side_effect_trace_interface.d.ts +4 -17
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/transitional_adapters.d.ts +2 -6
- package/dest/public/transitional_adapters.d.ts.map +1 -1
- package/dest/public/transitional_adapters.js +29 -88
- package/package.json +16 -9
- package/src/acvm/acvm.ts +2 -2
- package/src/acvm/oracle/oracle.ts +2 -32
- package/src/acvm/oracle/typed_oracle.ts +3 -20
- package/src/acvm/serialize.ts +1 -1
- package/src/avm/avm_context.ts +2 -3
- package/src/avm/avm_execution_environment.ts +6 -31
- package/src/avm/avm_memory_types.ts +6 -6
- package/src/avm/avm_simulator.ts +28 -23
- package/src/avm/avm_tree.ts +67 -53
- package/src/avm/errors.ts +12 -14
- package/src/avm/fixtures/index.ts +2 -3
- package/src/avm/journal/journal.ts +206 -68
- package/src/avm/opcodes/environment_getters.ts +1 -4
- package/src/avm/opcodes/external_calls.ts +3 -19
- package/src/avm/opcodes/misc.ts +2 -2
- package/src/client/client_execution_context.ts +22 -68
- package/src/client/db_oracle.ts +2 -2
- package/src/client/execution_note_cache.ts +13 -3
- package/src/client/private_execution.ts +3 -7
- package/src/client/simulator.ts +4 -4
- package/src/client/unconstrained_execution.ts +2 -2
- package/src/client/view_data_oracle.ts +5 -6
- package/src/common/debug_fn_name.ts +7 -13
- package/src/providers/acvm_native.ts +3 -3
- package/src/providers/factory.ts +3 -3
- package/src/public/enqueued_call_side_effect_trace.ts +68 -90
- package/src/public/executor_metrics.ts +0 -4
- package/src/public/fixtures/index.ts +28 -17
- package/src/public/index.ts +0 -1
- package/src/public/public_db_sources.ts +32 -19
- package/src/public/public_processor.ts +52 -55
- package/src/public/public_processor_metrics.ts +1 -1
- package/src/public/public_tx_context.ts +89 -76
- package/src/public/public_tx_simulator.ts +58 -49
- package/src/public/side_effect_trace_interface.ts +8 -15
- package/src/public/transitional_adapters.ts +43 -215
- package/dest/public/dual_side_effect_trace.d.ts +0 -77
- package/dest/public/dual_side_effect_trace.d.ts.map +0 -1
- package/dest/public/dual_side_effect_trace.js +0 -119
- package/dest/public/side_effect_trace.d.ts +0 -96
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace.js +0 -309
- package/src/public/dual_side_effect_trace.ts +0 -242
- package/src/public/side_effect_trace.ts +0 -536
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { computeNoteHashNonce, computeUniqueNoteHash, computeVarArgsHash, siloNoteHash } from '@aztec/circuits.js/hash';
|
|
1
|
+
import { Fr, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PrivateToAvmAccumulatedData, PrivateToAvmAccumulatedDataArrayLengths, PublicCallRequest, PublicDataWrite, TreeSnapshots, countAccumulatedItems, mergeAccumulatedData, } from '@aztec/circuits.js';
|
|
2
|
+
import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash } from '@aztec/circuits.js/hash';
|
|
4
3
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
4
|
import { assertLength } from '@aztec/foundation/serialize';
|
|
6
|
-
|
|
7
|
-
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
8
|
-
export function generateAvmCircuitPublicInputs(trace, globalVariables, startStateReference, startGasUsed, gasSettings, setupCallRequests, appLogicCallRequests, teardownCallRequests, nonRevertibleAccumulatedDataFromPrivate, revertibleAccumulatedDataFromPrivate, endStateReference, endGasUsed, transactionFee, revertCode) {
|
|
5
|
+
export function generateAvmCircuitPublicInputs(trace, globalVariables, startStateReference, startGasUsed, gasSettings, feePayer, setupCallRequests, appLogicCallRequests, teardownCallRequests, nonRevertibleAccumulatedDataFromPrivate, revertibleAccumulatedDataFromPrivate, endTreeSnapshots, endGasUsed, transactionFee, revertCode) {
|
|
9
6
|
const startTreeSnapshots = new TreeSnapshots(startStateReference.l1ToL2MessageTree, startStateReference.partial.noteHashTree, startStateReference.partial.nullifierTree, startStateReference.partial.publicDataTree);
|
|
10
|
-
const
|
|
11
|
-
const avmCircuitPublicInputs = trace.toAvmCircuitPublicInputs(globalVariables, startTreeSnapshots, startGasUsed, gasSettings, setupCallRequests, appLogicCallRequests, teardownCallRequests.length ? teardownCallRequests[0] : PublicCallRequest.empty(), endTreeSnapshots, endGasUsed, transactionFee, !revertCode.isOK());
|
|
7
|
+
const avmCircuitPublicInputs = trace.toAvmCircuitPublicInputs(globalVariables, startTreeSnapshots, startGasUsed, gasSettings, feePayer, setupCallRequests, appLogicCallRequests, teardownCallRequests.length ? teardownCallRequests[0] : PublicCallRequest.empty(), endTreeSnapshots, endGasUsed, transactionFee, !revertCode.isOK());
|
|
12
8
|
const getArrayLengths = (from) => new PrivateToAvmAccumulatedDataArrayLengths(countAccumulatedItems(from.noteHashes), countAccumulatedItems(from.nullifiers), countAccumulatedItems(from.l2ToL1Msgs));
|
|
13
9
|
const convertAccumulatedData = (from) => new PrivateToAvmAccumulatedData(from.noteHashes, from.nullifiers, from.l2ToL1Msgs);
|
|
14
10
|
// Temporary overrides as these entries aren't yet populated in trace
|
|
@@ -16,12 +12,26 @@ export function generateAvmCircuitPublicInputs(trace, globalVariables, startStat
|
|
|
16
12
|
avmCircuitPublicInputs.previousRevertibleAccumulatedDataArrayLengths = getArrayLengths(revertibleAccumulatedDataFromPrivate);
|
|
17
13
|
avmCircuitPublicInputs.previousNonRevertibleAccumulatedData = convertAccumulatedData(nonRevertibleAccumulatedDataFromPrivate);
|
|
18
14
|
avmCircuitPublicInputs.previousRevertibleAccumulatedData = convertAccumulatedData(revertibleAccumulatedDataFromPrivate);
|
|
15
|
+
const txHash = avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.nullifiers[0];
|
|
16
|
+
// Add nonces to revertible note hashes from private. These don't have nonces since we don't know
|
|
17
|
+
// the final position in the tx until the AVM has executed.
|
|
18
|
+
// TODO: Use the final position in the tx
|
|
19
|
+
for (let revertibleIndex = 0; revertibleIndex < avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes.length; revertibleIndex++) {
|
|
20
|
+
const noteHash = avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes[revertibleIndex];
|
|
21
|
+
if (noteHash.isZero()) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const indexInTx = revertibleIndex + avmCircuitPublicInputs.previousNonRevertibleAccumulatedDataArrayLengths.noteHashes;
|
|
25
|
+
const nonce = computeNoteHashNonce(txHash, indexInTx);
|
|
26
|
+
const uniqueNoteHash = computeUniqueNoteHash(nonce, noteHash);
|
|
27
|
+
avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes[revertibleIndex] = uniqueNoteHash;
|
|
28
|
+
}
|
|
19
29
|
// merge all revertible & non-revertible side effects into output accumulated data
|
|
20
30
|
const noteHashesFromPrivate = revertCode.isOK()
|
|
21
31
|
? mergeAccumulatedData(avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.noteHashes, avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes)
|
|
22
32
|
: avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.noteHashes;
|
|
23
33
|
avmCircuitPublicInputs.accumulatedData.noteHashes = assertLength(mergeAccumulatedData(noteHashesFromPrivate, avmCircuitPublicInputs.accumulatedData.noteHashes), MAX_NOTE_HASHES_PER_TX);
|
|
24
|
-
|
|
34
|
+
// Silo and add nonces for note hashes emitted by the AVM
|
|
25
35
|
const scopedNoteHashesFromPublic = trace.getSideEffects().noteHashes;
|
|
26
36
|
for (let i = 0; i < scopedNoteHashesFromPublic.length; i++) {
|
|
27
37
|
const scopedNoteHash = scopedNoteHashesFromPublic[i];
|
|
@@ -29,93 +39,24 @@ export function generateAvmCircuitPublicInputs(trace, globalVariables, startStat
|
|
|
29
39
|
if (!noteHash.isZero()) {
|
|
30
40
|
const noteHashIndexInTx = i + countAccumulatedItems(noteHashesFromPrivate);
|
|
31
41
|
const nonce = computeNoteHashNonce(txHash, noteHashIndexInTx);
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
avmCircuitPublicInputs.accumulatedData.noteHashes[noteHashIndexInTx] =
|
|
42
|
+
const siloedNoteHash = siloNoteHash(scopedNoteHash.contractAddress, noteHash);
|
|
43
|
+
const uniqueNoteHash = computeUniqueNoteHash(nonce, siloedNoteHash);
|
|
44
|
+
avmCircuitPublicInputs.accumulatedData.noteHashes[noteHashIndexInTx] = uniqueNoteHash;
|
|
35
45
|
}
|
|
36
46
|
}
|
|
37
47
|
const msgsFromPrivate = revertCode.isOK()
|
|
38
48
|
? mergeAccumulatedData(avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs, avmCircuitPublicInputs.previousRevertibleAccumulatedData.l2ToL1Msgs)
|
|
39
49
|
: avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs;
|
|
40
50
|
avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs = assertLength(mergeAccumulatedData(msgsFromPrivate, avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs), MAX_L2_TO_L1_MSGS_PER_TX);
|
|
41
|
-
|
|
42
|
-
|
|
51
|
+
// Maps slot to value. Maps in TS are iterable in insertion order, which is exactly what we want for
|
|
52
|
+
// squashing "to the left", where the first occurrence of a slot uses the value of the last write to it,
|
|
53
|
+
// and the rest occurrences are omitted
|
|
54
|
+
const squashedPublicDataWrites = new Map();
|
|
43
55
|
for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
|
|
44
|
-
|
|
45
|
-
const prevOccurrences = leafSlotOccurences.get(slot) || 0;
|
|
46
|
-
leafSlotOccurences.set(slot, prevOccurrences + 1);
|
|
47
|
-
}
|
|
48
|
-
for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
|
|
49
|
-
const slot = publicDataWrite.leafSlot.toBigInt();
|
|
50
|
-
const prevOccurrences = leafSlotOccurences.get(slot) || 0;
|
|
51
|
-
if (prevOccurrences === 1) {
|
|
52
|
-
dedupedPublicDataWrites.push(publicDataWrite);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
leafSlotOccurences.set(slot, prevOccurrences - 1);
|
|
56
|
-
}
|
|
56
|
+
squashedPublicDataWrites.set(publicDataWrite.leafSlot.toBigInt(), publicDataWrite.value);
|
|
57
57
|
}
|
|
58
|
-
avmCircuitPublicInputs.accumulatedData.publicDataWrites = padArrayEnd(
|
|
58
|
+
avmCircuitPublicInputs.accumulatedData.publicDataWrites = padArrayEnd(Array.from(squashedPublicDataWrites.entries()).map(([slot, value]) => new PublicDataWrite(new Fr(slot), value)), PublicDataWrite.empty(), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
59
59
|
//console.log(`AvmCircuitPublicInputs:\n${inspect(avmCircuitPublicInputs)}`);
|
|
60
60
|
return avmCircuitPublicInputs;
|
|
61
61
|
}
|
|
62
|
-
|
|
63
|
-
const avmExecutionEnv = new AvmExecutionEnvironment(executionRequest.callContext.contractAddress, executionRequest.callContext.msgSender, executionRequest.callContext.functionSelector,
|
|
64
|
-
/*contractCallDepth=*/ Fr.zero(), transactionFee, globalVariables, executionRequest.callContext.isStaticCall, executionRequest.args);
|
|
65
|
-
const avmCallResult = new AvmFinalizedCallResult(result.reverted, result.returnValues, result.endGasLeft);
|
|
66
|
-
// Generate an AVM proving request
|
|
67
|
-
let avmProvingRequest;
|
|
68
|
-
if (real) {
|
|
69
|
-
const deprecatedFunctionCallResult = stateManager.trace.toPublicFunctionCallResult(avmExecutionEnv,
|
|
70
|
-
/*startGasLeft=*/ allocatedGas, Buffer.alloc(0), avmCallResult, fnName);
|
|
71
|
-
const publicInputs = getPublicCircuitPublicInputs(historicalHeader, globalVariables, deprecatedFunctionCallResult);
|
|
72
|
-
avmProvingRequest = makeAvmProvingRequest(publicInputs, deprecatedFunctionCallResult);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
avmProvingRequest = emptyAvmProvingRequest();
|
|
76
|
-
}
|
|
77
|
-
return avmProvingRequest;
|
|
78
|
-
}
|
|
79
|
-
function emptyAvmProvingRequest() {
|
|
80
|
-
return {
|
|
81
|
-
type: ProvingRequestType.PUBLIC_VM,
|
|
82
|
-
inputs: AvmCircuitInputs.empty(),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
function makeAvmProvingRequest(inputs, result) {
|
|
86
|
-
return {
|
|
87
|
-
type: ProvingRequestType.PUBLIC_VM,
|
|
88
|
-
inputs: new AvmCircuitInputs(result.functionName, result.calldata, inputs, result.avmCircuitHints, AvmCircuitPublicInputs.empty()),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
function getPublicCircuitPublicInputs(historicalHeader, globalVariables, result) {
|
|
92
|
-
const header = historicalHeader.clone(); // don't modify the original
|
|
93
|
-
header.state.partial.publicDataTree.root = Fr.zero(); // AVM doesn't check this yet
|
|
94
|
-
return PublicCircuitPublicInputs.from({
|
|
95
|
-
callContext: result.executionRequest.callContext,
|
|
96
|
-
proverAddress: AztecAddress.ZERO,
|
|
97
|
-
argsHash: computeVarArgsHash(result.executionRequest.args),
|
|
98
|
-
noteHashes: padArrayEnd(result.noteHashes, NoteHash.empty(), MAX_NOTE_HASHES_PER_CALL, `Too many note hashes. Got ${result.noteHashes.length} with max being ${MAX_NOTE_HASHES_PER_CALL}`),
|
|
99
|
-
nullifiers: padArrayEnd(result.nullifiers, Nullifier.empty(), MAX_NULLIFIERS_PER_CALL, `Too many nullifiers. Got ${result.nullifiers.length} with max being ${MAX_NULLIFIERS_PER_CALL}`),
|
|
100
|
-
l2ToL1Msgs: padArrayEnd(result.l2ToL1Messages, L2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_CALL, `Too many L2 to L1 messages. Got ${result.l2ToL1Messages.length} with max being ${MAX_L2_TO_L1_MSGS_PER_CALL}`),
|
|
101
|
-
startSideEffectCounter: result.startSideEffectCounter,
|
|
102
|
-
endSideEffectCounter: result.endSideEffectCounter,
|
|
103
|
-
returnsHash: computeVarArgsHash(result.returnValues),
|
|
104
|
-
noteHashReadRequests: padArrayEnd(result.noteHashReadRequests, TreeLeafReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, `Too many note hash read requests. Got ${result.noteHashReadRequests.length} with max being ${MAX_NOTE_HASH_READ_REQUESTS_PER_CALL}`),
|
|
105
|
-
nullifierReadRequests: padArrayEnd(result.nullifierReadRequests, ReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_CALL, `Too many nullifier read requests. Got ${result.nullifierReadRequests.length} with max being ${MAX_NULLIFIER_READ_REQUESTS_PER_CALL}`),
|
|
106
|
-
nullifierNonExistentReadRequests: padArrayEnd(result.nullifierNonExistentReadRequests, ReadRequest.empty(), MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, `Too many nullifier non-existent read requests. Got ${result.nullifierNonExistentReadRequests.length} with max being ${MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL}`),
|
|
107
|
-
l1ToL2MsgReadRequests: padArrayEnd(result.l1ToL2MsgReadRequests, TreeLeafReadRequest.empty(), MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, `Too many L1 to L2 message read requests. Got ${result.l1ToL2MsgReadRequests.length} with max being ${MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL}`),
|
|
108
|
-
contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL, `Too many public data reads. Got ${result.contractStorageReads.length} with max being ${MAX_PUBLIC_DATA_READS_PER_CALL}`),
|
|
109
|
-
contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, `Too many public data update requests. Got ${result.contractStorageUpdateRequests.length} with max being ${MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL}`),
|
|
110
|
-
publicCallRequests: padArrayEnd(result.publicCallRequests, PublicInnerCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_CALL, `Too many public call requests. Got ${result.publicCallRequests.length} with max being ${MAX_ENQUEUED_CALLS_PER_CALL}`),
|
|
111
|
-
unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL, `Too many unencrypted logs. Got ${result.unencryptedLogsHashes.length} with max being ${MAX_UNENCRYPTED_LOGS_PER_CALL}`),
|
|
112
|
-
historicalHeader: header,
|
|
113
|
-
globalVariables: globalVariables,
|
|
114
|
-
startGasLeft: Gas.from(result.startGasLeft),
|
|
115
|
-
endGasLeft: Gas.from(result.endGasLeft),
|
|
116
|
-
transactionFee: result.transactionFee,
|
|
117
|
-
// TODO(@just-mitch): need better mapping from simulator to revert code.
|
|
118
|
-
revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQixrQkFBa0IsRUFBK0IsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixFQUFFLEVBQ0YsR0FBRyxFQUlILGFBQWEsRUFDYixPQUFPLEVBQ1AsMkJBQTJCLEVBQzNCLHVDQUF1QyxFQUN2QywwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsb0NBQW9DLEVBQ3BDLHVCQUF1QixFQUN2QixpREFBaUQsRUFDakQsb0NBQW9DLEVBQ3BDLDhCQUE4QixFQUM5Qix3Q0FBd0MsRUFDeEMsc0NBQXNDLEVBQ3RDLDZCQUE2QixFQUM3QixRQUFRLEVBQ1IsU0FBUyxFQUNULDJCQUEyQixFQUMzQix1Q0FBdUMsRUFFdkMsaUJBQWlCLEVBQ2pCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2Ysc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxVQUFVLEVBRVYsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsb0JBQW9CLEdBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLHVCQUF1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
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLEVBQUUsRUFJRix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLDRDQUE0QyxFQUM1QywyQkFBMkIsRUFDM0IsdUNBQXVDLEVBRXZDLGlCQUFpQixFQUNqQixlQUFlLEVBR2YsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixvQkFBb0IsR0FDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUkzRCxNQUFNLFVBQVUsOEJBQThCLENBQzVDLEtBQXdDLEVBQ3hDLGVBQWdDLEVBQ2hDLG1CQUFtQyxFQUNuQyxZQUFpQixFQUNqQixXQUF3QixFQUN4QixRQUFzQixFQUN0QixpQkFBc0MsRUFDdEMsb0JBQXlDLEVBQ3pDLG9CQUF5QyxFQUN6Qyx1Q0FBdUUsRUFDdkUsb0NBQW9FLEVBQ3BFLGdCQUErQixFQUMvQixVQUFlLEVBQ2YsY0FBa0IsRUFDbEIsVUFBc0I7SUFFdEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGFBQWEsQ0FDMUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQ3JDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQ3hDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ3pDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQzNDLENBQUM7SUFFRixNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyx3QkFBd0IsQ0FDM0QsZUFBZSxFQUNmLGtCQUFrQixF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
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
+
"./client": "./dest/client/index.js",
|
|
8
|
+
"./acvm": "./dest/acvm/index.js",
|
|
9
|
+
"./errors": "./dest/common/errors.js",
|
|
7
10
|
"./public/fixtures": "./dest/public/fixtures/index.js"
|
|
8
11
|
},
|
|
9
12
|
"typedocOptions": {
|
|
@@ -56,17 +59,21 @@
|
|
|
56
59
|
"summaryThreshold": 9999
|
|
57
60
|
}
|
|
58
61
|
]
|
|
62
|
+
],
|
|
63
|
+
"testTimeout": 30000,
|
|
64
|
+
"setupFiles": [
|
|
65
|
+
"../../foundation/src/jest/setup.mjs"
|
|
59
66
|
]
|
|
60
67
|
},
|
|
61
68
|
"dependencies": {
|
|
62
|
-
"@aztec/circuit-types": "0.
|
|
63
|
-
"@aztec/circuits.js": "0.
|
|
64
|
-
"@aztec/foundation": "0.
|
|
65
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
66
|
-
"@aztec/protocol-contracts": "0.
|
|
67
|
-
"@aztec/telemetry-client": "0.
|
|
68
|
-
"@aztec/types": "0.
|
|
69
|
-
"@aztec/world-state": "0.
|
|
69
|
+
"@aztec/circuit-types": "0.67.0",
|
|
70
|
+
"@aztec/circuits.js": "0.67.0",
|
|
71
|
+
"@aztec/foundation": "0.67.0",
|
|
72
|
+
"@aztec/noir-protocol-circuits-types": "0.67.0",
|
|
73
|
+
"@aztec/protocol-contracts": "0.67.0",
|
|
74
|
+
"@aztec/telemetry-client": "0.67.0",
|
|
75
|
+
"@aztec/types": "0.67.0",
|
|
76
|
+
"@aztec/world-state": "0.67.0",
|
|
70
77
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
71
78
|
"@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
|
|
72
79
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
package/src/acvm/acvm.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type NoirCallStack } from '@aztec/circuit-types';
|
|
2
2
|
import type { FunctionDebugMetadata } from '@aztec/foundation/abi';
|
|
3
|
-
import {
|
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
type ExecutionError,
|
|
@@ -42,7 +42,7 @@ export async function acvm(
|
|
|
42
42
|
initialWitness: ACVMWitness,
|
|
43
43
|
callback: ACIRCallback,
|
|
44
44
|
): Promise<ACIRExecutionResult> {
|
|
45
|
-
const logger =
|
|
45
|
+
const logger = createLogger('simulator:acvm');
|
|
46
46
|
|
|
47
47
|
const solvedAndReturnWitness = await executeCircuitWithReturnWitness(
|
|
48
48
|
acir,
|
|
@@ -146,10 +146,10 @@ export class Oracle {
|
|
|
146
146
|
return witness.toFields().map(toACVMField);
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
async
|
|
149
|
+
async getBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
|
|
150
150
|
const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
|
|
151
151
|
|
|
152
|
-
const header = await this.typedOracle.
|
|
152
|
+
const header = await this.typedOracle.getBlockHeader(parsedBlockNumber);
|
|
153
153
|
if (!header) {
|
|
154
154
|
throw new Error(`Block header not found for block ${parsedBlockNumber}.`);
|
|
155
155
|
}
|
|
@@ -306,36 +306,6 @@ export class Oracle {
|
|
|
306
306
|
return newValues.map(toACVMField);
|
|
307
307
|
}
|
|
308
308
|
|
|
309
|
-
emitEncryptedEventLog(
|
|
310
|
-
[contractAddress]: ACVMField[],
|
|
311
|
-
[randomness]: ACVMField[],
|
|
312
|
-
encryptedEvent: ACVMField[],
|
|
313
|
-
[counter]: ACVMField[],
|
|
314
|
-
): void {
|
|
315
|
-
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
316
|
-
const processedInput = Buffer.from(encryptedEvent.map(fromACVMField).map(f => f.toNumber()));
|
|
317
|
-
this.typedOracle.emitEncryptedEventLog(
|
|
318
|
-
AztecAddress.fromString(contractAddress),
|
|
319
|
-
Fr.fromString(randomness),
|
|
320
|
-
processedInput,
|
|
321
|
-
+counter,
|
|
322
|
-
);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
emitEncryptedNoteLog([noteHashCounter]: ACVMField[], encryptedNote: ACVMField[], [counter]: ACVMField[]): void {
|
|
326
|
-
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
327
|
-
const processedInput = Buffer.from(encryptedNote.map(fromACVMField).map(f => f.toNumber()));
|
|
328
|
-
this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
emitUnencryptedLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): ACVMField {
|
|
332
|
-
const logPayload = Buffer.concat(message.map(fromACVMField).map(f => f.toBuffer()));
|
|
333
|
-
const log = new UnencryptedL2Log(AztecAddress.fromString(contractAddress), logPayload);
|
|
334
|
-
|
|
335
|
-
this.typedOracle.emitUnencryptedLog(log, +counter);
|
|
336
|
-
return toACVMField(0);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
309
|
emitContractClassLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): ACVMField {
|
|
340
310
|
const logPayload = Buffer.concat(message.map(fromACVMField).map(f => f.toBuffer()));
|
|
341
311
|
const log = new UnencryptedL2Log(AztecAddress.fromString(contractAddress), logPayload);
|
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
type UnencryptedL2Log,
|
|
10
10
|
} from '@aztec/circuit-types';
|
|
11
11
|
import {
|
|
12
|
+
type BlockHeader,
|
|
12
13
|
type ContractInstance,
|
|
13
|
-
type Header,
|
|
14
14
|
type IndexedTaggingSecret,
|
|
15
15
|
type KeyValidationRequest,
|
|
16
16
|
type L1_TO_L2_MSG_TREE_HEIGHT,
|
|
@@ -127,8 +127,8 @@ export abstract class TypedOracle {
|
|
|
127
127
|
throw new OracleMethodNotAvailableError('getLowNullifierMembershipWitness');
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
|
|
131
|
-
throw new OracleMethodNotAvailableError('
|
|
130
|
+
getBlockHeader(_blockNumber: number): Promise<BlockHeader | undefined> {
|
|
131
|
+
throw new OracleMethodNotAvailableError('getBlockHeader');
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
getCompleteAddress(_account: AztecAddress): Promise<CompleteAddress> {
|
|
@@ -195,23 +195,6 @@ export abstract class TypedOracle {
|
|
|
195
195
|
throw new OracleMethodNotAvailableError('storageWrite');
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
emitEncryptedEventLog(
|
|
199
|
-
_contractAddress: AztecAddress,
|
|
200
|
-
_randomness: Fr,
|
|
201
|
-
_encryptedEvent: Buffer,
|
|
202
|
-
_counter: number,
|
|
203
|
-
): void {
|
|
204
|
-
throw new OracleMethodNotAvailableError('emitEncryptedEventLog');
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
emitEncryptedNoteLog(_noteHashCounter: number, _encryptedNote: Buffer, _counter: number): void {
|
|
208
|
-
throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
emitUnencryptedLog(_log: UnencryptedL2Log, _counter: number): void {
|
|
212
|
-
throw new OracleMethodNotAvailableError('emitUnencryptedLog');
|
|
213
|
-
}
|
|
214
|
-
|
|
215
198
|
emitContractClassLog(_log: UnencryptedL2Log, _counter: number): Fr {
|
|
216
199
|
throw new OracleMethodNotAvailableError('emitContractClassUnencryptedLog');
|
|
217
200
|
}
|
package/src/acvm/serialize.ts
CHANGED
|
@@ -32,7 +32,7 @@ export function toACVMField(
|
|
|
32
32
|
} else if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'bigint') {
|
|
33
33
|
buffer = new Fr(value).toBuffer();
|
|
34
34
|
} else if (typeof value === 'string') {
|
|
35
|
-
buffer = Fr.
|
|
35
|
+
buffer = Fr.fromHexString(value).toBuffer();
|
|
36
36
|
} else {
|
|
37
37
|
buffer = value.toBuffer();
|
|
38
38
|
}
|
package/src/avm/avm_context.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AztecAddress
|
|
1
|
+
import { type AztecAddress } from '@aztec/circuits.js';
|
|
2
2
|
import { type Fr } from '@aztec/foundation/fields';
|
|
3
3
|
|
|
4
4
|
import { type AvmExecutionEnvironment } from './avm_execution_environment.js';
|
|
@@ -43,13 +43,12 @@ export class AvmContext {
|
|
|
43
43
|
calldata: Fr[],
|
|
44
44
|
allocatedGas: Gas,
|
|
45
45
|
callType: 'CALL' | 'STATICCALL',
|
|
46
|
-
functionSelector: FunctionSelector = FunctionSelector.empty(),
|
|
47
46
|
): AvmContext {
|
|
48
47
|
const deriveFn =
|
|
49
48
|
callType === 'CALL'
|
|
50
49
|
? this.environment.deriveEnvironmentForNestedCall
|
|
51
50
|
: this.environment.deriveEnvironmentForNestedStaticCall;
|
|
52
|
-
const newExecutionEnvironment = deriveFn.call(this.environment, address, calldata
|
|
51
|
+
const newExecutionEnvironment = deriveFn.call(this.environment, address, calldata);
|
|
53
52
|
const forkedWorldState = this.persistableState.fork();
|
|
54
53
|
const machineState = AvmMachineState.fromState(gasToGasLeft(allocatedGas));
|
|
55
54
|
return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type GlobalVariables } from '@aztec/circuits.js';
|
|
2
2
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
3
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
4
|
|
|
@@ -10,7 +10,6 @@ export class AvmExecutionEnvironment {
|
|
|
10
10
|
constructor(
|
|
11
11
|
public readonly address: AztecAddress,
|
|
12
12
|
public readonly sender: AztecAddress,
|
|
13
|
-
public readonly functionSelector: FunctionSelector, // may be temporary (#7224)
|
|
14
13
|
public readonly contractCallDepth: Fr,
|
|
15
14
|
public readonly transactionFee: Fr,
|
|
16
15
|
public readonly globals: GlobalVariables,
|
|
@@ -18,16 +17,10 @@ export class AvmExecutionEnvironment {
|
|
|
18
17
|
public readonly calldata: Fr[],
|
|
19
18
|
) {}
|
|
20
19
|
|
|
21
|
-
private deriveEnvironmentForNestedCallInternal(
|
|
22
|
-
targetAddress: AztecAddress,
|
|
23
|
-
calldata: Fr[],
|
|
24
|
-
functionSelector: FunctionSelector,
|
|
25
|
-
isStaticCall: boolean,
|
|
26
|
-
) {
|
|
20
|
+
private deriveEnvironmentForNestedCallInternal(targetAddress: AztecAddress, calldata: Fr[], isStaticCall: boolean) {
|
|
27
21
|
return new AvmExecutionEnvironment(
|
|
28
22
|
/*address=*/ targetAddress,
|
|
29
23
|
/*sender=*/ this.address,
|
|
30
|
-
functionSelector,
|
|
31
24
|
this.contractCallDepth.add(Fr.ONE),
|
|
32
25
|
this.transactionFee,
|
|
33
26
|
this.globals,
|
|
@@ -36,29 +29,11 @@ export class AvmExecutionEnvironment {
|
|
|
36
29
|
);
|
|
37
30
|
}
|
|
38
31
|
|
|
39
|
-
public deriveEnvironmentForNestedCall(
|
|
40
|
-
targetAddress
|
|
41
|
-
calldata: Fr[],
|
|
42
|
-
functionSelector: FunctionSelector = FunctionSelector.empty(),
|
|
43
|
-
): AvmExecutionEnvironment {
|
|
44
|
-
return this.deriveEnvironmentForNestedCallInternal(
|
|
45
|
-
targetAddress,
|
|
46
|
-
calldata,
|
|
47
|
-
functionSelector,
|
|
48
|
-
/*isStaticCall=*/ false,
|
|
49
|
-
);
|
|
32
|
+
public deriveEnvironmentForNestedCall(targetAddress: AztecAddress, calldata: Fr[]): AvmExecutionEnvironment {
|
|
33
|
+
return this.deriveEnvironmentForNestedCallInternal(targetAddress, calldata, /*isStaticCall=*/ false);
|
|
50
34
|
}
|
|
51
35
|
|
|
52
|
-
public deriveEnvironmentForNestedStaticCall(
|
|
53
|
-
targetAddress
|
|
54
|
-
calldata: Fr[],
|
|
55
|
-
functionSelector: FunctionSelector,
|
|
56
|
-
): AvmExecutionEnvironment {
|
|
57
|
-
return this.deriveEnvironmentForNestedCallInternal(
|
|
58
|
-
targetAddress,
|
|
59
|
-
calldata,
|
|
60
|
-
functionSelector,
|
|
61
|
-
/*isStaticCall=*/ true,
|
|
62
|
-
);
|
|
36
|
+
public deriveEnvironmentForNestedStaticCall(targetAddress: AztecAddress, calldata: Fr[]): AvmExecutionEnvironment {
|
|
37
|
+
return this.deriveEnvironmentForNestedCallInternal(targetAddress, calldata, /*isStaticCall=*/ true);
|
|
63
38
|
}
|
|
64
39
|
}
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
11
11
|
import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
12
12
|
import { Fr } from '@aztec/foundation/fields';
|
|
13
|
-
import { type
|
|
13
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
14
14
|
import { type FunctionsOf } from '@aztec/foundation/types';
|
|
15
15
|
|
|
16
16
|
import { strict as assert } from 'assert';
|
|
@@ -227,7 +227,7 @@ export enum TypeTag {
|
|
|
227
227
|
export type TaggedMemoryInterface = FunctionsOf<TaggedMemory>;
|
|
228
228
|
|
|
229
229
|
export class TaggedMemory implements TaggedMemoryInterface {
|
|
230
|
-
static readonly log:
|
|
230
|
+
static readonly log: Logger = createLogger('simulator:avm:memory');
|
|
231
231
|
|
|
232
232
|
// Whether to track and validate memory accesses for each instruction.
|
|
233
233
|
static readonly TRACK_MEMORY_ACCESSES = process.env.NODE_ENV === 'test';
|
|
@@ -259,7 +259,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
259
259
|
public getAs<T>(offset: number): T {
|
|
260
260
|
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
261
261
|
const word = this._mem[offset];
|
|
262
|
-
TaggedMemory.log.
|
|
262
|
+
TaggedMemory.log.trace(`get(${offset}) = ${word}`);
|
|
263
263
|
if (word === undefined) {
|
|
264
264
|
TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
|
|
265
265
|
return new Field(0) as T;
|
|
@@ -270,7 +270,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
270
270
|
public getSlice(offset: number, size: number): MemoryValue[] {
|
|
271
271
|
assert(offset + size <= TaggedMemory.MAX_MEMORY_SIZE);
|
|
272
272
|
const value = this._mem.slice(offset, offset + size);
|
|
273
|
-
TaggedMemory.log.
|
|
273
|
+
TaggedMemory.log.trace(`getSlice(${offset}, ${size}) = ${value}`);
|
|
274
274
|
for (let i = 0; i < value.length; i++) {
|
|
275
275
|
if (value[i] === undefined) {
|
|
276
276
|
value[i] = new Field(0);
|
|
@@ -293,7 +293,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
293
293
|
public set(offset: number, v: MemoryValue) {
|
|
294
294
|
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
295
295
|
this._mem[offset] = v;
|
|
296
|
-
TaggedMemory.log.
|
|
296
|
+
TaggedMemory.log.trace(`set(${offset}, ${v})`);
|
|
297
297
|
}
|
|
298
298
|
|
|
299
299
|
public setSlice(offset: number, vs: MemoryValue[]) {
|
|
@@ -303,7 +303,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
303
303
|
this._mem.length = offset + vs.length;
|
|
304
304
|
}
|
|
305
305
|
this._mem.splice(offset, vs.length, ...vs);
|
|
306
|
-
TaggedMemory.log.
|
|
306
|
+
TaggedMemory.log.trace(`setSlice(${offset}, ${vs})`);
|
|
307
307
|
}
|
|
308
308
|
|
|
309
309
|
public getTag(offset: number): TypeTag {
|
package/src/avm/avm_simulator.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
Fr,
|
|
4
|
-
type FunctionSelector,
|
|
5
|
-
type GlobalVariables,
|
|
6
|
-
MAX_L2_GAS_PER_ENQUEUED_CALL,
|
|
7
|
-
} from '@aztec/circuits.js';
|
|
8
|
-
import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
|
|
1
|
+
import { type AztecAddress, Fr, type GlobalVariables, MAX_L2_GAS_PER_TX_PUBLIC_PORTION } from '@aztec/circuits.js';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
9
3
|
|
|
10
4
|
import { strict as assert } from 'assert';
|
|
11
5
|
|
|
@@ -41,7 +35,7 @@ type PcTally = {
|
|
|
41
35
|
};
|
|
42
36
|
|
|
43
37
|
export class AvmSimulator {
|
|
44
|
-
private log:
|
|
38
|
+
private log: Logger;
|
|
45
39
|
private bytecode: Buffer | undefined;
|
|
46
40
|
private opcodeTallies: Map<string, OpcodeTally> = new Map();
|
|
47
41
|
private pcTallies: Map<number, PcTally> = new Map();
|
|
@@ -49,23 +43,35 @@ export class AvmSimulator {
|
|
|
49
43
|
private tallyPrintFunction = () => {};
|
|
50
44
|
private tallyInstructionFunction = (_a: number, _b: string, _c: Gas) => {};
|
|
51
45
|
|
|
46
|
+
// Test Purposes only: Logger will not have the proper function name. Use this constructor for testing purposes
|
|
47
|
+
// only. Otherwise, use build() below.
|
|
52
48
|
constructor(private context: AvmContext, private instructionSet: InstructionSet = INSTRUCTION_SET()) {
|
|
53
49
|
assert(
|
|
54
|
-
context.machineState.gasLeft.l2Gas <=
|
|
55
|
-
`Cannot allocate more than ${
|
|
50
|
+
context.machineState.gasLeft.l2Gas <= MAX_L2_GAS_PER_TX_PUBLIC_PORTION,
|
|
51
|
+
`Cannot allocate more than ${MAX_L2_GAS_PER_TX_PUBLIC_PORTION} to the AVM for execution.`,
|
|
56
52
|
);
|
|
57
|
-
this.log =
|
|
58
|
-
|
|
53
|
+
this.log = createLogger(`simulator:avm(calldata[0]: ${context.environment.calldata[0]})`);
|
|
54
|
+
// TODO(palla/log): Should tallies be printed on debug, or only on trace?
|
|
55
|
+
if (this.log.isLevelEnabled('debug')) {
|
|
59
56
|
this.tallyPrintFunction = this.printOpcodeTallies;
|
|
60
57
|
this.tallyInstructionFunction = this.tallyInstruction;
|
|
61
58
|
}
|
|
62
59
|
}
|
|
63
60
|
|
|
64
|
-
|
|
61
|
+
// Factory to have a proper function name in the logger. Retrieving the name is asynchronous and
|
|
62
|
+
// cannot be done as part of the constructor.
|
|
63
|
+
public static async build(context: AvmContext): Promise<AvmSimulator> {
|
|
64
|
+
const simulator = new AvmSimulator(context);
|
|
65
|
+
const fnName = await context.persistableState.getPublicFunctionDebugName(context.environment);
|
|
66
|
+
simulator.log = createLogger(`simulator:avm(f:${fnName})`);
|
|
67
|
+
|
|
68
|
+
return simulator;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public static async create(
|
|
65
72
|
stateManager: AvmPersistableStateManager,
|
|
66
73
|
address: AztecAddress,
|
|
67
74
|
sender: AztecAddress,
|
|
68
|
-
functionSelector: FunctionSelector, // may be temporary (#7224)
|
|
69
75
|
transactionFee: Fr,
|
|
70
76
|
globals: GlobalVariables,
|
|
71
77
|
isStaticCall: boolean,
|
|
@@ -75,7 +81,6 @@ export class AvmSimulator {
|
|
|
75
81
|
const avmExecutionEnv = new AvmExecutionEnvironment(
|
|
76
82
|
address,
|
|
77
83
|
sender,
|
|
78
|
-
functionSelector,
|
|
79
84
|
/*contractCallDepth=*/ Fr.zero(),
|
|
80
85
|
transactionFee,
|
|
81
86
|
globals,
|
|
@@ -85,8 +90,7 @@ export class AvmSimulator {
|
|
|
85
90
|
|
|
86
91
|
const avmMachineState = new AvmMachineState(allocatedGas);
|
|
87
92
|
const avmContext = new AvmContext(stateManager, avmExecutionEnv, avmMachineState);
|
|
88
|
-
|
|
89
|
-
return new AvmSimulator(avmContext, instructionSet);
|
|
93
|
+
return await AvmSimulator.build(avmContext);
|
|
90
94
|
}
|
|
91
95
|
|
|
92
96
|
/**
|
|
@@ -97,11 +101,12 @@ export class AvmSimulator {
|
|
|
97
101
|
if (!bytecode) {
|
|
98
102
|
// revert, consuming all gas
|
|
99
103
|
const message = `No bytecode found at: ${this.context.environment.address}. Reverting...`;
|
|
104
|
+
const fnName = await this.context.persistableState.getPublicFunctionDebugName(this.context.environment);
|
|
100
105
|
const revertReason = new AvmRevertReason(
|
|
101
106
|
message,
|
|
102
107
|
/*failingFunction=*/ {
|
|
103
108
|
contractAddress: this.context.environment.address,
|
|
104
|
-
|
|
109
|
+
functionName: fnName,
|
|
105
110
|
},
|
|
106
111
|
/*noirCallStack=*/ [],
|
|
107
112
|
);
|
|
@@ -144,7 +149,7 @@ export class AvmSimulator {
|
|
|
144
149
|
const instrStartGas = machineState.gasLeft; // Save gas before executing instruction (for profiling)
|
|
145
150
|
const instrPc = machineState.pc; // Save PC before executing instruction (for profiling)
|
|
146
151
|
|
|
147
|
-
this.log.
|
|
152
|
+
this.log.trace(
|
|
148
153
|
`[PC:${machineState.pc}] [IC:${instrCounter++}] ${instruction.toString()} (gasLeft l2=${
|
|
149
154
|
machineState.l2GasLeft
|
|
150
155
|
} da=${machineState.daGasLeft})`,
|
|
@@ -175,7 +180,7 @@ export class AvmSimulator {
|
|
|
175
180
|
|
|
176
181
|
const output = machineState.getOutput();
|
|
177
182
|
const reverted = machineState.getReverted();
|
|
178
|
-
const revertReason = reverted ? revertReasonFromExplicitRevert(output, this.context) : undefined;
|
|
183
|
+
const revertReason = reverted ? await revertReasonFromExplicitRevert(output, this.context) : undefined;
|
|
179
184
|
const results = new AvmContractCallResult(reverted, output, machineState.gasLeft, revertReason);
|
|
180
185
|
this.log.debug(`Context execution results: ${results.toString()}`);
|
|
181
186
|
|
|
@@ -185,11 +190,11 @@ export class AvmSimulator {
|
|
|
185
190
|
} catch (err: any) {
|
|
186
191
|
this.log.verbose('Exceptional halt (revert by something other than REVERT opcode)');
|
|
187
192
|
if (!(err instanceof AvmExecutionError || err instanceof SideEffectLimitReachedError)) {
|
|
188
|
-
this.log.
|
|
193
|
+
this.log.error(`Unknown error thrown by AVM: ${err}`);
|
|
189
194
|
throw err;
|
|
190
195
|
}
|
|
191
196
|
|
|
192
|
-
const revertReason = revertReasonFromExceptionalHalt(err, this.context);
|
|
197
|
+
const revertReason = await revertReasonFromExceptionalHalt(err, this.context);
|
|
193
198
|
// Note: "exceptional halts" cannot return data, hence [].
|
|
194
199
|
const results = new AvmContractCallResult(/*reverted=*/ true, /*output=*/ [], machineState.gasLeft, revertReason);
|
|
195
200
|
this.log.debug(`Context execution results: ${results.toString()}`);
|