@aztec/simulator 0.0.1-commit.96bb3f7 → 0.0.1-commit.9d2bcf6d
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/README.md +2 -0
- package/dest/common/errors.d.ts +7 -1
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/private/acvm/acvm.d.ts +4 -2
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +4 -3
- package/dest/private/acvm_native.d.ts +5 -3
- package/dest/private/acvm_native.d.ts.map +1 -1
- package/dest/private/acvm_native.js +8 -6
- package/dest/private/acvm_wasm.d.ts +4 -3
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm.js +4 -4
- package/dest/private/circuit_recording/circuit_recorder.d.ts +4 -3
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +5 -3
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +3 -2
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +2 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
- package/dest/private/factory.d.ts +3 -3
- package/dest/private/factory.d.ts.map +1 -1
- package/dest/private/factory.js +7 -4
- package/dest/public/avm/avm_context.d.ts +3 -3
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +6 -6
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +3 -3
- package/dest/public/avm/avm_execution_environment.d.ts +6 -5
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.d.ts +6 -5
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +3 -2
- package/dest/public/avm/avm_memory_types.d.ts +1 -1
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +3 -0
- package/dest/public/avm/avm_simulator.d.ts +3 -2
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +5 -4
- package/dest/public/avm/calldata.d.ts +51 -0
- package/dest/public/avm/calldata.d.ts.map +1 -0
- package/dest/public/avm/calldata.js +63 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +3 -2
- package/dest/public/avm/fixtures/initializers.d.ts +1 -1
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
- package/dest/public/avm/fixtures/initializers.js +2 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +16 -17
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +38 -38
- package/dest/public/avm/opcodes/arithmetic.d.ts +8 -8
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +1 -1
- package/dest/public/avm/opcodes/bitwise.d.ts +7 -7
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +5 -5
- package/dest/public/avm/opcodes/comparators.d.ts +4 -4
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +1 -1
- package/dest/public/avm/opcodes/contract.d.ts +3 -3
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +8 -8
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +4 -4
- package/dest/public/avm/opcodes/conversion.d.ts +3 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +4 -4
- package/dest/public/avm/opcodes/ec_add.d.ts +4 -4
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +15 -6
- package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +4 -4
- package/dest/public/avm/opcodes/external_calls.d.ts +9 -9
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +23 -23
- package/dest/public/avm/opcodes/hashing.d.ts +8 -8
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +12 -12
- package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +14 -14
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +25 -25
- package/dest/public/avm/opcodes/misc.d.ts +3 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +4 -4
- package/dest/public/avm/opcodes/storage.d.ts +16 -15
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +34 -24
- package/dest/public/debug_fn_name.d.ts +4 -4
- package/dest/public/debug_fn_name.d.ts.map +1 -1
- package/dest/public/debug_fn_name.js +7 -5
- package/dest/public/executor_metrics.d.ts +1 -1
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +7 -2
- package/dest/public/fixtures/bulk_test.d.ts +3 -3
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -11
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +18 -18
- package/dest/public/fixtures/minimal_public_tx.js +2 -2
- package/dest/public/fixtures/opcode_spammer.d.ts +3 -4
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -1
- package/dest/public/fixtures/opcode_spammer.js +95 -123
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +21 -7
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +42 -10
- package/dest/public/fuzzing/avm_simulator_bin.js +15 -8
- package/dest/public/public_db_sources.d.ts +4 -3
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +4 -4
- package/dest/public/public_processor/public_processor.d.ts +6 -4
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +11 -6
- package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +20 -4
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +3 -2
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +2 -2
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +5 -5
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +10 -9
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +4 -4
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +5 -5
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +4 -4
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +6 -6
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +3 -2
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +2 -2
- package/dest/public/public_tx_simulator/factories.d.ts +3 -2
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +3 -3
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +4 -3
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +8 -8
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +6 -4
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +12 -7
- package/dest/public/side_effect_trace.d.ts +5 -4
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +3 -3
- package/dest/public/state_manager/state_manager.d.ts +10 -4
- package/dest/public/state_manager/state_manager.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.js +14 -7
- package/dest/public/test_executor_metrics.d.ts +3 -2
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +2 -2
- package/package.json +17 -17
- package/src/private/acvm/acvm.ts +4 -3
- package/src/private/acvm_native.ts +11 -5
- package/src/private/acvm_wasm.ts +7 -3
- package/src/private/circuit_recording/circuit_recorder.ts +5 -3
- package/src/private/circuit_recording/file_circuit_recorder.ts +7 -2
- package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
- package/src/private/factory.ts +7 -4
- package/src/public/avm/avm_context.ts +2 -2
- package/src/public/avm/avm_contract_call_result.ts +8 -6
- package/src/public/avm/avm_execution_environment.ts +9 -4
- package/src/public/avm/avm_machine_state.ts +6 -5
- package/src/public/avm/avm_memory_types.ts +4 -0
- package/src/public/avm/avm_simulator.ts +8 -5
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/fixtures/avm_simulation_tester.ts +8 -2
- package/src/public/avm/fixtures/initializers.ts +2 -1
- package/src/public/avm/opcodes/accrued_substate.ts +27 -29
- package/src/public/avm/opcodes/arithmetic.ts +1 -1
- package/src/public/avm/opcodes/bitwise.ts +3 -3
- package/src/public/avm/opcodes/comparators.ts +1 -1
- package/src/public/avm/opcodes/contract.ts +4 -7
- package/src/public/avm/opcodes/control_flow.ts +2 -2
- package/src/public/avm/opcodes/conversion.ts +3 -3
- package/src/public/avm/opcodes/ec_add.ts +13 -4
- package/src/public/avm/opcodes/environment_getters.ts +3 -3
- package/src/public/avm/opcodes/external_calls.ts +17 -16
- package/src/public/avm/opcodes/hashing.ts +6 -6
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +19 -19
- package/src/public/avm/opcodes/misc.ts +2 -2
- package/src/public/avm/opcodes/storage.ts +30 -22
- package/src/public/debug_fn_name.ts +10 -8
- package/src/public/executor_metrics.ts +4 -1
- package/src/public/fixtures/custom_bytecode_tests.ts +27 -18
- package/src/public/fixtures/minimal_public_tx.ts +2 -2
- package/src/public/fixtures/opcode_spammer.ts +196 -113
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +60 -12
- package/src/public/fuzzing/avm_simulator_bin.ts +26 -4
- package/src/public/public_db_sources.ts +15 -5
- package/src/public/public_processor/public_processor.ts +21 -7
- package/src/public/public_processor/public_processor_metrics.ts +10 -4
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +6 -3
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +11 -7
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +6 -4
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +7 -5
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +3 -1
- package/src/public/public_tx_simulator/factories.ts +4 -2
- package/src/public/public_tx_simulator/public_tx_context.ts +13 -6
- package/src/public/public_tx_simulator/public_tx_simulator.ts +18 -7
- package/src/public/side_effect_trace.ts +5 -2
- package/src/public/state_manager/state_manager.ts +29 -20
- package/src/public/test_executor_metrics.ts +3 -3
|
@@ -164,7 +164,7 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
164
164
|
import type { Bufferable } from '@aztec/foundation/serialize';
|
|
165
165
|
import { type CallStackMetadata, PublicDataWrite, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
166
166
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
167
|
-
import { computePublicDataTreeLeafSlot
|
|
167
|
+
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
168
168
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
169
169
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
170
170
|
|
|
@@ -295,9 +295,8 @@ export interface SpamConfigsForOpcode {
|
|
|
295
295
|
export const WARM_NOTE_HASH = new Fr(0xdeadbeefn);
|
|
296
296
|
export const WARM_L1_TO_L2_MSG = new Fr(0xcafebabedeadbeefn);
|
|
297
297
|
|
|
298
|
-
/** Warm nullifier
|
|
299
|
-
export const
|
|
300
|
-
export const WARM_NULLIFIER_ADDRESS = AztecAddress.fromNumber(0xbeef);
|
|
298
|
+
/** Warm nullifier constant - a pre-siloed nullifier value inserted directly into the tree */
|
|
299
|
+
export const WARM_SILOED_NULLIFIER = new Fr(0xdeadbeef0001n);
|
|
301
300
|
|
|
302
301
|
/** Warm storage constants - storage is inserted for the deployed contract's address */
|
|
303
302
|
export const WARM_STORAGE_SLOT = new Fr(0xdeadbeef0002n);
|
|
@@ -331,9 +330,8 @@ export async function insertWarmTreeEntries(
|
|
|
331
330
|
// Insert into L1 to L2 message tree
|
|
332
331
|
await merkleTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [WARM_L1_TO_L2_MSG]);
|
|
333
332
|
|
|
334
|
-
// Insert siloed nullifier into nullifier tree
|
|
335
|
-
|
|
336
|
-
await merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()]);
|
|
333
|
+
// Insert siloed nullifier into nullifier tree (already siloed - used directly by NULLIFIEREXISTS)
|
|
334
|
+
await merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [WARM_SILOED_NULLIFIER.toBuffer()]);
|
|
337
335
|
|
|
338
336
|
// Insert storage value into public data tree
|
|
339
337
|
const leafSlot = await computePublicDataTreeLeafSlot(contractAddress, WARM_STORAGE_SLOT);
|
|
@@ -449,7 +447,7 @@ export const EXTERNAL_CALL_CONFIG: SpamConfig = {
|
|
|
449
447
|
{ offset: CONST_MAX_U32_OFFSET, value: new Uint32(MAX_U32) }, // l2Gas/daGas - MAX_U32 gets capped to remaining gas
|
|
450
448
|
() => [
|
|
451
449
|
new CalldataCopy(
|
|
452
|
-
/*
|
|
450
|
+
/*addressing_mode=*/ 0,
|
|
453
451
|
/*copySizeOffset=*/ CALL_COPY_SIZE_OFFSET,
|
|
454
452
|
/*cdStartOffset=*/ CALL_CALLDATA_INDEX_OFFSET,
|
|
455
453
|
/*dstOffset=*/ CALL_ADDR_OFFSET,
|
|
@@ -458,7 +456,7 @@ export const EXTERNAL_CALL_CONFIG: SpamConfig = {
|
|
|
458
456
|
],
|
|
459
457
|
targetInstructions: () => [
|
|
460
458
|
new Call(
|
|
461
|
-
/*
|
|
459
|
+
/*addressing_mode=*/ 0,
|
|
462
460
|
/*l2GasOffset=*/ CALL_L2_GAS_OFFSET,
|
|
463
461
|
/*daGasOffset=*/ CALL_DA_GAS_OFFSET,
|
|
464
462
|
/*addrOffset=*/ CALL_ADDR_OFFSET,
|
|
@@ -477,7 +475,7 @@ const STATIC_CALL_CONFIG: SpamConfig = {
|
|
|
477
475
|
{ offset: CONST_MAX_U32_OFFSET, value: new Uint32(MAX_U32) }, // l2Gas/daGas - MAX_U32 gets capped to remaining gas
|
|
478
476
|
() => [
|
|
479
477
|
new CalldataCopy(
|
|
480
|
-
/*
|
|
478
|
+
/*addressing_mode=*/ 0,
|
|
481
479
|
/*copySizeOffset=*/ CALL_COPY_SIZE_OFFSET,
|
|
482
480
|
/*cdStartOffset=*/ CALL_CALLDATA_INDEX_OFFSET,
|
|
483
481
|
/*dstOffset=*/ CALL_ADDR_OFFSET,
|
|
@@ -486,7 +484,7 @@ const STATIC_CALL_CONFIG: SpamConfig = {
|
|
|
486
484
|
],
|
|
487
485
|
targetInstructions: () => [
|
|
488
486
|
new StaticCall(
|
|
489
|
-
/*
|
|
487
|
+
/*addressing_mode=*/ 0,
|
|
490
488
|
/*l2GasOffset=*/ CALL_L2_GAS_OFFSET,
|
|
491
489
|
/*daGasOffset=*/ CALL_DA_GAS_OFFSET,
|
|
492
490
|
/*addrOffset=*/ CALL_ADDR_OFFSET,
|
|
@@ -517,7 +515,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
517
515
|
{ offset: 1, value: randomWithTag(tag) }, // random addend
|
|
518
516
|
],
|
|
519
517
|
targetInstructions: () => [
|
|
520
|
-
new Add(/*
|
|
518
|
+
new Add(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
519
|
+
Opcode.ADD_8,
|
|
520
|
+
Add.wireFormat8,
|
|
521
|
+
),
|
|
521
522
|
],
|
|
522
523
|
})),
|
|
523
524
|
|
|
@@ -528,7 +529,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
528
529
|
{ offset: 1, value: randomWithTag(tag) }, // random subtrahend
|
|
529
530
|
],
|
|
530
531
|
targetInstructions: () => [
|
|
531
|
-
new Sub(/*
|
|
532
|
+
new Sub(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
533
|
+
Opcode.SUB_8,
|
|
534
|
+
Sub.wireFormat8,
|
|
535
|
+
),
|
|
532
536
|
],
|
|
533
537
|
})),
|
|
534
538
|
|
|
@@ -539,7 +543,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
539
543
|
{ offset: 1, value: randomWithTag(tag) }, // random multiplier
|
|
540
544
|
],
|
|
541
545
|
targetInstructions: () => [
|
|
542
|
-
new Mul(/*
|
|
546
|
+
new Mul(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
547
|
+
Opcode.MUL_8,
|
|
548
|
+
Mul.wireFormat8,
|
|
549
|
+
),
|
|
543
550
|
],
|
|
544
551
|
})),
|
|
545
552
|
|
|
@@ -551,7 +558,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
551
558
|
{ offset: 1, value: randomNonZeroWithTag(tag) }, // random non-zero divisor
|
|
552
559
|
],
|
|
553
560
|
targetInstructions: () => [
|
|
554
|
-
new Div(/*
|
|
561
|
+
new Div(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
562
|
+
Opcode.DIV_8,
|
|
563
|
+
Div.wireFormat8,
|
|
564
|
+
),
|
|
555
565
|
],
|
|
556
566
|
})),
|
|
557
567
|
|
|
@@ -563,7 +573,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
563
573
|
{ offset: 1, value: randomNonZeroField() }, // random non-zero divisor
|
|
564
574
|
],
|
|
565
575
|
targetInstructions: () => [
|
|
566
|
-
new FieldDiv(/*
|
|
576
|
+
new FieldDiv(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
567
577
|
Opcode.FDIV_8,
|
|
568
578
|
FieldDiv.wireFormat8,
|
|
569
579
|
),
|
|
@@ -581,7 +591,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
581
591
|
{ offset: 1, value: randomWithTag(tag) }, // random value b
|
|
582
592
|
],
|
|
583
593
|
targetInstructions: () => [
|
|
584
|
-
new Eq(/*
|
|
594
|
+
new Eq(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.EQ_8, Eq.wireFormat8),
|
|
585
595
|
],
|
|
586
596
|
})),
|
|
587
597
|
|
|
@@ -592,7 +602,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
592
602
|
{ offset: 1, value: randomWithTag(tag) }, // random value b
|
|
593
603
|
],
|
|
594
604
|
targetInstructions: () => [
|
|
595
|
-
new Lt(/*
|
|
605
|
+
new Lt(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.LT_8, Lt.wireFormat8),
|
|
596
606
|
],
|
|
597
607
|
})),
|
|
598
608
|
|
|
@@ -603,7 +613,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
603
613
|
{ offset: 1, value: randomWithTag(tag) }, // random value b
|
|
604
614
|
],
|
|
605
615
|
targetInstructions: () => [
|
|
606
|
-
new Lte(/*
|
|
616
|
+
new Lte(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(
|
|
617
|
+
Opcode.LTE_8,
|
|
618
|
+
Lte.wireFormat8,
|
|
619
|
+
),
|
|
607
620
|
],
|
|
608
621
|
})),
|
|
609
622
|
|
|
@@ -617,7 +630,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
617
630
|
{ offset: 1, value: randomWithTag(tag) }, // random value b
|
|
618
631
|
],
|
|
619
632
|
targetInstructions: () => [
|
|
620
|
-
new And(/*
|
|
633
|
+
new And(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
634
|
+
Opcode.AND_8,
|
|
635
|
+
And.wireFormat8,
|
|
636
|
+
),
|
|
621
637
|
],
|
|
622
638
|
})),
|
|
623
639
|
|
|
@@ -628,7 +644,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
628
644
|
{ offset: 1, value: randomWithTag(tag) }, // random value b
|
|
629
645
|
],
|
|
630
646
|
targetInstructions: () => [
|
|
631
|
-
new Or(/*
|
|
647
|
+
new Or(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.OR_8, Or.wireFormat8),
|
|
632
648
|
],
|
|
633
649
|
})),
|
|
634
650
|
|
|
@@ -639,7 +655,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
639
655
|
{ offset: 1, value: randomWithTag(tag) }, // random value b
|
|
640
656
|
],
|
|
641
657
|
targetInstructions: () => [
|
|
642
|
-
new Xor(/*
|
|
658
|
+
new Xor(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
659
|
+
Opcode.XOR_8,
|
|
660
|
+
Xor.wireFormat8,
|
|
661
|
+
),
|
|
643
662
|
],
|
|
644
663
|
})),
|
|
645
664
|
|
|
@@ -647,7 +666,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
647
666
|
label: TypeTag[tag],
|
|
648
667
|
setup: [{ offset: 0, value: randomWithTag(tag) }], // random value
|
|
649
668
|
targetInstructions: () => [
|
|
650
|
-
new Not(/*
|
|
669
|
+
new Not(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 0).as(Opcode.NOT_8, Not.wireFormat8),
|
|
651
670
|
],
|
|
652
671
|
})),
|
|
653
672
|
|
|
@@ -658,7 +677,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
658
677
|
{ offset: 1, value: withTag(1n, tag) }, // shift by 1 (small fixed amount to avoid overflow)
|
|
659
678
|
],
|
|
660
679
|
targetInstructions: () => [
|
|
661
|
-
new Shl(/*
|
|
680
|
+
new Shl(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
681
|
+
Opcode.SHL_8,
|
|
682
|
+
Shl.wireFormat8,
|
|
683
|
+
),
|
|
662
684
|
],
|
|
663
685
|
})),
|
|
664
686
|
|
|
@@ -669,7 +691,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
669
691
|
{ offset: 1, value: withTag(1n, tag) }, // shift by 1 (small fixed amount)
|
|
670
692
|
],
|
|
671
693
|
targetInstructions: () => [
|
|
672
|
-
new Shr(/*
|
|
694
|
+
new Shr(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
695
|
+
Opcode.SHR_8,
|
|
696
|
+
Shr.wireFormat8,
|
|
697
|
+
),
|
|
673
698
|
],
|
|
674
699
|
})),
|
|
675
700
|
|
|
@@ -680,7 +705,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
680
705
|
label: TypeTag[tag],
|
|
681
706
|
setup: [{ offset: 0, value: randomWithTag(tag) }], // random value to cast
|
|
682
707
|
targetInstructions: () => [
|
|
683
|
-
new Cast(/*
|
|
708
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 1, /*dstTag=*/ TypeTag.UINT32).as(
|
|
684
709
|
Opcode.CAST_8,
|
|
685
710
|
Cast.wireFormat8,
|
|
686
711
|
),
|
|
@@ -691,7 +716,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
691
716
|
label: TypeTag[tag],
|
|
692
717
|
setup: [{ offset: 0, value: randomWithTag(tag) }], // random value to move
|
|
693
718
|
targetInstructions: () => [
|
|
694
|
-
new Mov(/*
|
|
719
|
+
new Mov(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 1).as(Opcode.MOV_8, Mov.wireFormat8),
|
|
695
720
|
],
|
|
696
721
|
})),
|
|
697
722
|
|
|
@@ -732,7 +757,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
732
757
|
{
|
|
733
758
|
setup: [],
|
|
734
759
|
targetInstructions: () => [
|
|
735
|
-
new Set(/*
|
|
760
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*inTag=*/ TypeTag.UINT128, /*value=*/ 4242424242424242n).as(
|
|
736
761
|
Opcode.SET_128,
|
|
737
762
|
Set.wireFormat128,
|
|
738
763
|
),
|
|
@@ -761,7 +786,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
761
786
|
[Opcode.JUMPI_32]: [
|
|
762
787
|
{
|
|
763
788
|
setup: [{ offset: 0, value: new Uint1(0n) }], // Always false
|
|
764
|
-
targetInstructions: () => [new JumpI(/*
|
|
789
|
+
targetInstructions: () => [new JumpI(/*addressing_mode=*/ 0, /*condOffset=*/ 0, /*loc=*/ 0)],
|
|
765
790
|
},
|
|
766
791
|
],
|
|
767
792
|
|
|
@@ -801,7 +826,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
801
826
|
{ offset: 0, value: new Uint32(0) }, // returnSize = 0
|
|
802
827
|
],
|
|
803
828
|
targetInstructions: () => [
|
|
804
|
-
new Return(/*
|
|
829
|
+
new Return(/*addressing_mode=*/ 0, /*returnSizeOffset=*/ 0, /*returnOffset=*/ 0), // return nothing (size=0)
|
|
805
830
|
],
|
|
806
831
|
// Use the side-effect-limit pattern (even though it's not a side-effect) as it fits
|
|
807
832
|
// this case (we want to CALL, RETURN, then CALL again back in parent). We omit "cleanup"
|
|
@@ -818,7 +843,10 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
818
843
|
{ offset: 0, value: new Uint32(0) }, // retSize = 0
|
|
819
844
|
],
|
|
820
845
|
targetInstructions: () => [
|
|
821
|
-
new Revert(/*
|
|
846
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 0, /*returnOffset=*/ 1).as(
|
|
847
|
+
Opcode.REVERT_8,
|
|
848
|
+
Revert.wireFormat8,
|
|
849
|
+
),
|
|
822
850
|
],
|
|
823
851
|
limit: 1, // REVERT can only execute once per call
|
|
824
852
|
},
|
|
@@ -831,7 +859,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
831
859
|
{
|
|
832
860
|
setup: [],
|
|
833
861
|
targetInstructions: () => [
|
|
834
|
-
new GetEnvVar(/*
|
|
862
|
+
new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*varEnum=*/ 0).as(
|
|
835
863
|
Opcode.GETENVVAR_16,
|
|
836
864
|
GetEnvVar.wireFormat16,
|
|
837
865
|
),
|
|
@@ -849,7 +877,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
849
877
|
{ offset: 1, value: new Uint32(0n) }, // cdStart = 0
|
|
850
878
|
],
|
|
851
879
|
targetInstructions: () => [
|
|
852
|
-
new CalldataCopy(/*
|
|
880
|
+
new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2),
|
|
853
881
|
],
|
|
854
882
|
},
|
|
855
883
|
{
|
|
@@ -862,7 +890,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
862
890
|
{ offset: 1, value: new Uint32(0n) }, // cdStart = 0
|
|
863
891
|
],
|
|
864
892
|
targetInstructions: () => [
|
|
865
|
-
new CalldataCopy(/*
|
|
893
|
+
new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2),
|
|
866
894
|
],
|
|
867
895
|
},
|
|
868
896
|
{
|
|
@@ -873,7 +901,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
873
901
|
{ offset: 1, value: new Uint32(0n) }, // cdStart = 0
|
|
874
902
|
],
|
|
875
903
|
targetInstructions: () => [
|
|
876
|
-
new CalldataCopy(/*
|
|
904
|
+
new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2),
|
|
877
905
|
],
|
|
878
906
|
},
|
|
879
907
|
],
|
|
@@ -881,14 +909,14 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
881
909
|
[Opcode.SUCCESSCOPY]: [
|
|
882
910
|
{
|
|
883
911
|
setup: [],
|
|
884
|
-
targetInstructions: () => [new SuccessCopy(/*
|
|
912
|
+
targetInstructions: () => [new SuccessCopy(/*addressing_mode=*/ 0, /*dstOffset=*/ 0)],
|
|
885
913
|
},
|
|
886
914
|
],
|
|
887
915
|
|
|
888
916
|
[Opcode.RETURNDATASIZE]: [
|
|
889
917
|
{
|
|
890
918
|
setup: [],
|
|
891
|
-
targetInstructions: () => [new ReturndataSize(/*
|
|
919
|
+
targetInstructions: () => [new ReturndataSize(/*addressing_mode=*/ 0, /*dstOffset=*/ 0)],
|
|
892
920
|
},
|
|
893
921
|
],
|
|
894
922
|
|
|
@@ -901,7 +929,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
901
929
|
{ offset: 1, value: new Uint32(0n) }, // rdOffset
|
|
902
930
|
],
|
|
903
931
|
targetInstructions: () => [
|
|
904
|
-
new ReturndataCopy(/*
|
|
932
|
+
new ReturndataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2),
|
|
905
933
|
],
|
|
906
934
|
},
|
|
907
935
|
{
|
|
@@ -914,7 +942,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
914
942
|
{ offset: 1, value: new Uint32(0n) }, // rdOffset
|
|
915
943
|
],
|
|
916
944
|
targetInstructions: () => [
|
|
917
|
-
new ReturndataCopy(/*
|
|
945
|
+
new ReturndataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2),
|
|
918
946
|
],
|
|
919
947
|
},
|
|
920
948
|
{
|
|
@@ -925,7 +953,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
925
953
|
{ offset: 1, value: new Uint32(0n) }, // rdOffset
|
|
926
954
|
],
|
|
927
955
|
targetInstructions: () => [
|
|
928
|
-
new ReturndataCopy(/*
|
|
956
|
+
new ReturndataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2),
|
|
929
957
|
],
|
|
930
958
|
},
|
|
931
959
|
],
|
|
@@ -936,31 +964,66 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
936
964
|
[Opcode.SLOAD]: [
|
|
937
965
|
{
|
|
938
966
|
label: 'Cold read (slot not written)',
|
|
939
|
-
setup: [
|
|
940
|
-
|
|
967
|
+
setup: [
|
|
968
|
+
{ offset: 0, value: new Field(Fr.random()) }, // random slot
|
|
969
|
+
() => [
|
|
970
|
+
// Get current contract address into offset 1
|
|
971
|
+
new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 1, /*varEnum=*/ 0).as(
|
|
972
|
+
Opcode.GETENVVAR_16,
|
|
973
|
+
GetEnvVar.wireFormat16,
|
|
974
|
+
),
|
|
975
|
+
],
|
|
976
|
+
],
|
|
977
|
+
targetInstructions: () => [
|
|
978
|
+
new SLoad(/*addressing_mode=*/ 0, /*slotOffset=*/ 0, /*contractAddressOffset=*/ 1, /*dstOffset=*/ 2),
|
|
979
|
+
],
|
|
941
980
|
},
|
|
942
981
|
{
|
|
943
982
|
label: 'Warm read (from tree)',
|
|
944
983
|
// Uses pre-inserted storage from insertWarmTreeEntries() which is called after contract deployment
|
|
945
|
-
setup: [
|
|
946
|
-
|
|
984
|
+
setup: [
|
|
985
|
+
{ offset: 0, value: new Field(WARM_STORAGE_SLOT) }, // pre-inserted slot
|
|
986
|
+
() => [
|
|
987
|
+
// Get current contract address into offset 1
|
|
988
|
+
new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 1, /*varEnum=*/ 0).as(
|
|
989
|
+
Opcode.GETENVVAR_16,
|
|
990
|
+
GetEnvVar.wireFormat16,
|
|
991
|
+
),
|
|
992
|
+
],
|
|
993
|
+
],
|
|
994
|
+
targetInstructions: () => [
|
|
995
|
+
new SLoad(/*addressing_mode=*/ 0, /*slotOffset=*/ 0, /*contractAddressOffset=*/ 1, /*dstOffset=*/ 2),
|
|
996
|
+
],
|
|
947
997
|
},
|
|
948
998
|
{
|
|
949
999
|
label: 'Warm read (SSTORE first, unique slot per SLOAD)',
|
|
950
|
-
// Memory layout: slot (incremented), value, constant 1, revertSize, loaded value
|
|
1000
|
+
// Memory layout: slot (incremented), value, constant 1, contract address (from GETENVVAR), revertSize, loaded value
|
|
951
1001
|
setup: [
|
|
952
1002
|
{ offset: 0, value: new Field(Fr.random()) }, // slot (will be incremented)
|
|
953
1003
|
{ offset: 1, value: new Field(Fr.random()) }, // value to store
|
|
954
1004
|
{ offset: 2, value: new Field(1n) }, // constant 1 for ADD
|
|
955
|
-
|
|
1005
|
+
() => [
|
|
1006
|
+
// Get current contract address into offset 3
|
|
1007
|
+
new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 3, /*varEnum=*/ 0).as(
|
|
1008
|
+
Opcode.GETENVVAR_16,
|
|
1009
|
+
GetEnvVar.wireFormat16,
|
|
1010
|
+
),
|
|
1011
|
+
],
|
|
1012
|
+
{ offset: 4, value: new Uint32(0n) }, // revertSize
|
|
956
1013
|
],
|
|
957
1014
|
targetInstructions: () => [
|
|
958
|
-
new SStore(/*
|
|
959
|
-
new SLoad(/*
|
|
960
|
-
new Add(/*
|
|
1015
|
+
new SStore(/*addressing_mode=*/ 0, /*srcOffset=*/ 1, /*slotOffset=*/ 0),
|
|
1016
|
+
new SLoad(/*addressing_mode=*/ 0, /*slotOffset=*/ 0, /*contractAddressOffset=*/ 3, /*dstOffset=*/ 5),
|
|
1017
|
+
new Add(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 2, /*dstOffset=*/ 0).as(
|
|
1018
|
+
Opcode.ADD_8,
|
|
1019
|
+
Add.wireFormat8,
|
|
1020
|
+
), // slot++
|
|
961
1021
|
],
|
|
962
1022
|
cleanupInstructions: () => [
|
|
963
|
-
new Revert(/*
|
|
1023
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 4, /*returnOffset=*/ 0).as(
|
|
1024
|
+
Opcode.REVERT_8,
|
|
1025
|
+
Revert.wireFormat8,
|
|
1026
|
+
),
|
|
964
1027
|
],
|
|
965
1028
|
limit: MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
966
1029
|
},
|
|
@@ -976,7 +1039,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
976
1039
|
{ offset: 1, value: randomWithTag(TypeTag.UINT64) }, // random leafIndex
|
|
977
1040
|
],
|
|
978
1041
|
targetInstructions: () => [
|
|
979
|
-
new NoteHashExists(/*
|
|
1042
|
+
new NoteHashExists(/*addressing_mode=*/ 0, /*noteHashOffset=*/ 0, /*leafIndexOffset=*/ 1, /*existsOffset=*/ 2),
|
|
980
1043
|
],
|
|
981
1044
|
},
|
|
982
1045
|
{
|
|
@@ -987,7 +1050,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
987
1050
|
{ offset: 1, value: new Uint64(WARM_NOTE_HASH_LEAF_INDEX) }, // known leafIndex
|
|
988
1051
|
],
|
|
989
1052
|
targetInstructions: () => [
|
|
990
|
-
new NoteHashExists(/*
|
|
1053
|
+
new NoteHashExists(/*addressing_mode=*/ 0, /*noteHashOffset=*/ 0, /*leafIndexOffset=*/ 1, /*existsOffset=*/ 2),
|
|
991
1054
|
],
|
|
992
1055
|
},
|
|
993
1056
|
],
|
|
@@ -995,49 +1058,24 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
995
1058
|
[Opcode.NULLIFIEREXISTS]: [
|
|
996
1059
|
{
|
|
997
1060
|
label: 'Non-existent nullifier',
|
|
1061
|
+
// NULLIFIEREXISTS now takes a siloed nullifier directly (no address parameter)
|
|
998
1062
|
setup: [
|
|
999
|
-
{ offset: 0, value: new Field(Fr.random()) }, // random nullifier
|
|
1000
|
-
{ offset: 1, value: new Field(Fr.random()) }, // random address
|
|
1063
|
+
{ offset: 0, value: new Field(Fr.random()) }, // random siloed nullifier (won't exist)
|
|
1001
1064
|
],
|
|
1002
1065
|
targetInstructions: () => [
|
|
1003
|
-
new NullifierExists(/*
|
|
1066
|
+
new NullifierExists(/*addressing_mode=*/ 0, /*siloedNullifierOffset=*/ 0, /*existsOffset=*/ 1),
|
|
1004
1067
|
],
|
|
1005
1068
|
},
|
|
1006
1069
|
{
|
|
1007
1070
|
label: 'Existing nullifier (warm - from tree)',
|
|
1008
|
-
// Uses pre-inserted nullifier from insertWarmTreeEntries()
|
|
1009
|
-
|
|
1010
|
-
{ offset: 0, value: new Field(WARM_NULLIFIER) }, // pre-inserted nullifier
|
|
1011
|
-
{ offset: 1, value: new Field(WARM_NULLIFIER_ADDRESS.toField()) }, // address it was siloed with
|
|
1012
|
-
],
|
|
1013
|
-
targetInstructions: () => [
|
|
1014
|
-
new NullifierExists(/*indirect=*/ 0, /*nullifierOffset=*/ 0, /*addressOffset=*/ 1, /*existsOffset=*/ 2),
|
|
1015
|
-
],
|
|
1016
|
-
},
|
|
1017
|
-
{
|
|
1018
|
-
label: 'Existing nullifier (warm - EMITNULLIFIER first)',
|
|
1019
|
-
// Memory layout: nullifier (incremented), constant 1, current address (from GETENVVAR), revertSize, exists result
|
|
1071
|
+
// Uses pre-inserted siloed nullifier from insertWarmTreeEntries()
|
|
1072
|
+
// NULLIFIEREXISTS now takes a siloed nullifier directly
|
|
1020
1073
|
setup: [
|
|
1021
|
-
{ offset: 0, value: new Field(
|
|
1022
|
-
{ offset: 1, value: new Field(1n) }, // constant 1 for ADD
|
|
1023
|
-
() => [
|
|
1024
|
-
// Get current contract address into offset 2
|
|
1025
|
-
new GetEnvVar(/*indirect=*/ 0, /*dstOffset=*/ 2, /*varEnum=*/ 0).as(
|
|
1026
|
-
Opcode.GETENVVAR_16,
|
|
1027
|
-
GetEnvVar.wireFormat16,
|
|
1028
|
-
),
|
|
1029
|
-
],
|
|
1030
|
-
{ offset: 3, value: new Uint32(0n) }, // revertSize
|
|
1074
|
+
{ offset: 0, value: new Field(WARM_SILOED_NULLIFIER) }, // pre-inserted siloed nullifier
|
|
1031
1075
|
],
|
|
1032
1076
|
targetInstructions: () => [
|
|
1033
|
-
new
|
|
1034
|
-
new NullifierExists(/*indirect=*/ 0, /*nullifierOffset=*/ 0, /*addressOffset=*/ 2, /*existsOffset=*/ 4),
|
|
1035
|
-
new Add(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.ADD_8, Add.wireFormat8), // nullifier++
|
|
1036
|
-
],
|
|
1037
|
-
cleanupInstructions: () => [
|
|
1038
|
-
new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 3, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8),
|
|
1077
|
+
new NullifierExists(/*addressing_mode=*/ 0, /*siloedNullifierOffset=*/ 0, /*existsOffset=*/ 1),
|
|
1039
1078
|
],
|
|
1040
|
-
limit: MAX_NULLIFIERS_PER_TX - 1,
|
|
1041
1079
|
},
|
|
1042
1080
|
],
|
|
1043
1081
|
|
|
@@ -1049,7 +1087,12 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1049
1087
|
{ offset: 1, value: randomWithTag(TypeTag.UINT64) }, // random msgLeafIndex
|
|
1050
1088
|
],
|
|
1051
1089
|
targetInstructions: () => [
|
|
1052
|
-
new L1ToL2MessageExists(
|
|
1090
|
+
new L1ToL2MessageExists(
|
|
1091
|
+
/*addressing_mode=*/ 0,
|
|
1092
|
+
/*msgHashOffset=*/ 0,
|
|
1093
|
+
/*msgLeafIndexOffset=*/ 1,
|
|
1094
|
+
/*existsOffset=*/ 2,
|
|
1095
|
+
),
|
|
1053
1096
|
],
|
|
1054
1097
|
},
|
|
1055
1098
|
{
|
|
@@ -1060,7 +1103,12 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1060
1103
|
{ offset: 1, value: new Uint64(WARM_L1_TO_L2_MSG_LEAF_INDEX) }, // known msgLeafIndex
|
|
1061
1104
|
],
|
|
1062
1105
|
targetInstructions: () => [
|
|
1063
|
-
new L1ToL2MessageExists(
|
|
1106
|
+
new L1ToL2MessageExists(
|
|
1107
|
+
/*addressing_mode=*/ 0,
|
|
1108
|
+
/*msgHashOffset=*/ 0,
|
|
1109
|
+
/*msgLeafIndexOffset=*/ 1,
|
|
1110
|
+
/*existsOffset=*/ 2,
|
|
1111
|
+
),
|
|
1064
1112
|
],
|
|
1065
1113
|
},
|
|
1066
1114
|
],
|
|
@@ -1071,7 +1119,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1071
1119
|
// This ensures we're querying a valid deployed contract
|
|
1072
1120
|
setup: [
|
|
1073
1121
|
() => [
|
|
1074
|
-
new GetEnvVar(/*
|
|
1122
|
+
new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*varEnum=*/ 0).as(
|
|
1075
1123
|
Opcode.GETENVVAR_16,
|
|
1076
1124
|
GetEnvVar.wireFormat16,
|
|
1077
1125
|
),
|
|
@@ -1079,7 +1127,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1079
1127
|
],
|
|
1080
1128
|
// memberEnum 0 = DEPLOYER
|
|
1081
1129
|
targetInstructions: () => [
|
|
1082
|
-
new GetContractInstance(/*
|
|
1130
|
+
new GetContractInstance(/*addressing_mode=*/ 0, /*addressOffset=*/ 0, /*dstOffset=*/ 1, /*memberEnum=*/ 0),
|
|
1083
1131
|
],
|
|
1084
1132
|
},
|
|
1085
1133
|
],
|
|
@@ -1093,9 +1141,12 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1093
1141
|
{ offset: 0, value: new Field(Fr.random()) }, // random noteHash
|
|
1094
1142
|
{ offset: 1, value: new Uint32(0n) }, // revertSize
|
|
1095
1143
|
],
|
|
1096
|
-
targetInstructions: () => [new EmitNoteHash(/*
|
|
1144
|
+
targetInstructions: () => [new EmitNoteHash(/*addressing_mode=*/ 0, /*noteHashOffset=*/ 0)],
|
|
1097
1145
|
cleanupInstructions: () => [
|
|
1098
|
-
new Revert(/*
|
|
1146
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(
|
|
1147
|
+
Opcode.REVERT_8,
|
|
1148
|
+
Revert.wireFormat8,
|
|
1149
|
+
),
|
|
1099
1150
|
], // revert with empty
|
|
1100
1151
|
limit: MAX_NOTE_HASHES_PER_TX,
|
|
1101
1152
|
},
|
|
@@ -1111,11 +1162,17 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1111
1162
|
{ offset: 2, value: new Uint32(0n) }, // revertSize
|
|
1112
1163
|
],
|
|
1113
1164
|
targetInstructions: () => [
|
|
1114
|
-
new EmitNullifier(/*
|
|
1115
|
-
new Add(/*
|
|
1165
|
+
new EmitNullifier(/*addressing_mode=*/ 0, /*nullifierOffset=*/ 0),
|
|
1166
|
+
new Add(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(
|
|
1167
|
+
Opcode.ADD_8,
|
|
1168
|
+
Add.wireFormat8,
|
|
1169
|
+
), // nullifier++
|
|
1116
1170
|
],
|
|
1117
1171
|
cleanupInstructions: () => [
|
|
1118
|
-
new Revert(/*
|
|
1172
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(
|
|
1173
|
+
Opcode.REVERT_8,
|
|
1174
|
+
Revert.wireFormat8,
|
|
1175
|
+
),
|
|
1119
1176
|
], // revert with empty
|
|
1120
1177
|
limit: MAX_NULLIFIERS_PER_TX - 1, // minus 1 because a TX will always have 1 "TX nullifier" from private
|
|
1121
1178
|
},
|
|
@@ -1128,9 +1185,14 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1128
1185
|
{ offset: 1, value: new Field(Fr.random()) }, // random content
|
|
1129
1186
|
{ offset: 2, value: new Uint32(0n) }, // revertSize
|
|
1130
1187
|
],
|
|
1131
|
-
targetInstructions: () => [
|
|
1188
|
+
targetInstructions: () => [
|
|
1189
|
+
new SendL2ToL1Message(/*addressing_mode=*/ 0, /*recipientOffset=*/ 0, /*contentOffset=*/ 1),
|
|
1190
|
+
],
|
|
1132
1191
|
cleanupInstructions: () => [
|
|
1133
|
-
new Revert(/*
|
|
1192
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(
|
|
1193
|
+
Opcode.REVERT_8,
|
|
1194
|
+
Revert.wireFormat8,
|
|
1195
|
+
),
|
|
1134
1196
|
], // revert with empty
|
|
1135
1197
|
limit: MAX_L2_TO_L1_MSGS_PER_TX,
|
|
1136
1198
|
},
|
|
@@ -1147,9 +1209,12 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1147
1209
|
{ offset: 1, value: new Field(Fr.random()) }, // random slot (same slot each iteration)
|
|
1148
1210
|
{ offset: 2, value: new Uint32(0n) }, // revertSize
|
|
1149
1211
|
],
|
|
1150
|
-
targetInstructions: () => [new SStore(/*
|
|
1212
|
+
targetInstructions: () => [new SStore(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*slotOffset=*/ 1)],
|
|
1151
1213
|
cleanupInstructions: () => [
|
|
1152
|
-
new Revert(/*
|
|
1214
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(
|
|
1215
|
+
Opcode.REVERT_8,
|
|
1216
|
+
Revert.wireFormat8,
|
|
1217
|
+
),
|
|
1153
1218
|
], // revert with empty
|
|
1154
1219
|
},
|
|
1155
1220
|
{
|
|
@@ -1161,11 +1226,17 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1161
1226
|
{ offset: 3, value: new Uint32(0n) }, // revertSize
|
|
1162
1227
|
],
|
|
1163
1228
|
targetInstructions: () => [
|
|
1164
|
-
new SStore(/*
|
|
1165
|
-
new Add(/*
|
|
1229
|
+
new SStore(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*slotOffset=*/ 1),
|
|
1230
|
+
new Add(/*addressing_mode=*/ 0, /*aOffset=*/ 1, /*bOffset=*/ 2, /*dstOffset=*/ 1).as(
|
|
1231
|
+
Opcode.ADD_8,
|
|
1232
|
+
Add.wireFormat8,
|
|
1233
|
+
), // slot++
|
|
1166
1234
|
],
|
|
1167
1235
|
cleanupInstructions: () => [
|
|
1168
|
-
new Revert(/*
|
|
1236
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 3, /*returnOffset=*/ 0).as(
|
|
1237
|
+
Opcode.REVERT_8,
|
|
1238
|
+
Revert.wireFormat8,
|
|
1239
|
+
),
|
|
1169
1240
|
], // revert with empty
|
|
1170
1241
|
limit: MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
1171
1242
|
},
|
|
@@ -1179,9 +1250,14 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1179
1250
|
{ offset: 0, value: new Uint32(0n) }, // logSize = 0 fields (minimal)
|
|
1180
1251
|
{ offset: 1, value: new Uint32(0n) }, // revertSize
|
|
1181
1252
|
],
|
|
1182
|
-
targetInstructions: () => [
|
|
1253
|
+
targetInstructions: () => [
|
|
1254
|
+
new EmitUnencryptedLog(/*addressing_mode=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 1),
|
|
1255
|
+
], // logOffset doesn't matter when size is 0
|
|
1183
1256
|
cleanupInstructions: () => [
|
|
1184
|
-
new Revert(/*
|
|
1257
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(
|
|
1258
|
+
Opcode.REVERT_8,
|
|
1259
|
+
Revert.wireFormat8,
|
|
1260
|
+
),
|
|
1185
1261
|
], // revert with empty
|
|
1186
1262
|
// Max logs with 0-field content: floor(4096 / 2) = 2048
|
|
1187
1263
|
limit: Math.floor(FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH / PUBLIC_LOG_HEADER_LENGTH),
|
|
@@ -1200,9 +1276,14 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1200
1276
|
// value: new Field(0n),
|
|
1201
1277
|
//})),
|
|
1202
1278
|
],
|
|
1203
|
-
targetInstructions: () => [
|
|
1279
|
+
targetInstructions: () => [
|
|
1280
|
+
new EmitUnencryptedLog(/*addressing_mode=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 2),
|
|
1281
|
+
], // uses logOffset 2 (uninitialized Field(0))
|
|
1204
1282
|
cleanupInstructions: () => [
|
|
1205
|
-
new Revert(/*
|
|
1283
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(
|
|
1284
|
+
Opcode.REVERT_8,
|
|
1285
|
+
Revert.wireFormat8,
|
|
1286
|
+
),
|
|
1206
1287
|
], // revert with empty
|
|
1207
1288
|
limit: 1, // Only 1 max-size log fits
|
|
1208
1289
|
},
|
|
@@ -1219,7 +1300,9 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1219
1300
|
value: new Field(Fr.random()), // random field element
|
|
1220
1301
|
})),
|
|
1221
1302
|
// Poseidon hash data at M[0..3], write result to M[0:3] (reuse results as next inputs)
|
|
1222
|
-
targetInstructions: () => [
|
|
1303
|
+
targetInstructions: () => [
|
|
1304
|
+
new Poseidon2(/*addressing_mode=*/ 0, /*inputStateOffset=*/ 0, /*outputStateOffset=*/ 0),
|
|
1305
|
+
],
|
|
1223
1306
|
},
|
|
1224
1307
|
],
|
|
1225
1308
|
|
|
@@ -1238,7 +1321,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1238
1321
|
})),
|
|
1239
1322
|
],
|
|
1240
1323
|
targetInstructions: () => [
|
|
1241
|
-
new Sha256Compression(/*
|
|
1324
|
+
new Sha256Compression(/*addressing_mode=*/ 0, /*outputOffset=*/ 0, /*stateOffset=*/ 0, /*inputsOffset=*/ 8),
|
|
1242
1325
|
],
|
|
1243
1326
|
},
|
|
1244
1327
|
],
|
|
@@ -1250,7 +1333,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1250
1333
|
offset: i,
|
|
1251
1334
|
value: randomWithTag(TypeTag.UINT64),
|
|
1252
1335
|
})),
|
|
1253
|
-
targetInstructions: () => [new KeccakF1600(/*
|
|
1336
|
+
targetInstructions: () => [new KeccakF1600(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*inputOffset=*/ 0)],
|
|
1254
1337
|
},
|
|
1255
1338
|
],
|
|
1256
1339
|
|
|
@@ -1267,7 +1350,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1267
1350
|
],
|
|
1268
1351
|
targetInstructions: () => [
|
|
1269
1352
|
new EcAdd(
|
|
1270
|
-
/*
|
|
1353
|
+
/*addressing_mode=*/ 0,
|
|
1271
1354
|
/*p1XOffset=*/ 0,
|
|
1272
1355
|
/*p1YOffset=*/ 1,
|
|
1273
1356
|
/*p1IsInfiniteOffset=*/ 2,
|
|
@@ -1292,7 +1375,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1292
1375
|
],
|
|
1293
1376
|
targetInstructions: () => [
|
|
1294
1377
|
new ToRadixBE(
|
|
1295
|
-
/*
|
|
1378
|
+
/*addressing_mode=*/ 0,
|
|
1296
1379
|
/*srcOffset=*/ 0,
|
|
1297
1380
|
/*radixOffset=*/ 1,
|
|
1298
1381
|
/*numLimbsOffset=*/ 2,
|
|
@@ -1311,7 +1394,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1311
1394
|
],
|
|
1312
1395
|
targetInstructions: () => [
|
|
1313
1396
|
new ToRadixBE(
|
|
1314
|
-
/*
|
|
1397
|
+
/*addressing_mode=*/ 0,
|
|
1315
1398
|
/*srcOffset=*/ 0,
|
|
1316
1399
|
/*radixOffset=*/ 1,
|
|
1317
1400
|
/*numLimbsOffset=*/ 2,
|
|
@@ -1332,7 +1415,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1332
1415
|
],
|
|
1333
1416
|
targetInstructions: () => [
|
|
1334
1417
|
new ToRadixBE(
|
|
1335
|
-
/*
|
|
1418
|
+
/*addressing_mode=*/ 0,
|
|
1336
1419
|
/*srcOffset=*/ 0,
|
|
1337
1420
|
/*radixOffset=*/ 1,
|
|
1338
1421
|
/*numLimbsOffset=*/ 2,
|
|
@@ -1359,7 +1442,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1359
1442
|
// messageSize = 0
|
|
1360
1443
|
targetInstructions: () => [
|
|
1361
1444
|
new DebugLog(
|
|
1362
|
-
/*
|
|
1445
|
+
/*addressing_mode=*/ 0,
|
|
1363
1446
|
/*levelOffset=*/ 0,
|
|
1364
1447
|
/*messageOffset=*/ 1,
|
|
1365
1448
|
/*fieldsOffset=*/ 2,
|
|
@@ -1381,7 +1464,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1381
1464
|
// // messageSize = 1000 (large enough to show scaling)
|
|
1382
1465
|
// targetInstructions: () => [
|
|
1383
1466
|
// new DebugLog(
|
|
1384
|
-
// /*
|
|
1467
|
+
// /*addressing_mode=*/ 0,
|
|
1385
1468
|
// /*levelOffset=*/ 0,
|
|
1386
1469
|
// /*messageOffset=*/ 1,
|
|
1387
1470
|
// /*fieldsOffset=*/ 2,
|