@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.03f7ef2
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 -0
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +6 -15
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +1 -2
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +12 -6
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +10 -16
- package/dest/private/acvm/acvm_types.d.ts +2 -2
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +19 -20
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +32 -24
- package/dest/private/acvm/index.d.ts +1 -2
- package/dest/private/acvm/index.d.ts.map +1 -1
- package/dest/private/acvm/index.js +0 -1
- package/dest/private/acvm/serialize.d.ts +21 -4
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +54 -1
- package/dest/private/acvm_native.d.ts +39 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
- package/dest/private/acvm_wasm.d.ts +15 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
- package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/private/acvm_wasm_with_blobs.js +35 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +209 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
- package/dest/private/circuit_simulator.d.ts +35 -0
- package/dest/private/circuit_simulator.d.ts.map +1 -0
- package/dest/private/circuit_simulator.js +43 -0
- package/dest/private/factory.d.ts +12 -0
- package/dest/private/factory.d.ts.map +1 -0
- package/dest/private/{providers/factory.js → factory.js} +2 -2
- package/dest/public/avm/avm_context.d.ts +7 -7
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +6 -4
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +11 -7
- package/dest/public/avm/avm_execution_environment.d.ts +5 -3
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +5 -3
- package/dest/public/avm/avm_gas.d.ts +5 -21
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +27 -35
- package/dest/public/avm/avm_machine_state.d.ts +4 -2
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +2 -0
- package/dest/public/avm/avm_memory_types.d.ts +100 -89
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +18 -7
- package/dest/public/avm/avm_simulator.d.ts +7 -7
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +28 -39
- package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
- package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator_interface.js +3 -0
- package/dest/public/avm/errors.d.ts +11 -29
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +19 -57
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +23 -16
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
- package/dest/public/avm/fixtures/initializers.d.ts +42 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +44 -0
- package/dest/public/avm/fixtures/utils.d.ts +39 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +96 -0
- package/dest/public/avm/index.d.ts +1 -3
- package/dest/public/avm/index.d.ts.map +1 -1
- package/dest/public/avm/index.js +0 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +28 -25
- package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +46 -26
- package/dest/public/avm/opcodes/arithmetic.d.ts +19 -7
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +27 -3
- package/dest/public/avm/opcodes/bitwise.d.ts +10 -18
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +19 -26
- 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 +3 -3
- package/dest/public/avm/opcodes/contract.d.ts +2 -3
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +9 -10
- package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +10 -8
- package/dest/public/avm/opcodes/conversion.d.ts +2 -1
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +267 -3
- package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +8 -8
- package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +17 -19
- package/dest/public/avm/opcodes/external_calls.d.ts +9 -8
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +39 -34
- package/dest/public/avm/opcodes/hashing.d.ts +2 -2
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +15 -10
- package/dest/public/avm/opcodes/index.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction.d.ts +15 -11
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +23 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.d.ts +6 -6
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +37 -33
- package/dest/public/avm/opcodes/misc.d.ts +3 -2
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +41 -16
- package/dest/public/avm/opcodes/storage.d.ts +3 -3
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +7 -5
- package/dest/public/avm/revert_reason.d.ts +18 -0
- package/dest/public/avm/revert_reason.d.ts.map +1 -0
- package/dest/public/avm/revert_reason.js +39 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +79 -75
- package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +70 -35
- package/dest/public/avm/test_utils.d.ts +12 -15
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +17 -25
- package/dest/public/contracts_db_checkpoint.d.ts +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +68 -0
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +3 -0
- package/dest/public/debug_fn_name.d.ts +18 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +35 -0
- package/dest/public/executor_metrics.d.ts +12 -4
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +37 -6
- package/dest/public/executor_metrics_interface.d.ts +10 -0
- package/dest/public/executor_metrics_interface.d.ts.map +1 -0
- package/dest/public/executor_metrics_interface.js +1 -0
- package/dest/public/fixtures/amm_test.d.ts +10 -0
- package/dest/public/fixtures/amm_test.d.ts.map +1 -0
- package/dest/public/fixtures/amm_test.js +213 -0
- package/dest/public/fixtures/bulk_test.d.ts +6 -0
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
- package/dest/public/fixtures/bulk_test.js +278 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
- package/dest/public/fixtures/index.d.ts +10 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +19 -0
- package/dest/public/fixtures/opcode_spammer.d.ts +123 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1681 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
- package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
- package/dest/public/fixtures/token_test.d.ts +12 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +96 -0
- package/dest/public/fixtures/utils.d.ts +18 -5
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +102 -59
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +46 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +139 -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 +100 -0
- package/dest/public/hinting_db_sources.d.ts +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +353 -0
- package/dest/public/index.d.ts +6 -9
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +52 -102
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +220 -193
- package/dest/public/public_errors.d.ts +12 -0
- package/dest/public/public_errors.d.ts.map +1 -0
- package/dest/public/public_errors.js +13 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +111 -0
- package/dest/public/public_processor/public_processor.d.ts +26 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +177 -121
- package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +1 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +131 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +22 -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 +13 -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 +8 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +5 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +24 -31
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +72 -92
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +36 -58
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +213 -205
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
- package/dest/public/side_effect_errors.d.ts +42 -2
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/side_effect_errors.js +70 -1
- package/dest/public/side_effect_trace.d.ts +22 -68
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +72 -122
- package/dest/public/side_effect_trace_interface.d.ts +13 -25
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/index.d.ts +2 -0
- package/dest/public/state_manager/index.d.ts.map +1 -0
- package/dest/public/state_manager/index.js +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
- package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +164 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +395 -0
- package/dest/public/test_executor_metrics.d.ts +55 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +307 -0
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +3 -5
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +7 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +39 -33
- package/src/client.ts +5 -3
- package/src/common/errors.ts +80 -45
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +17 -32
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +36 -30
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +64 -1
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
- package/src/private/acvm_wasm.ts +72 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +260 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
- package/src/private/circuit_simulator.ts +90 -0
- package/src/private/{providers/factory.ts → factory.ts} +6 -6
- package/src/public/avm/avm_context.ts +5 -5
- package/src/public/avm/avm_contract_call_result.ts +18 -6
- package/src/public/avm/avm_execution_environment.ts +9 -2
- package/src/public/avm/avm_gas.ts +26 -38
- package/src/public/avm/avm_machine_state.ts +6 -1
- package/src/public/avm/avm_memory_types.ts +20 -7
- package/src/public/avm/avm_simulator.ts +50 -58
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/avm_simulation_tester.ts +33 -22
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
- package/src/public/avm/fixtures/initializers.ts +102 -0
- package/src/public/avm/fixtures/utils.ts +151 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +64 -29
- package/src/public/avm/opcodes/addressing_mode.ts +56 -32
- package/src/public/avm/opcodes/arithmetic.ts +37 -3
- package/src/public/avm/opcodes/bitwise.ts +33 -29
- package/src/public/avm/opcodes/comparators.ts +6 -3
- package/src/public/avm/opcodes/contract.ts +10 -7
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +27 -3
- package/src/public/avm/opcodes/ec_add.ts +11 -8
- package/src/public/avm/opcodes/environment_getters.ts +27 -22
- package/src/public/avm/opcodes/external_calls.ts +61 -29
- package/src/public/avm/opcodes/hashing.ts +38 -12
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/memory.ts +71 -32
- package/src/public/avm/opcodes/misc.ts +60 -18
- package/src/public/avm/opcodes/storage.ts +22 -6
- package/src/public/avm/revert_reason.ts +58 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +89 -80
- package/src/public/avm/serialization/instruction_serialization.ts +75 -34
- package/src/public/avm/test_utils.ts +25 -42
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +76 -0
- package/src/public/debug_fn_name.ts +50 -0
- package/src/public/executor_metrics.ts +56 -6
- package/src/public/executor_metrics_interface.ts +15 -0
- package/src/public/fixtures/amm_test.ts +331 -0
- package/src/public/fixtures/bulk_test.ts +169 -0
- package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +219 -0
- package/src/public/fixtures/index.ts +13 -0
- package/src/public/fixtures/minimal_public_tx.ts +26 -0
- package/src/public/fixtures/opcode_spammer.ts +1638 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +223 -114
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
- package/src/public/fixtures/token_test.ts +148 -0
- package/src/public/fixtures/utils.ts +141 -69
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +240 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +140 -0
- package/src/public/hinting_db_sources.ts +607 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +279 -259
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
- package/src/public/public_processor/public_processor.ts +242 -178
- package/src/public/public_processor/public_processor_metrics.ts +2 -2
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +121 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +200 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +237 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
- package/src/public/public_tx_simulator/factories.ts +41 -0
- package/src/public/public_tx_simulator/index.ts +7 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +168 -195
- package/src/public/public_tx_simulator/public_tx_simulator.ts +302 -260
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
- package/src/public/side_effect_errors.ts +91 -1
- package/src/public/side_effect_trace.ts +95 -321
- package/src/public/side_effect_trace_interface.ts +11 -59
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
- package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
- package/src/public/state_manager/state_manager.ts +560 -0
- package/src/public/test_executor_metrics.ts +397 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts +0 -40
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
- package/dest/private/providers/factory.d.ts +0 -12
- package/dest/private/providers/factory.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.d.ts +0 -19
- package/dest/private/providers/simulation_provider.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.js +0 -24
- package/dest/private/simulator.d.ts +0 -34
- package/dest/private/simulator.d.ts.map +0 -1
- package/dest/private/simulator.js +0 -76
- package/dest/private/unconstrained_execution.d.ts +0 -10
- package/dest/private/unconstrained_execution.d.ts.map +0 -1
- package/dest/private/unconstrained_execution.js +0 -27
- package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
- package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
- package/dest/private/unconstrained_execution_oracle.js +0 -258
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/dest/public/avm/fixtures/index.d.ts +0 -84
- package/dest/public/avm/fixtures/index.d.ts.map +0 -1
- package/dest/public/avm/fixtures/index.js +0 -175
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/public/avm/journal/index.d.ts +0 -2
- package/dest/public/avm/journal/index.d.ts.map +0 -1
- package/dest/public/avm/journal/index.js +0 -1
- package/dest/public/avm/journal/journal.d.ts +0 -209
- package/dest/public/avm/journal/journal.d.ts.map +0 -1
- package/dest/public/avm/journal/journal.js +0 -486
- package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/bytecode_errors.js +0 -6
- package/dest/public/execution.d.ts +0 -108
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/execution.js +0 -9
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/dest/test/utils.d.ts +0 -13
- package/dest/test/utils.d.ts.map +0 -1
- package/dest/test/utils.js +0 -22
- package/src/common/db_interfaces.ts +0 -94
- package/src/common/debug_fn_name.ts +0 -18
- package/src/common/message_load_oracle_inputs.ts +0 -15
- package/src/private/acvm/oracle/index.ts +0 -16
- package/src/private/acvm/oracle/oracle.ts +0 -455
- package/src/private/acvm/oracle/typed_oracle.ts +0 -259
- package/src/private/execution_data_provider.ts +0 -323
- package/src/private/execution_note_cache.ts +0 -217
- package/src/private/hashed_values_cache.ts +0 -55
- package/src/private/index.ts +0 -16
- package/src/private/pick_notes.ts +0 -141
- package/src/private/private_execution.ts +0 -151
- package/src/private/private_execution_oracle.ts +0 -614
- package/src/private/providers/acvm_wasm.ts +0 -63
- package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
- package/src/private/providers/simulation_provider.ts +0 -45
- package/src/private/simulator.ts +0 -147
- package/src/private/unconstrained_execution.ts +0 -50
- package/src/private/unconstrained_execution_oracle.ts +0 -373
- package/src/public/avm/bytecode_utils.ts +0 -17
- package/src/public/avm/fixtures/index.ts +0 -296
- package/src/public/avm/journal/index.ts +0 -1
- package/src/public/avm/journal/journal.ts +0 -742
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
- package/src/public/bytecode_errors.ts +0 -6
- package/src/public/execution.ts +0 -140
- package/src/public/tx_contract_cache.ts +0 -69
- package/src/test/utils.ts +0 -36
|
@@ -1,53 +1,107 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT } from '@aztec/constants';
|
|
2
|
+
import { asyncMap } from '@aztec/foundation/async-map';
|
|
3
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
|
+
import { type ContractArtifact, encodeArguments } from '@aztec/stdlib/abi';
|
|
6
|
+
import { PublicSimulatorConfig, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
4
7
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import { GasFees } from '@aztec/stdlib/gas';
|
|
8
|
+
import { Gas, GasFees } from '@aztec/stdlib/gas';
|
|
6
9
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
10
|
+
import { PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
11
|
+
import { GlobalVariables, PublicCallRequestWithCalldata, type Tx } from '@aztec/stdlib/tx';
|
|
9
12
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
10
13
|
|
|
11
14
|
import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
import {
|
|
16
|
+
DEFAULT_BLOCK_NUMBER,
|
|
17
|
+
DEFAULT_TIMESTAMP,
|
|
18
|
+
getContractFunctionAbi,
|
|
19
|
+
getFunctionSelector,
|
|
20
|
+
} from '../avm/fixtures/utils.js';
|
|
21
|
+
import { PublicContractsDB } from '../public_db_sources.js';
|
|
22
|
+
import { MeasuredCppPublicTxSimulator } from '../public_tx_simulator/cpp_public_tx_simulator.js';
|
|
23
|
+
import { MeasuredCppVsTsPublicTxSimulator } from '../public_tx_simulator/cpp_vs_ts_public_tx_simulator.js';
|
|
24
|
+
import type { MeasuredPublicTxSimulatorInterface } from '../public_tx_simulator/public_tx_simulator_interface.js';
|
|
25
|
+
import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
26
|
+
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
27
|
+
import { type TestPrivateInsertions, createTxForPublicCalls } from './utils.js';
|
|
17
28
|
|
|
18
|
-
const TIMESTAMP = new Fr(99833);
|
|
19
29
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
20
|
-
export const DEFAULT_BLOCK_NUMBER = 42;
|
|
21
30
|
|
|
22
31
|
export type TestEnqueuedCall = {
|
|
32
|
+
sender?: AztecAddress;
|
|
23
33
|
address: AztecAddress;
|
|
24
|
-
fnName
|
|
34
|
+
fnName?: string;
|
|
25
35
|
args: any[];
|
|
26
36
|
isStaticCall?: boolean;
|
|
27
37
|
contractArtifact?: ContractArtifact;
|
|
28
38
|
};
|
|
29
39
|
|
|
40
|
+
const defaultConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
|
|
41
|
+
skipFeeEnforcement: false,
|
|
42
|
+
collectCallMetadata: true,
|
|
43
|
+
collectDebugLogs: true,
|
|
44
|
+
collectHints: false,
|
|
45
|
+
collectPublicInputs: false,
|
|
46
|
+
collectStatistics: false,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Factory type for creating a MeasuredPublicTxSimulatorInterface.
|
|
51
|
+
*/
|
|
52
|
+
export type MeasuredSimulatorFactory = (
|
|
53
|
+
merkleTree: MerkleTreeWriteOperations,
|
|
54
|
+
contractsDB: PublicContractsDB,
|
|
55
|
+
globals: GlobalVariables,
|
|
56
|
+
metrics: TestExecutorMetrics,
|
|
57
|
+
config: PublicSimulatorConfig,
|
|
58
|
+
) => MeasuredPublicTxSimulatorInterface;
|
|
59
|
+
|
|
30
60
|
/**
|
|
31
61
|
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the PublicTxSimulator.
|
|
32
62
|
* It provides an interface for simulating one transaction at a time and maintains state between subsequent
|
|
33
63
|
* transactions.
|
|
34
64
|
*/
|
|
35
65
|
export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
36
|
-
|
|
66
|
+
protected txCount: number = 0;
|
|
67
|
+
private simulator: MeasuredPublicTxSimulatorInterface;
|
|
68
|
+
private metricsPrefix?: string;
|
|
37
69
|
|
|
38
70
|
constructor(
|
|
39
|
-
|
|
71
|
+
merkleTree: MerkleTreeWriteOperations,
|
|
40
72
|
contractDataSource: SimpleContractDataSource,
|
|
41
|
-
|
|
73
|
+
globals: GlobalVariables = defaultGlobals(),
|
|
74
|
+
private metrics: TestExecutorMetrics = new TestExecutorMetrics(),
|
|
75
|
+
simulatorFactory?: MeasuredSimulatorFactory,
|
|
76
|
+
config: PublicSimulatorConfig = defaultConfig,
|
|
42
77
|
) {
|
|
43
|
-
super(contractDataSource,
|
|
78
|
+
super(contractDataSource, merkleTree);
|
|
79
|
+
|
|
80
|
+
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
81
|
+
if (simulatorFactory) {
|
|
82
|
+
this.simulator = simulatorFactory(merkleTree, contractsDB, globals, this.metrics, config);
|
|
83
|
+
} else {
|
|
84
|
+
this.simulator = new MeasuredCppPublicTxSimulator(merkleTree, contractsDB, globals, this.metrics, config);
|
|
85
|
+
}
|
|
44
86
|
}
|
|
45
87
|
|
|
46
|
-
public static async create(
|
|
88
|
+
public static async create(
|
|
89
|
+
worldStateService: NativeWorldStateService, // make sure to close this later
|
|
90
|
+
globals: GlobalVariables = defaultGlobals(),
|
|
91
|
+
metrics: TestExecutorMetrics = new TestExecutorMetrics(),
|
|
92
|
+
useCppSimulator = false,
|
|
93
|
+
config: PublicSimulatorConfig = defaultConfig,
|
|
94
|
+
): Promise<PublicTxSimulationTester> {
|
|
47
95
|
const contractDataSource = new SimpleContractDataSource();
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
|
|
96
|
+
const merkleTree = await worldStateService.fork();
|
|
97
|
+
const simulatorFactory: MeasuredSimulatorFactory = useCppSimulator
|
|
98
|
+
? (mt, cdb, g, m, c) => new MeasuredCppPublicTxSimulator(mt, cdb, g, m, c)
|
|
99
|
+
: (mt, cdb, g, m, c) => new MeasuredCppVsTsPublicTxSimulator(mt, cdb, g, m, c);
|
|
100
|
+
return new PublicTxSimulationTester(merkleTree, contractDataSource, globals, metrics, simulatorFactory, config);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public setMetricsPrefix(prefix: string) {
|
|
104
|
+
this.metricsPrefix = prefix;
|
|
51
105
|
}
|
|
52
106
|
|
|
53
107
|
public async createTx(
|
|
@@ -57,69 +111,29 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
57
111
|
teardownCall?: TestEnqueuedCall,
|
|
58
112
|
feePayer: AztecAddress = sender,
|
|
59
113
|
/* need some unique first nullifier for note-nonce computations */
|
|
60
|
-
|
|
114
|
+
privateInsertions: TestPrivateInsertions = { nonRevertible: { nullifiers: [new Fr(420000 + this.txCount)] } },
|
|
61
115
|
): Promise<Tx> {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
contractArtifact,
|
|
72
|
-
sender,
|
|
73
|
-
address,
|
|
74
|
-
setupCalls[i].fnName,
|
|
75
|
-
setupCalls[i].args,
|
|
76
|
-
setupCalls[i].isStaticCall,
|
|
77
|
-
);
|
|
78
|
-
setupExecutionRequests.push(req);
|
|
79
|
-
}
|
|
80
|
-
const appExecutionRequests: PublicExecutionRequest[] = [];
|
|
81
|
-
for (let i = 0; i < appCalls.length; i++) {
|
|
82
|
-
const address = appCalls[i].address;
|
|
83
|
-
const contractArtifact =
|
|
84
|
-
appCalls[i].contractArtifact || (await this.contractDataSource.getContractArtifact(address));
|
|
85
|
-
if (!contractArtifact) {
|
|
86
|
-
throw new Error(`Contract artifact not found for address: ${address}`);
|
|
87
|
-
}
|
|
88
|
-
const req = await executionRequestForCall(
|
|
89
|
-
contractArtifact,
|
|
90
|
-
sender,
|
|
91
|
-
address,
|
|
92
|
-
appCalls[i].fnName,
|
|
93
|
-
appCalls[i].args,
|
|
94
|
-
appCalls[i].isStaticCall,
|
|
95
|
-
);
|
|
96
|
-
appExecutionRequests.push(req);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
let teardownExecutionRequest: PublicExecutionRequest | undefined = undefined;
|
|
100
|
-
if (teardownCall) {
|
|
101
|
-
const address = teardownCall.address;
|
|
102
|
-
const contractArtifact =
|
|
103
|
-
teardownCall.contractArtifact || (await this.contractDataSource.getContractArtifact(address));
|
|
104
|
-
if (!contractArtifact) {
|
|
105
|
-
throw new Error(`Contract artifact not found for address: ${address}`);
|
|
106
|
-
}
|
|
107
|
-
teardownExecutionRequest = await executionRequestForCall(
|
|
108
|
-
contractArtifact,
|
|
109
|
-
sender,
|
|
110
|
-
address,
|
|
111
|
-
teardownCall.fnName,
|
|
112
|
-
teardownCall.args,
|
|
113
|
-
teardownCall.isStaticCall,
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
+
const setupCallRequests = await asyncMap(setupCalls, call =>
|
|
117
|
+
this.#createPubicCallRequestForCall(call, call.sender ?? sender),
|
|
118
|
+
);
|
|
119
|
+
const appCallRequests = await asyncMap(appCalls, call =>
|
|
120
|
+
this.#createPubicCallRequestForCall(call, call.sender ?? sender),
|
|
121
|
+
);
|
|
122
|
+
const teardownCallRequest = teardownCall
|
|
123
|
+
? await this.#createPubicCallRequestForCall(teardownCall, teardownCall.sender ?? sender)
|
|
124
|
+
: undefined;
|
|
116
125
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
126
|
+
this.txCount++;
|
|
127
|
+
return createTxForPublicCalls(
|
|
128
|
+
privateInsertions,
|
|
129
|
+
setupCallRequests,
|
|
130
|
+
appCallRequests,
|
|
131
|
+
teardownCallRequest,
|
|
122
132
|
feePayer,
|
|
133
|
+
/*gasUsedByPrivate*/ teardownCall
|
|
134
|
+
? new Gas(DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT)
|
|
135
|
+
: Gas.empty(),
|
|
136
|
+
defaultGlobals(),
|
|
123
137
|
);
|
|
124
138
|
}
|
|
125
139
|
|
|
@@ -130,50 +144,145 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
130
144
|
teardownCall?: TestEnqueuedCall,
|
|
131
145
|
feePayer: AztecAddress = sender,
|
|
132
146
|
/* need some unique first nullifier for note-nonce computations */
|
|
133
|
-
|
|
134
|
-
|
|
147
|
+
privateInsertions?: TestPrivateInsertions,
|
|
148
|
+
txLabel: string = 'unlabeledTx',
|
|
135
149
|
): Promise<PublicTxResult> {
|
|
136
|
-
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer,
|
|
150
|
+
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
|
|
137
151
|
|
|
138
152
|
await this.setFeePayerBalance(feePayer);
|
|
139
153
|
|
|
140
|
-
const
|
|
154
|
+
const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
|
|
155
|
+
const fullTxLabel = this.metricsPrefix ? `${this.metricsPrefix}/${txLabelWithCount}` : txLabelWithCount;
|
|
141
156
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
157
|
+
if (!this.simulator) {
|
|
158
|
+
throw new Error(
|
|
159
|
+
'No simulator configured. Pass a simulatorFactory to the constructor or use PublicTxSimulationTester.create()',
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
const avmResult = await this.simulator.simulate(tx, fullTxLabel);
|
|
163
|
+
|
|
164
|
+
// Something like this is often useful for debugging:
|
|
165
|
+
//if (avmResult.revertReason) {
|
|
166
|
+
// // resolve / enrich revert reason
|
|
167
|
+
// const lastAppCall = appCalls[appCalls.length - 1];
|
|
168
|
+
|
|
169
|
+
// const contractArtifact =
|
|
170
|
+
// lastAppCall.contractArtifact || (await this.contractDataSource.getContractArtifact(lastAppCall.address));
|
|
171
|
+
// const fnAbi = getContractFunctionAbi(lastAppCall.fnName, contractArtifact!);
|
|
172
|
+
// const revertReason = resolveAssertionMessageFromRevertData(avmResult.revertReason.revertData, fnAbi!);
|
|
173
|
+
// this.logger.debug(`Revert reason: ${revertReason}`);
|
|
174
|
+
//}
|
|
146
175
|
|
|
147
176
|
return avmResult;
|
|
148
177
|
}
|
|
149
|
-
}
|
|
150
178
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
179
|
+
/**
|
|
180
|
+
* Just simulate the transaction and return the result.
|
|
181
|
+
*
|
|
182
|
+
* This wrapper around simulation allows for easy labeling of a TX
|
|
183
|
+
* which is especially useful when reporting benchmarks or metrics.
|
|
184
|
+
*/
|
|
185
|
+
public async simulateTxWithLabel(
|
|
186
|
+
txLabel: string,
|
|
187
|
+
sender: AztecAddress,
|
|
188
|
+
setupCalls?: TestEnqueuedCall[],
|
|
189
|
+
appCalls?: TestEnqueuedCall[],
|
|
190
|
+
teardownCall?: TestEnqueuedCall,
|
|
191
|
+
feePayer?: AztecAddress,
|
|
192
|
+
privateInsertions?: TestPrivateInsertions,
|
|
193
|
+
): Promise<PublicTxResult> {
|
|
194
|
+
return await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, txLabel);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Execute a transaction and return the result.
|
|
199
|
+
*
|
|
200
|
+
* This function can be (it is) overridden by a subclass (AvmProvingTester)
|
|
201
|
+
* to do more work (like prove and verify) while still reusing existing
|
|
202
|
+
* test fixtures (like amm_test). That is why it is not named "simulate*".
|
|
203
|
+
*/
|
|
204
|
+
public async executeTxWithLabel(
|
|
205
|
+
txLabel: string,
|
|
206
|
+
sender: AztecAddress,
|
|
207
|
+
setupCalls?: TestEnqueuedCall[],
|
|
208
|
+
appCalls?: TestEnqueuedCall[],
|
|
209
|
+
teardownCall?: TestEnqueuedCall,
|
|
210
|
+
feePayer?: AztecAddress,
|
|
211
|
+
privateInsertions?: TestPrivateInsertions,
|
|
212
|
+
): Promise<PublicTxResult> {
|
|
213
|
+
return await this.simulateTxWithLabel(
|
|
214
|
+
txLabel,
|
|
215
|
+
sender,
|
|
216
|
+
setupCalls,
|
|
217
|
+
appCalls,
|
|
218
|
+
teardownCall,
|
|
219
|
+
feePayer,
|
|
220
|
+
privateInsertions,
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
public prettyPrintMetrics() {
|
|
225
|
+
this.metrics.prettyPrint();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Cancel the current simulation if one is in progress.
|
|
230
|
+
* This signals the underlying simulator (e.g., C++) to stop at the next safe point.
|
|
231
|
+
* Safe to call even if no simulation is in progress.
|
|
232
|
+
*
|
|
233
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
234
|
+
*/
|
|
235
|
+
public async cancel(waitTimeoutMs?: number): Promise<void> {
|
|
236
|
+
await this.simulator.cancel?.(waitTimeoutMs);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Get the underlying simulator for advanced test scenarios.
|
|
241
|
+
* Use this when you need direct control over simulation (e.g., for testing cancellation).
|
|
242
|
+
*/
|
|
243
|
+
public getSimulator(): MeasuredPublicTxSimulatorInterface {
|
|
244
|
+
return this.simulator;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
async #createPubicCallRequestForCall(
|
|
248
|
+
call: TestEnqueuedCall,
|
|
249
|
+
sender: AztecAddress,
|
|
250
|
+
): Promise<PublicCallRequestWithCalldata> {
|
|
251
|
+
const address = call.address;
|
|
252
|
+
const contractArtifact = call.contractArtifact || (await this.contractDataSource.getContractArtifact(address));
|
|
253
|
+
if (!contractArtifact) {
|
|
254
|
+
throw new Error(`Contract artifact not found for address: ${address}`);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
let calldata: Fr[] = [];
|
|
258
|
+
if (!call.fnName) {
|
|
259
|
+
this.logger.debug(
|
|
260
|
+
`No function name specified for call to contract ${call.address.toString()}. Assuming this is a custom bytecode with no public_dispatch function.`,
|
|
261
|
+
);
|
|
262
|
+
this.logger.debug(`Not using ABI to encode arguments. Not prepending fn selector to calldata.`);
|
|
263
|
+
try {
|
|
264
|
+
calldata = call.args.map(arg => new Fr(arg));
|
|
265
|
+
} catch (error) {
|
|
266
|
+
this.logger.warn(`Tried assuming that all arguments are Field-like. Failed. Error: ${error}`);
|
|
267
|
+
throw error;
|
|
268
|
+
}
|
|
269
|
+
} else {
|
|
270
|
+
const fnSelector = await getFunctionSelector(call.fnName, contractArtifact);
|
|
271
|
+
const fnAbi = getContractFunctionAbi(call.fnName, contractArtifact)!;
|
|
272
|
+
const encodedArgs = encodeArguments(fnAbi, call.args);
|
|
273
|
+
calldata = [fnSelector.toField(), ...encodedArgs];
|
|
274
|
+
}
|
|
275
|
+
const isStaticCall = call.isStaticCall ?? false;
|
|
276
|
+
const request = await PublicCallRequest.fromCalldata(sender, address, isStaticCall, calldata);
|
|
277
|
+
|
|
278
|
+
return new PublicCallRequestWithCalldata(request, calldata);
|
|
279
|
+
}
|
|
171
280
|
}
|
|
172
281
|
|
|
173
|
-
function defaultGlobals() {
|
|
282
|
+
export function defaultGlobals() {
|
|
174
283
|
const globals = GlobalVariables.empty();
|
|
175
|
-
globals.timestamp =
|
|
284
|
+
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
176
285
|
globals.gasFees = DEFAULT_GAS_FEES; // apply some nonzero default gas fees
|
|
177
|
-
globals.blockNumber =
|
|
286
|
+
globals.blockNumber = BlockNumber(DEFAULT_BLOCK_NUMBER);
|
|
178
287
|
return globals;
|
|
179
288
|
}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import {
|
|
4
|
+
import type { ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
|
|
4
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import type {
|
|
6
|
-
ContractClassPublic,
|
|
7
|
-
ContractDataSource,
|
|
8
|
-
ContractInstanceWithAddress,
|
|
9
|
-
PublicFunction,
|
|
10
|
-
} from '@aztec/stdlib/contract';
|
|
6
|
+
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
11
7
|
|
|
12
|
-
import {
|
|
8
|
+
import { getFunctionSelector } from '../avm/fixtures/utils.js';
|
|
13
9
|
|
|
14
10
|
/**
|
|
15
11
|
* This class is used during public/avm testing to function as a database of
|
|
@@ -27,6 +23,8 @@ export class SimpleContractDataSource implements ContractDataSource {
|
|
|
27
23
|
private contractInstances: Map<string, ContractInstanceWithAddress> = new Map();
|
|
28
24
|
// maps contract instance address to address
|
|
29
25
|
private contractArtifacts: Map<string, ContractArtifact> = new Map();
|
|
26
|
+
// maps `${classID}:${fnSelector}` to name
|
|
27
|
+
private debugFunctionName: Map<string, string> = new Map();
|
|
30
28
|
|
|
31
29
|
/////////////////////////////////////////////////////////////
|
|
32
30
|
// Helper functions not in the contract data source interface
|
|
@@ -39,22 +37,30 @@ export class SimpleContractDataSource implements ContractDataSource {
|
|
|
39
37
|
contractClass: ContractClassPublic,
|
|
40
38
|
contractInstance: ContractInstanceWithAddress,
|
|
41
39
|
) {
|
|
42
|
-
this.addContractArtifact(contractClass.id, contractArtifact);
|
|
40
|
+
await this.addContractArtifact(contractClass.id, contractArtifact);
|
|
43
41
|
await this.addContractClass(contractClass);
|
|
44
42
|
await this.addContractInstance(contractInstance);
|
|
45
43
|
}
|
|
46
44
|
|
|
47
|
-
addContractArtifact(classId: Fr, artifact: ContractArtifact)
|
|
45
|
+
async addContractArtifact(classId: Fr, artifact: ContractArtifact) {
|
|
48
46
|
this.contractArtifacts.set(classId.toString(), artifact);
|
|
47
|
+
const classIdStr = classId.toString();
|
|
48
|
+
const publicFns = artifact.nonDispatchPublicFunctions;
|
|
49
|
+
if (publicFns.length !== 0) {
|
|
50
|
+
for (const fn of publicFns) {
|
|
51
|
+
const actualFnName = `${fn.name}`;
|
|
52
|
+
const fnSelector = await getFunctionSelector(actualFnName, artifact);
|
|
53
|
+
const key = `${classIdStr}:${fnSelector.toString()}`;
|
|
54
|
+
|
|
55
|
+
const longFnName = `${artifact.name}.${actualFnName}`;
|
|
56
|
+
this.debugFunctionName.set(key, longFnName);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
49
59
|
}
|
|
50
60
|
|
|
51
61
|
/////////////////////////////////////////////////////////////
|
|
52
62
|
// ContractDataSource function implementations
|
|
53
|
-
|
|
54
|
-
throw new Error('Method not implemented.');
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
getBlockNumber(): Promise<number> {
|
|
63
|
+
getBlockNumber(): Promise<BlockNumber> {
|
|
58
64
|
throw new Error('Method not implemented.');
|
|
59
65
|
}
|
|
60
66
|
|
|
@@ -82,14 +88,25 @@ export class SimpleContractDataSource implements ContractDataSource {
|
|
|
82
88
|
}
|
|
83
89
|
this.logger.debug(`Retrieved contract artifact for address: ${address}`);
|
|
84
90
|
this.logger.debug(`Contract class ID: ${contractInstance.currentContractClassId}`);
|
|
85
|
-
return
|
|
91
|
+
return this.contractArtifacts.get(contractInstance!.currentContractClassId.toString());
|
|
86
92
|
}
|
|
87
93
|
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
|
|
95
|
+
const contractInstance = await this.getContract(address);
|
|
96
|
+
if (!contractInstance) {
|
|
97
|
+
this.logger.warn(`Couldn't get fn name for debugging. Contract not in tester's ContractDataSource.`);
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
const key = `${contractInstance.currentContractClassId.toString()}:${selector.toString()}`;
|
|
101
|
+
const fnName = this.debugFunctionName.get(key);
|
|
102
|
+
if (!fnName) {
|
|
103
|
+
this.logger.warn(`Couldn't get fn name for debugging...`);
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
return fnName;
|
|
90
107
|
}
|
|
91
108
|
|
|
92
|
-
registerContractFunctionSignatures(
|
|
109
|
+
registerContractFunctionSignatures(_signatures: string[]): Promise<void> {
|
|
93
110
|
return Promise.resolve();
|
|
94
111
|
}
|
|
95
112
|
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
3
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
+
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
5
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
+
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
7
|
+
|
|
8
|
+
import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
|
|
9
|
+
|
|
10
|
+
export type TokenTestOptions = {
|
|
11
|
+
/** Skip return value assertions in balance checks (useful for benchmarking with collectCallMetadata=false) */
|
|
12
|
+
skipReturnValueAssertions?: boolean;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export async function tokenTest(
|
|
16
|
+
tester: PublicTxSimulationTester,
|
|
17
|
+
logger: Logger,
|
|
18
|
+
tokenArtifact: ContractArtifact,
|
|
19
|
+
expectToBeTrue: (x: boolean) => void,
|
|
20
|
+
options: TokenTestOptions = {},
|
|
21
|
+
) {
|
|
22
|
+
const timer = new Timer();
|
|
23
|
+
|
|
24
|
+
const admin = AztecAddress.fromNumber(42);
|
|
25
|
+
const sender = AztecAddress.fromNumber(111);
|
|
26
|
+
const receiver = AztecAddress.fromNumber(222);
|
|
27
|
+
|
|
28
|
+
const token = await setUpToken(tester, tokenArtifact, admin, expectToBeTrue);
|
|
29
|
+
|
|
30
|
+
const mintAmount = 100n;
|
|
31
|
+
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|
|
32
|
+
const mintResult = await tester.executeTxWithLabel(
|
|
33
|
+
/*txLabel=*/ 'Token/mint_to_public',
|
|
34
|
+
/*sender=*/ admin,
|
|
35
|
+
/*setupCalls=*/ [],
|
|
36
|
+
/*appCalls=*/ [
|
|
37
|
+
{
|
|
38
|
+
address: token.address,
|
|
39
|
+
fnName: 'mint_to_public',
|
|
40
|
+
args: [/*to=*/ sender, mintAmount],
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
);
|
|
44
|
+
expectToBeTrue(mintResult.revertCode.isOK());
|
|
45
|
+
await checkBalance(tester, token, sender, sender, mintAmount, expectToBeTrue, options);
|
|
46
|
+
|
|
47
|
+
const authwitNonce = new Fr(0);
|
|
48
|
+
const transferAmount = 50n;
|
|
49
|
+
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|
|
50
|
+
const transferResult = await tester.executeTxWithLabel(
|
|
51
|
+
/*txLabel=*/ 'Token/transfer_in_public',
|
|
52
|
+
/*sender=*/ sender,
|
|
53
|
+
/*setupCalls=*/ [],
|
|
54
|
+
/*appCalls=*/ [
|
|
55
|
+
{
|
|
56
|
+
address: token.address,
|
|
57
|
+
fnName: 'transfer_in_public',
|
|
58
|
+
args: [/*from=*/ sender, /*to=*/ receiver, transferAmount, authwitNonce],
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
);
|
|
62
|
+
expectToBeTrue(transferResult.revertCode.isOK());
|
|
63
|
+
await checkBalance(tester, token, sender, sender, mintAmount - transferAmount, expectToBeTrue, options);
|
|
64
|
+
await checkBalance(tester, token, sender, receiver, transferAmount, expectToBeTrue, options);
|
|
65
|
+
|
|
66
|
+
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|
|
67
|
+
const burnResult = await tester.executeTxWithLabel(
|
|
68
|
+
/*txLabel=*/ 'Token/burn_public',
|
|
69
|
+
/*sender=*/ receiver,
|
|
70
|
+
/*setupCalls=*/ [],
|
|
71
|
+
/*appCalls=*/ [
|
|
72
|
+
{
|
|
73
|
+
address: token.address,
|
|
74
|
+
fnName: 'burn_public',
|
|
75
|
+
args: [/*from=*/ receiver, transferAmount, authwitNonce],
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
);
|
|
79
|
+
expectToBeTrue(burnResult.revertCode.isOK());
|
|
80
|
+
await checkBalance(tester, token, sender, receiver, 0n, expectToBeTrue, options);
|
|
81
|
+
|
|
82
|
+
logger.info(`TokenContract test took ${timer.ms()}ms\n`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export async function setUpToken(
|
|
86
|
+
tester: PublicTxSimulationTester,
|
|
87
|
+
tokenArtifact: ContractArtifact,
|
|
88
|
+
admin: AztecAddress,
|
|
89
|
+
expectToBeTrue: (x: boolean) => void,
|
|
90
|
+
seed = 0,
|
|
91
|
+
) {
|
|
92
|
+
const constructorArgs = [admin, /*name=*/ 'Token', /*symbol=*/ 'TOK', /*decimals=*/ new Fr(18)];
|
|
93
|
+
const token = await tester.registerAndDeployContract(
|
|
94
|
+
constructorArgs,
|
|
95
|
+
/*deployer=*/ admin,
|
|
96
|
+
tokenArtifact,
|
|
97
|
+
/*skipNullifierInsertion=*/ false,
|
|
98
|
+
seed,
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|
|
102
|
+
const result = await tester.executeTxWithLabel(
|
|
103
|
+
/*txLabel=*/ 'Token/constructor',
|
|
104
|
+
/*sender=*/ admin,
|
|
105
|
+
/*setupCalls=*/ [],
|
|
106
|
+
/*appCalls=*/ [
|
|
107
|
+
{
|
|
108
|
+
fnName: 'constructor',
|
|
109
|
+
args: constructorArgs,
|
|
110
|
+
address: token.address,
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
);
|
|
114
|
+
expectToBeTrue(result.revertCode.isOK());
|
|
115
|
+
return token;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
async function checkBalance(
|
|
119
|
+
tester: PublicTxSimulationTester,
|
|
120
|
+
token: ContractInstanceWithAddress,
|
|
121
|
+
sender: AztecAddress,
|
|
122
|
+
account: AztecAddress,
|
|
123
|
+
expectedBalance: bigint,
|
|
124
|
+
expectToBeTrue: (x: boolean) => void,
|
|
125
|
+
options: TokenTestOptions = {},
|
|
126
|
+
) {
|
|
127
|
+
// Strictly simulate this! No need to "execute" (aka prove if using AvmProvingTester subclass).
|
|
128
|
+
const balResult = await tester.simulateTxWithLabel(
|
|
129
|
+
/*txLabel=*/ 'Token/balance_of_public',
|
|
130
|
+
sender,
|
|
131
|
+
/*setupCalls=*/ [],
|
|
132
|
+
/*appCalls=*/ [
|
|
133
|
+
{
|
|
134
|
+
address: token.address,
|
|
135
|
+
fnName: 'balance_of_public',
|
|
136
|
+
args: [/*owner=*/ account],
|
|
137
|
+
isStaticCall: true,
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
);
|
|
141
|
+
expectToBeTrue(balResult.revertCode.isOK());
|
|
142
|
+
if (!options.skipReturnValueAssertions) {
|
|
143
|
+
// should be 1 call with 1 return value that is expectedBalance
|
|
144
|
+
const appLogicReturnValues = balResult.getAppLogicReturnValues();
|
|
145
|
+
expectToBeTrue(appLogicReturnValues.length === 1);
|
|
146
|
+
expectToBeTrue(appLogicReturnValues[0].values?.[0]?.toBigInt() === expectedBalance);
|
|
147
|
+
}
|
|
148
|
+
}
|