@aztec/simulator 0.0.1-commit.d3ec352c → 0.0.1-commit.d6f2b3f94
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 +8 -2
- 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/deserialize.d.ts +2 -2
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +1 -1
- package/dest/private/acvm/serialize.d.ts +2 -2
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +1 -1
- 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 +21 -18
- 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 +7 -6
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +1 -1
- package/dest/public/avm/avm_gas.d.ts +1 -1
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.d.ts +7 -6
- 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 +2 -2
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +4 -1
- package/dest/public/avm/avm_simulator.d.ts +4 -3
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +6 -5
- 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/errors.d.ts +2 -2
- package/dest/public/avm/errors.d.ts.map +1 -1
- 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 +4 -3
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +2 -2
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +1 -1
- package/dest/public/avm/fixtures/initializers.d.ts +2 -2
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
- package/dest/public/avm/fixtures/initializers.js +3 -2
- package/dest/public/avm/fixtures/utils.d.ts +2 -2
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
- package/dest/public/avm/fixtures/utils.js +1 -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 +39 -39
- package/dest/public/avm/opcodes/arithmetic.d.ts +10 -8
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +12 -2
- 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 +17 -8
- 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 +21 -16
- 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 +26 -26
- 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/revert_reason.d.ts +2 -2
- package/dest/public/avm/revert_reason.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +1 -1
- package/dest/public/avm/test_utils.d.ts +2 -2
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +1 -1
- package/dest/public/contracts_db_checkpoint.d.ts +2 -2
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
- package/dest/public/db_interfaces.d.ts +2 -2
- package/dest/public/db_interfaces.d.ts.map +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 +14 -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 +5 -69
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +28 -6
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -8
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +83 -18
- package/dest/public/fixtures/index.d.ts +4 -2
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +3 -1
- package/dest/public/fixtures/minimal_public_tx.d.ts +2 -7
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -1
- package/dest/public/fixtures/minimal_public_tx.js +4 -14
- package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1653 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +15 -2
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +36 -8
- package/dest/public/fixtures/simple_contract_data_source.d.ts +2 -2
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
- package/dest/public/fixtures/token_test.js +1 -1
- package/dest/public/fixtures/utils.d.ts +2 -2
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +4 -3
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/hinting_db_sources.d.ts +3 -2
- package/dest/public/hinting_db_sources.d.ts.map +1 -1
- package/dest/public/hinting_db_sources.js +7 -2
- package/dest/public/index.d.ts +2 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +1 -1
- package/dest/public/public_db_sources.d.ts +5 -4
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +5 -5
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +2 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +5 -0
- 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 +433 -37
- 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 -14
- 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 +20 -55
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +20 -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 +50 -11
- 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 +12 -11
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +3 -1
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +2 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +3 -3
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +5 -4
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +9 -9
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +7 -5
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +17 -10
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +24 -1
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +2 -2
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +395 -19
- package/dest/public/side_effect_trace.d.ts +6 -5
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +4 -4
- package/dest/public/side_effect_trace_interface.d.ts +2 -2
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/nullifiers.d.ts +2 -2
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -1
- package/dest/public/state_manager/public_storage.d.ts +2 -2
- package/dest/public/state_manager/public_storage.d.ts.map +1 -1
- package/dest/public/state_manager/public_storage.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +11 -5
- package/dest/public/state_manager/state_manager.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.js +15 -8
- 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 +18 -18
- package/src/common/errors.ts +1 -1
- package/src/private/acvm/acvm.ts +4 -3
- package/src/private/acvm/deserialize.ts +1 -1
- package/src/private/acvm/serialize.ts +1 -1
- package/src/private/acvm_native.ts +11 -5
- package/src/private/acvm_wasm.ts +7 -3
- package/src/private/circuit_recording/circuit_recorder.ts +22 -19
- 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 +10 -5
- package/src/public/avm/avm_gas.ts +3 -3
- package/src/public/avm/avm_machine_state.ts +7 -6
- package/src/public/avm/avm_memory_types.ts +5 -1
- package/src/public/avm/avm_simulator.ts +9 -6
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/errors.ts +1 -1
- 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 +9 -3
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +1 -1
- package/src/public/avm/fixtures/initializers.ts +3 -2
- package/src/public/avm/fixtures/utils.ts +1 -1
- package/src/public/avm/opcodes/accrued_substate.ts +28 -30
- package/src/public/avm/opcodes/arithmetic.ts +14 -2
- 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 +15 -6
- 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 +16 -10
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +20 -20
- package/src/public/avm/opcodes/misc.ts +2 -2
- package/src/public/avm/opcodes/storage.ts +30 -22
- package/src/public/avm/revert_reason.ts +1 -1
- package/src/public/avm/serialization/instruction_serialization.ts +1 -1
- package/src/public/avm/test_utils.ts +1 -1
- package/src/public/contracts_db_checkpoint.ts +1 -1
- package/src/public/db_interfaces.ts +1 -1
- package/src/public/debug_fn_name.ts +17 -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 +9 -9
- package/src/public/fixtures/custom_bytecode_tester.ts +53 -19
- package/src/public/fixtures/custom_bytecode_tests.ts +111 -18
- package/src/public/fixtures/index.ts +7 -1
- package/src/public/fixtures/minimal_public_tx.ts +6 -15
- package/src/public/fixtures/opcode_spammer.ts +1721 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +40 -6
- package/src/public/fixtures/simple_contract_data_source.ts +1 -1
- package/src/public/fixtures/token_test.ts +1 -1
- package/src/public/fixtures/utils.ts +2 -3
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
- package/src/public/hinting_db_sources.ts +6 -2
- package/src/public/index.ts +2 -0
- package/src/public/public_db_sources.ts +16 -6
- package/src/public/public_processor/guarded_merkle_tree.ts +4 -0
- package/src/public/public_processor/public_processor.ts +49 -19
- package/src/public/public_processor/public_processor_metrics.ts +16 -44
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +25 -63
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +65 -9
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +7 -5
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +13 -14
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +43 -0
- package/src/public/public_tx_simulator/index.ts +2 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +1 -1
- package/src/public/public_tx_simulator/public_tx_context.ts +14 -7
- package/src/public/public_tx_simulator/public_tx_simulator.ts +32 -10
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +23 -0
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +1 -1
- package/src/public/side_effect_trace.ts +6 -3
- package/src/public/side_effect_trace_interface.ts +1 -1
- package/src/public/state_manager/nullifiers.ts +1 -1
- package/src/public/state_manager/public_storage.ts +1 -1
- package/src/public/state_manager/state_manager.ts +31 -22
- package/src/public/test_executor_metrics.ts +3 -3
|
@@ -13,7 +13,7 @@ import { type TestPrivateInsertions } from './utils.js';
|
|
|
13
13
|
export type TestEnqueuedCall = {
|
|
14
14
|
sender?: AztecAddress;
|
|
15
15
|
address: AztecAddress;
|
|
16
|
-
fnName
|
|
16
|
+
fnName?: string;
|
|
17
17
|
args: any[];
|
|
18
18
|
isStaticCall?: boolean;
|
|
19
19
|
contractArtifact?: ContractArtifact;
|
|
@@ -54,6 +54,19 @@ export declare class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
54
54
|
*/
|
|
55
55
|
executeTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions): Promise<PublicTxResult>;
|
|
56
56
|
prettyPrintMetrics(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Cancel the current simulation if one is in progress.
|
|
59
|
+
* This signals the underlying simulator (e.g., C++) to stop at the next safe point.
|
|
60
|
+
* Safe to call even if no simulation is in progress.
|
|
61
|
+
*
|
|
62
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
63
|
+
*/
|
|
64
|
+
cancel(waitTimeoutMs?: number): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Get the underlying simulator for advanced test scenarios.
|
|
67
|
+
* Use this when you need direct control over simulation (e.g., for testing cancellation).
|
|
68
|
+
*/
|
|
69
|
+
getSimulator(): MeasuredPublicTxSimulatorInterface;
|
|
57
70
|
}
|
|
58
71
|
export declare function defaultGlobals(): GlobalVariables;
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRpb25fdGVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL2ZpeHR1cmVzL3B1YmxpY190eF9zaW11bGF0aW9uX3Rlc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBbUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVoRSxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxlQUFlLEVBQWlDLEtBQUssRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFPeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHNUQsT0FBTyxLQUFLLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNsSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsS0FBSyxxQkFBcUIsRUFBMEIsTUFBTSxZQUFZLENBQUM7QUFJaEYsTUFBTSxNQUFNLGdCQUFnQixHQUFHO0lBQzdCLE1BQU0sQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUN0QixPQUFPLEVBQUUsWUFBWSxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNoQixJQUFJLEVBQUUsR0FBRyxFQUFF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAiC,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAOxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,yDAAyD,CAAC;AAClH,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,KAAK,qBAAqB,EAA0B,MAAM,YAAY,CAAC;AAIhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT } from '@aztec/constants';
|
|
2
2
|
import { asyncMap } from '@aztec/foundation/async-map';
|
|
3
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
-
import { Fr } from '@aztec/foundation/
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { encodeArguments } from '@aztec/stdlib/abi';
|
|
6
6
|
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
7
7
|
import { Gas, GasFees } from '@aztec/stdlib/gas';
|
|
@@ -21,6 +21,7 @@ const defaultConfig = PublicSimulatorConfig.from({
|
|
|
21
21
|
collectCallMetadata: true,
|
|
22
22
|
collectDebugLogs: true,
|
|
23
23
|
collectHints: false,
|
|
24
|
+
collectPublicInputs: false,
|
|
24
25
|
collectStatistics: false
|
|
25
26
|
});
|
|
26
27
|
/**
|
|
@@ -104,19 +105,46 @@ const defaultConfig = PublicSimulatorConfig.from({
|
|
|
104
105
|
prettyPrintMetrics() {
|
|
105
106
|
this.metrics.prettyPrint();
|
|
106
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Cancel the current simulation if one is in progress.
|
|
110
|
+
* This signals the underlying simulator (e.g., C++) to stop at the next safe point.
|
|
111
|
+
* Safe to call even if no simulation is in progress.
|
|
112
|
+
*
|
|
113
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
114
|
+
*/ async cancel(waitTimeoutMs) {
|
|
115
|
+
await this.simulator.cancel?.(waitTimeoutMs);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the underlying simulator for advanced test scenarios.
|
|
119
|
+
* Use this when you need direct control over simulation (e.g., for testing cancellation).
|
|
120
|
+
*/ getSimulator() {
|
|
121
|
+
return this.simulator;
|
|
122
|
+
}
|
|
107
123
|
async #createPubicCallRequestForCall(call, sender) {
|
|
108
124
|
const address = call.address;
|
|
109
125
|
const contractArtifact = call.contractArtifact || await this.contractDataSource.getContractArtifact(address);
|
|
110
126
|
if (!contractArtifact) {
|
|
111
127
|
throw new Error(`Contract artifact not found for address: ${address}`);
|
|
112
128
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
129
|
+
let calldata = [];
|
|
130
|
+
if (!call.fnName) {
|
|
131
|
+
this.logger.debug(`No function name specified for call to contract ${call.address.toString()}. Assuming this is a custom bytecode with no public_dispatch function.`);
|
|
132
|
+
this.logger.debug(`Not using ABI to encode arguments. Not prepending fn selector to calldata.`);
|
|
133
|
+
try {
|
|
134
|
+
calldata = call.args.map((arg)=>new Fr(arg));
|
|
135
|
+
} catch (error) {
|
|
136
|
+
this.logger.warn(`Tried assuming that all arguments are Field-like. Failed. Error: ${error}`);
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
} else {
|
|
140
|
+
const fnSelector = await getFunctionSelector(call.fnName, contractArtifact);
|
|
141
|
+
const fnAbi = getContractFunctionAbi(call.fnName, contractArtifact);
|
|
142
|
+
const encodedArgs = encodeArguments(fnAbi, call.args);
|
|
143
|
+
calldata = [
|
|
144
|
+
fnSelector.toField(),
|
|
145
|
+
...encodedArgs
|
|
146
|
+
];
|
|
147
|
+
}
|
|
120
148
|
const isStaticCall = call.isStaticCall ?? false;
|
|
121
149
|
const request = await PublicCallRequest.fromCalldata(sender, address, isStaticCall, calldata);
|
|
122
150
|
return new PublicCallRequestWithCalldata(request, calldata);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
|
|
4
4
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
5
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
@@ -33,4 +33,4 @@ export declare class SimpleContractDataSource implements ContractDataSource {
|
|
|
33
33
|
addContractClass(contractClass: ContractClassPublic): Promise<void>;
|
|
34
34
|
addContractInstance(contractInstance: ContractInstanceWithAddress): Promise<void>;
|
|
35
35
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlX2NvbnRyYWN0X2RhdGFfc291cmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL2ZpeHR1cmVzL3NpbXBsZV9jb250cmFjdF9kYXRhX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSW5IOzs7Ozs7R0FNRztBQUNILHFCQUFhLHdCQUF5QixZQUFXLGtCQUFrQjtJQUMxRCxNQUFNLHlDQUErQztJQUc1RCxPQUFPLENBQUMsZUFBZSxDQUErQztJQUV0RSxPQUFPLENBQUMsaUJBQWlCLENBQXVEO0lBRWhGLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBNEM7SUFFckUsT0FBTyxDQUFDLGlCQUFpQixDQUFrQztJQUkzRDs7O09BR0c7SUFDRyxjQUFjLENBQ2xCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxhQUFhLEVBQUUsbUJBQW1CLEVBQ2xDLGdCQUFnQixFQUFFLDJCQUEyQixpQkFLOUM7SUFFSyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsaUJBY2hFO0lBSUQsY0FBYyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FFckM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsQ0FFakU7SUFFRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBRXREO0lBRUQsV0FBVyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLFNBQVMsQ0FBQyxDQUVuRjtJQUVELG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUVuQztJQUVLLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxDQVN0RjtJQUVLLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBYXpHO0lBRUQsa0NBQWtDLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFdkU7SUFFRCxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUdsRTtJQUVELG1CQUFtQixDQUFDLGdCQUFnQixFQUFFLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHaEY7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple_contract_data_source.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/simple_contract_data_source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"simple_contract_data_source.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/simple_contract_data_source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAInH;;;;;;GAMG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;IAC1D,MAAM,yCAA+C;IAG5D,OAAO,CAAC,eAAe,CAA+C;IAEtE,OAAO,CAAC,iBAAiB,CAAuD;IAEhF,OAAO,CAAC,iBAAiB,CAA4C;IAErE,OAAO,CAAC,iBAAiB,CAAkC;IAI3D;;;OAGG;IACG,cAAc,CAClB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,mBAAmB,EAClC,gBAAgB,EAAE,2BAA2B,iBAK9C;IAEK,mBAAmB,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,iBAchE;IAID,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAErC;IAED,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAEjE;IAED,qBAAqB,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAEtD;IAED,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAEnF;IAED,mBAAmB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnC;IAEK,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAStF;IAEK,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAazG;IAED,kCAAkC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;IAED,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlE;IAED,mBAAmB,CAAC,gBAAgB,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { Timer } from '@aztec/foundation/timer';
|
|
3
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
export async function tokenTest(tester, logger, tokenArtifact, expectToBeTrue, options = {}) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
4
4
|
import { Gas } from '@aztec/stdlib/gas';
|
|
@@ -23,4 +23,4 @@ export declare function createTxForPublicCalls(privateInsertions: TestPrivateIns
|
|
|
23
23
|
export declare function createTxForPrivateOnly(feePayer?: AztecAddress, gasUsedByPrivate?: Gas): Promise<Tx>;
|
|
24
24
|
export declare function addNewContractClassToTx(tx: Tx, contractClass: ContractClassPublic, skipNullifierInsertion?: boolean): Promise<void>;
|
|
25
25
|
export declare function addNewContractInstanceToTx(tx: Tx, contractInstance: ContractInstanceWithAddress, skipNullifierInsertion?: boolean): Promise<void>;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvZml4dHVyZXMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9GLE9BQU8sRUFBRSxHQUFHLEVBQXdCLE1BQU0sbUJBQW1CLENBQUM7QUFVOUQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRSxPQUFPLEVBRUwsZUFBZSxFQUVmLDZCQUE2QixFQUM3QixFQUFFLEVBR0gsTUFBTSxrQkFBa0IsQ0FBQztBQUkxQixNQUFNLE1BQU0scUJBQXFCLEdBQUc7SUFDbEMsVUFBVSxDQUFDLEVBQUU7UUFDWCxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsQixVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsQixVQUFVLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0tBQ3BDLENBQUM7SUFDRixhQUFhLENBQUMsRUFBRTtRQUNkLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUM7S0FDcEMsQ0FBQztDQUNILENBQUM7QUFFRjs7R0FFRztBQUNILHdCQUFzQixzQkFBc0IsQ0FDMUMsaUJBQWlCLEVBQUUscUJBQXFCLEVBQ3hDLGlCQUFpQixFQUFFLDZCQUE2QixFQUFFLEVBQ2xELGVBQWUsRUFBRSw2QkFBNkIsRUFBRSxFQUNoRCxtQkFBbUIsQ0FBQyxFQUFFLDZCQUE2QixFQUNuRCxRQUFRLGVBQXNCLEVBQzlCLGdCQUFnQixHQUFFLEdBQWlCLEVBQ25DLE9BQU8sR0FBRSxlQUF5QyxHQUNqRCxPQUFPLENBQUMsRUFBRSxDQUFDLENBOEZiO0FBRUQsd0JBQXNCLHNCQUFzQixDQUMxQyxRQUFRLGVBQXNCLEVBQzlCLGdCQUFnQixHQUFFLEdBQXFCLEdBQ3RDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0EwQmI7QUFFRCx3QkFBc0IsdUJBQXVCLENBQzNDLEVBQUUsRUFBRSxFQUFFLEVBQ04sYUFBYSxFQUFFLG1CQUFtQixFQUNsQyxzQkFBc0IsVUFBUSxpQkE2Qi9CO0FBRUQsd0JBQXNCLDBCQUEwQixDQUM5QyxFQUFFLEVBQUUsRUFBRSxFQUNOLGdCQUFnQixFQUFFLDJCQUEyQixFQUM3QyxzQkFBc0IsVUFBUSxpQkEwQy9CIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/utils.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/utils.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,GAAG,EAAwB,MAAM,mBAAmB,CAAC;AAU9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAEL,eAAe,EAEf,6BAA6B,EAC7B,EAAE,EAGH,MAAM,kBAAkB,CAAC;AAI1B,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACpC,CAAC;IACF,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACpC,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,qBAAqB,EACxC,iBAAiB,EAAE,6BAA6B,EAAE,EAClD,eAAe,EAAE,6BAA6B,EAAE,EAChD,mBAAmB,CAAC,EAAE,6BAA6B,EACnD,QAAQ,eAAsB,EAC9B,gBAAgB,GAAE,GAAiB,EACnC,OAAO,GAAE,eAAyC,GACjD,OAAO,CAAC,EAAE,CAAC,CA8Fb;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,eAAsB,EAC9B,gBAAgB,GAAE,GAAqB,GACtC,OAAO,CAAC,EAAE,CAAC,CA0Bb;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,EAAE,EACN,aAAa,EAAE,mBAAmB,EAClC,sBAAsB,UAAQ,iBA6B/B;AAED,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,gBAAgB,EAAE,2BAA2B,EAC7C,sBAAsB,UAAQ,iBA0C/B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE, CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS, CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS, DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT, DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
|
|
2
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
-
import { Fr } from '@aztec/foundation/
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG } from '@aztec/protocol-contracts';
|
|
5
5
|
import { bufferAsFields } from '@aztec/stdlib/abi';
|
|
6
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -72,8 +72,9 @@ import { strict as assert } from 'assert';
|
|
|
72
72
|
const teardownGasLimits = teardownCallRequest ? new Gas(DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT) : Gas.empty();
|
|
73
73
|
const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
|
|
74
74
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
75
|
-
const header = BlockHeader.empty(
|
|
76
|
-
|
|
75
|
+
const header = BlockHeader.empty({
|
|
76
|
+
globalVariables: globals
|
|
77
|
+
});
|
|
77
78
|
const constantData = new TxConstantData(header, txContext, Fr.zero(), Fr.zero());
|
|
78
79
|
const includeByTimestamp = 0n; // Not used in the simulator.
|
|
79
80
|
const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer, includeByTimestamp, forPublic);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { AvmTxHint, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
2
|
+
import { type MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
3
|
+
import { GlobalVariables, ProtocolContracts } from '@aztec/stdlib/tx';
|
|
4
|
+
import type { NativeWorldStateService } from '@aztec/world-state';
|
|
5
|
+
import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
|
|
6
|
+
import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
|
|
7
|
+
/**
|
|
8
|
+
* Request structure for fuzzer simulation communication from C++.
|
|
9
|
+
* Matches the C++ FuzzerSimulationRequest struct
|
|
10
|
+
*/
|
|
11
|
+
export declare class FuzzerSimulationRequest {
|
|
12
|
+
readonly wsDataDir: string;
|
|
13
|
+
readonly wsMapSizeKb: number;
|
|
14
|
+
readonly tx: AvmTxHint;
|
|
15
|
+
readonly globals: GlobalVariables;
|
|
16
|
+
readonly contractClasses: any[];
|
|
17
|
+
readonly contractInstances: [any, any][];
|
|
18
|
+
readonly publicDataWrites: any[];
|
|
19
|
+
readonly noteHashes: any[];
|
|
20
|
+
readonly protocolContracts: ProtocolContracts;
|
|
21
|
+
constructor(wsDataDir: string, wsMapSizeKb: number, tx: AvmTxHint, globals: GlobalVariables, contractClasses: any[], contractInstances: [any, any][], publicDataWrites: any[], noteHashes: any[], protocolContracts: ProtocolContracts);
|
|
22
|
+
static fromPlainObject(obj: any): FuzzerSimulationRequest;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
|
|
26
|
+
* It provides methods for registering contracts from C++ msgpack data and simulating transactions.
|
|
27
|
+
*/
|
|
28
|
+
export declare class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
29
|
+
private simulator;
|
|
30
|
+
constructor(merkleTrees: MerkleTreeWriteOperations, contractDataSource: SimpleContractDataSource, globals: GlobalVariables, protocolContracts: ProtocolContracts);
|
|
31
|
+
/**
|
|
32
|
+
* Static factory method to create an AvmFuzzerSimulator.
|
|
33
|
+
*/
|
|
34
|
+
static create(worldStateService: NativeWorldStateService, globals: GlobalVariables, protocolContracts: ProtocolContracts): Promise<AvmFuzzerSimulator>;
|
|
35
|
+
/**
|
|
36
|
+
* Simulate a transaction from a C++ AvmTxHint.
|
|
37
|
+
*/
|
|
38
|
+
simulate(txHint: AvmTxHint): Promise<PublicTxResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Add a contract class from C++ raw msgpack data.
|
|
41
|
+
*/
|
|
42
|
+
addContractClassFromCpp(rawClass: any): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Add a contract instance from C++ raw msgpack data.
|
|
45
|
+
* This also inserts the contract address nullifier into the nullifier tree,
|
|
46
|
+
* unless the address is a protocol canonical address (1-11).
|
|
47
|
+
*/
|
|
48
|
+
addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Apply public data tree writes from C++ raw msgpack data.
|
|
51
|
+
* This is used to pre-populate the public data tree before simulation (e.g., for bytecode upgrades).
|
|
52
|
+
*/
|
|
53
|
+
applyPublicDataWrites(rawWrites: any[]): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Apply note hashes from C++ raw msgpack data.
|
|
56
|
+
* This is used to pre-populate the note hash tree before simulation.
|
|
57
|
+
*/
|
|
58
|
+
applyNoteHashes(rawNoteHashes: any[]): Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2Z1enplcl9zaW11bGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvZnV6emluZy9hdm1fZnV6emVyX3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFZbkUsT0FBTyxFQUFnQixLQUFLLHlCQUF5QixFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQ3ZHLE9BQU8sRUFFTCxlQUFlLEVBRWYsaUJBQWlCLEVBS2xCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUl0Rjs7O0dBR0c7QUFDSCxxQkFBYSx1QkFBdUI7YUFFaEIsU0FBUyxFQUFFLE1BQU07YUFDakIsV0FBVyxFQUFFLE1BQU07YUFDbkIsRUFBRSxFQUFFLFNBQVM7YUFDYixPQUFPLEVBQUUsZUFBZTthQUN4QixlQUFlLEVBQUUsR0FBRyxFQUFFO2FBQ3RCLGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2FBQy9CLGdCQUFnQixFQUFFLEdBQUcsRUFBRTthQUN2QixVQUFVLEVBQUUsR0FBRyxFQUFFO2FBQ2pCLGlCQUFpQixFQUFFLGlCQUFpQjtJQVR0RCxZQUNrQixTQUFTLEVBQUUsTUFBTSxFQUNqQixXQUFXLEVBQUUsTUFBTSxFQUNuQixFQUFFLEVBQUUsU0FBUyxFQUNiLE9BQU8sRUFBRSxlQUFlLEVBQ3hCLGVBQWUsRUFBRSxHQUFHLEVBQUUsRUFDdEIsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFDL0IsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEVBQ3ZCLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFDakIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ2xEO0lBRUosTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLHVCQUF1QixDQWV4RDtDQUNGO0FBbUhEOzs7R0FHRztBQUNILHFCQUFhLGtCQUFtQixTQUFRLHVCQUF1QjtJQUM3RCxPQUFPLENBQUMsU0FBUyxDQUFvQjtJQUVyQyxZQUNFLFdBQVcsRUFBRSx5QkFBeUIsRUFDdEMsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQ3hCLGlCQUFpQixFQUFFLGlCQUFpQixFQWlCckM7SUFFRDs7T0FFRztJQUNILE9BQW9CLE1BQU0sQ0FDeEIsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQ3hCLGlCQUFpQixFQUFFLGlCQUFpQixHQUNuQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FJN0I7SUFFRDs7T0FFRztJQUNVLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FVaEU7SUFFRDs7T0FFRztJQUNVLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUdqRTtJQUVEOzs7O09BSUc7SUFDVSwwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQU14RjtJQUVEOzs7T0FHRztJQUNVLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBS2xFO0lBRUQ7OztPQUdHO0lBQ1UsZUFBZSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avm_fuzzer_simulator.d.ts","sourceRoot":"","sources":["../../../src/public/fuzzing/avm_fuzzer_simulator.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYnE,OAAO,EAAgB,KAAK,yBAAyB,EAAsB,MAAM,qBAAqB,CAAC;AACvG,OAAO,EAEL,eAAe,EAEf,iBAAiB,EAKlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAItF;;;GAGG;AACH,qBAAa,uBAAuB;aAEhB,SAAS,EAAE,MAAM;aACjB,WAAW,EAAE,MAAM;aACnB,EAAE,EAAE,SAAS;aACb,OAAO,EAAE,eAAe;aACxB,eAAe,EAAE,GAAG,EAAE;aACtB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;aAC/B,gBAAgB,EAAE,GAAG,EAAE;aACvB,UAAU,EAAE,GAAG,EAAE;aACjB,iBAAiB,EAAE,iBAAiB;IATtD,YACkB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,eAAe,EACxB,eAAe,EAAE,GAAG,EAAE,EACtB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC/B,gBAAgB,EAAE,GAAG,EAAE,EACvB,UAAU,EAAE,GAAG,EAAE,EACjB,iBAAiB,EAAE,iBAAiB,EAClD;IAEJ,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,uBAAuB,CAexD;CACF;AAmHD;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,uBAAuB;IAC7D,OAAO,CAAC,SAAS,CAAoB;IAErC,YACE,WAAW,EAAE,yBAAyB,EACtC,kBAAkB,EAAE,wBAAwB,EAC5C,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,iBAAiB,EAiBrC;IAED;;OAEG;IACH,OAAoB,MAAM,CACxB,iBAAiB,EAAE,uBAAuB,EAC1C,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,kBAAkB,CAAC,CAI7B;IAED;;OAEG;IACU,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAUhE;IAED;;OAEG;IACU,uBAAuB,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;IAED;;;;OAIG;IACU,0BAA0B,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF;IAED;;;OAGG;IACU,qBAAqB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlE;IAED;;;OAGG;IACU,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;CACF"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { MAX_ENQUEUED_CALLS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, MAX_PROTOCOL_CONTRACTS } from '@aztec/constants';
|
|
2
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { AvmTxHint } from '@aztec/stdlib/avm';
|
|
5
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
+
import { contractClassPublicFromPlainObject, contractInstanceWithAddressFromPlainObject } from '@aztec/stdlib/contract';
|
|
7
|
+
import { PartialPrivateTailPublicInputsForPublic, PrivateKernelTailCircuitPublicInputs, PrivateToPublicAccumulatedData, PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
8
|
+
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
9
|
+
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
10
|
+
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
11
|
+
import { MerkleTreeId, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
12
|
+
import { BlockHeader, GlobalVariables, HashedValues, ProtocolContracts, Tx, TxConstantData, TxContext, TxHash } from '@aztec/stdlib/tx';
|
|
13
|
+
import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
|
|
14
|
+
import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
|
|
15
|
+
import { PublicContractsDB } from '../public_db_sources.js';
|
|
16
|
+
import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
17
|
+
/**
|
|
18
|
+
* Request structure for fuzzer simulation communication from C++.
|
|
19
|
+
* Matches the C++ FuzzerSimulationRequest struct
|
|
20
|
+
*/ export class FuzzerSimulationRequest {
|
|
21
|
+
wsDataDir;
|
|
22
|
+
wsMapSizeKb;
|
|
23
|
+
tx;
|
|
24
|
+
globals;
|
|
25
|
+
contractClasses;
|
|
26
|
+
contractInstances;
|
|
27
|
+
publicDataWrites;
|
|
28
|
+
noteHashes;
|
|
29
|
+
protocolContracts;
|
|
30
|
+
constructor(wsDataDir, wsMapSizeKb, tx, globals, contractClasses, contractInstances, publicDataWrites, noteHashes, protocolContracts){
|
|
31
|
+
this.wsDataDir = wsDataDir;
|
|
32
|
+
this.wsMapSizeKb = wsMapSizeKb;
|
|
33
|
+
this.tx = tx;
|
|
34
|
+
this.globals = globals;
|
|
35
|
+
this.contractClasses = contractClasses;
|
|
36
|
+
this.contractInstances = contractInstances;
|
|
37
|
+
this.publicDataWrites = publicDataWrites;
|
|
38
|
+
this.noteHashes = noteHashes;
|
|
39
|
+
this.protocolContracts = protocolContracts;
|
|
40
|
+
}
|
|
41
|
+
static fromPlainObject(obj) {
|
|
42
|
+
if (obj instanceof FuzzerSimulationRequest) {
|
|
43
|
+
return obj;
|
|
44
|
+
}
|
|
45
|
+
return new FuzzerSimulationRequest(obj.wsDataDir, obj.wsMapSizeKb, AvmTxHint.fromPlainObject(obj.tx), GlobalVariables.fromPlainObject(obj.globals), obj.contractClasses, obj.contractInstances, obj.publicDataWrites ?? [], obj.noteHashes ?? [], ProtocolContracts.fromPlainObject(obj.protocolContracts));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Creates a TypeScript Tx object from a deserialized C++ Tx (AvmTxHint-like structure).
|
|
50
|
+
* This allows using PublicTxSimulator.simulate() with fuzzer-generated transactions.
|
|
51
|
+
*/ async function createTxFromHint(cppTx) {
|
|
52
|
+
// Create TxHash from the C++ tx hash string
|
|
53
|
+
if (!cppTx.hash) {
|
|
54
|
+
throw new Error(`cppTx.hash is undefined. Keys: ${Object.keys(cppTx || {}).join(', ')}`);
|
|
55
|
+
}
|
|
56
|
+
const txHash = TxHash.fromString(cppTx.hash);
|
|
57
|
+
// Extract PublicCallRequest instances from enqueued calls
|
|
58
|
+
const setupCallRequests = cppTx.setupEnqueuedCalls.map((call)=>call.request);
|
|
59
|
+
const paddedSetupCalls = padArrayEnd(setupCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX);
|
|
60
|
+
const appLogicCallRequests = cppTx.appLogicEnqueuedCalls.map((call)=>call.request);
|
|
61
|
+
const paddedAppLogicCalls = padArrayEnd(appLogicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX);
|
|
62
|
+
// Build non-revertible accumulated data from C++ tx
|
|
63
|
+
const emptyNonRevertible = PrivateToPublicAccumulatedData.empty();
|
|
64
|
+
const nonRevertibleAccumulatedData = new PrivateToPublicAccumulatedData(padArrayEnd(cppTx.nonRevertibleAccumulatedData.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(cppTx.nonRevertibleAccumulatedData.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(cppTx.nonRevertibleAccumulatedData.l2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(cppTx.nonRevertibleContractDeploymentData.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), emptyNonRevertible.contractClassLogsHashes, paddedSetupCalls);
|
|
65
|
+
// Build revertible accumulated data from C++ tx
|
|
66
|
+
const emptyRevertible = PrivateToPublicAccumulatedData.empty();
|
|
67
|
+
const revertibleAccumulatedData = new PrivateToPublicAccumulatedData(padArrayEnd(cppTx.revertibleAccumulatedData.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(cppTx.revertibleAccumulatedData.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(cppTx.revertibleAccumulatedData.l2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(cppTx.revertibleContractDeploymentData.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), emptyRevertible.contractClassLogsHashes, paddedAppLogicCalls);
|
|
68
|
+
// Build teardown call request (if exists)
|
|
69
|
+
const teardownCallRequest = cppTx.teardownEnqueuedCall?.request ?? PublicCallRequest.empty();
|
|
70
|
+
// Create forPublic structure
|
|
71
|
+
const forPublic = new PartialPrivateTailPublicInputsForPublic(nonRevertibleAccumulatedData, revertibleAccumulatedData, teardownCallRequest);
|
|
72
|
+
// Build TxContext - gasSettings is already a proper GasSettings after AvmTxHint.fromPlainObject
|
|
73
|
+
const txContext = new TxContext(Fr.ZERO, Fr.ZERO, cppTx.gasSettings);
|
|
74
|
+
// Build TxConstantData
|
|
75
|
+
const constants = new TxConstantData(BlockHeader.empty(), txContext, Fr.ZERO, Fr.ZERO);
|
|
76
|
+
const data = new PrivateKernelTailCircuitPublicInputs(constants, cppTx.gasUsedByPrivate, cppTx.feePayer, 0n, forPublic, undefined);
|
|
77
|
+
// Build publicFunctionCalldata from all enqueued calls
|
|
78
|
+
// Calldata is already Fr[] after AvmTxHint.fromPlainObject
|
|
79
|
+
const publicFunctionCalldata = [];
|
|
80
|
+
// Add setup calls
|
|
81
|
+
for (const call of cppTx.setupEnqueuedCalls || []){
|
|
82
|
+
publicFunctionCalldata.push(await HashedValues.fromCalldata(call.calldata));
|
|
83
|
+
}
|
|
84
|
+
// Add app logic calls
|
|
85
|
+
for (const call of cppTx.appLogicEnqueuedCalls || []){
|
|
86
|
+
publicFunctionCalldata.push(await HashedValues.fromCalldata(call.calldata));
|
|
87
|
+
}
|
|
88
|
+
// Add teardown call if present
|
|
89
|
+
if (cppTx.teardownEnqueuedCall) {
|
|
90
|
+
publicFunctionCalldata.push(await HashedValues.fromCalldata(cppTx.teardownEnqueuedCall.calldata));
|
|
91
|
+
}
|
|
92
|
+
// Extract contract class log fields from ContractDeploymentData
|
|
93
|
+
const contractClassLogFields = [
|
|
94
|
+
...cppTx.nonRevertibleContractDeploymentData.contractClassLogs.map((log)=>log.fields),
|
|
95
|
+
...cppTx.revertibleContractDeploymentData.contractClassLogs.map((log)=>log.fields)
|
|
96
|
+
];
|
|
97
|
+
// Create the Tx
|
|
98
|
+
return new Tx(txHash, data, ChonkProof.empty(), contractClassLogFields, publicFunctionCalldata);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
|
|
102
|
+
* It provides methods for registering contracts from C++ msgpack data and simulating transactions.
|
|
103
|
+
*/ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
104
|
+
simulator;
|
|
105
|
+
constructor(merkleTrees, contractDataSource, globals, protocolContracts){
|
|
106
|
+
super(contractDataSource, merkleTrees);
|
|
107
|
+
const contractsDb = new PublicContractsDB(contractDataSource);
|
|
108
|
+
this.simulator = new PublicTxSimulator(merkleTrees, contractsDb, globals, {
|
|
109
|
+
skipFeeEnforcement: false,
|
|
110
|
+
collectDebugLogs: false,
|
|
111
|
+
collectHints: false,
|
|
112
|
+
collectStatistics: false,
|
|
113
|
+
collectCallMetadata: false
|
|
114
|
+
}, protocolContracts);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Static factory method to create an AvmFuzzerSimulator.
|
|
118
|
+
*/ static async create(worldStateService, globals, protocolContracts) {
|
|
119
|
+
const contractDataSource = new SimpleContractDataSource();
|
|
120
|
+
const merkleTrees = await worldStateService.fork();
|
|
121
|
+
return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, protocolContracts);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Simulate a transaction from a C++ AvmTxHint.
|
|
125
|
+
*/ async simulate(txHint) {
|
|
126
|
+
// Compute fee from gas limits and max fees per gas (upper bound on fee)
|
|
127
|
+
const totalFee = BigInt(txHint.gasSettings.gasLimits.daGas) * txHint.gasSettings.maxFeesPerGas.feePerDaGas + BigInt(txHint.gasSettings.gasLimits.l2Gas) * txHint.gasSettings.maxFeesPerGas.feePerL2Gas;
|
|
128
|
+
await this.setFeePayerBalance(txHint.feePayer, new Fr(totalFee));
|
|
129
|
+
const tx = await createTxFromHint(txHint);
|
|
130
|
+
return await this.simulator.simulate(tx);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Add a contract class from C++ raw msgpack data.
|
|
134
|
+
*/ async addContractClassFromCpp(rawClass) {
|
|
135
|
+
const contractClass = contractClassPublicFromPlainObject(rawClass);
|
|
136
|
+
await this.contractDataSource.addContractClass(contractClass);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Add a contract instance from C++ raw msgpack data.
|
|
140
|
+
* This also inserts the contract address nullifier into the nullifier tree,
|
|
141
|
+
* unless the address is a protocol canonical address (1-11).
|
|
142
|
+
*/ async addContractInstanceFromCpp(rawAddress, rawInstance) {
|
|
143
|
+
const address = AztecAddress.fromPlainObject(rawAddress);
|
|
144
|
+
const instance = contractInstanceWithAddressFromPlainObject(address, rawInstance);
|
|
145
|
+
// Protocol canonical addresses (1-11) should not have nullifiers inserted
|
|
146
|
+
const isProtocolCanonicalAddress = address.toBigInt() <= MAX_PROTOCOL_CONTRACTS && address.toBigInt() >= 1n;
|
|
147
|
+
await this.addContractInstance(instance, /* skipNullifierInsertion */ isProtocolCanonicalAddress);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Apply public data tree writes from C++ raw msgpack data.
|
|
151
|
+
* This is used to pre-populate the public data tree before simulation (e.g., for bytecode upgrades).
|
|
152
|
+
*/ async applyPublicDataWrites(rawWrites) {
|
|
153
|
+
for (const rawWrite of rawWrites){
|
|
154
|
+
const leaf = PublicDataTreeLeaf.fromPlainObject(rawWrite);
|
|
155
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [
|
|
156
|
+
leaf.toBuffer()
|
|
157
|
+
]);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Apply note hashes from C++ raw msgpack data.
|
|
162
|
+
* This is used to pre-populate the note hash tree before simulation.
|
|
163
|
+
*/ async applyNoteHashes(rawNoteHashes) {
|
|
164
|
+
const paddingLeaves = MAX_NOTE_HASHES_PER_TX - rawNoteHashes.length % MAX_NOTE_HASHES_PER_TX;
|
|
165
|
+
const paddedNoteHashes = [
|
|
166
|
+
...rawNoteHashes,
|
|
167
|
+
...Array(paddingLeaves).fill(Fr.ZERO)
|
|
168
|
+
];
|
|
169
|
+
await this.merkleTrees.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, paddedNoteHashes);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avm_simulator_bin.d.ts","sourceRoot":"","sources":["../../../src/public/fuzzing/avm_simulator_bin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
import { PublicTxEffect, deserializeFromMessagePack, serializeWithMessagePack } from '@aztec/stdlib/avm';
|
|
3
|
+
import { TreeSnapshots } from '@aztec/stdlib/tx';
|
|
4
|
+
import { NativeWorldStateService } from '@aztec/world-state';
|
|
5
|
+
import { createInterface } from 'readline';
|
|
6
|
+
import { AvmFuzzerSimulator, FuzzerSimulationRequest } from './avm_fuzzer_simulator.js';
|
|
7
|
+
/** Write data to stdout, letting Node handle buffering. */ function writeOutput(data) {
|
|
8
|
+
return new Promise((resolve, reject)=>{
|
|
9
|
+
process.stdout.write(data, (err)=>{
|
|
10
|
+
if (err) {
|
|
11
|
+
reject(err);
|
|
12
|
+
} else {
|
|
13
|
+
resolve();
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
// This cache holds opened world states to avoid reopening them for each invocation.
|
|
19
|
+
// It's a map so that in the future we could support multiple world states (if we had multiple fuzzers).
|
|
20
|
+
const worldStateCache = new Map();
|
|
21
|
+
async function openExistingWorldState(dataDir, mapSizeKb) {
|
|
22
|
+
const cached = worldStateCache.get(dataDir);
|
|
23
|
+
if (cached) {
|
|
24
|
+
return cached;
|
|
25
|
+
}
|
|
26
|
+
const ws = await NativeWorldStateService.new(EthAddress.ZERO, dataDir, {
|
|
27
|
+
archiveTreeMapSizeKb: mapSizeKb,
|
|
28
|
+
nullifierTreeMapSizeKb: mapSizeKb,
|
|
29
|
+
noteHashTreeMapSizeKb: mapSizeKb,
|
|
30
|
+
messageTreeMapSizeKb: mapSizeKb,
|
|
31
|
+
publicDataTreeMapSizeKb: mapSizeKb
|
|
32
|
+
});
|
|
33
|
+
worldStateCache.set(dataDir, ws);
|
|
34
|
+
return ws;
|
|
35
|
+
}
|
|
36
|
+
async function simulateWithFuzzer(dataDir, mapSizeKb, txHint, globals, rawContractClasses, rawContractInstances, rawPublicDataWrites, rawNoteHashes, protocolContracts) {
|
|
37
|
+
const worldStateService = await openExistingWorldState(dataDir, mapSizeKb);
|
|
38
|
+
const simulator = await AvmFuzzerSimulator.create(worldStateService, globals, protocolContracts);
|
|
39
|
+
await simulator.applyNoteHashes(rawNoteHashes);
|
|
40
|
+
// Register contract classes from C++ (must happen before public data writes to match C++ order)
|
|
41
|
+
for (const rawClass of rawContractClasses){
|
|
42
|
+
await simulator.addContractClassFromCpp(rawClass);
|
|
43
|
+
}
|
|
44
|
+
// Register contract instances from C++
|
|
45
|
+
for (const [rawAddress, rawInstance] of rawContractInstances){
|
|
46
|
+
await simulator.addContractInstanceFromCpp(rawAddress, rawInstance);
|
|
47
|
+
}
|
|
48
|
+
// Apply public data writes after contract registration (e.g., for bytecode upgrades)
|
|
49
|
+
// This must happen last to match C++ setup_fuzzer_state ordering
|
|
50
|
+
await simulator.applyPublicDataWrites(rawPublicDataWrites);
|
|
51
|
+
const result = await simulator.simulate(txHint);
|
|
52
|
+
const output = result.getAppLogicReturnValues().flatMap((rv)=>rv?.values?.filter((v)=>v != null) ?? []);
|
|
53
|
+
return {
|
|
54
|
+
reverted: !result.revertCode.isOK(),
|
|
55
|
+
output,
|
|
56
|
+
revertReason: result.findRevertReason()?.message,
|
|
57
|
+
publicInputs: result.publicInputs,
|
|
58
|
+
publicTxEffect: result.publicTxEffect
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async function execute(base64Line) {
|
|
62
|
+
try {
|
|
63
|
+
// Decode base64 and deserialize the entire request from msgpack
|
|
64
|
+
const buffer = Buffer.from(base64Line.trim(), 'base64');
|
|
65
|
+
const rawRequest = deserializeFromMessagePack(buffer);
|
|
66
|
+
const request = FuzzerSimulationRequest.fromPlainObject(rawRequest);
|
|
67
|
+
// Run the TS simulation
|
|
68
|
+
const result = await simulateWithFuzzer(request.wsDataDir, request.wsMapSizeKb, request.tx, request.globals, request.contractClasses, request.contractInstances, request.publicDataWrites, request.noteHashes, request.protocolContracts);
|
|
69
|
+
// Serialize the result to msgpack and encode it in base64 for output
|
|
70
|
+
const resultBuffer = serializeWithMessagePack({
|
|
71
|
+
reverted: result.reverted,
|
|
72
|
+
output: result.output,
|
|
73
|
+
revertReason: result.revertReason ?? '',
|
|
74
|
+
endTreeSnapshots: result.publicInputs.endTreeSnapshots,
|
|
75
|
+
publicTxEffect: result.publicTxEffect
|
|
76
|
+
});
|
|
77
|
+
const base64Response = resultBuffer.toString('base64') + '\n';
|
|
78
|
+
await writeOutput(base64Response);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
// If we error, treat as reverted
|
|
81
|
+
const errorResult = serializeWithMessagePack({
|
|
82
|
+
reverted: true,
|
|
83
|
+
output: [],
|
|
84
|
+
revertReason: `Unexpected Error ${error.message}`,
|
|
85
|
+
endTreeSnapshots: TreeSnapshots.empty(),
|
|
86
|
+
publicTxEffect: PublicTxEffect.empty()
|
|
87
|
+
});
|
|
88
|
+
await writeOutput(errorResult.toString('base64') + '\n');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function mainLoop() {
|
|
92
|
+
const rl = createInterface({
|
|
93
|
+
input: process.stdin,
|
|
94
|
+
terminal: false
|
|
95
|
+
});
|
|
96
|
+
// Process lines sequentially to avoid race conditions in responses
|
|
97
|
+
const lineQueue = [];
|
|
98
|
+
let processing = false;
|
|
99
|
+
async function processQueue() {
|
|
100
|
+
if (processing || lineQueue.length === 0) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
processing = true;
|
|
104
|
+
while(lineQueue.length > 0){
|
|
105
|
+
const line = lineQueue.shift();
|
|
106
|
+
await execute(line);
|
|
107
|
+
}
|
|
108
|
+
processing = false;
|
|
109
|
+
}
|
|
110
|
+
rl.on('line', (line)=>{
|
|
111
|
+
if (line.trim()) {
|
|
112
|
+
lineQueue.push(line);
|
|
113
|
+
void processQueue();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
rl.on('close', ()=>process.exit(0));
|
|
117
|
+
}
|
|
118
|
+
void mainLoop();
|