@aztec/simulator 0.0.1-commit.d3ec352c → 0.0.1-commit.d58ff9d0
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/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- 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 +7 -5
- package/dest/private/circuit_recording/circuit_recorder.d.ts +39 -25
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +71 -72
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +9 -20
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +39 -43
- 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/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
- 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/testing/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +3 -2
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +19 -4
- package/dest/public/avm/testing/utils.d.ts +32 -0
- package/dest/public/avm/testing/utils.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/utils.js +5 -35
- package/dest/public/avm_simulator.d.ts +28 -0
- package/dest/public/avm_simulator.d.ts.map +1 -0
- package/dest/public/avm_simulator.js +4 -0
- package/dest/public/avm_simulator_pool.d.ts +45 -0
- package/dest/public/avm_simulator_pool.d.ts.map +1 -0
- package/dest/public/avm_simulator_pool.js +197 -0
- package/dest/public/cdb/generated/api_types.d.ts +171 -0
- package/dest/public/cdb/generated/api_types.d.ts.map +1 -0
- package/dest/public/cdb/generated/api_types.js +314 -0
- package/dest/public/cdb/generated/server.d.ts +26 -0
- package/dest/public/cdb/generated/server.d.ts.map +1 -0
- package/dest/public/cdb/generated/server.js +135 -0
- package/dest/public/cdb_ipc_server.d.ts +33 -0
- package/dest/public/cdb_ipc_server.d.ts.map +1 -0
- package/dest/public/cdb_ipc_server.js +153 -0
- package/dest/public/contracts_db_checkpoint.d.ts +3 -3
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
- package/dest/public/contracts_db_checkpoint.js +1 -1
- package/dest/public/db_interfaces.d.ts +2 -2
- package/dest/public/db_interfaces.d.ts.map +1 -1
- 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 +6 -6
- 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 +38 -75
- 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/index.d.ts +3 -3
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +2 -2
- package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
- package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
- package/dest/public/fixtures/public_processor_test_env.js +73 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +24 -6
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +66 -21
- 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/simple_contract_data_source.js +1 -1
- package/dest/public/fixtures/token_test.js +4 -4
- package/dest/public/fixtures/utils.d.ts +3 -3
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +25 -23
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +67 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +185 -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/index.d.ts +5 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +2 -1
- package/dest/public/public_db_sources.d.ts +10 -6
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +21 -15
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +8 -6
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +12 -4
- package/dest/public/public_processor/public_processor.d.ts +17 -8
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +535 -100
- package/dest/public/public_processor/public_processor_metrics.d.ts +5 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +36 -45
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.js +39 -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 +5 -5
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +3 -3
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +43 -70
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +99 -312
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
- 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/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 +23 -20
- package/src/client.ts +0 -2
- 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 +11 -4
- package/src/private/circuit_recording/circuit_recorder.ts +90 -81
- package/src/private/circuit_recording/file_circuit_recorder.ts +45 -50
- package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
- package/src/private/factory.ts +7 -4
- package/src/public/avm/testing/account_proof.json +553 -0
- package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
- package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +24 -4
- package/src/public/avm/{fixtures → testing}/utils.ts +5 -41
- package/src/public/avm_simulator.ts +29 -0
- package/src/public/avm_simulator_pool.ts +226 -0
- package/src/public/cdb/generated/api_types.ts +457 -0
- package/src/public/cdb/generated/server.ts +109 -0
- package/src/public/cdb_ipc_server.ts +197 -0
- package/src/public/contracts_db_checkpoint.ts +2 -2
- package/src/public/db_interfaces.ts +1 -1
- package/src/public/executor_metrics.ts +9 -33
- package/src/public/fixtures/amm_test.ts +6 -6
- package/src/public/fixtures/bulk_test.ts +40 -15
- package/src/public/fixtures/custom_bytecode_tester.ts +53 -19
- package/src/public/fixtures/index.ts +6 -2
- package/src/public/fixtures/public_processor_test_env.ts +88 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +82 -21
- package/src/public/fixtures/simple_contract_data_source.ts +2 -2
- package/src/public/fixtures/token_test.ts +4 -4
- package/src/public/fixtures/utils.ts +25 -27
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +303 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +173 -0
- package/src/public/index.ts +8 -2
- package/src/public/public_db_sources.ts +37 -20
- package/src/public/public_processor/guarded_merkle_tree.ts +14 -7
- package/src/public/public_processor/public_processor.ts +188 -102
- package/src/public/public_processor/public_processor_metrics.ts +28 -44
- package/src/public/public_tx_simulator/dumping_public_tx_simulator.ts +67 -0
- package/src/public/public_tx_simulator/factories.ts +61 -0
- package/src/public/public_tx_simulator/index.ts +7 -4
- package/src/public/public_tx_simulator/public_tx_simulator.ts +143 -458
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +23 -0
- package/src/public/test_executor_metrics.ts +3 -3
- package/dest/public/avm/avm_context.d.ts +0 -41
- package/dest/public/avm/avm_context.d.ts.map +0 -1
- package/dest/public/avm/avm_context.js +0 -44
- package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
- package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/public/avm/avm_contract_call_result.js +0 -54
- package/dest/public/avm/avm_execution_environment.d.ts +0 -23
- package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/public/avm/avm_execution_environment.js +0 -33
- package/dest/public/avm/avm_gas.d.ts +0 -44
- package/dest/public/avm/avm_gas.d.ts.map +0 -1
- package/dest/public/avm/avm_gas.js +0 -195
- package/dest/public/avm/avm_machine_state.d.ts +0 -97
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -109
- package/dest/public/avm/avm_memory_types.d.ts +0 -275
- package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/public/avm/avm_memory_types.js +0 -351
- package/dest/public/avm/avm_simulator.d.ts +0 -40
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -191
- package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
- package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator_interface.js +0 -3
- package/dest/public/avm/errors.d.ts +0 -104
- package/dest/public/avm/errors.d.ts.map +0 -1
- package/dest/public/avm/errors.js +0 -141
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -83
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.d.ts +0 -42
- package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.js +0 -44
- package/dest/public/avm/fixtures/utils.d.ts +0 -39
- package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
- package/dest/public/avm/index.d.ts +0 -2
- package/dest/public/avm/index.d.ts.map +0 -1
- package/dest/public/avm/index.js +0 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -75
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -255
- package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/public/avm/opcodes/addressing_mode.js +0 -94
- package/dest/public/avm/opcodes/arithmetic.d.ts +0 -47
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -87
- package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
- package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/public/avm/opcodes/bitwise.js +0 -99
- package/dest/public/avm/opcodes/comparators.d.ts +0 -25
- package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/public/avm/opcodes/comparators.js +0 -43
- package/dest/public/avm/opcodes/contract.d.ts +0 -20
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -65
- package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/public/avm/opcodes/control_flow.js +0 -107
- package/dest/public/avm/opcodes/conversion.d.ts +0 -18
- package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/public/avm/opcodes/conversion.js +0 -333
- package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -84
- package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/public/avm/opcodes/environment_getters.js +0 -77
- package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
- package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/public/avm/opcodes/external_calls.js +0 -209
- package/dest/public/avm/opcodes/hashing.d.ts +0 -36
- package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/public/avm/opcodes/hashing.js +0 -114
- package/dest/public/avm/opcodes/index.d.ts +0 -16
- package/dest/public/avm/opcodes/index.d.ts.map +0 -1
- package/dest/public/avm/opcodes/index.js +0 -15
- package/dest/public/avm/opcodes/instruction.d.ts +0 -74
- package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction.js +0 -95
- package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction_impl.js +0 -30
- package/dest/public/avm/opcodes/memory.d.ts +0 -74
- package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/public/avm/opcodes/memory.js +0 -257
- package/dest/public/avm/opcodes/misc.d.ts +0 -18
- package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/public/avm/opcodes/misc.js +0 -73
- package/dest/public/avm/opcodes/storage.d.ts +0 -24
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -68
- package/dest/public/avm/revert_reason.d.ts +0 -18
- package/dest/public/avm/revert_reason.d.ts.map +0 -1
- package/dest/public/avm/revert_reason.js +0 -39
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/public/avm/serialization/buffer_cursor.js +0 -99
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
- package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/instruction_serialization.js +0 -261
- package/dest/public/avm/test_utils.d.ts +0 -15
- package/dest/public/avm/test_utils.d.ts.map +0 -1
- package/dest/public/avm/test_utils.js +0 -44
- package/dest/public/debug_fn_name.d.ts +0 -18
- package/dest/public/debug_fn_name.d.ts.map +0 -1
- package/dest/public/debug_fn_name.js +0 -28
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -9
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -109
- package/dest/public/fixtures/minimal_public_tx.d.ts +0 -9
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
- package/dest/public/fixtures/minimal_public_tx.js +0 -29
- package/dest/public/hinting_db_sources.d.ts +0 -79
- package/dest/public/hinting_db_sources.d.ts.map +0 -1
- package/dest/public/hinting_db_sources.js +0 -350
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -30
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -133
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -38
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -93
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -170
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -130
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +0 -300
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -39
- package/dest/public/side_effect_trace.d.ts +0 -86
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace.js +0 -199
- package/dest/public/side_effect_trace_interface.d.ts +0 -22
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.js +0 -1
- package/dest/public/state_manager/index.d.ts +0 -2
- package/dest/public/state_manager/index.d.ts.map +0 -1
- package/dest/public/state_manager/index.js +0 -1
- package/dest/public/state_manager/nullifiers.d.ts +0 -61
- package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
- package/dest/public/state_manager/nullifiers.js +0 -92
- package/dest/public/state_manager/public_storage.d.ts +0 -66
- package/dest/public/state_manager/public_storage.d.ts.map +0 -1
- package/dest/public/state_manager/public_storage.js +0 -145
- package/dest/public/state_manager/state_manager.d.ts +0 -164
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -395
- package/src/public/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -67
- package/src/public/avm/avm_execution_environment.ts +0 -46
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -169
- package/src/public/avm/avm_memory_types.ts +0 -436
- package/src/public/avm/avm_simulator.ts +0 -276
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/errors.ts +0 -177
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -116
- package/src/public/avm/fixtures/initializers.ts +0 -102
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -288
- package/src/public/avm/opcodes/addressing_mode.ts +0 -111
- package/src/public/avm/opcodes/arithmetic.ts +0 -117
- package/src/public/avm/opcodes/bitwise.ts +0 -113
- package/src/public/avm/opcodes/comparators.ts +0 -55
- package/src/public/avm/opcodes/contract.ts +0 -75
- package/src/public/avm/opcodes/control_flow.ts +0 -123
- package/src/public/avm/opcodes/conversion.ts +0 -104
- package/src/public/avm/opcodes/ec_add.ts +0 -96
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -260
- package/src/public/avm/opcodes/hashing.ts +0 -145
- package/src/public/avm/opcodes/index.ts +0 -15
- package/src/public/avm/opcodes/instruction.ts +0 -136
- package/src/public/avm/opcodes/instruction_impl.ts +0 -36
- package/src/public/avm/opcodes/memory.ts +0 -293
- package/src/public/avm/opcodes/misc.ts +0 -102
- package/src/public/avm/opcodes/storage.ts +0 -87
- package/src/public/avm/revert_reason.ts +0 -58
- package/src/public/avm/serialization/buffer_cursor.ts +0 -118
- package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
- package/src/public/avm/serialization/instruction_serialization.ts +0 -249
- package/src/public/avm/test_utils.ts +0 -64
- package/src/public/debug_fn_name.ts +0 -43
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -135
- package/src/public/fixtures/minimal_public_tx.ts +0 -35
- package/src/public/hinting_db_sources.ts +0 -603
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -162
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -155
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -132
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -240
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -477
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -290
- package/src/public/side_effect_trace_interface.ts +0 -28
- package/src/public/state_manager/index.ts +0 -1
- package/src/public/state_manager/nullifiers.ts +0 -103
- package/src/public/state_manager/public_storage.ts +0 -174
- package/src/public/state_manager/state_manager.ts +0 -560
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } 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 { type ContractArtifact, encodeArguments } from '@aztec/stdlib/abi';
|
|
6
6
|
import { PublicSimulatorConfig, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
7
7
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -11,27 +11,29 @@ import { PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
|
11
11
|
import { GlobalVariables, PublicCallRequestWithCalldata, type Tx } from '@aztec/stdlib/tx';
|
|
12
12
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
13
13
|
|
|
14
|
-
import { BaseAvmSimulationTester } from '../avm/
|
|
14
|
+
import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
|
|
15
15
|
import {
|
|
16
16
|
DEFAULT_BLOCK_NUMBER,
|
|
17
17
|
DEFAULT_TIMESTAMP,
|
|
18
18
|
getContractFunctionAbi,
|
|
19
19
|
getFunctionSelector,
|
|
20
|
-
} from '../avm/
|
|
20
|
+
} from '../avm/testing/utils.js';
|
|
21
|
+
import { AvmSimulatorPool } from '../avm_simulator_pool.js';
|
|
21
22
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
22
|
-
import {
|
|
23
|
-
import { MeasuredCppVsTsPublicTxSimulator } from '../public_tx_simulator/cpp_vs_ts_public_tx_simulator.js';
|
|
23
|
+
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
24
24
|
import type { MeasuredPublicTxSimulatorInterface } from '../public_tx_simulator/public_tx_simulator_interface.js';
|
|
25
25
|
import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
26
26
|
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
27
27
|
import { type TestPrivateInsertions, createTxForPublicCalls } from './utils.js';
|
|
28
28
|
|
|
29
29
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
30
|
+
const TEARDOWN_DA_GAS_LIMIT = 98_304;
|
|
31
|
+
const TEARDOWN_L2_GAS_LIMIT = 817_500;
|
|
30
32
|
|
|
31
33
|
export type TestEnqueuedCall = {
|
|
32
34
|
sender?: AztecAddress;
|
|
33
35
|
address: AztecAddress;
|
|
34
|
-
fnName
|
|
36
|
+
fnName?: string;
|
|
35
37
|
args: any[];
|
|
36
38
|
isStaticCall?: boolean;
|
|
37
39
|
contractArtifact?: ContractArtifact;
|
|
@@ -42,6 +44,7 @@ const defaultConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
|
|
|
42
44
|
collectCallMetadata: true,
|
|
43
45
|
collectDebugLogs: true,
|
|
44
46
|
collectHints: false,
|
|
47
|
+
collectPublicInputs: false,
|
|
45
48
|
collectStatistics: false,
|
|
46
49
|
});
|
|
47
50
|
|
|
@@ -63,8 +66,9 @@ export type MeasuredSimulatorFactory = (
|
|
|
63
66
|
*/
|
|
64
67
|
export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
65
68
|
protected txCount: number = 0;
|
|
66
|
-
private simulator: MeasuredPublicTxSimulatorInterface;
|
|
69
|
+
private simulator: MeasuredPublicTxSimulatorInterface | undefined;
|
|
67
70
|
private metricsPrefix?: string;
|
|
71
|
+
protected avmSimulator?: AvmSimulatorPool;
|
|
68
72
|
|
|
69
73
|
constructor(
|
|
70
74
|
merkleTree: MerkleTreeWriteOperations,
|
|
@@ -80,7 +84,9 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
80
84
|
if (simulatorFactory) {
|
|
81
85
|
this.simulator = simulatorFactory(merkleTree, contractsDB, globals, this.metrics, config);
|
|
82
86
|
} else {
|
|
83
|
-
|
|
87
|
+
// No simulator — this tester can only be used for setup (setFeePayerBalance, createTx, etc.)
|
|
88
|
+
// To simulate, use PublicTxSimulationTester.create() or pass a simulatorFactory.
|
|
89
|
+
this.simulator = undefined;
|
|
84
90
|
}
|
|
85
91
|
}
|
|
86
92
|
|
|
@@ -88,15 +94,25 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
88
94
|
worldStateService: NativeWorldStateService, // make sure to close this later
|
|
89
95
|
globals: GlobalVariables = defaultGlobals(),
|
|
90
96
|
metrics: TestExecutorMetrics = new TestExecutorMetrics(),
|
|
91
|
-
useCppSimulator = false,
|
|
92
97
|
config: PublicSimulatorConfig = defaultConfig,
|
|
93
98
|
): Promise<PublicTxSimulationTester> {
|
|
94
99
|
const contractDataSource = new SimpleContractDataSource();
|
|
95
100
|
const merkleTree = await worldStateService.fork();
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
|
|
102
|
+
const avmSimulator = await AvmSimulatorPool.spawn({ wsdbIpcPath: worldStateService.getIpcPath() });
|
|
103
|
+
const simulatorFactory: MeasuredSimulatorFactory = (mt, cdb, g, m, c) =>
|
|
104
|
+
new MeasuredPublicTxSimulator(avmSimulator, g, cdb, mt.getRevision().forkId, m, c, undefined);
|
|
105
|
+
|
|
106
|
+
const tester = new PublicTxSimulationTester(
|
|
107
|
+
merkleTree,
|
|
108
|
+
contractDataSource,
|
|
109
|
+
globals,
|
|
110
|
+
metrics,
|
|
111
|
+
simulatorFactory,
|
|
112
|
+
config,
|
|
113
|
+
);
|
|
114
|
+
tester.avmSimulator = avmSimulator;
|
|
115
|
+
return tester;
|
|
100
116
|
}
|
|
101
117
|
|
|
102
118
|
public setMetricsPrefix(prefix: string) {
|
|
@@ -111,6 +127,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
111
127
|
feePayer: AztecAddress = sender,
|
|
112
128
|
/* need some unique first nullifier for note-nonce computations */
|
|
113
129
|
privateInsertions: TestPrivateInsertions = { nonRevertible: { nullifiers: [new Fr(420000 + this.txCount)] } },
|
|
130
|
+
gasLimits?: Gas,
|
|
114
131
|
): Promise<Tx> {
|
|
115
132
|
const setupCallRequests = await asyncMap(setupCalls, call =>
|
|
116
133
|
this.#createPubicCallRequestForCall(call, call.sender ?? sender),
|
|
@@ -130,9 +147,10 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
130
147
|
teardownCallRequest,
|
|
131
148
|
feePayer,
|
|
132
149
|
/*gasUsedByPrivate*/ teardownCall
|
|
133
|
-
? new Gas(
|
|
134
|
-
: Gas
|
|
150
|
+
? new Gas(TEARDOWN_DA_GAS_LIMIT + TX_DA_GAS_OVERHEAD, TEARDOWN_L2_GAS_LIMIT + PUBLIC_TX_L2_GAS_OVERHEAD)
|
|
151
|
+
: new Gas(TX_DA_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD),
|
|
135
152
|
defaultGlobals(),
|
|
153
|
+
gasLimits,
|
|
136
154
|
);
|
|
137
155
|
}
|
|
138
156
|
|
|
@@ -145,8 +163,9 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
145
163
|
/* need some unique first nullifier for note-nonce computations */
|
|
146
164
|
privateInsertions?: TestPrivateInsertions,
|
|
147
165
|
txLabel: string = 'unlabeledTx',
|
|
166
|
+
gasLimits?: Gas,
|
|
148
167
|
): Promise<PublicTxResult> {
|
|
149
|
-
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
|
|
168
|
+
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits);
|
|
150
169
|
|
|
151
170
|
await this.setFeePayerBalance(feePayer);
|
|
152
171
|
|
|
@@ -224,6 +243,34 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
224
243
|
this.metrics.prettyPrint();
|
|
225
244
|
}
|
|
226
245
|
|
|
246
|
+
/** Clean up IPC resources (AVM simulator pool and merkle tree fork) created by create(). */
|
|
247
|
+
public async close(): Promise<void> {
|
|
248
|
+
await this.avmSimulator?.[Symbol.asyncDispose]();
|
|
249
|
+
// Close the merkle tree fork to release IPC resources before the wsdb process is killed.
|
|
250
|
+
if (this.merkleTrees?.close) {
|
|
251
|
+
await this.merkleTrees.close().catch(() => {});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Cancel the current simulation if one is in progress.
|
|
257
|
+
* This signals the underlying simulator to stop at the next safe point.
|
|
258
|
+
* Safe to call even if no simulation is in progress.
|
|
259
|
+
*
|
|
260
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
261
|
+
*/
|
|
262
|
+
public async cancel(waitTimeoutMs?: number): Promise<void> {
|
|
263
|
+
await this.simulator?.cancel?.(waitTimeoutMs);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Get the underlying simulator for advanced test scenarios.
|
|
268
|
+
* Use this when you need direct control over simulation (e.g., for testing cancellation).
|
|
269
|
+
*/
|
|
270
|
+
public getSimulator(): MeasuredPublicTxSimulatorInterface | undefined {
|
|
271
|
+
return this.simulator;
|
|
272
|
+
}
|
|
273
|
+
|
|
227
274
|
async #createPubicCallRequestForCall(
|
|
228
275
|
call: TestEnqueuedCall,
|
|
229
276
|
sender: AztecAddress,
|
|
@@ -234,10 +281,24 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
234
281
|
throw new Error(`Contract artifact not found for address: ${address}`);
|
|
235
282
|
}
|
|
236
283
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
284
|
+
let calldata: Fr[] = [];
|
|
285
|
+
if (!call.fnName) {
|
|
286
|
+
this.logger.debug(
|
|
287
|
+
`No function name specified for call to contract ${call.address.toString()}. Assuming this is a custom bytecode with no public_dispatch function.`,
|
|
288
|
+
);
|
|
289
|
+
this.logger.debug(`Not using ABI to encode arguments. Not prepending fn selector to calldata.`);
|
|
290
|
+
try {
|
|
291
|
+
calldata = call.args.map(arg => new Fr(arg));
|
|
292
|
+
} catch (error) {
|
|
293
|
+
this.logger.warn(`Tried assuming that all arguments are Field-like. Failed. Error: ${error}`);
|
|
294
|
+
throw error;
|
|
295
|
+
}
|
|
296
|
+
} else {
|
|
297
|
+
const fnSelector = await getFunctionSelector(call.fnName, contractArtifact);
|
|
298
|
+
const fnAbi = getContractFunctionAbi(call.fnName, contractArtifact)!;
|
|
299
|
+
const encodedArgs = encodeArguments(fnAbi, call.args);
|
|
300
|
+
calldata = [fnSelector.toField(), ...encodedArgs];
|
|
301
|
+
}
|
|
241
302
|
const isStaticCall = call.isStaticCall ?? false;
|
|
242
303
|
const request = await PublicCallRequest.fromCalldata(sender, address, isStaticCall, calldata);
|
|
243
304
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import type { ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
6
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
7
7
|
|
|
8
|
-
import { getFunctionSelector } from '../avm/
|
|
8
|
+
import { getFunctionSelector } from '../avm/testing/utils.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* This class is used during public/avm testing to function as a database of
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
3
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
4
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
@@ -21,9 +21,9 @@ export async function tokenTest(
|
|
|
21
21
|
) {
|
|
22
22
|
const timer = new Timer();
|
|
23
23
|
|
|
24
|
-
const admin = AztecAddress.
|
|
25
|
-
const sender = AztecAddress.
|
|
26
|
-
const receiver = AztecAddress.
|
|
24
|
+
const admin = AztecAddress.fromNumberUnsafe(42);
|
|
25
|
+
const sender = AztecAddress.fromNumberUnsafe(111);
|
|
26
|
+
const receiver = AztecAddress.fromNumberUnsafe(222);
|
|
27
27
|
|
|
28
28
|
const token = await setUpToken(tester, tokenArtifact, admin, expectToBeTrue);
|
|
29
29
|
|
|
@@ -2,14 +2,12 @@ import {
|
|
|
2
2
|
CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE,
|
|
3
3
|
CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,
|
|
4
4
|
CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
DEFAULT_TEARDOWN_DA_GAS_LIMIT,
|
|
8
|
-
DEFAULT_TEARDOWN_L2_GAS_LIMIT,
|
|
5
|
+
MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT,
|
|
6
|
+
MAX_PROCESSABLE_L2_GAS,
|
|
9
7
|
PRIVATE_LOG_SIZE_IN_FIELDS,
|
|
10
8
|
} from '@aztec/constants';
|
|
11
9
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
12
|
-
import { Fr } from '@aztec/foundation/
|
|
10
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
13
11
|
import { CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG } from '@aztec/protocol-contracts';
|
|
14
12
|
import { bufferAsFields } from '@aztec/stdlib/abi';
|
|
15
13
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -38,6 +36,9 @@ import {
|
|
|
38
36
|
|
|
39
37
|
import { strict as assert } from 'assert';
|
|
40
38
|
|
|
39
|
+
const TEARDOWN_DA_GAS_LIMIT = 98_304;
|
|
40
|
+
const TEARDOWN_L2_GAS_LIMIT = 817_500;
|
|
41
|
+
|
|
41
42
|
export type TestPrivateInsertions = {
|
|
42
43
|
revertible?: {
|
|
43
44
|
nullifiers?: Fr[];
|
|
@@ -62,13 +63,14 @@ export async function createTxForPublicCalls(
|
|
|
62
63
|
feePayer = AztecAddress.zero(),
|
|
63
64
|
gasUsedByPrivate: Gas = Gas.empty(),
|
|
64
65
|
globals: GlobalVariables = GlobalVariables.empty(),
|
|
66
|
+
gasLimits?: Gas,
|
|
65
67
|
): Promise<Tx> {
|
|
66
68
|
assert(
|
|
67
69
|
setupCallRequests.length > 0 || appCallRequests.length > 0 || teardownCallRequest !== undefined,
|
|
68
70
|
"Can't create public tx with no enqueued calls",
|
|
69
71
|
);
|
|
70
72
|
// use max limits
|
|
71
|
-
|
|
73
|
+
gasLimits = gasLimits ?? new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
|
|
72
74
|
|
|
73
75
|
const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
|
|
74
76
|
|
|
@@ -127,21 +129,18 @@ export async function createTxForPublicCalls(
|
|
|
127
129
|
}
|
|
128
130
|
|
|
129
131
|
const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
|
|
130
|
-
const teardownGasLimits = teardownCallRequest
|
|
131
|
-
? new Gas(DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT)
|
|
132
|
-
: Gas.empty();
|
|
132
|
+
const teardownGasLimits = teardownCallRequest ? new Gas(TEARDOWN_DA_GAS_LIMIT, TEARDOWN_L2_GAS_LIMIT) : Gas.empty();
|
|
133
133
|
const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
|
|
134
134
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
135
|
-
const header = BlockHeader.empty();
|
|
136
|
-
header.globalVariables = globals;
|
|
135
|
+
const header = BlockHeader.empty({ globalVariables: globals });
|
|
137
136
|
const constantData = new TxConstantData(header, txContext, Fr.zero(), Fr.zero());
|
|
138
|
-
const
|
|
137
|
+
const expirationTimestamp = 0n; // Not used in the simulator.
|
|
139
138
|
|
|
140
139
|
const txData = new PrivateKernelTailCircuitPublicInputs(
|
|
141
140
|
constantData,
|
|
142
141
|
/*gasUsed=*/ gasUsedByPrivate,
|
|
143
142
|
feePayer,
|
|
144
|
-
|
|
143
|
+
expirationTimestamp,
|
|
145
144
|
forPublic,
|
|
146
145
|
);
|
|
147
146
|
|
|
@@ -164,7 +163,7 @@ export async function createTxForPrivateOnly(
|
|
|
164
163
|
gasUsedByPrivate: Gas = new Gas(10, 10),
|
|
165
164
|
): Promise<Tx> {
|
|
166
165
|
// use max limits
|
|
167
|
-
const gasLimits = new Gas(
|
|
166
|
+
const gasLimits = new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
|
|
168
167
|
|
|
169
168
|
const forRollup = PartialPrivateTailPublicInputsForRollup.empty();
|
|
170
169
|
|
|
@@ -172,13 +171,13 @@ export async function createTxForPrivateOnly(
|
|
|
172
171
|
const gasSettings = new GasSettings(gasLimits, Gas.empty(), maxFeesPerGas, GasFees.empty());
|
|
173
172
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
174
173
|
const constantData = new TxConstantData(BlockHeader.empty(), txContext, Fr.zero(), Fr.zero());
|
|
175
|
-
const
|
|
174
|
+
const expirationTimestamp = 0n; // Not used in the simulator.
|
|
176
175
|
|
|
177
176
|
const txData = new PrivateKernelTailCircuitPublicInputs(
|
|
178
177
|
constantData,
|
|
179
178
|
/*gasUsed=*/ gasUsedByPrivate,
|
|
180
179
|
feePayer,
|
|
181
|
-
|
|
180
|
+
expirationTimestamp,
|
|
182
181
|
/*forPublic=*/ undefined,
|
|
183
182
|
forRollup,
|
|
184
183
|
);
|
|
@@ -229,17 +228,15 @@ export async function addNewContractInstanceToTx(
|
|
|
229
228
|
contractInstance: ContractInstanceWithAddress,
|
|
230
229
|
skipNullifierInsertion = false,
|
|
231
230
|
) {
|
|
232
|
-
//
|
|
233
|
-
// is not broadcast in such private logs
|
|
231
|
+
// Only ivpk_m is broadcast as a point (x, y); the other five keys are hashes.
|
|
234
232
|
const publicKeysAsFields = [
|
|
235
|
-
contractInstance.publicKeys.
|
|
236
|
-
contractInstance.publicKeys.
|
|
237
|
-
contractInstance.publicKeys.
|
|
238
|
-
contractInstance.publicKeys.
|
|
239
|
-
contractInstance.publicKeys.
|
|
240
|
-
contractInstance.publicKeys.
|
|
241
|
-
contractInstance.publicKeys.
|
|
242
|
-
contractInstance.publicKeys.masterTaggingPublicKey.y,
|
|
233
|
+
contractInstance.publicKeys.npkMHash,
|
|
234
|
+
contractInstance.publicKeys.ivpkM.x,
|
|
235
|
+
contractInstance.publicKeys.ivpkM.y,
|
|
236
|
+
contractInstance.publicKeys.ovpkMHash,
|
|
237
|
+
contractInstance.publicKeys.tpkMHash,
|
|
238
|
+
contractInstance.publicKeys.mspkMHash,
|
|
239
|
+
contractInstance.publicKeys.fbpkMHash,
|
|
243
240
|
];
|
|
244
241
|
const logFields = [
|
|
245
242
|
CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG,
|
|
@@ -248,6 +245,7 @@ export async function addNewContractInstanceToTx(
|
|
|
248
245
|
new Fr(contractInstance.salt),
|
|
249
246
|
contractInstance.currentContractClassId,
|
|
250
247
|
contractInstance.initializationHash,
|
|
248
|
+
contractInstance.immutablesHash,
|
|
251
249
|
...publicKeysAsFields,
|
|
252
250
|
contractInstance.deployer.toField(),
|
|
253
251
|
];
|
|
@@ -257,7 +255,7 @@ export async function addNewContractInstanceToTx(
|
|
|
257
255
|
);
|
|
258
256
|
|
|
259
257
|
const contractAddressNullifier = await siloNullifier(
|
|
260
|
-
AztecAddress.
|
|
258
|
+
AztecAddress.fromNumberUnsafe(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
|
|
261
259
|
contractInstance.address.toField(),
|
|
262
260
|
);
|
|
263
261
|
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MAX_ENQUEUED_CALLS_PER_TX,
|
|
3
|
+
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
4
|
+
MAX_NOTE_HASHES_PER_TX,
|
|
5
|
+
MAX_NULLIFIERS_PER_TX,
|
|
6
|
+
MAX_PRIVATE_LOGS_PER_TX,
|
|
7
|
+
MAX_PROTOCOL_CONTRACTS,
|
|
8
|
+
} from '@aztec/constants';
|
|
9
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
10
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
11
|
+
import { AvmTxHint, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
12
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
13
|
+
import { contractClassPublicFromPlainObject, contractInstanceWithAddressFromPlainObject } from '@aztec/stdlib/contract';
|
|
14
|
+
import {
|
|
15
|
+
PartialPrivateTailPublicInputsForPublic,
|
|
16
|
+
PrivateKernelTailCircuitPublicInputs,
|
|
17
|
+
PrivateToPublicAccumulatedData,
|
|
18
|
+
PublicCallRequest,
|
|
19
|
+
} from '@aztec/stdlib/kernel';
|
|
20
|
+
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
21
|
+
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
22
|
+
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
23
|
+
import { MerkleTreeId, type MerkleTreeWriteOperations, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
24
|
+
import {
|
|
25
|
+
BlockHeader,
|
|
26
|
+
GlobalVariables,
|
|
27
|
+
HashedValues,
|
|
28
|
+
ProtocolContracts,
|
|
29
|
+
Tx,
|
|
30
|
+
TxConstantData,
|
|
31
|
+
TxContext,
|
|
32
|
+
TxHash,
|
|
33
|
+
} from '@aztec/stdlib/tx';
|
|
34
|
+
import type { NativeWorldStateService } from '@aztec/world-state';
|
|
35
|
+
|
|
36
|
+
import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
|
|
37
|
+
import { AvmSimulatorPool } from '../avm_simulator_pool.js';
|
|
38
|
+
import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
|
|
39
|
+
import { PublicContractsDB } from '../public_db_sources.js';
|
|
40
|
+
import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Request structure for fuzzer simulation communication from C++.
|
|
44
|
+
* Matches the C++ FuzzerSimulationRequest struct
|
|
45
|
+
*/
|
|
46
|
+
export class FuzzerSimulationRequest {
|
|
47
|
+
constructor(
|
|
48
|
+
public readonly wsDataDir: string,
|
|
49
|
+
public readonly wsMapSizeKb: number,
|
|
50
|
+
public readonly tx: AvmTxHint,
|
|
51
|
+
public readonly globals: GlobalVariables,
|
|
52
|
+
public readonly contractClasses: any[], // Raw, processed by addContractClassFromCpp
|
|
53
|
+
public readonly contractInstances: [any, any][], // Raw pairs [address, instance]
|
|
54
|
+
public readonly publicDataWrites: any[], // Raw public data tree writes to apply before simulation
|
|
55
|
+
public readonly noteHashes: any[], // Raw note hashes to apply before simulation
|
|
56
|
+
public readonly protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
|
|
57
|
+
) {}
|
|
58
|
+
|
|
59
|
+
static fromPlainObject(obj: any): FuzzerSimulationRequest {
|
|
60
|
+
if (obj instanceof FuzzerSimulationRequest) {
|
|
61
|
+
return obj;
|
|
62
|
+
}
|
|
63
|
+
return new FuzzerSimulationRequest(
|
|
64
|
+
obj.wsDataDir,
|
|
65
|
+
obj.wsMapSizeKb,
|
|
66
|
+
AvmTxHint.fromPlainObject(obj.tx),
|
|
67
|
+
GlobalVariables.fromPlainObject(obj.globals),
|
|
68
|
+
obj.contractClasses,
|
|
69
|
+
obj.contractInstances,
|
|
70
|
+
obj.publicDataWrites ?? [],
|
|
71
|
+
obj.noteHashes ?? [],
|
|
72
|
+
ProtocolContracts.fromPlainObject(obj.protocolContracts),
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Creates a TypeScript Tx object from a deserialized C++ Tx (AvmTxHint-like structure).
|
|
79
|
+
* This allows simulating fuzzer-generated transactions with the C++ public tx simulator.
|
|
80
|
+
*/
|
|
81
|
+
async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
|
|
82
|
+
// Create TxHash from the C++ tx hash string
|
|
83
|
+
if (!cppTx.hash) {
|
|
84
|
+
throw new Error(`cppTx.hash is undefined. Keys: ${Object.keys(cppTx || {}).join(', ')}`);
|
|
85
|
+
}
|
|
86
|
+
const txHash = TxHash.fromString(cppTx.hash);
|
|
87
|
+
|
|
88
|
+
// Extract PublicCallRequest instances from enqueued calls
|
|
89
|
+
const setupCallRequests = cppTx.setupEnqueuedCalls.map(call => call.request);
|
|
90
|
+
const paddedSetupCalls = padArrayEnd(setupCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX);
|
|
91
|
+
|
|
92
|
+
const appLogicCallRequests = cppTx.appLogicEnqueuedCalls.map(call => call.request);
|
|
93
|
+
const paddedAppLogicCalls = padArrayEnd(appLogicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX);
|
|
94
|
+
|
|
95
|
+
// Build non-revertible accumulated data from C++ tx
|
|
96
|
+
const emptyNonRevertible = PrivateToPublicAccumulatedData.empty();
|
|
97
|
+
const nonRevertibleAccumulatedData = new PrivateToPublicAccumulatedData(
|
|
98
|
+
padArrayEnd(cppTx.nonRevertibleAccumulatedData.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
|
|
99
|
+
padArrayEnd(cppTx.nonRevertibleAccumulatedData.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
|
|
100
|
+
padArrayEnd(
|
|
101
|
+
cppTx.nonRevertibleAccumulatedData.l2ToL1Messages,
|
|
102
|
+
ScopedL2ToL1Message.empty(),
|
|
103
|
+
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
104
|
+
),
|
|
105
|
+
padArrayEnd(cppTx.nonRevertibleContractDeploymentData.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
|
|
106
|
+
emptyNonRevertible.contractClassLogsHashes,
|
|
107
|
+
paddedSetupCalls,
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
// Build revertible accumulated data from C++ tx
|
|
111
|
+
const emptyRevertible = PrivateToPublicAccumulatedData.empty();
|
|
112
|
+
const revertibleAccumulatedData = new PrivateToPublicAccumulatedData(
|
|
113
|
+
padArrayEnd(cppTx.revertibleAccumulatedData.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
|
|
114
|
+
padArrayEnd(cppTx.revertibleAccumulatedData.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
|
|
115
|
+
padArrayEnd(cppTx.revertibleAccumulatedData.l2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
|
|
116
|
+
padArrayEnd(cppTx.revertibleContractDeploymentData.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
|
|
117
|
+
emptyRevertible.contractClassLogsHashes,
|
|
118
|
+
paddedAppLogicCalls,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
// Build teardown call request (if exists)
|
|
122
|
+
const teardownCallRequest = cppTx.teardownEnqueuedCall?.request ?? PublicCallRequest.empty();
|
|
123
|
+
|
|
124
|
+
// Create forPublic structure
|
|
125
|
+
const forPublic = new PartialPrivateTailPublicInputsForPublic(
|
|
126
|
+
nonRevertibleAccumulatedData,
|
|
127
|
+
revertibleAccumulatedData,
|
|
128
|
+
teardownCallRequest,
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
// Build TxContext - gasSettings is already a proper GasSettings after AvmTxHint.fromPlainObject
|
|
132
|
+
const txContext = new TxContext(
|
|
133
|
+
Fr.ZERO, // chainId - this is fine because simulation actually reads from globalVariables not here
|
|
134
|
+
Fr.ZERO, // version - this is fine because simulation actually reads from globalVariables not here
|
|
135
|
+
cppTx.gasSettings,
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
// Build TxConstantData
|
|
139
|
+
const constants = new TxConstantData(
|
|
140
|
+
BlockHeader.empty(), // anchorBlockHeader (unused in simulation)
|
|
141
|
+
txContext,
|
|
142
|
+
Fr.ZERO, // vkTreeRoot - not needed for public simulation
|
|
143
|
+
Fr.ZERO, // protocolContractsHash - not needed for public simulation
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
const data = new PrivateKernelTailCircuitPublicInputs(
|
|
147
|
+
constants,
|
|
148
|
+
cppTx.gasUsedByPrivate,
|
|
149
|
+
cppTx.feePayer,
|
|
150
|
+
0n, // expirationTimestamp
|
|
151
|
+
forPublic,
|
|
152
|
+
undefined, // forRollup - not needed for public simulation
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
// Build publicFunctionCalldata from all enqueued calls
|
|
156
|
+
// Calldata is already Fr[] after AvmTxHint.fromPlainObject
|
|
157
|
+
const publicFunctionCalldata: HashedValues[] = [];
|
|
158
|
+
|
|
159
|
+
// Add setup calls
|
|
160
|
+
for (const call of cppTx.setupEnqueuedCalls || []) {
|
|
161
|
+
publicFunctionCalldata.push(await HashedValues.fromCalldata(call.calldata));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Add app logic calls
|
|
165
|
+
for (const call of cppTx.appLogicEnqueuedCalls || []) {
|
|
166
|
+
publicFunctionCalldata.push(await HashedValues.fromCalldata(call.calldata));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Add teardown call if present
|
|
170
|
+
if (cppTx.teardownEnqueuedCall) {
|
|
171
|
+
publicFunctionCalldata.push(await HashedValues.fromCalldata(cppTx.teardownEnqueuedCall.calldata));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Extract contract class log fields from ContractDeploymentData
|
|
175
|
+
const contractClassLogFields = [
|
|
176
|
+
...cppTx.nonRevertibleContractDeploymentData.contractClassLogs.map(log => log.fields),
|
|
177
|
+
...cppTx.revertibleContractDeploymentData.contractClassLogs.map(log => log.fields),
|
|
178
|
+
];
|
|
179
|
+
|
|
180
|
+
// Create the Tx
|
|
181
|
+
return new Tx(
|
|
182
|
+
txHash,
|
|
183
|
+
data,
|
|
184
|
+
ChonkProof.empty(), // No real proof needed for simulation
|
|
185
|
+
contractClassLogFields,
|
|
186
|
+
publicFunctionCalldata,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
|
|
192
|
+
* It provides methods for registering contracts from C++ msgpack data and simulating transactions.
|
|
193
|
+
* The simulation itself runs on the production C++ AVM simulator, so the fuzzer compares brillig
|
|
194
|
+
* execution against the real AVM rather than a TS reference.
|
|
195
|
+
*/
|
|
196
|
+
export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
197
|
+
private simulator: PublicTxSimulator;
|
|
198
|
+
|
|
199
|
+
constructor(
|
|
200
|
+
merkleTrees: MerkleTreeWriteOperations,
|
|
201
|
+
contractDataSource: SimpleContractDataSource,
|
|
202
|
+
globals: GlobalVariables,
|
|
203
|
+
private avmSimulator: AvmSimulatorPool,
|
|
204
|
+
contractsDB: PublicContractsDB,
|
|
205
|
+
forkId: number,
|
|
206
|
+
) {
|
|
207
|
+
super(contractDataSource, merkleTrees);
|
|
208
|
+
// collectPublicInputs and collectCallMetadata are required so the C++ result carries the end
|
|
209
|
+
// tree snapshots and app-logic return values that the fuzzer bin reports back to the harness.
|
|
210
|
+
this.simulator = new PublicTxSimulator(
|
|
211
|
+
avmSimulator,
|
|
212
|
+
globals,
|
|
213
|
+
contractsDB,
|
|
214
|
+
forkId,
|
|
215
|
+
{
|
|
216
|
+
skipFeeEnforcement: false,
|
|
217
|
+
collectDebugLogs: false,
|
|
218
|
+
collectHints: false,
|
|
219
|
+
collectPublicInputs: true,
|
|
220
|
+
collectStatistics: false,
|
|
221
|
+
collectCallMetadata: true,
|
|
222
|
+
},
|
|
223
|
+
undefined,
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Static factory method to create an AvmFuzzerSimulator.
|
|
229
|
+
*/
|
|
230
|
+
public static async create(
|
|
231
|
+
worldStateService: NativeWorldStateService,
|
|
232
|
+
globals: GlobalVariables,
|
|
233
|
+
): Promise<AvmFuzzerSimulator> {
|
|
234
|
+
const contractDataSource = new SimpleContractDataSource();
|
|
235
|
+
const merkleTrees = await worldStateService.fork();
|
|
236
|
+
const forkId = merkleTrees.getRevision().forkId;
|
|
237
|
+
const avmSimulator = await AvmSimulatorPool.spawn({ wsdbIpcPath: worldStateService.getIpcPath() });
|
|
238
|
+
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
239
|
+
return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, avmSimulator, contractsDB, forkId);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Tear down the AVM simulator pool (AVM processes and CDB server). */
|
|
243
|
+
public async close(): Promise<void> {
|
|
244
|
+
await this.avmSimulator[Symbol.asyncDispose]();
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Simulate a transaction from a C++ AvmTxHint.
|
|
249
|
+
*/
|
|
250
|
+
public async simulate(txHint: AvmTxHint): Promise<PublicTxResult> {
|
|
251
|
+
// Compute fee from gas limits and max fees per gas (upper bound on fee)
|
|
252
|
+
const totalFee =
|
|
253
|
+
BigInt(txHint.gasSettings.gasLimits.daGas) * txHint.gasSettings.maxFeesPerGas.feePerDaGas +
|
|
254
|
+
BigInt(txHint.gasSettings.gasLimits.l2Gas) * txHint.gasSettings.maxFeesPerGas.feePerL2Gas;
|
|
255
|
+
|
|
256
|
+
await this.setFeePayerBalance(txHint.feePayer, new Fr(totalFee));
|
|
257
|
+
|
|
258
|
+
const tx = await createTxFromHint(txHint);
|
|
259
|
+
return await this.simulator.simulate(tx);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Add a contract class from C++ raw msgpack data.
|
|
264
|
+
*/
|
|
265
|
+
public async addContractClassFromCpp(rawClass: any): Promise<void> {
|
|
266
|
+
const contractClass = contractClassPublicFromPlainObject(rawClass);
|
|
267
|
+
await this.contractDataSource.addContractClass(contractClass);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Add a contract instance from C++ raw msgpack data.
|
|
272
|
+
* This also inserts the contract address nullifier into the nullifier tree,
|
|
273
|
+
* unless the address is a protocol canonical address (1-11).
|
|
274
|
+
*/
|
|
275
|
+
public async addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void> {
|
|
276
|
+
const address = AztecAddress.fromPlainObject(rawAddress);
|
|
277
|
+
const instance = contractInstanceWithAddressFromPlainObject(address, rawInstance);
|
|
278
|
+
// Protocol canonical addresses (1-11) should not have nullifiers inserted
|
|
279
|
+
const isProtocolCanonicalAddress = address.toBigInt() <= MAX_PROTOCOL_CONTRACTS && address.toBigInt() >= 1n;
|
|
280
|
+
await this.addContractInstance(instance, /* skipNullifierInsertion */ isProtocolCanonicalAddress);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Apply public data tree writes from C++ raw msgpack data.
|
|
285
|
+
* This is used to pre-populate the public data tree before simulation (e.g., for bytecode upgrades).
|
|
286
|
+
*/
|
|
287
|
+
public async applyPublicDataWrites(rawWrites: any[]): Promise<void> {
|
|
288
|
+
for (const rawWrite of rawWrites) {
|
|
289
|
+
const leaf = PublicDataTreeLeaf.fromPlainObject(rawWrite);
|
|
290
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [leaf.toBuffer()]);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Apply note hashes from C++ raw msgpack data.
|
|
296
|
+
* This is used to pre-populate the note hash tree before simulation.
|
|
297
|
+
*/
|
|
298
|
+
public async applyNoteHashes(rawNoteHashes: any[]): Promise<void> {
|
|
299
|
+
const paddingLeaves = MAX_NOTE_HASHES_PER_TX - (rawNoteHashes.length % MAX_NOTE_HASHES_PER_TX);
|
|
300
|
+
const paddedNoteHashes = [...rawNoteHashes, ...Array(paddingLeaves).fill(Fr.ZERO)];
|
|
301
|
+
await this.merkleTrees.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, paddedNoteHashes);
|
|
302
|
+
}
|
|
303
|
+
}
|