@aztec/simulator 0.0.1-commit.fcb71a6 → 0.0.1-commit.ff7989d6c
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 +6 -4
- 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_gas.js +3 -3
- 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/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -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 +17 -18
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +42 -43
- 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 +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +6 -6
- 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 -22
- 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/avm/serialization/bytecode_serialization.js +3 -3
- package/dest/public/avm/serialization/instruction_serialization.d.ts +2 -2
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +1 -1
- 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 +12 -33
- package/dest/public/fixtures/amm_test.js +2 -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/bulk_test.js +1 -17
- 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 +99 -127
- package/dest/public/fixtures/utils.js +4 -4
- 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 +29 -11
- package/dest/public/hinting_db_sources.d.ts +2 -2
- package/dest/public/hinting_db_sources.d.ts.map +1 -1
- package/dest/public/hinting_db_sources.js +3 -1
- 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/guarded_merkle_tree.d.ts +2 -2
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +3 -1
- package/dest/public/public_processor/public_processor.d.ts +7 -4
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +421 -31
- 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 +28 -45
- 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/public_tx_simulator/telemetry_public_tx_simulator.js +395 -19
- 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_gas.ts +2 -2
- 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/account_proof.json +553 -0
- package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -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 +31 -34
- 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 +7 -7
- package/src/public/avm/opcodes/external_calls.ts +17 -15
- 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/avm/serialization/bytecode_serialization.ts +2 -2
- package/src/public/avm/serialization/instruction_serialization.ts +1 -1
- package/src/public/debug_fn_name.ts +10 -8
- package/src/public/executor_metrics.ts +9 -33
- package/src/public/fixtures/amm_test.ts +2 -2
- package/src/public/fixtures/bulk_test.ts +2 -2
- 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 -117
- package/src/public/fixtures/utils.ts +4 -4
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +61 -13
- package/src/public/fuzzing/avm_simulator_bin.ts +43 -8
- package/src/public/hinting_db_sources.ts +1 -1
- package/src/public/public_db_sources.ts +15 -5
- package/src/public/public_processor/guarded_merkle_tree.ts +1 -1
- package/src/public/public_processor/public_processor.ts +40 -20
- package/src/public/public_processor/public_processor_metrics.ts +16 -44
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +6 -3
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +18 -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
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
* - `EMITNOTEHASH`: max 64 per TX
|
|
144
144
|
* - `EMITNULLIFIER`: max 63 per TX (one reserved for TX nullifier)
|
|
145
145
|
* - `SENDL2TOL1MSG`: max 8 per TX
|
|
146
|
-
* - `
|
|
146
|
+
* - `EMITPUBLICLOG`: limited by total log payload size
|
|
147
147
|
*
|
|
148
148
|
* By having the inner contract REVERT after emitting side effects, those effects are discarded, allowing the outer contract to call it again. This enables thousands of opcode executions per TX instead of just the limit.
|
|
149
149
|
*
|
|
@@ -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
|
|
|
@@ -182,7 +182,7 @@ import {
|
|
|
182
182
|
EcAdd,
|
|
183
183
|
EmitNoteHash,
|
|
184
184
|
EmitNullifier,
|
|
185
|
-
|
|
185
|
+
EmitPublicLog,
|
|
186
186
|
Eq,
|
|
187
187
|
FieldDiv,
|
|
188
188
|
GetContractInstance,
|
|
@@ -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,50 +1058,25 @@ 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()
|
|
1071
|
+
// Uses pre-inserted siloed nullifier from insertWarmTreeEntries()
|
|
1072
|
+
// NULLIFIEREXISTS now takes a siloed nullifier directly
|
|
1009
1073
|
setup: [
|
|
1010
|
-
{ offset: 0, value: new Field(
|
|
1011
|
-
{ offset: 1, value: new Field(WARM_NULLIFIER_ADDRESS.toField()) }, // address it was siloed with
|
|
1074
|
+
{ offset: 0, value: new Field(WARM_SILOED_NULLIFIER) }, // pre-inserted siloed nullifier
|
|
1012
1075
|
],
|
|
1013
1076
|
targetInstructions: () => [
|
|
1014
|
-
new NullifierExists(/*
|
|
1077
|
+
new NullifierExists(/*addressing_mode=*/ 0, /*siloedNullifierOffset=*/ 0, /*existsOffset=*/ 1),
|
|
1015
1078
|
],
|
|
1016
1079
|
},
|
|
1017
|
-
{
|
|
1018
|
-
label: 'Existing nullifier (warm - EMITNULLIFIER first)',
|
|
1019
|
-
// Memory layout: nullifier (incremented), constant 1, current address (from GETENVVAR), revertSize, exists result
|
|
1020
|
-
setup: [
|
|
1021
|
-
{ offset: 0, value: new Field(Fr.random()) }, // nullifier (will be incremented)
|
|
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
|
|
1031
|
-
],
|
|
1032
|
-
targetInstructions: () => [
|
|
1033
|
-
new EmitNullifier(/*indirect=*/ 0, /*nullifierOffset=*/ 0),
|
|
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),
|
|
1039
|
-
],
|
|
1040
|
-
limit: MAX_NULLIFIERS_PER_TX - 1,
|
|
1041
|
-
},
|
|
1042
1080
|
],
|
|
1043
1081
|
|
|
1044
1082
|
[Opcode.L1TOL2MSGEXISTS]: [
|
|
@@ -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,27 +1226,36 @@ 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
|
},
|
|
1172
1243
|
],
|
|
1173
1244
|
|
|
1174
|
-
//
|
|
1175
|
-
[Opcode.
|
|
1245
|
+
// EMITPUBLICLOG - two configs: minimal (many small logs) and max-size (one large log)
|
|
1246
|
+
[Opcode.EMITPUBLICLOG]: [
|
|
1176
1247
|
{
|
|
1177
1248
|
label: 'Many empty logs, revert, repeat',
|
|
1178
1249
|
setup: [
|
|
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: () => [new
|
|
1253
|
+
targetInstructions: () => [new EmitPublicLog(/*addressing_mode=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 1)], // logOffset doesn't matter when size is 0
|
|
1183
1254
|
cleanupInstructions: () => [
|
|
1184
|
-
new Revert(/*
|
|
1255
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(
|
|
1256
|
+
Opcode.REVERT_8,
|
|
1257
|
+
Revert.wireFormat8,
|
|
1258
|
+
),
|
|
1185
1259
|
], // revert with empty
|
|
1186
1260
|
// Max logs with 0-field content: floor(4096 / 2) = 2048
|
|
1187
1261
|
limit: Math.floor(FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH / PUBLIC_LOG_HEADER_LENGTH),
|
|
@@ -1200,9 +1274,12 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1200
1274
|
// value: new Field(0n),
|
|
1201
1275
|
//})),
|
|
1202
1276
|
],
|
|
1203
|
-
targetInstructions: () => [new
|
|
1277
|
+
targetInstructions: () => [new EmitPublicLog(/*addressing_mode=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 2)], // uses logOffset 2 (uninitialized Field(0))
|
|
1204
1278
|
cleanupInstructions: () => [
|
|
1205
|
-
new Revert(/*
|
|
1279
|
+
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(
|
|
1280
|
+
Opcode.REVERT_8,
|
|
1281
|
+
Revert.wireFormat8,
|
|
1282
|
+
),
|
|
1206
1283
|
], // revert with empty
|
|
1207
1284
|
limit: 1, // Only 1 max-size log fits
|
|
1208
1285
|
},
|
|
@@ -1219,7 +1296,9 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1219
1296
|
value: new Field(Fr.random()), // random field element
|
|
1220
1297
|
})),
|
|
1221
1298
|
// Poseidon hash data at M[0..3], write result to M[0:3] (reuse results as next inputs)
|
|
1222
|
-
targetInstructions: () => [
|
|
1299
|
+
targetInstructions: () => [
|
|
1300
|
+
new Poseidon2(/*addressing_mode=*/ 0, /*inputStateOffset=*/ 0, /*outputStateOffset=*/ 0),
|
|
1301
|
+
],
|
|
1223
1302
|
},
|
|
1224
1303
|
],
|
|
1225
1304
|
|
|
@@ -1238,7 +1317,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1238
1317
|
})),
|
|
1239
1318
|
],
|
|
1240
1319
|
targetInstructions: () => [
|
|
1241
|
-
new Sha256Compression(/*
|
|
1320
|
+
new Sha256Compression(/*addressing_mode=*/ 0, /*outputOffset=*/ 0, /*stateOffset=*/ 0, /*inputsOffset=*/ 8),
|
|
1242
1321
|
],
|
|
1243
1322
|
},
|
|
1244
1323
|
],
|
|
@@ -1250,7 +1329,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1250
1329
|
offset: i,
|
|
1251
1330
|
value: randomWithTag(TypeTag.UINT64),
|
|
1252
1331
|
})),
|
|
1253
|
-
targetInstructions: () => [new KeccakF1600(/*
|
|
1332
|
+
targetInstructions: () => [new KeccakF1600(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*inputOffset=*/ 0)],
|
|
1254
1333
|
},
|
|
1255
1334
|
],
|
|
1256
1335
|
|
|
@@ -1267,7 +1346,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1267
1346
|
],
|
|
1268
1347
|
targetInstructions: () => [
|
|
1269
1348
|
new EcAdd(
|
|
1270
|
-
/*
|
|
1349
|
+
/*addressing_mode=*/ 0,
|
|
1271
1350
|
/*p1XOffset=*/ 0,
|
|
1272
1351
|
/*p1YOffset=*/ 1,
|
|
1273
1352
|
/*p1IsInfiniteOffset=*/ 2,
|
|
@@ -1292,7 +1371,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1292
1371
|
],
|
|
1293
1372
|
targetInstructions: () => [
|
|
1294
1373
|
new ToRadixBE(
|
|
1295
|
-
/*
|
|
1374
|
+
/*addressing_mode=*/ 0,
|
|
1296
1375
|
/*srcOffset=*/ 0,
|
|
1297
1376
|
/*radixOffset=*/ 1,
|
|
1298
1377
|
/*numLimbsOffset=*/ 2,
|
|
@@ -1311,7 +1390,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1311
1390
|
],
|
|
1312
1391
|
targetInstructions: () => [
|
|
1313
1392
|
new ToRadixBE(
|
|
1314
|
-
/*
|
|
1393
|
+
/*addressing_mode=*/ 0,
|
|
1315
1394
|
/*srcOffset=*/ 0,
|
|
1316
1395
|
/*radixOffset=*/ 1,
|
|
1317
1396
|
/*numLimbsOffset=*/ 2,
|
|
@@ -1332,7 +1411,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1332
1411
|
],
|
|
1333
1412
|
targetInstructions: () => [
|
|
1334
1413
|
new ToRadixBE(
|
|
1335
|
-
/*
|
|
1414
|
+
/*addressing_mode=*/ 0,
|
|
1336
1415
|
/*srcOffset=*/ 0,
|
|
1337
1416
|
/*radixOffset=*/ 1,
|
|
1338
1417
|
/*numLimbsOffset=*/ 2,
|
|
@@ -1359,7 +1438,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1359
1438
|
// messageSize = 0
|
|
1360
1439
|
targetInstructions: () => [
|
|
1361
1440
|
new DebugLog(
|
|
1362
|
-
/*
|
|
1441
|
+
/*addressing_mode=*/ 0,
|
|
1363
1442
|
/*levelOffset=*/ 0,
|
|
1364
1443
|
/*messageOffset=*/ 1,
|
|
1365
1444
|
/*fieldsOffset=*/ 2,
|
|
@@ -1381,7 +1460,7 @@ export const SPAM_CONFIGS: Partial<Record<Opcode, SpamConfig[]>> = {
|
|
|
1381
1460
|
// // messageSize = 1000 (large enough to show scaling)
|
|
1382
1461
|
// targetInstructions: () => [
|
|
1383
1462
|
// new DebugLog(
|
|
1384
|
-
// /*
|
|
1463
|
+
// /*addressing_mode=*/ 0,
|
|
1385
1464
|
// /*levelOffset=*/ 0,
|
|
1386
1465
|
// /*messageOffset=*/ 1,
|
|
1387
1466
|
// /*fieldsOffset=*/ 2,
|