@aztec/simulator 0.56.0 → 0.57.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 +2 -5
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +6 -37
- package/dest/acvm/oracle/typed_oracle.d.ts +3 -6
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +1 -10
- package/dest/avm/avm_execution_environment.d.ts +2 -3
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +3 -4
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +1 -2
- package/dest/avm/avm_memory_types.d.ts +3 -2
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +3 -3
- package/dest/avm/errors.d.ts +1 -1
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/errors.js +12 -3
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +3 -3
- 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 +7 -6
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +37 -30
- package/dest/avm/opcodes/addressing_mode.d.ts +3 -2
- package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/avm/opcodes/addressing_mode.js +25 -21
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +6 -5
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +11 -9
- package/dest/avm/opcodes/commitment.d.ts.map +1 -1
- package/dest/avm/opcodes/commitment.js +6 -5
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +6 -5
- package/dest/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/avm/opcodes/contract.js +6 -5
- package/dest/avm/opcodes/control_flow.js +6 -6
- package/dest/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/avm/opcodes/conversion.js +7 -6
- package/dest/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/avm/opcodes/ec_add.js +8 -7
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +6 -5
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +27 -16
- package/dest/avm/opcodes/hashing.d.ts +1 -3
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +31 -40
- package/dest/avm/opcodes/instruction.d.ts +2 -6
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +3 -9
- package/dest/avm/opcodes/memory.d.ts +0 -12
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +21 -51
- package/dest/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/avm/opcodes/misc.js +6 -5
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
- package/dest/avm/opcodes/multi_scalar_mul.js +12 -12
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +11 -9
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +2 -3
- package/dest/avm/serialization/instruction_serialization.d.ts +32 -34
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +33 -36
- package/dest/client/client_execution_context.d.ts +6 -30
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +31 -53
- package/dest/client/index.d.ts +0 -1
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +1 -2
- package/dest/client/private_execution.d.ts +2 -2
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +5 -19
- package/dest/client/simulator.d.ts +2 -3
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +1 -1
- package/dest/common/debug_fn_name.d.ts +4 -0
- package/dest/common/debug_fn_name.d.ts.map +1 -0
- package/dest/common/debug_fn_name.js +15 -0
- package/dest/common/index.d.ts +0 -1
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +1 -2
- package/dest/public/enqueued_call_simulator.d.ts.map +1 -1
- package/dest/public/enqueued_call_simulator.js +3 -4
- package/dest/public/execution.d.ts +8 -1
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +13 -1
- package/dest/public/executor.d.ts +2 -3
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +8 -8
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +2 -2
- package/dest/public/public_processor.d.ts +1 -0
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +5 -2
- package/dest/public/side_effect_errors.d.ts +4 -0
- package/dest/public/side_effect_errors.d.ts.map +1 -0
- package/dest/public/side_effect_errors.js +7 -0
- package/dest/public/side_effect_trace.d.ts +2 -2
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +53 -28
- package/dest/public/side_effect_trace_interface.d.ts +1 -1
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/package.json +12 -9
- package/src/acvm/oracle/oracle.ts +7 -85
- package/src/acvm/oracle/typed_oracle.ts +2 -31
- package/src/avm/avm_execution_environment.ts +1 -3
- package/src/avm/avm_gas.ts +0 -1
- package/src/avm/avm_memory_types.ts +10 -5
- package/src/avm/errors.ts +11 -3
- package/src/avm/fixtures/index.ts +1 -2
- package/src/avm/journal/journal.ts +11 -6
- package/src/avm/opcodes/accrued_substate.ts +36 -44
- package/src/avm/opcodes/addressing_mode.ts +27 -24
- package/src/avm/opcodes/arithmetic.ts +5 -7
- package/src/avm/opcodes/bitwise.ts +10 -11
- package/src/avm/opcodes/commitment.ts +6 -7
- package/src/avm/opcodes/comparators.ts +5 -7
- package/src/avm/opcodes/contract.ts +5 -7
- package/src/avm/opcodes/control_flow.ts +5 -5
- package/src/avm/opcodes/conversion.ts +6 -8
- package/src/avm/opcodes/ec_add.ts +14 -16
- package/src/avm/opcodes/environment_getters.ts +5 -4
- package/src/avm/opcodes/external_calls.ts +27 -20
- package/src/avm/opcodes/hashing.ts +30 -55
- package/src/avm/opcodes/instruction.ts +3 -10
- package/src/avm/opcodes/memory.ts +20 -64
- package/src/avm/opcodes/misc.ts +5 -7
- package/src/avm/opcodes/multi_scalar_mul.ts +11 -14
- package/src/avm/opcodes/storage.ts +10 -8
- package/src/avm/serialization/bytecode_serialization.ts +0 -2
- package/src/avm/serialization/instruction_serialization.ts +0 -3
- package/src/client/client_execution_context.ts +40 -96
- package/src/client/index.ts +0 -1
- package/src/client/private_execution.ts +9 -9
- package/src/client/simulator.ts +2 -3
- package/src/common/debug_fn_name.ts +22 -0
- package/src/common/index.ts +0 -1
- package/src/public/enqueued_call_simulator.ts +2 -3
- package/src/public/execution.ts +13 -2
- package/src/public/executor.ts +6 -12
- package/src/public/hints_builder.ts +7 -9
- package/src/public/public_processor.ts +5 -1
- package/src/public/side_effect_errors.ts +6 -0
- package/src/public/side_effect_trace.ts +72 -27
- package/src/public/side_effect_trace_interface.ts +2 -2
- package/dest/client/execution_result.d.ts +0 -104
- package/dest/client/execution_result.d.ts.map +0 -1
- package/dest/client/execution_result.js +0 -136
- package/dest/common/return_values.d.ts +0 -11
- package/dest/common/return_values.d.ts.map +0 -1
- package/dest/common/return_values.js +0 -13
- package/src/client/execution_result.ts +0 -228
- package/src/common/return_values.ts +0 -18
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { PublicExecutionRequest, UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
-
import { AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, AztecAddress, CallContext, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, Gas, L2ToL1Message, LogHash, NoteHash, Nullifier, ReadRequest, TreeLeafReadRequest, } from '@aztec/circuits.js';
|
|
2
|
+
import { AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, AztecAddress, CallContext, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, Gas, L2ToL1Message, LogHash, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_TX, NoteHash, Nullifier, ReadRequest, TreeLeafReadRequest, } from '@aztec/circuits.js';
|
|
3
3
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
4
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { createSimulationError } from '../common/errors.js';
|
|
6
6
|
import { resultToPublicCallRequest } from './execution.js';
|
|
7
|
+
import { SideEffectLimitReachedError } from './side_effect_errors.js';
|
|
7
8
|
export class PublicSideEffectTrace {
|
|
8
9
|
constructor(
|
|
9
10
|
/** The counter of this trace's first side effect. */
|
|
@@ -23,7 +24,6 @@ export class PublicSideEffectTrace {
|
|
|
23
24
|
this.allUnencryptedLogs = [];
|
|
24
25
|
this.unencryptedLogsHashes = [];
|
|
25
26
|
this.publicCallRequests = [];
|
|
26
|
-
this.gotContractInstances = [];
|
|
27
27
|
this.nestedExecutions = [];
|
|
28
28
|
this.sideEffectCounter = startSideEffectCounter;
|
|
29
29
|
this.avmCircuitHints = AvmExecutionHints.empty();
|
|
@@ -37,46 +37,47 @@ export class PublicSideEffectTrace {
|
|
|
37
37
|
incrementSideEffectCounter() {
|
|
38
38
|
this.sideEffectCounter++;
|
|
39
39
|
}
|
|
40
|
+
// TODO(dbanks12): checks against tx-wide limit need access to parent trace's length
|
|
40
41
|
tracePublicStorageRead(storageAddress, slot, value, _exists, _cached) {
|
|
41
|
-
// TODO(4805): check if some threshold is reached for max storage reads
|
|
42
|
-
// (need access to parent length, or trace needs to be initialized with parent's contents)
|
|
43
42
|
// NOTE: exists and cached are unused for now but may be used for optimizations or kernel hints later
|
|
43
|
+
if (this.contractStorageReads.length >= MAX_PUBLIC_DATA_READS_PER_TX) {
|
|
44
|
+
throw new SideEffectLimitReachedError('contract storage read', MAX_PUBLIC_DATA_READS_PER_TX);
|
|
45
|
+
}
|
|
44
46
|
this.contractStorageReads.push(new ContractStorageRead(slot, value, this.sideEffectCounter, AztecAddress.fromField(storageAddress)));
|
|
45
47
|
this.avmCircuitHints.storageValues.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ value));
|
|
46
48
|
this.logger.debug(`SLOAD cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
|
|
47
49
|
this.incrementSideEffectCounter();
|
|
48
50
|
}
|
|
49
51
|
tracePublicStorageWrite(storageAddress, slot, value) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
if (this.contractStorageUpdateRequests.length >= MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
|
|
53
|
+
throw new SideEffectLimitReachedError('contract storage write', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
54
|
+
}
|
|
52
55
|
this.contractStorageUpdateRequests.push(new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, storageAddress));
|
|
53
56
|
this.logger.debug(`SSTORE cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
|
|
54
57
|
this.incrementSideEffectCounter();
|
|
55
58
|
}
|
|
56
59
|
// TODO(8287): _exists can be removed once we have the vm properly handling the equality check
|
|
57
60
|
traceNoteHashCheck(_storageAddress, noteHash, leafIndex, exists) {
|
|
58
|
-
// TODO(4805): check if some threshold is reached for max note hash checks
|
|
59
61
|
// NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
if (this.noteHashReadRequests.length >= MAX_NOTE_HASH_READ_REQUESTS_PER_TX) {
|
|
63
|
+
throw new SideEffectLimitReachedError('note hash read request', MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
64
|
+
}
|
|
62
65
|
this.noteHashReadRequests.push(new TreeLeafReadRequest(noteHash, leafIndex));
|
|
63
66
|
this.avmCircuitHints.noteHashExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(leafIndex), /*value=*/ exists ? Fr.ONE : Fr.ZERO));
|
|
67
|
+
// NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
|
|
64
68
|
}
|
|
65
69
|
traceNewNoteHash(_storageAddress, noteHash) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// IS there, and the AVM circuit should accept THAT noteHash as a hint. The circuit will then compare
|
|
70
|
-
// the noteHash against the one provided by the user code to determine what to return to the user (exists or not),
|
|
71
|
-
// and will then propagate the actually-present noteHash to its public inputs.
|
|
70
|
+
if (this.noteHashes.length >= MAX_NOTE_HASHES_PER_TX) {
|
|
71
|
+
throw new SideEffectLimitReachedError('note hash', MAX_NOTE_HASHES_PER_TX);
|
|
72
|
+
}
|
|
72
73
|
this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
|
|
73
74
|
this.logger.debug(`NEW_NOTE_HASH cnt: ${this.sideEffectCounter}`);
|
|
74
75
|
this.incrementSideEffectCounter();
|
|
75
76
|
}
|
|
76
77
|
traceNullifierCheck(_storageAddress, nullifier, _leafIndex, exists, _isPending) {
|
|
77
|
-
// TODO(4805): check if some threshold is reached for max new nullifier
|
|
78
78
|
// NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
79
79
|
// NOTE: isPending and leafIndex are unused for now but may be used for optimizations or kernel hints later
|
|
80
|
+
this.enforceLimitOnNullifierChecks();
|
|
80
81
|
const readRequest = new ReadRequest(nullifier, this.sideEffectCounter);
|
|
81
82
|
if (exists) {
|
|
82
83
|
this.nullifierReadRequests.push(readRequest);
|
|
@@ -89,30 +90,37 @@ export class PublicSideEffectTrace {
|
|
|
89
90
|
this.incrementSideEffectCounter();
|
|
90
91
|
}
|
|
91
92
|
traceNewNullifier(_storageAddress, nullifier) {
|
|
92
|
-
// TODO(4805): check if some threshold is reached for max new nullifier
|
|
93
93
|
// NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
94
|
+
if (this.nullifiers.length >= MAX_NULLIFIERS_PER_TX) {
|
|
95
|
+
throw new SideEffectLimitReachedError('nullifier', MAX_NULLIFIERS_PER_TX);
|
|
96
|
+
}
|
|
94
97
|
this.nullifiers.push(new Nullifier(nullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
|
|
95
98
|
this.logger.debug(`NEW_NULLIFIER cnt: ${this.sideEffectCounter}`);
|
|
96
99
|
this.incrementSideEffectCounter();
|
|
97
100
|
}
|
|
98
101
|
// TODO(8287): _exists can be removed once we have the vm properly handling the equality check
|
|
99
102
|
traceL1ToL2MessageCheck(_contractAddress, msgHash, msgLeafIndex, exists) {
|
|
100
|
-
// TODO(4805): check if some threshold is reached for max message reads
|
|
101
103
|
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
if (this.l1ToL2MsgReadRequests.length >= MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX) {
|
|
105
|
+
throw new SideEffectLimitReachedError('l1 to l2 message read request', MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX);
|
|
106
|
+
}
|
|
104
107
|
this.l1ToL2MsgReadRequests.push(new TreeLeafReadRequest(msgHash, msgLeafIndex));
|
|
105
108
|
this.avmCircuitHints.l1ToL2MessageExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(msgLeafIndex), /*value=*/ exists ? Fr.ONE : Fr.ZERO));
|
|
109
|
+
// NOTE: counter does not increment for l1tol2 message checks (because it doesn't rely on pending messages)
|
|
106
110
|
}
|
|
107
|
-
traceNewL2ToL1Message(recipient, content) {
|
|
108
|
-
|
|
111
|
+
traceNewL2ToL1Message(_contractAddress, recipient, content) {
|
|
112
|
+
if (this.newL2ToL1Messages.length >= MAX_L2_TO_L1_MSGS_PER_TX) {
|
|
113
|
+
throw new SideEffectLimitReachedError('l2 to l1 message', MAX_L2_TO_L1_MSGS_PER_TX);
|
|
114
|
+
}
|
|
109
115
|
const recipientAddress = EthAddress.fromField(recipient);
|
|
110
116
|
this.newL2ToL1Messages.push(new L2ToL1Message(recipientAddress, content, this.sideEffectCounter));
|
|
111
117
|
this.logger.debug(`NEW_L2_TO_L1_MSG cnt: ${this.sideEffectCounter}`);
|
|
112
118
|
this.incrementSideEffectCounter();
|
|
113
119
|
}
|
|
114
120
|
traceUnencryptedLog(contractAddress, log) {
|
|
115
|
-
|
|
121
|
+
if (this.unencryptedLogs.length >= MAX_UNENCRYPTED_LOGS_PER_TX) {
|
|
122
|
+
throw new SideEffectLimitReachedError('unencrypted log', MAX_UNENCRYPTED_LOGS_PER_TX);
|
|
123
|
+
}
|
|
116
124
|
const ulog = new UnencryptedL2Log(AztecAddress.fromField(contractAddress), Buffer.concat(log.map(f => f.toBuffer())));
|
|
117
125
|
const basicLogHash = Fr.fromBuffer(ulog.hash());
|
|
118
126
|
this.unencryptedLogs.push(ulog);
|
|
@@ -124,8 +132,8 @@ export class PublicSideEffectTrace {
|
|
|
124
132
|
this.incrementSideEffectCounter();
|
|
125
133
|
}
|
|
126
134
|
traceGetContractInstance(instance) {
|
|
127
|
-
|
|
128
|
-
|
|
135
|
+
this.enforceLimitOnNullifierChecks('(contract address nullifier from GETCONTRACTINSTANCE)');
|
|
136
|
+
// TODO(dbanks12): should emit a nullifier read request
|
|
129
137
|
this.avmCircuitHints.contractInstances.items.push(new AvmContractInstanceHint(instance.address, new Fr(instance.exists ? 1 : 0), instance.salt, instance.deployer, instance.contractClassId, instance.initializationHash, instance.publicKeysHash));
|
|
130
138
|
this.logger.debug(`CONTRACT_INSTANCE cnt: ${this.sideEffectCounter}`);
|
|
131
139
|
this.incrementSideEffectCounter();
|
|
@@ -149,6 +157,11 @@ export class PublicSideEffectTrace {
|
|
|
149
157
|
avmCallResults,
|
|
150
158
|
/** Function name for logging */
|
|
151
159
|
functionName = 'unknown') {
|
|
160
|
+
// TODO(4805): check if some threshold is reached for max nested calls (to unique contracts?)
|
|
161
|
+
// TODO(dbanks12): should emit a nullifier read request. There should be two thresholds.
|
|
162
|
+
// one for max unique contract calls, and another based on max nullifier reads.
|
|
163
|
+
// Since this trace function happens _after_ a nested call, such threshold limits must take
|
|
164
|
+
// place in another trace function that occurs _before_ a nested call.
|
|
152
165
|
const result = nestedCallTrace.toPublicExecutionResult(nestedEnvironment, startGasLeft, endGasLeft, bytecode, avmCallResults, functionName);
|
|
153
166
|
this.sideEffectCounter = result.endSideEffectCounter.toNumber();
|
|
154
167
|
// when a nested call returns, caller accepts its updated counter
|
|
@@ -202,14 +215,26 @@ export class PublicSideEffectTrace {
|
|
|
202
215
|
unencryptedLogs: new UnencryptedFunctionL2Logs(this.unencryptedLogs),
|
|
203
216
|
allUnencryptedLogs: new UnencryptedFunctionL2Logs(this.allUnencryptedLogs),
|
|
204
217
|
unencryptedLogsHashes: this.unencryptedLogsHashes,
|
|
205
|
-
// TODO(dbanks12): process contract instance read requests in public kernel
|
|
206
|
-
//gotContractInstances: this.gotContractInstances,
|
|
207
218
|
publicCallRequests: this.publicCallRequests,
|
|
208
219
|
nestedExecutions: this.nestedExecutions,
|
|
209
220
|
avmCircuitHints: this.avmCircuitHints,
|
|
210
221
|
functionName,
|
|
211
222
|
};
|
|
212
223
|
}
|
|
224
|
+
enforceLimitOnNullifierChecks(errorMsgOrigin = '') {
|
|
225
|
+
// NOTE: Why error if _either_ limit was reached? If user code emits either an existent or non-existent
|
|
226
|
+
// nullifier read request (NULLIFIEREXISTS, GETCONTRACTINSTANCE, *CALL), and one of the limits has been
|
|
227
|
+
// reached (MAX_NULLIFIER_NON_EXISTENT_RRS vs MAX_NULLIFIER_RRS), but not the other, we must prevent the
|
|
228
|
+
// sequencer from lying and saying "this nullifier exists, but MAX_NULLIFIER_RRS has been reached, so I'm
|
|
229
|
+
// going to skip the read request and just revert instead" when the nullifier actually doesn't exist
|
|
230
|
+
// (or vice versa). So, if either maximum has been reached, any nullifier-reading operation must error.
|
|
231
|
+
if (this.nullifierReadRequests.length >= MAX_NULLIFIER_READ_REQUESTS_PER_TX) {
|
|
232
|
+
throw new SideEffectLimitReachedError(`nullifier read request ${errorMsgOrigin}`, MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
233
|
+
}
|
|
234
|
+
if (this.nullifierNonExistentReadRequests.length >= MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX) {
|
|
235
|
+
throw new SideEffectLimitReachedError(`nullifier non-existent read request ${errorMsgOrigin}`, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
213
238
|
}
|
|
214
239
|
/**
|
|
215
240
|
* Helper function to create a public execution request from an AVM execution environment
|
|
@@ -224,4 +249,4 @@ function createPublicExecutionRequest(avmEnvironment) {
|
|
|
224
249
|
});
|
|
225
250
|
return new PublicExecutionRequest(avmEnvironment.address, callContext, avmEnvironment.calldata);
|
|
226
251
|
}
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixHQUFHLEVBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUVULFdBQVcsRUFDWCxtQkFBbUIsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUE4Qix5QkFBeUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3ZGLE1BQU0sT0FBTyxxQkFBcUI7SUErQmhDO0lBQ0UscURBQXFEO0lBQ3JDLHlCQUFpQyxDQUFDO1FBQWxDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBWTtRQWhDN0MsV0FBTSxHQUFHLGlCQUFpQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFLNUQseUJBQW9CLEdBQTBCLEVBQUUsQ0FBQztRQUNqRCxrQ0FBNkIsR0FBbUMsRUFBRSxDQUFDO1FBRW5FLHlCQUFvQixHQUEwQixFQUFFLENBQUM7UUFDakQsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUU1QiwwQkFBcUIsR0FBa0IsRUFBRSxDQUFDO1FBQzFDLHFDQUFnQyxHQUFrQixFQUFFLENBQUM7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
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixHQUFHLEVBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCxxQ0FBcUMsRUFDckMsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixrQ0FBa0MsRUFDbEMscUJBQXFCLEVBQ3JCLCtDQUErQyxFQUMvQyxrQ0FBa0MsRUFDbEMsNEJBQTRCLEVBQzVCLHNDQUFzQyxFQUN0QywyQkFBMkIsRUFDM0IsUUFBUSxFQUNSLFNBQVMsRUFFVCxXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBOEIseUJBQXlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUt0RSxNQUFNLE9BQU8scUJBQXFCO0lBNkJoQztJQUNFLHFEQUFxRDtJQUNyQyx5QkFBaUMsQ0FBQztRQUFsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQVk7UUE5QjdDLFdBQU0sR0FBRyxpQkFBaUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxD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
|
|
@@ -14,7 +14,7 @@ export interface PublicSideEffectTraceInterface {
|
|
|
14
14
|
traceNullifierCheck(storageAddress: Fr, nullifier: Fr, leafIndex: Fr, exists: boolean, isPending: boolean): void;
|
|
15
15
|
traceNewNullifier(storageAddress: Fr, nullifier: Fr): void;
|
|
16
16
|
traceL1ToL2MessageCheck(contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr, exists: boolean): void;
|
|
17
|
-
traceNewL2ToL1Message(recipient: Fr, content: Fr): void;
|
|
17
|
+
traceNewL2ToL1Message(contractAddress: Fr, recipient: Fr, content: Fr): void;
|
|
18
18
|
traceUnencryptedLog(contractAddress: Fr, log: Fr[]): void;
|
|
19
19
|
traceGetContractInstance(instance: TracedContractInstance): void;
|
|
20
20
|
traceNestedCall(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"side_effect_trace_interface.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace_interface.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,IAAI,8BAA8B,CAAC;IACvC,UAAU,IAAI,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"side_effect_trace_interface.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace_interface.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,IAAI,8BAA8B,CAAC;IACvC,UAAU,IAAI,MAAM,CAAC;IAErB,sBAAsB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACxG,uBAAuB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;IACvE,kBAAkB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3F,gBAAgB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC;IACzD,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACjH,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC;IAC3D,uBAAuB,CAAC,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACnG,qBAAqB,CAAC,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;IAC7E,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAE1D,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACjE,eAAe;IACb,oCAAoC;IACpC,eAAe,EAAE,8BAA8B;IAC/C,oDAAoD;IACpD,iBAAiB,EAAE,uBAAuB;IAC1C,4DAA4D;IAE5D,YAAY,EAAE,GAAG;IACjB,yDAAyD;IAEzD,UAAU,EAAE,GAAG;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM;IAChB,yBAAyB;IACzB,cAAc,EAAE,qBAAqB;IACrC,oBAAoB;IACpB,YAAY,EAAE,MAAM,GACnB,IAAI,CAAC;CACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.57.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -38,6 +38,9 @@
|
|
|
38
38
|
"parser": {
|
|
39
39
|
"syntax": "typescript",
|
|
40
40
|
"decorators": true
|
|
41
|
+
},
|
|
42
|
+
"transform": {
|
|
43
|
+
"decoratorVersion": "2022-03"
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
46
|
}
|
|
@@ -56,14 +59,14 @@
|
|
|
56
59
|
]
|
|
57
60
|
},
|
|
58
61
|
"dependencies": {
|
|
59
|
-
"@aztec/circuit-types": "0.
|
|
60
|
-
"@aztec/circuits.js": "0.
|
|
61
|
-
"@aztec/foundation": "0.
|
|
62
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
63
|
-
"@aztec/protocol-contracts": "0.
|
|
64
|
-
"@aztec/telemetry-client": "0.
|
|
65
|
-
"@aztec/types": "0.
|
|
66
|
-
"@aztec/world-state": "0.
|
|
62
|
+
"@aztec/circuit-types": "0.57.0",
|
|
63
|
+
"@aztec/circuits.js": "0.57.0",
|
|
64
|
+
"@aztec/foundation": "0.57.0",
|
|
65
|
+
"@aztec/noir-protocol-circuits-types": "0.57.0",
|
|
66
|
+
"@aztec/protocol-contracts": "0.57.0",
|
|
67
|
+
"@aztec/telemetry-client": "0.57.0",
|
|
68
|
+
"@aztec/types": "0.57.0",
|
|
69
|
+
"@aztec/world-state": "0.57.0",
|
|
67
70
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
68
71
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
69
72
|
"levelup": "^5.1.1",
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
-
import { KeyValidationRequest } from '@aztec/circuits.js';
|
|
3
2
|
import { FunctionSelector, NoteSelector } from '@aztec/foundation/abi';
|
|
4
3
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
|
-
import { Fr
|
|
4
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
6
5
|
|
|
7
6
|
import { type ACVMField } from '../acvm_types.js';
|
|
8
7
|
import { frToBoolean, frToNumber, fromACVMField } from '../deserialize.js';
|
|
@@ -329,72 +328,6 @@ export class Oracle {
|
|
|
329
328
|
this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
|
|
330
329
|
}
|
|
331
330
|
|
|
332
|
-
computeEncryptedEventLog(
|
|
333
|
-
[contractAddress]: ACVMField[],
|
|
334
|
-
[randomness]: ACVMField[],
|
|
335
|
-
[eventTypeId]: ACVMField[],
|
|
336
|
-
[ovskApp]: ACVMField[],
|
|
337
|
-
[ovpkMX]: ACVMField[],
|
|
338
|
-
[ovpkMY]: ACVMField[],
|
|
339
|
-
[ovpkMIsInfinite]: ACVMField[],
|
|
340
|
-
[ivpkMX]: ACVMField[],
|
|
341
|
-
[ivpkMY]: ACVMField[],
|
|
342
|
-
[ivpkMIsInfinite]: ACVMField[],
|
|
343
|
-
[recipient]: ACVMField[],
|
|
344
|
-
preimage: ACVMField[],
|
|
345
|
-
): ACVMField[] {
|
|
346
|
-
const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY), !fromACVMField(ovpkMIsInfinite).isZero());
|
|
347
|
-
const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
|
|
348
|
-
const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY), !fromACVMField(ivpkMIsInfinite).isZero());
|
|
349
|
-
const encLog = this.typedOracle.computeEncryptedEventLog(
|
|
350
|
-
AztecAddress.fromString(contractAddress),
|
|
351
|
-
Fr.fromString(randomness),
|
|
352
|
-
Fr.fromString(eventTypeId),
|
|
353
|
-
ovKeys,
|
|
354
|
-
ivpkM,
|
|
355
|
-
AztecAddress.fromString(recipient),
|
|
356
|
-
preimage.map(fromACVMField),
|
|
357
|
-
);
|
|
358
|
-
const bytes: ACVMField[] = [];
|
|
359
|
-
encLog.forEach(v => {
|
|
360
|
-
bytes.push(toACVMField(v));
|
|
361
|
-
});
|
|
362
|
-
return bytes;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
computeEncryptedNoteLog(
|
|
366
|
-
[contractAddress]: ACVMField[],
|
|
367
|
-
[storageSlot]: ACVMField[],
|
|
368
|
-
[noteTypeId]: ACVMField[],
|
|
369
|
-
[ovskApp]: ACVMField[],
|
|
370
|
-
[ovpkMX]: ACVMField[],
|
|
371
|
-
[ovpkMY]: ACVMField[],
|
|
372
|
-
[ovpkMIsInfinite]: ACVMField[],
|
|
373
|
-
[ivpkMX]: ACVMField[],
|
|
374
|
-
[ivpkMY]: ACVMField[],
|
|
375
|
-
[ivpkMIsInfinite]: ACVMField[],
|
|
376
|
-
[recipient]: ACVMField[],
|
|
377
|
-
preimage: ACVMField[],
|
|
378
|
-
): ACVMField[] {
|
|
379
|
-
const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY), !fromACVMField(ovpkMIsInfinite).isZero());
|
|
380
|
-
const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
|
|
381
|
-
const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY), !fromACVMField(ivpkMIsInfinite).isZero());
|
|
382
|
-
const encLog = this.typedOracle.computeEncryptedNoteLog(
|
|
383
|
-
AztecAddress.fromString(contractAddress),
|
|
384
|
-
Fr.fromString(storageSlot),
|
|
385
|
-
NoteSelector.fromField(Fr.fromString(noteTypeId)),
|
|
386
|
-
ovKeys,
|
|
387
|
-
ivpkM,
|
|
388
|
-
AztecAddress.fromString(recipient),
|
|
389
|
-
preimage.map(fromACVMField),
|
|
390
|
-
);
|
|
391
|
-
const bytes: ACVMField[] = [];
|
|
392
|
-
encLog.forEach(v => {
|
|
393
|
-
bytes.push(toACVMField(v));
|
|
394
|
-
});
|
|
395
|
-
return bytes;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
331
|
emitUnencryptedLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): ACVMField {
|
|
399
332
|
const logPayload = Buffer.concat(message.map(fromACVMField).map(f => f.toBuffer()));
|
|
400
333
|
const log = new UnencryptedL2Log(AztecAddress.fromString(contractAddress), logPayload);
|
|
@@ -447,8 +380,8 @@ export class Oracle {
|
|
|
447
380
|
[sideEffectCounter]: ACVMField[],
|
|
448
381
|
[isStaticCall]: ACVMField[],
|
|
449
382
|
[isDelegateCall]: ACVMField[],
|
|
450
|
-
) {
|
|
451
|
-
await this.typedOracle.enqueuePublicFunctionCall(
|
|
383
|
+
): Promise<ACVMField> {
|
|
384
|
+
const newArgsHash = await this.typedOracle.enqueuePublicFunctionCall(
|
|
452
385
|
AztecAddress.fromString(contractAddress),
|
|
453
386
|
FunctionSelector.fromField(fromACVMField(functionSelector)),
|
|
454
387
|
fromACVMField(argsHash),
|
|
@@ -456,6 +389,7 @@ export class Oracle {
|
|
|
456
389
|
frToBoolean(fromACVMField(isStaticCall)),
|
|
457
390
|
frToBoolean(fromACVMField(isDelegateCall)),
|
|
458
391
|
);
|
|
392
|
+
return toACVMField(newArgsHash);
|
|
459
393
|
}
|
|
460
394
|
|
|
461
395
|
async setPublicTeardownFunctionCall(
|
|
@@ -465,8 +399,8 @@ export class Oracle {
|
|
|
465
399
|
[sideEffectCounter]: ACVMField[],
|
|
466
400
|
[isStaticCall]: ACVMField[],
|
|
467
401
|
[isDelegateCall]: ACVMField[],
|
|
468
|
-
) {
|
|
469
|
-
await this.typedOracle.setPublicTeardownFunctionCall(
|
|
402
|
+
): Promise<ACVMField> {
|
|
403
|
+
const newArgsHash = await this.typedOracle.setPublicTeardownFunctionCall(
|
|
470
404
|
AztecAddress.fromString(contractAddress),
|
|
471
405
|
FunctionSelector.fromField(fromACVMField(functionSelector)),
|
|
472
406
|
fromACVMField(argsHash),
|
|
@@ -474,22 +408,10 @@ export class Oracle {
|
|
|
474
408
|
frToBoolean(fromACVMField(isStaticCall)),
|
|
475
409
|
frToBoolean(fromACVMField(isDelegateCall)),
|
|
476
410
|
);
|
|
411
|
+
return toACVMField(newArgsHash);
|
|
477
412
|
}
|
|
478
413
|
|
|
479
414
|
notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]) {
|
|
480
415
|
this.typedOracle.notifySetMinRevertibleSideEffectCounter(frToNumber(fromACVMField(minRevertibleSideEffectCounter)));
|
|
481
416
|
}
|
|
482
|
-
|
|
483
|
-
aes128Encrypt(input: ACVMField[], initializationVector: ACVMField[], key: ACVMField[]): ACVMField[] {
|
|
484
|
-
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
485
|
-
const processedInput = Buffer.from(input.map(fromACVMField).map(f => f.toNumber()));
|
|
486
|
-
const processedIV = Buffer.from(initializationVector.map(fromACVMField).map(f => f.toNumber()));
|
|
487
|
-
const processedKey = Buffer.from(key.map(fromACVMField).map(f => f.toNumber()));
|
|
488
|
-
|
|
489
|
-
// Encrypt the input
|
|
490
|
-
const ciphertext = this.typedOracle.aes128Encrypt(processedInput, processedIV, processedKey);
|
|
491
|
-
|
|
492
|
-
// Convert each byte of ciphertext to a field and return it
|
|
493
|
-
return Array.from(ciphertext).map(byte => toACVMField(byte));
|
|
494
|
-
}
|
|
495
417
|
}
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
type NoteStatus,
|
|
6
6
|
type NullifierMembershipWitness,
|
|
7
7
|
type PublicDataWitness,
|
|
8
|
-
type PublicKey,
|
|
9
8
|
type SiblingPath,
|
|
10
9
|
type UnencryptedL2Log,
|
|
11
10
|
} from '@aztec/circuit-types';
|
|
@@ -204,30 +203,6 @@ export abstract class TypedOracle {
|
|
|
204
203
|
throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
|
|
205
204
|
}
|
|
206
205
|
|
|
207
|
-
computeEncryptedEventLog(
|
|
208
|
-
_contractAddress: AztecAddress,
|
|
209
|
-
_randomness: Fr,
|
|
210
|
-
_eventTypeId: Fr,
|
|
211
|
-
_ovKeys: KeyValidationRequest,
|
|
212
|
-
_ivpkM: PublicKey,
|
|
213
|
-
_recipient: AztecAddress,
|
|
214
|
-
_preimage: Fr[],
|
|
215
|
-
): Buffer {
|
|
216
|
-
throw new OracleMethodNotAvailableError('computeEncryptedEventLog');
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
computeEncryptedNoteLog(
|
|
220
|
-
_contractAddress: AztecAddress,
|
|
221
|
-
_storageSlot: Fr,
|
|
222
|
-
_noteTypeId: NoteSelector,
|
|
223
|
-
_ovKeys: KeyValidationRequest,
|
|
224
|
-
_ivpkM: PublicKey,
|
|
225
|
-
_recipient: AztecAddress,
|
|
226
|
-
_preimage: Fr[],
|
|
227
|
-
): Buffer {
|
|
228
|
-
throw new OracleMethodNotAvailableError('computeEncryptedNoteLog');
|
|
229
|
-
}
|
|
230
|
-
|
|
231
206
|
emitUnencryptedLog(_log: UnencryptedL2Log, _counter: number): void {
|
|
232
207
|
throw new OracleMethodNotAvailableError('emitUnencryptedLog');
|
|
233
208
|
}
|
|
@@ -254,7 +229,7 @@ export abstract class TypedOracle {
|
|
|
254
229
|
_sideEffectCounter: number,
|
|
255
230
|
_isStaticCall: boolean,
|
|
256
231
|
_isDelegateCall: boolean,
|
|
257
|
-
): Promise<
|
|
232
|
+
): Promise<Fr> {
|
|
258
233
|
throw new OracleMethodNotAvailableError('enqueuePublicFunctionCall');
|
|
259
234
|
}
|
|
260
235
|
|
|
@@ -265,7 +240,7 @@ export abstract class TypedOracle {
|
|
|
265
240
|
_sideEffectCounter: number,
|
|
266
241
|
_isStaticCall: boolean,
|
|
267
242
|
_isDelegateCall: boolean,
|
|
268
|
-
): Promise<
|
|
243
|
+
): Promise<Fr> {
|
|
269
244
|
throw new OracleMethodNotAvailableError('setPublicTeardownFunctionCall');
|
|
270
245
|
}
|
|
271
246
|
|
|
@@ -273,10 +248,6 @@ export abstract class TypedOracle {
|
|
|
273
248
|
throw new OracleMethodNotAvailableError('notifySetMinRevertibleSideEffectCounter');
|
|
274
249
|
}
|
|
275
250
|
|
|
276
|
-
aes128Encrypt(_input: Buffer, _initializationVector: Buffer, _key: Buffer): Buffer {
|
|
277
|
-
throw new OracleMethodNotAvailableError('encrypt');
|
|
278
|
-
}
|
|
279
|
-
|
|
280
251
|
debugLog(_message: string, _fields: Fr[]): void {
|
|
281
252
|
throw new OracleMethodNotAvailableError('debugLog');
|
|
282
253
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FunctionSelector, type GlobalVariables
|
|
1
|
+
import { FunctionSelector, 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
|
|
|
@@ -14,7 +14,6 @@ export class AvmExecutionEnvironment {
|
|
|
14
14
|
public readonly functionSelector: FunctionSelector, // may be temporary (#7224)
|
|
15
15
|
public readonly contractCallDepth: Fr,
|
|
16
16
|
public readonly transactionFee: Fr,
|
|
17
|
-
public readonly header: Header,
|
|
18
17
|
public readonly globals: GlobalVariables,
|
|
19
18
|
public readonly isStaticCall: boolean,
|
|
20
19
|
public readonly isDelegateCall: boolean,
|
|
@@ -35,7 +34,6 @@ export class AvmExecutionEnvironment {
|
|
|
35
34
|
functionSelector,
|
|
36
35
|
this.contractCallDepth.add(Fr.ONE),
|
|
37
36
|
this.transactionFee,
|
|
38
|
-
this.header,
|
|
39
37
|
this.globals,
|
|
40
38
|
isStaticCall,
|
|
41
39
|
isDelegateCall,
|
package/src/avm/avm_gas.ts
CHANGED
|
@@ -101,7 +101,6 @@ const BASE_GAS_COSTS: Record<Opcode, Gas> = {
|
|
|
101
101
|
[Opcode.SET_FF]: makeCost(c.AVM_SET_BASE_L2_GAS, 0),
|
|
102
102
|
[Opcode.MOV_8]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0),
|
|
103
103
|
[Opcode.MOV_16]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0),
|
|
104
|
-
[Opcode.CMOV]: makeCost(c.AVM_CMOV_BASE_L2_GAS, 0),
|
|
105
104
|
[Opcode.SLOAD]: makeCost(c.AVM_SLOAD_BASE_L2_GAS, 0),
|
|
106
105
|
[Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS, c.AVM_SSTORE_BASE_DA_GAS),
|
|
107
106
|
[Opcode.NOTEHASHEXISTS]: makeCost(c.AVM_NOTEHASHEXISTS_BASE_L2_GAS, 0),
|
|
@@ -413,7 +413,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
413
413
|
}
|
|
414
414
|
|
|
415
415
|
/** No-op. Implemented here for compatibility with the MeteredTaggedMemory. */
|
|
416
|
-
public assert(_operations: Partial<MemoryOperations & {
|
|
416
|
+
public assert(_operations: Partial<MemoryOperations & { addressing: Addressing }>) {}
|
|
417
417
|
}
|
|
418
418
|
|
|
419
419
|
/** Tagged memory wrapper with metering for each memory read and write operation. */
|
|
@@ -435,10 +435,15 @@ export class MeteredTaggedMemory implements TaggedMemoryInterface {
|
|
|
435
435
|
* Asserts that the exact number of memory operations have been performed.
|
|
436
436
|
* Indirect represents the flags for indirect accesses: each bit set to one counts as an extra read.
|
|
437
437
|
*/
|
|
438
|
-
public assert(operations: Partial<MemoryOperations & {
|
|
439
|
-
const {
|
|
440
|
-
|
|
441
|
-
|
|
438
|
+
public assert(operations: Partial<MemoryOperations & { addressing: Addressing }>) {
|
|
439
|
+
const {
|
|
440
|
+
reads: expectedReads,
|
|
441
|
+
writes: expectedWrites,
|
|
442
|
+
addressing,
|
|
443
|
+
} = { reads: 0, writes: 0, addressing: new Addressing([]), ...operations };
|
|
444
|
+
|
|
445
|
+
const totalExpectedReads =
|
|
446
|
+
expectedReads + addressing.count(AddressingMode.INDIRECT) + addressing.count(AddressingMode.RELATIVE);
|
|
442
447
|
const { reads: actualReads, writes: actualWrites } = this.reset();
|
|
443
448
|
if (actualReads !== totalExpectedReads) {
|
|
444
449
|
throw new InstructionExecutionError(
|
package/src/avm/errors.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type FailingFunction, type NoirCallStack } from '@aztec/circuit-types';
|
|
2
|
-
import { type AztecAddress,
|
|
2
|
+
import { type AztecAddress, Fr, FunctionSelector, PUBLIC_DISPATCH_SELECTOR } from '@aztec/circuits.js';
|
|
3
3
|
|
|
4
4
|
import { ExecutionError } from '../common/errors.js';
|
|
5
5
|
import { type AvmContext } from './avm_context.js';
|
|
@@ -109,13 +109,21 @@ export class AvmRevertReason extends ExecutionError {
|
|
|
109
109
|
* @param nestedError - the error that caused this one (if this is not the root-cause itself)
|
|
110
110
|
*/
|
|
111
111
|
function createRevertReason(message: string, context: AvmContext, nestedError?: AvmRevertReason): AvmRevertReason {
|
|
112
|
+
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Properly fix this.
|
|
113
|
+
// If the function selector is the public dispatch selector, we need to extract the actual function selector from the calldata.
|
|
114
|
+
// We should remove this because the AVM (or public protocol) shouldn't be aware of the public dispatch calling convention.
|
|
115
|
+
let functionSelector = context.environment.functionSelector;
|
|
116
|
+
const internalCallStack = context.machineState.internalCallStack;
|
|
117
|
+
if (functionSelector.toField().equals(new Fr(PUBLIC_DISPATCH_SELECTOR)) && context.environment.calldata.length > 0) {
|
|
118
|
+
functionSelector = FunctionSelector.fromField(context.environment.calldata[0]);
|
|
119
|
+
}
|
|
112
120
|
return new AvmRevertReason(
|
|
113
121
|
message,
|
|
114
122
|
/*failingFunction=*/ {
|
|
115
123
|
contractAddress: context.environment.address,
|
|
116
|
-
functionSelector:
|
|
124
|
+
functionSelector: functionSelector,
|
|
117
125
|
},
|
|
118
|
-
/*noirCallStack=*/ [...
|
|
126
|
+
/*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
|
|
119
127
|
/*options=*/ { cause: nestedError },
|
|
120
128
|
);
|
|
121
129
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isNoirCallStackUnresolved } from '@aztec/circuit-types';
|
|
2
|
-
import { GasFees, GlobalVariables
|
|
2
|
+
import { GasFees, GlobalVariables } from '@aztec/circuits.js';
|
|
3
3
|
import { FunctionSelector, getFunctionDebugMetadata } from '@aztec/foundation/abi';
|
|
4
4
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
@@ -63,7 +63,6 @@ export function initExecutionEnvironment(overrides?: Partial<AvmExecutionEnviron
|
|
|
63
63
|
overrides?.functionSelector ?? FunctionSelector.empty(),
|
|
64
64
|
overrides?.contractCallDepth ?? Fr.zero(),
|
|
65
65
|
overrides?.transactionFee ?? Fr.zero(),
|
|
66
|
-
overrides?.header ?? Header.empty(),
|
|
67
66
|
overrides?.globals ?? GlobalVariables.empty(),
|
|
68
67
|
overrides?.isStaticCall ?? false,
|
|
69
68
|
overrides?.isDelegateCall ?? false,
|