@aztec/simulator 0.42.0 → 0.44.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 +5 -2
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +25 -8
- package/dest/acvm/oracle/typed_oracle.d.ts +7 -4
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +14 -5
- package/dest/avm/avm_execution_environment.d.ts +2 -0
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +9 -4
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +3 -1
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +2 -4
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +2 -3
- package/dest/avm/fixtures/index.d.ts +10 -3
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +9 -11
- package/dest/avm/journal/journal.d.ts +57 -66
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +97 -131
- package/dest/avm/journal/nullifiers.d.ts +21 -8
- package/dest/avm/journal/nullifiers.d.ts.map +1 -1
- package/dest/avm/journal/nullifiers.js +26 -8
- package/dest/avm/journal/public_storage.d.ts +4 -0
- package/dest/avm/journal/public_storage.d.ts.map +1 -1
- package/dest/avm/journal/public_storage.js +10 -1
- package/dest/avm/opcodes/accrued_substate.d.ts +2 -2
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +39 -24
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +12 -9
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +11 -8
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +7 -5
- package/dest/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/avm/opcodes/contract.js +20 -24
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/avm/opcodes/control_flow.js +4 -2
- package/dest/avm/opcodes/ec_add.d.ts +19 -0
- package/dest/avm/opcodes/ec_add.d.ts.map +1 -0
- package/dest/avm/opcodes/ec_add.js +78 -0
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +19 -29
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +10 -2
- package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction_impl.js +4 -2
- package/dest/avm/opcodes/memory.d.ts +1 -1
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +14 -12
- package/dest/avm/opcodes/multi_scalar_mul.d.ts +16 -0
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -0
- package/dest/avm/opcodes/multi_scalar_mul.js +95 -0
- package/dest/avm/opcodes/storage.d.ts +1 -1
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +11 -8
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +5 -1
- package/dest/avm/serialization/instruction_serialization.d.ts +3 -1
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +4 -2
- package/dest/avm/test_utils.d.ts +14 -0
- package/dest/avm/test_utils.d.ts.map +1 -0
- package/dest/avm/test_utils.js +36 -0
- package/dest/client/client_execution_context.d.ts +17 -5
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +32 -18
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +1 -1
- package/dest/client/execution_result.d.ts +2 -1
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +1 -1
- package/dest/client/index.d.ts +2 -0
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +3 -1
- package/dest/client/simulator.d.ts +4 -3
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +17 -9
- package/dest/client/view_data_oracle.d.ts +2 -0
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +7 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +3 -2
- package/dest/public/abstract_phase_manager.d.ts +11 -11
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +84 -59
- package/dest/public/app_logic_phase_manager.d.ts +3 -3
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/public/app_logic_phase_manager.js +4 -3
- package/dest/public/db_interfaces.d.ts +1 -0
- package/dest/public/db_interfaces.d.ts.map +1 -1
- package/dest/public/execution.d.ts +28 -40
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -51
- package/dest/public/executor.d.ts +9 -4
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +38 -27
- package/dest/public/hints_builder.d.ts +1 -1
- package/dest/public/index.d.ts +6 -6
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +7 -7
- package/dest/public/phase_manager_factory.d.ts +3 -3
- package/dest/public/phase_manager_factory.d.ts.map +1 -1
- package/dest/public/phase_manager_factory.js +5 -5
- package/dest/public/public_db_sources.d.ts +3 -1
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +54 -8
- package/dest/public/public_processor.d.ts +5 -2
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +143 -125
- package/dest/public/setup_phase_manager.d.ts +3 -3
- package/dest/public/setup_phase_manager.d.ts.map +1 -1
- package/dest/public/setup_phase_manager.js +3 -3
- package/dest/public/side_effect_trace.d.ts +86 -0
- package/dest/public/side_effect_trace.d.ts.map +1 -0
- package/dest/public/side_effect_trace.js +222 -0
- package/dest/public/side_effect_trace_interface.d.ts +36 -0
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -0
- package/dest/public/side_effect_trace_interface.js +2 -0
- package/dest/public/tail_phase_manager.d.ts +3 -3
- package/dest/public/tail_phase_manager.d.ts.map +1 -1
- package/dest/public/tail_phase_manager.js +3 -3
- package/dest/public/teardown_phase_manager.d.ts +3 -3
- package/dest/public/teardown_phase_manager.d.ts.map +1 -1
- package/dest/public/teardown_phase_manager.js +4 -3
- package/dest/public/transitional_adaptors.d.ts +2 -6
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +1 -43
- package/package.json +18 -9
- package/src/acvm/oracle/oracle.ts +46 -9
- package/src/acvm/oracle/typed_oracle.ts +37 -7
- package/src/avm/avm_execution_environment.ts +10 -3
- package/src/avm/avm_gas.ts +2 -0
- package/src/avm/avm_memory_types.ts +1 -3
- package/src/avm/avm_simulator.ts +2 -3
- package/src/avm/fixtures/index.ts +19 -14
- package/src/avm/journal/journal.ts +127 -231
- package/src/avm/journal/nullifiers.ts +30 -13
- package/src/avm/journal/public_storage.ts +10 -0
- package/src/avm/opcodes/accrued_substate.ts +60 -23
- package/src/avm/opcodes/arithmetic.ts +17 -8
- package/src/avm/opcodes/bitwise.ts +13 -8
- package/src/avm/opcodes/comparators.ts +9 -4
- package/src/avm/opcodes/contract.ts +22 -26
- package/src/avm/opcodes/control_flow.ts +3 -1
- package/src/avm/opcodes/ec_add.ts +92 -0
- package/src/avm/opcodes/external_calls.ts +20 -36
- package/src/avm/opcodes/hashing.ts +11 -1
- package/src/avm/opcodes/instruction_impl.ts +4 -1
- package/src/avm/opcodes/memory.ts +18 -11
- package/src/avm/opcodes/multi_scalar_mul.ts +114 -0
- package/src/avm/opcodes/storage.ts +10 -10
- package/src/avm/serialization/bytecode_serialization.ts +4 -0
- package/src/avm/serialization/instruction_serialization.ts +2 -0
- package/src/avm/test_utils.ts +53 -0
- package/src/client/client_execution_context.ts +55 -21
- package/src/client/execution_note_cache.ts +0 -1
- package/src/client/execution_result.ts +2 -1
- package/src/client/index.ts +2 -0
- package/src/client/simulator.ts +26 -10
- package/src/client/view_data_oracle.ts +8 -0
- package/src/mocks/fixtures.ts +2 -1
- package/src/public/abstract_phase_manager.ts +99 -70
- package/src/public/app_logic_phase_manager.ts +3 -2
- package/src/public/db_interfaces.ts +2 -0
- package/src/public/execution.ts +35 -94
- package/src/public/executor.ts +56 -40
- package/src/public/index.ts +6 -12
- package/src/public/phase_manager_factory.ts +6 -6
- package/src/public/public_db_sources.ts +62 -7
- package/src/public/public_processor.ts +15 -9
- package/src/public/setup_phase_manager.ts +2 -2
- package/src/public/side_effect_trace.ts +323 -0
- package/src/public/side_effect_trace_interface.ts +41 -0
- package/src/public/tail_phase_manager.ts +2 -2
- package/src/public/teardown_phase_manager.ts +3 -2
- package/src/public/transitional_adaptors.ts +2 -60
- package/dest/avm/journal/trace.d.ts +0 -33
- package/dest/avm/journal/trace.d.ts.map +0 -1
- package/dest/avm/journal/trace.js +0 -151
- package/dest/avm/journal/trace_types.d.ts +0 -51
- package/dest/avm/journal/trace_types.d.ts.map +0 -1
- package/dest/avm/journal/trace_types.js +0 -6
- package/dest/public/utils.d.ts +0 -8
- package/dest/public/utils.d.ts.map +0 -1
- package/dest/public/utils.js +0 -38
- package/src/avm/journal/trace.ts +0 -184
- package/src/avm/journal/trace_types.ts +0 -88
- package/src/public/utils.ts +0 -39
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
2
|
import { KeyValidationRequest } from '@aztec/circuits.js';
|
|
3
|
-
import { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
|
|
3
|
+
import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/foundation/abi';
|
|
4
4
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
5
|
import { Fr, Point } from '@aztec/foundation/fields';
|
|
6
6
|
|
|
@@ -49,6 +49,14 @@ export class Oracle {
|
|
|
49
49
|
return toACVMField(await this.typedOracle.getContractAddress());
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
async getVersion(): Promise<ACVMField> {
|
|
53
|
+
return toACVMField(await this.typedOracle.getVersion());
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async getChainId(): Promise<ACVMField> {
|
|
57
|
+
return toACVMField(await this.typedOracle.getChainId());
|
|
58
|
+
}
|
|
59
|
+
|
|
52
60
|
async getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
|
|
53
61
|
const { pkM, skApp } = await this.typedOracle.getKeyValidationRequest(fromACVMField(pkMHash));
|
|
54
62
|
|
|
@@ -244,7 +252,7 @@ export class Oracle {
|
|
|
244
252
|
): ACVMField {
|
|
245
253
|
this.typedOracle.notifyCreatedNote(
|
|
246
254
|
fromACVMField(storageSlot),
|
|
247
|
-
fromACVMField(noteTypeId),
|
|
255
|
+
NoteSelector.fromField(fromACVMField(noteTypeId)),
|
|
248
256
|
note.map(fromACVMField),
|
|
249
257
|
fromACVMField(innerNoteHash),
|
|
250
258
|
+counter,
|
|
@@ -289,15 +297,15 @@ export class Oracle {
|
|
|
289
297
|
return newValues.map(toACVMField);
|
|
290
298
|
}
|
|
291
299
|
|
|
292
|
-
|
|
300
|
+
emitEncryptedEventLog(
|
|
293
301
|
[contractAddress]: ACVMField[],
|
|
294
302
|
[randomness]: ACVMField[],
|
|
295
|
-
|
|
303
|
+
encryptedEvent: ACVMField[],
|
|
296
304
|
[counter]: ACVMField[],
|
|
297
305
|
): void {
|
|
298
306
|
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
299
|
-
const processedInput = Buffer.from(
|
|
300
|
-
this.typedOracle.
|
|
307
|
+
const processedInput = Buffer.from(encryptedEvent.map(fromACVMField).map(f => f.toNumber()));
|
|
308
|
+
this.typedOracle.emitEncryptedEventLog(
|
|
301
309
|
AztecAddress.fromString(contractAddress),
|
|
302
310
|
Fr.fromString(randomness),
|
|
303
311
|
processedInput,
|
|
@@ -311,7 +319,36 @@ export class Oracle {
|
|
|
311
319
|
this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
|
|
312
320
|
}
|
|
313
321
|
|
|
314
|
-
|
|
322
|
+
computeEncryptedEventLog(
|
|
323
|
+
[contractAddress]: ACVMField[],
|
|
324
|
+
[randomness]: ACVMField[],
|
|
325
|
+
[eventTypeId]: ACVMField[],
|
|
326
|
+
[ovskApp]: ACVMField[],
|
|
327
|
+
[ovpkMX]: ACVMField[],
|
|
328
|
+
[ovpkMY]: ACVMField[],
|
|
329
|
+
[ivpkMX]: ACVMField[],
|
|
330
|
+
[ivpkMY]: ACVMField[],
|
|
331
|
+
preimage: ACVMField[],
|
|
332
|
+
): ACVMField[] {
|
|
333
|
+
const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY));
|
|
334
|
+
const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
|
|
335
|
+
const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY));
|
|
336
|
+
const encLog = this.typedOracle.computeEncryptedEventLog(
|
|
337
|
+
AztecAddress.fromString(contractAddress),
|
|
338
|
+
Fr.fromString(randomness),
|
|
339
|
+
Fr.fromString(eventTypeId),
|
|
340
|
+
ovKeys,
|
|
341
|
+
ivpkM,
|
|
342
|
+
preimage.map(fromACVMField),
|
|
343
|
+
);
|
|
344
|
+
const bytes: ACVMField[] = [];
|
|
345
|
+
encLog.forEach(v => {
|
|
346
|
+
bytes.push(toACVMField(v));
|
|
347
|
+
});
|
|
348
|
+
return bytes;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
computeEncryptedNoteLog(
|
|
315
352
|
[contractAddress]: ACVMField[],
|
|
316
353
|
[storageSlot]: ACVMField[],
|
|
317
354
|
[noteTypeId]: ACVMField[],
|
|
@@ -325,10 +362,10 @@ export class Oracle {
|
|
|
325
362
|
const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY));
|
|
326
363
|
const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
|
|
327
364
|
const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY));
|
|
328
|
-
const encLog = this.typedOracle.
|
|
365
|
+
const encLog = this.typedOracle.computeEncryptedNoteLog(
|
|
329
366
|
AztecAddress.fromString(contractAddress),
|
|
330
367
|
Fr.fromString(storageSlot),
|
|
331
|
-
Fr.fromString(noteTypeId),
|
|
368
|
+
NoteSelector.fromField(Fr.fromString(noteTypeId)),
|
|
332
369
|
ovKeys,
|
|
333
370
|
ivpkM,
|
|
334
371
|
preimage.map(fromACVMField),
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
type PrivateCallStackItem,
|
|
17
17
|
type PublicCallRequest,
|
|
18
18
|
} from '@aztec/circuits.js';
|
|
19
|
-
import { type FunctionSelector } from '@aztec/foundation/abi';
|
|
19
|
+
import { type FunctionSelector, type NoteSelector } from '@aztec/foundation/abi';
|
|
20
20
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
21
21
|
import { Fr } from '@aztec/foundation/fields';
|
|
22
22
|
import { type ContractInstance } from '@aztec/types/contracts';
|
|
@@ -90,6 +90,14 @@ export abstract class TypedOracle {
|
|
|
90
90
|
throw new OracleMethodNotAvailableError('getContractAddress');
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
getChainId(): Promise<Fr> {
|
|
94
|
+
throw new OracleMethodNotAvailableError('getChainId');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
getVersion(): Promise<Fr> {
|
|
98
|
+
throw new OracleMethodNotAvailableError('getVersion');
|
|
99
|
+
}
|
|
100
|
+
|
|
93
101
|
getKeyValidationRequest(_pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
94
102
|
throw new OracleMethodNotAvailableError('getKeyValidationRequest');
|
|
95
103
|
}
|
|
@@ -156,7 +164,13 @@ export abstract class TypedOracle {
|
|
|
156
164
|
throw new OracleMethodNotAvailableError('getNotes');
|
|
157
165
|
}
|
|
158
166
|
|
|
159
|
-
notifyCreatedNote(
|
|
167
|
+
notifyCreatedNote(
|
|
168
|
+
_storageSlot: Fr,
|
|
169
|
+
_noteTypeId: NoteSelector,
|
|
170
|
+
_note: Fr[],
|
|
171
|
+
_innerNoteHash: Fr,
|
|
172
|
+
_counter: number,
|
|
173
|
+
): void {
|
|
160
174
|
throw new OracleMethodNotAvailableError('notifyCreatedNote');
|
|
161
175
|
}
|
|
162
176
|
|
|
@@ -184,23 +198,39 @@ export abstract class TypedOracle {
|
|
|
184
198
|
throw new OracleMethodNotAvailableError('storageWrite');
|
|
185
199
|
}
|
|
186
200
|
|
|
187
|
-
|
|
188
|
-
|
|
201
|
+
emitEncryptedEventLog(
|
|
202
|
+
_contractAddress: AztecAddress,
|
|
203
|
+
_randomness: Fr,
|
|
204
|
+
_encryptedEvent: Buffer,
|
|
205
|
+
_counter: number,
|
|
206
|
+
): void {
|
|
207
|
+
throw new OracleMethodNotAvailableError('emitEncryptedEventLog');
|
|
189
208
|
}
|
|
190
209
|
|
|
191
210
|
emitEncryptedNoteLog(_noteHashCounter: number, _encryptedNote: Buffer, _counter: number): void {
|
|
192
211
|
throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
|
|
193
212
|
}
|
|
194
213
|
|
|
195
|
-
|
|
214
|
+
computeEncryptedEventLog(
|
|
215
|
+
_contractAddress: AztecAddress,
|
|
216
|
+
_randomness: Fr,
|
|
217
|
+
_eventTypeId: Fr,
|
|
218
|
+
_ovKeys: KeyValidationRequest,
|
|
219
|
+
_ivpkM: PublicKey,
|
|
220
|
+
_preimage: Fr[],
|
|
221
|
+
): Buffer {
|
|
222
|
+
throw new OracleMethodNotAvailableError('computeEncryptedEventLog');
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
computeEncryptedNoteLog(
|
|
196
226
|
_contractAddress: AztecAddress,
|
|
197
227
|
_storageSlot: Fr,
|
|
198
|
-
_noteTypeId:
|
|
228
|
+
_noteTypeId: NoteSelector,
|
|
199
229
|
_ovKeys: KeyValidationRequest,
|
|
200
230
|
_ivpkM: PublicKey,
|
|
201
231
|
_preimage: Fr[],
|
|
202
232
|
): Buffer {
|
|
203
|
-
throw new OracleMethodNotAvailableError('
|
|
233
|
+
throw new OracleMethodNotAvailableError('computeEncryptedNoteLog');
|
|
204
234
|
}
|
|
205
235
|
|
|
206
236
|
emitUnencryptedLog(_log: UnencryptedL2Log, _counter: number): void {
|
|
@@ -19,6 +19,7 @@ export class AvmContextInputs {
|
|
|
19
19
|
*/
|
|
20
20
|
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/3992): gas not implemented
|
|
21
21
|
export class AvmExecutionEnvironment {
|
|
22
|
+
private readonly calldataPrefixLength;
|
|
22
23
|
constructor(
|
|
23
24
|
public readonly address: AztecAddress,
|
|
24
25
|
public readonly storageAddress: AztecAddress,
|
|
@@ -45,8 +46,9 @@ export class AvmExecutionEnvironment {
|
|
|
45
46
|
temporaryFunctionSelector.toField(),
|
|
46
47
|
computeVarArgsHash(calldata),
|
|
47
48
|
isStaticCall,
|
|
48
|
-
);
|
|
49
|
-
this.calldata = [...inputs
|
|
49
|
+
).toFields();
|
|
50
|
+
this.calldata = [...inputs, ...calldata];
|
|
51
|
+
this.calldataPrefixLength = inputs.length;
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
private deriveEnvironmentForNestedCallInternal(
|
|
@@ -62,7 +64,7 @@ export class AvmExecutionEnvironment {
|
|
|
62
64
|
/*sender=*/ this.address,
|
|
63
65
|
this.feePerL2Gas,
|
|
64
66
|
this.feePerDaGas,
|
|
65
|
-
this.contractCallDepth,
|
|
67
|
+
this.contractCallDepth.add(Fr.ONE),
|
|
66
68
|
this.header,
|
|
67
69
|
this.globals,
|
|
68
70
|
isStaticCall,
|
|
@@ -109,4 +111,9 @@ export class AvmExecutionEnvironment {
|
|
|
109
111
|
): AvmExecutionEnvironment {
|
|
110
112
|
throw new Error('Delegate calls not supported!');
|
|
111
113
|
}
|
|
114
|
+
|
|
115
|
+
public getCalldataWithoutPrefix(): Fr[] {
|
|
116
|
+
// clip off the first few entries
|
|
117
|
+
return this.calldata.slice(this.calldataPrefixLength);
|
|
118
|
+
}
|
|
112
119
|
}
|
package/src/avm/avm_gas.ts
CHANGED
|
@@ -122,6 +122,8 @@ const BaseGasCosts: Record<Opcode, Gas> = {
|
|
|
122
122
|
[Opcode.POSEIDON2]: DefaultBaseGasCost,
|
|
123
123
|
[Opcode.SHA256]: DefaultBaseGasCost,
|
|
124
124
|
[Opcode.PEDERSEN]: DefaultBaseGasCost,
|
|
125
|
+
[Opcode.ECADD]: DefaultBaseGasCost,
|
|
126
|
+
[Opcode.MSM]: DefaultBaseGasCost,
|
|
125
127
|
// Conversions
|
|
126
128
|
[Opcode.TORADIXLE]: DefaultBaseGasCost,
|
|
127
129
|
};
|
|
@@ -298,9 +298,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
public checkIsValidMemoryOffsetTag(offset: number) {
|
|
301
|
-
|
|
302
|
-
throw TagCheckError.forOffset(offset, TypeTag[this.getTag(offset)], 'UINT64');
|
|
303
|
-
}
|
|
301
|
+
this.checkTag(TypeTag.UINT32, offset);
|
|
304
302
|
}
|
|
305
303
|
|
|
306
304
|
public static checkIsIntegralTag(tag: TypeTag) {
|
package/src/avm/avm_simulator.ts
CHANGED
|
@@ -29,10 +29,9 @@ export class AvmSimulator {
|
|
|
29
29
|
* Fetch the bytecode and execute it in the current context.
|
|
30
30
|
*/
|
|
31
31
|
public async execute(): Promise<AvmContractCallResults> {
|
|
32
|
-
const
|
|
33
|
-
const bytecode = await this.context.persistableState.hostStorage.contractsDb.getBytecode(
|
|
32
|
+
const bytecode = await this.context.persistableState.getBytecode(
|
|
34
33
|
this.context.environment.address,
|
|
35
|
-
|
|
34
|
+
this.context.environment.temporaryFunctionSelector,
|
|
36
35
|
);
|
|
37
36
|
|
|
38
37
|
// This assumes that we will not be able to send messages to accounts without code
|
|
@@ -3,19 +3,22 @@ import { FunctionSelector } from '@aztec/foundation/abi';
|
|
|
3
3
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
|
-
import {
|
|
6
|
+
import { AvmTestContractArtifact } from '@aztec/noir-contracts.js';
|
|
7
7
|
|
|
8
8
|
import { strict as assert } from 'assert';
|
|
9
9
|
import { mock } from 'jest-mock-extended';
|
|
10
10
|
import merge from 'lodash.merge';
|
|
11
11
|
|
|
12
12
|
import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../index.js';
|
|
13
|
+
import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js';
|
|
13
14
|
import { AvmContext } from '../avm_context.js';
|
|
14
15
|
import { AvmContextInputs, AvmExecutionEnvironment } from '../avm_execution_environment.js';
|
|
15
16
|
import { AvmMachineState } from '../avm_machine_state.js';
|
|
16
17
|
import { Field, Uint8 } from '../avm_memory_types.js';
|
|
17
18
|
import { HostStorage } from '../journal/host_storage.js';
|
|
18
19
|
import { AvmPersistableStateManager } from '../journal/journal.js';
|
|
20
|
+
import { NullifierManager } from '../journal/nullifiers.js';
|
|
21
|
+
import { PublicStorage } from '../journal/public_storage.js';
|
|
19
22
|
|
|
20
23
|
/**
|
|
21
24
|
* Create a new AVM context with default values.
|
|
@@ -26,7 +29,7 @@ export function initContext(overrides?: {
|
|
|
26
29
|
machineState?: AvmMachineState;
|
|
27
30
|
}): AvmContext {
|
|
28
31
|
return new AvmContext(
|
|
29
|
-
overrides?.persistableState ||
|
|
32
|
+
overrides?.persistableState || initPersistableStateManager(),
|
|
30
33
|
overrides?.env || initExecutionEnvironment(),
|
|
31
34
|
overrides?.machineState || initMachineState(),
|
|
32
35
|
);
|
|
@@ -45,9 +48,20 @@ export function initHostStorage(overrides?: {
|
|
|
45
48
|
);
|
|
46
49
|
}
|
|
47
50
|
|
|
48
|
-
/** Creates an empty state manager with mocked storage. */
|
|
49
|
-
export function
|
|
50
|
-
|
|
51
|
+
/** Creates an empty state manager with mocked host storage. */
|
|
52
|
+
export function initPersistableStateManager(overrides?: {
|
|
53
|
+
hostStorage?: HostStorage;
|
|
54
|
+
trace?: PublicSideEffectTraceInterface;
|
|
55
|
+
publicStorage?: PublicStorage;
|
|
56
|
+
nullifiers?: NullifierManager;
|
|
57
|
+
}): AvmPersistableStateManager {
|
|
58
|
+
const hostStorage = overrides?.hostStorage || initHostStorage();
|
|
59
|
+
return new AvmPersistableStateManager(
|
|
60
|
+
hostStorage,
|
|
61
|
+
overrides?.trace || mock<PublicSideEffectTraceInterface>(),
|
|
62
|
+
overrides?.publicStorage || new PublicStorage(hostStorage.publicStateDb),
|
|
63
|
+
overrides?.nullifiers || new NullifierManager(hostStorage.commitmentsDb),
|
|
64
|
+
);
|
|
51
65
|
}
|
|
52
66
|
|
|
53
67
|
/**
|
|
@@ -136,12 +150,3 @@ export function getAvmTestContractBytecode(functionName: string): Buffer {
|
|
|
136
150
|
);
|
|
137
151
|
return artifact.bytecode;
|
|
138
152
|
}
|
|
139
|
-
|
|
140
|
-
export function getAvmNestedCallsTestContractBytecode(functionName: string): Buffer {
|
|
141
|
-
const artifact = AvmNestedCallsTestContractArtifact.functions.find(f => f.name === functionName)!;
|
|
142
|
-
assert(
|
|
143
|
-
!!artifact?.bytecode,
|
|
144
|
-
`No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`,
|
|
145
|
-
);
|
|
146
|
-
return artifact.bytecode;
|
|
147
|
-
}
|