@aztec/simulator 6.0.0-nightly.20260604 → 6.0.0-nightly.20260721
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/dest/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- package/dest/private/circuit_recording/circuit_recorder.d.ts +36 -23
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +65 -69
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +7 -19
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +38 -42
- 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/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/{fixtures → testing}/base_avm_simulation_tester.d.ts +1 -1
- 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 +1 -1
- 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 +1 -34
- 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/fixtures/amm_test.js +2 -2
- package/dest/public/fixtures/bulk_test.js +2 -2
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
- package/dest/public/fixtures/index.d.ts +2 -4
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +1 -3
- 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 +11 -7
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +33 -43
- package/dest/public/fixtures/simple_contract_data_source.js +1 -1
- package/dest/public/fixtures/token_test.js +3 -3
- package/dest/public/fixtures/utils.d.ts +1 -1
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +5 -3
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
- package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
- 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 +2 -2
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +4 -3
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
- package/dest/public/public_processor/public_processor.d.ts +8 -4
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +18 -14
- 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_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
- package/dest/public/public_tx_simulator/factories.d.ts +8 -8
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +8 -8
- package/dest/public/public_tx_simulator/index.d.ts +4 -6
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +2 -4
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -75
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -323
- 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 +5 -5
- package/dest/public/test_executor_metrics.d.ts +1 -6
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +0 -22
- package/package.json +22 -19
- package/src/client.ts +0 -2
- package/src/private/circuit_recording/circuit_recorder.ts +84 -78
- package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
- package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +1 -1
- package/src/public/avm/{fixtures → testing}/utils.ts +1 -40
- 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/fixtures/amm_test.ts +2 -2
- package/src/public/fixtures/bulk_test.ts +2 -2
- package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
- package/src/public/fixtures/index.ts +1 -3
- package/src/public/fixtures/public_processor_test_env.ts +88 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +41 -55
- package/src/public/fixtures/simple_contract_data_source.ts +1 -1
- package/src/public/fixtures/token_test.ts +3 -3
- package/src/public/fixtures/utils.ts +6 -11
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
- package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
- package/src/public/index.ts +7 -3
- package/src/public/public_db_sources.ts +1 -1
- package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
- package/src/public/public_processor/public_processor.ts +24 -17
- package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
- package/src/public/public_tx_simulator/factories.ts +27 -10
- package/src/public/public_tx_simulator/index.ts +6 -5
- package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -480
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
- package/src/public/test_executor_metrics.ts +0 -24
- 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 -24
- 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 -98
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -110
- 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 -354
- package/dest/public/avm/avm_simulator.d.ts +0 -41
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -192
- 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/calldata.d.ts +0 -51
- package/dest/public/avm/calldata.d.ts.map +0 -1
- package/dest/public/avm/calldata.js +0 -64
- 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/account_proof_fetcher.d.ts +0 -2
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +0 -1
- 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 -84
- 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 -45
- 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 -74
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -254
- 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 -49
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -97
- 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 -21
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -69
- 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 -17
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -79
- 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 -210
- 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 -119
- 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 -25
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -78
- 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 -37
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -14
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -234
- package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
- package/dest/public/fixtures/minimal_public_tx.js +0 -19
- package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
- package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
- package/dest/public/fixtures/opcode_spammer.js +0 -1645
- package/dest/public/hinting_db_sources.d.ts +0 -80
- package/dest/public/hinting_db_sources.d.ts.map +0 -1
- package/dest/public/hinting_db_sources.js +0 -356
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
- 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 -99
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
- 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 -131
- 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 -171
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
- 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 -135
- 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 -298
- 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 -415
- package/dest/public/side_effect_trace.d.ts +0 -87
- 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 -170
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -402
- package/src/public/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -69
- package/src/public/avm/avm_execution_environment.ts +0 -51
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -170
- package/src/public/avm/avm_memory_types.ts +0 -440
- package/src/public/avm/avm_simulator.ts +0 -279
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/calldata.ts +0 -101
- package/src/public/avm/errors.ts +0 -177
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
- package/src/public/avm/fixtures/initializers.ts +0 -103
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -285
- package/src/public/avm/opcodes/addressing_mode.ts +0 -111
- package/src/public/avm/opcodes/arithmetic.ts +0 -129
- 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 -76
- 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 -86
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -262
- package/src/public/avm/opcodes/hashing.ts +0 -151
- 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 -95
- 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 -52
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -366
- package/src/public/fixtures/minimal_public_tx.ts +0 -26
- package/src/public/fixtures/opcode_spammer.ts +0 -1713
- package/src/public/hinting_db_sources.ts +0 -610
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -125
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -210
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -482
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -293
- 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 -569
- /package/dest/public/avm/{fixtures → testing}/account_proof_fetcher.js +0 -0
- /package/src/public/avm/{fixtures → testing}/account_proof.json +0 -0
- /package/src/public/avm/{fixtures → testing}/account_proof_fetcher.ts +0 -0
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
-
import type { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
5
|
-
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
-
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
7
|
-
|
|
8
|
-
import { strict as assert } from 'assert';
|
|
9
|
-
|
|
10
|
-
import { CheckedPublicExecutionError } from '../public_errors.js';
|
|
11
|
-
import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
|
|
12
|
-
import { AvmContext } from './avm_context.js';
|
|
13
|
-
import { AvmContractCallResult } from './avm_contract_call_result.js';
|
|
14
|
-
import { AvmExecutionEnvironment } from './avm_execution_environment.js';
|
|
15
|
-
import type { Gas } from './avm_gas.js';
|
|
16
|
-
import { AvmMachineState } from './avm_machine_state.js';
|
|
17
|
-
import type { AvmSimulatorInterface } from './avm_simulator_interface.js';
|
|
18
|
-
import { type CallData, ReturnDataArray } from './calldata.js';
|
|
19
|
-
import { AvmRevertReason, InvalidProgramCounterError } from './errors.js';
|
|
20
|
-
import type { Instruction } from './opcodes/instruction.js';
|
|
21
|
-
import { revertReasonFromExceptionalHalt, revertReasonFromExplicitRevert } from './revert_reason.js';
|
|
22
|
-
import {
|
|
23
|
-
INSTRUCTION_SET,
|
|
24
|
-
type InstructionSet,
|
|
25
|
-
decodeInstructionFromBytecode,
|
|
26
|
-
} from './serialization/bytecode_serialization.js';
|
|
27
|
-
|
|
28
|
-
type OpcodeTally = {
|
|
29
|
-
count: number;
|
|
30
|
-
gas: Gas;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export class AvmSimulator implements AvmSimulatorInterface {
|
|
34
|
-
private log: Logger;
|
|
35
|
-
private bytecode: Buffer | undefined;
|
|
36
|
-
private opcodeTallies: Map<string, OpcodeTally> = new Map();
|
|
37
|
-
// maps pc to [instr, bytesRead]
|
|
38
|
-
private deserializedInstructionsCache: Map<number, [Instruction, number]> = new Map();
|
|
39
|
-
|
|
40
|
-
private tallyPrintFunction = () => {};
|
|
41
|
-
private tallyInstructionFunction = (_b: string, _c: Gas) => {};
|
|
42
|
-
|
|
43
|
-
// Test Purposes only: Logger will not have the proper function name. Use this constructor for testing purposes
|
|
44
|
-
// only. Otherwise, use build() below.
|
|
45
|
-
constructor(
|
|
46
|
-
private context: AvmContext,
|
|
47
|
-
private instructionSet: InstructionSet = INSTRUCTION_SET,
|
|
48
|
-
enableTallying = false,
|
|
49
|
-
) {
|
|
50
|
-
// This will be used by the CALL opcode to create a new simulator. It is required to
|
|
51
|
-
// avoid a dependency cycle.
|
|
52
|
-
context.provideSimulator = AvmSimulator.build;
|
|
53
|
-
this.log = createLogger(`simulator:avm(calldata[0]: ${context.environment.calldata.read(0)})`);
|
|
54
|
-
// Turn on tallying if explicitly enabled or if trace logging
|
|
55
|
-
if (enableTallying || this.log.isLevelEnabled('trace')) {
|
|
56
|
-
this.tallyPrintFunction = this.printOpcodeTallies;
|
|
57
|
-
this.tallyInstructionFunction = this.tallyInstruction;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Factory to have a proper function name in the logger. Retrieving the name is asynchronous and
|
|
62
|
-
// cannot be done as part of the constructor.
|
|
63
|
-
public static async build(context: AvmContext): Promise<AvmSimulator> {
|
|
64
|
-
const simulator = new AvmSimulator(context);
|
|
65
|
-
const fnName = await context.persistableState.getPublicFunctionDebugName(context.environment);
|
|
66
|
-
simulator.log = createLogger(`simulator:avm(f:${fnName.slice(0, 128)})`);
|
|
67
|
-
|
|
68
|
-
return simulator;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public static async create(
|
|
72
|
-
stateManager: PublicPersistableStateManager,
|
|
73
|
-
address: AztecAddress,
|
|
74
|
-
sender: AztecAddress,
|
|
75
|
-
transactionFee: Fr,
|
|
76
|
-
globals: GlobalVariables,
|
|
77
|
-
isStaticCall: boolean,
|
|
78
|
-
calldata: CallData,
|
|
79
|
-
allocatedGas: Gas,
|
|
80
|
-
config: PublicSimulatorConfig,
|
|
81
|
-
) {
|
|
82
|
-
const avmExecutionEnv = new AvmExecutionEnvironment(
|
|
83
|
-
address,
|
|
84
|
-
sender,
|
|
85
|
-
/*contractCallDepth=*/ Fr.zero(),
|
|
86
|
-
transactionFee,
|
|
87
|
-
globals,
|
|
88
|
-
isStaticCall,
|
|
89
|
-
calldata,
|
|
90
|
-
config,
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
const avmMachineState = new AvmMachineState(allocatedGas);
|
|
94
|
-
const avmContext = new AvmContext(stateManager, avmExecutionEnv, avmMachineState);
|
|
95
|
-
return await AvmSimulator.build(avmContext);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Fetch the bytecode and execute it in the current context.
|
|
100
|
-
*/
|
|
101
|
-
public async execute(): Promise<AvmContractCallResult> {
|
|
102
|
-
const bytecode = await this.context.persistableState.getBytecode(this.context.environment.address);
|
|
103
|
-
// getBytecode returns undefined if bytecode is not found or if the limit of contract calls to unique class IDs is reached.
|
|
104
|
-
// If it throws an error that reaches this point, it is a bug.
|
|
105
|
-
|
|
106
|
-
if (!bytecode) {
|
|
107
|
-
return await this.handleFailureToRetrieveBytecode(
|
|
108
|
-
`No bytecode found. Contract is not deployed, or limit encountered for max calls to unique contract class IDs. Contract address: ${this.context.environment.address}. Reverting...`,
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return await this.executeBytecode(bytecode);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Return the bytecode used for execution, if any.
|
|
117
|
-
*/
|
|
118
|
-
public getBytecode(): Buffer | undefined {
|
|
119
|
-
return this.bytecode;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Executes the provided bytecode in the current context.
|
|
124
|
-
* This method is useful for testing and debugging.
|
|
125
|
-
*/
|
|
126
|
-
public async executeBytecode(bytecode: Buffer): Promise<AvmContractCallResult> {
|
|
127
|
-
const timer = new Timer();
|
|
128
|
-
assert(bytecode.length > 0, "AVM simulator can't execute empty bytecode");
|
|
129
|
-
|
|
130
|
-
this.bytecode = bytecode;
|
|
131
|
-
let instructionName = 'NONE'; // This is used for logging purposes
|
|
132
|
-
|
|
133
|
-
const { machineState } = this.context;
|
|
134
|
-
const callStartGas = machineState.gasLeft; // Save gas before executing instruction (for profiling)
|
|
135
|
-
try {
|
|
136
|
-
// Execute instruction pointed to by the current program counter
|
|
137
|
-
// continuing until the machine state signifies a halt
|
|
138
|
-
while (!machineState.getHalted()) {
|
|
139
|
-
// Get the instruction from cache, or deserialize for the first time
|
|
140
|
-
let cachedInstruction = this.deserializedInstructionsCache.get(machineState.pc);
|
|
141
|
-
|
|
142
|
-
if (cachedInstruction === undefined) {
|
|
143
|
-
cachedInstruction = decodeInstructionFromBytecode(bytecode, machineState.pc, this.instructionSet);
|
|
144
|
-
this.deserializedInstructionsCache.set(machineState.pc, cachedInstruction);
|
|
145
|
-
}
|
|
146
|
-
const [instruction, bytesRead] = cachedInstruction;
|
|
147
|
-
|
|
148
|
-
const instrStartGas = machineState.gasLeft; // Save gas before executing instruction (for profiling)
|
|
149
|
-
|
|
150
|
-
if (this.log.isLevelEnabled('trace')) {
|
|
151
|
-
// Skip this entirely to avoid toStringing etc if trace is not enabled
|
|
152
|
-
this.log.trace(
|
|
153
|
-
`[PC:${machineState.pc}] [IC:${machineState.instrCounter}] ${instruction.toString()} (gasLeft l2=${
|
|
154
|
-
machineState.l2GasLeft
|
|
155
|
-
} da=${machineState.daGasLeft})`,
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
machineState.nextPc = machineState.pc + bytesRead;
|
|
159
|
-
|
|
160
|
-
instructionName = instruction.constructor.name;
|
|
161
|
-
// Execute the instruction.
|
|
162
|
-
// Normal returns and reverts will return normally here.
|
|
163
|
-
// "Exceptional halts" will throw.
|
|
164
|
-
await instruction.execute(this.context);
|
|
165
|
-
if (!instruction.handlesPC()) {
|
|
166
|
-
// Increment PC if the instruction doesn't handle it itself
|
|
167
|
-
machineState.pc += bytesRead;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
machineState.instrCounter++;
|
|
171
|
-
|
|
172
|
-
// gas used by this instruction - used for profiling/tallying
|
|
173
|
-
const gasUsed: Gas = {
|
|
174
|
-
l2Gas: instrStartGas.l2Gas - machineState.l2GasLeft,
|
|
175
|
-
daGas: instrStartGas.daGas - machineState.daGasLeft,
|
|
176
|
-
};
|
|
177
|
-
this.tallyInstructionFunction(instruction.constructor.name, gasUsed);
|
|
178
|
-
|
|
179
|
-
if (machineState.pc >= bytecode.length) {
|
|
180
|
-
this.log.warn('Passed end of program');
|
|
181
|
-
throw new InvalidProgramCounterError(machineState.pc, /*max=*/ bytecode.length - 1);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
const output = machineState.getOutput();
|
|
186
|
-
const reverted = machineState.getReverted();
|
|
187
|
-
const revertReason = reverted
|
|
188
|
-
? await revertReasonFromExplicitRevert(output.bestEffortReadAll(), this.context)
|
|
189
|
-
: undefined;
|
|
190
|
-
const results = new AvmContractCallResult(
|
|
191
|
-
reverted,
|
|
192
|
-
output,
|
|
193
|
-
machineState.gasLeft,
|
|
194
|
-
revertReason,
|
|
195
|
-
machineState.instrCounter,
|
|
196
|
-
);
|
|
197
|
-
this.log.debug(`Context execution results: ${results.toString()}`);
|
|
198
|
-
const totalGasUsed: Gas = {
|
|
199
|
-
l2Gas: callStartGas.l2Gas - machineState.l2GasLeft,
|
|
200
|
-
daGas: callStartGas.daGas - machineState.daGasLeft,
|
|
201
|
-
};
|
|
202
|
-
this.log.debug(`Executed ${machineState.instrCounter} instructions and consumed ${totalGasUsed.l2Gas} L2 Gas`);
|
|
203
|
-
|
|
204
|
-
this.tallyPrintFunction();
|
|
205
|
-
|
|
206
|
-
this.log.debug(`Core AVM simulation took ${timer.ms()}ms`);
|
|
207
|
-
|
|
208
|
-
// Return results for processing by calling context
|
|
209
|
-
return results;
|
|
210
|
-
} catch (err: any) {
|
|
211
|
-
this.log.info(
|
|
212
|
-
`Exceptional halt (revert by something other than REVERT opcode) for instruction
|
|
213
|
-
${instructionName} at pc ${machineState.pc} and instruction counter ${machineState.instrCounter}`,
|
|
214
|
-
);
|
|
215
|
-
if (!(err instanceof CheckedPublicExecutionError)) {
|
|
216
|
-
this.log.error(`Unchecked/unknown error thrown by AVM. This is a bug. Error: ${err}`);
|
|
217
|
-
throw err;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
const revertReason = await revertReasonFromExceptionalHalt(err, this.context);
|
|
221
|
-
// Exceptional halts consume all allocated gas
|
|
222
|
-
const noGasLeft = { l2Gas: 0, daGas: 0 };
|
|
223
|
-
// Note: "exceptional halts" cannot return data, hence [].
|
|
224
|
-
const results = new AvmContractCallResult(
|
|
225
|
-
/*reverted=*/ true,
|
|
226
|
-
/*output=*/ new ReturnDataArray([]),
|
|
227
|
-
noGasLeft,
|
|
228
|
-
revertReason,
|
|
229
|
-
machineState.instrCounter,
|
|
230
|
-
);
|
|
231
|
-
this.log.debug(`Context execution results: ${results.toString()}`);
|
|
232
|
-
|
|
233
|
-
this.tallyPrintFunction();
|
|
234
|
-
// Return results for processing by calling context
|
|
235
|
-
return results;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
private async handleFailureToRetrieveBytecode(message: string): Promise<AvmContractCallResult> {
|
|
240
|
-
// revert, consuming all gas
|
|
241
|
-
const { functionSelector, functionName } = await this.context.persistableState.getPublicFunctionSelectorAndName(
|
|
242
|
-
this.context.environment,
|
|
243
|
-
);
|
|
244
|
-
const revertReason = new AvmRevertReason(
|
|
245
|
-
message,
|
|
246
|
-
/*failingFunction=*/ {
|
|
247
|
-
contractAddress: this.context.environment.address,
|
|
248
|
-
functionSelector,
|
|
249
|
-
functionName,
|
|
250
|
-
},
|
|
251
|
-
/*noirCallStack=*/ [],
|
|
252
|
-
);
|
|
253
|
-
this.log.warn(message);
|
|
254
|
-
return new AvmContractCallResult(
|
|
255
|
-
/*reverted=*/ true,
|
|
256
|
-
/*output=*/ new ReturnDataArray([]),
|
|
257
|
-
/*gasLeft=*/ { l2Gas: 0, daGas: 0 }, // consumes all allocated gas
|
|
258
|
-
revertReason,
|
|
259
|
-
);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
private tallyInstruction(opcode: string, gasUsed: Gas) {
|
|
263
|
-
const opcodeTally = this.opcodeTallies.get(opcode) || ({ count: 0, gas: { l2Gas: 0, daGas: 0 } } as OpcodeTally);
|
|
264
|
-
opcodeTally.count++;
|
|
265
|
-
opcodeTally.gas.l2Gas += gasUsed.l2Gas;
|
|
266
|
-
opcodeTally.gas.daGas += gasUsed.daGas;
|
|
267
|
-
this.opcodeTallies.set(opcode, opcodeTally);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
private printOpcodeTallies() {
|
|
271
|
-
this.log.debug(`Printing tallies per opcode sorted by gas...`);
|
|
272
|
-
// sort descending by L2 gas consumed
|
|
273
|
-
const sortedOpcodes = Array.from(this.opcodeTallies.entries()).sort((a, b) => b[1].gas.l2Gas - a[1].gas.l2Gas);
|
|
274
|
-
for (const [opcode, tally] of sortedOpcodes) {
|
|
275
|
-
// NOTE: don't care to clutter the logs with DA gas for now
|
|
276
|
-
this.log.debug(`${opcode} executed ${tally.count} times consuming a total of ${tally.gas.l2Gas} L2 gas`);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Interface for AvmSimulator to break the circular dependency between avm_context.ts and avm_simulator.ts
|
|
3
|
-
*/
|
|
4
|
-
export interface AvmSimulatorInterface {
|
|
5
|
-
execute(): Promise<any>; // Using any here to avoid importing AvmContractCallResult
|
|
6
|
-
executeBytecode(bytecode: Buffer): Promise<any>;
|
|
7
|
-
getBytecode(): Buffer | undefined;
|
|
8
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/schemas';
|
|
2
|
-
|
|
3
|
-
import { TaggedMemory } from './avm_memory_types.js';
|
|
4
|
-
|
|
5
|
-
// Allow reading up to 300 kB of return data when unspecified.
|
|
6
|
-
const DEFAULT_BEST_EFFORT_READ_CAP = 10000;
|
|
7
|
-
|
|
8
|
-
export interface LazyReader {
|
|
9
|
-
bestEffortReadAll(readCap?: number): Fr[];
|
|
10
|
-
readAll(): Fr[];
|
|
11
|
-
read(idx: number): Fr | undefined;
|
|
12
|
-
slice(start: number, end: number): Fr[];
|
|
13
|
-
length(): number;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export class LazyReaderMemory implements LazyReader {
|
|
17
|
-
constructor(
|
|
18
|
-
private memory: TaggedMemory,
|
|
19
|
-
private offset: number,
|
|
20
|
-
private size: number,
|
|
21
|
-
) {}
|
|
22
|
-
|
|
23
|
-
public bestEffortReadAll(readCap = DEFAULT_BEST_EFFORT_READ_CAP): Fr[] {
|
|
24
|
-
const size = Math.min(this.size, readCap, TaggedMemory.MAX_MEMORY_SIZE - this.offset);
|
|
25
|
-
return this.memory.getSlice(this.offset, size).map(word => word.toFr());
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public read(idx: number): Fr | undefined {
|
|
29
|
-
if (idx >= this.size) {
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
return this.memory.get(this.offset + idx).toFr();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public slice(start: number, end: number): Fr[] {
|
|
36
|
-
const clampedEnd = Math.min(end, this.size, TaggedMemory.MAX_MEMORY_SIZE - this.offset);
|
|
37
|
-
const length = Math.max(0, clampedEnd - start);
|
|
38
|
-
return this.memory.getSlice(this.offset + start, length).map(word => word.toFr());
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
public readAll(): Fr[] {
|
|
42
|
-
const size = Math.min(this.size, TaggedMemory.MAX_MEMORY_SIZE - this.offset);
|
|
43
|
-
return this.memory.getSlice(this.offset, size).map(word => word.toFr());
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
public length(): number {
|
|
47
|
-
return this.size;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export class LazyReaderArray implements LazyReader {
|
|
52
|
-
constructor(private array: Fr[]) {}
|
|
53
|
-
|
|
54
|
-
public bestEffortReadAll(readCap = DEFAULT_BEST_EFFORT_READ_CAP): Fr[] {
|
|
55
|
-
return this.array.slice(0, readCap);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
public read(idx: number): Fr | undefined {
|
|
59
|
-
return this.array[idx];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
public slice(start: number, end: number): Fr[] {
|
|
63
|
-
return this.array.slice(start, end);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
public readAll(): Fr[] {
|
|
67
|
-
return this.array;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
public length(): number {
|
|
71
|
-
return this.array.length;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Compile time branding to avoid swapping CallData and ReturnData by accident.
|
|
76
|
-
declare const CallDataBrand: unique symbol;
|
|
77
|
-
declare const ReturnDataBrand: unique symbol;
|
|
78
|
-
|
|
79
|
-
export type CallData = LazyReader & {
|
|
80
|
-
readonly [CallDataBrand]: true;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
export type ReturnData = LazyReader & {
|
|
84
|
-
readonly [ReturnDataBrand]: true;
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
export class CallDataArray extends LazyReaderArray implements CallData {
|
|
88
|
-
declare readonly [CallDataBrand]: true;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export class CallDataMemory extends LazyReaderMemory implements CallData {
|
|
92
|
-
declare readonly [CallDataBrand]: true;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export class ReturnDataArray extends LazyReaderArray implements ReturnData {
|
|
96
|
-
declare readonly [ReturnDataBrand]: true;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export class ReturnDataMemory extends LazyReaderMemory implements ReturnData {
|
|
100
|
-
declare readonly [ReturnDataBrand]: true;
|
|
101
|
-
}
|
package/src/public/avm/errors.ts
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import type { Point } from '@aztec/foundation/curves/grumpkin';
|
|
2
|
-
import type { FailingFunction, NoirCallStack } from '@aztec/stdlib/errors';
|
|
3
|
-
|
|
4
|
-
import { ExecutionError } from '../../common/errors.js';
|
|
5
|
-
import { CheckedPublicExecutionError } from '../public_errors.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Avm-specific errors should derive from this
|
|
9
|
-
*/
|
|
10
|
-
export abstract class AvmExecutionError extends CheckedPublicExecutionError {
|
|
11
|
-
constructor(message: string) {
|
|
12
|
-
super(message);
|
|
13
|
-
this.name = 'AvmExecutionError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export class ArithmeticError extends AvmExecutionError {
|
|
18
|
-
constructor(message: string) {
|
|
19
|
-
super(message);
|
|
20
|
-
this.name = 'ArithmeticError';
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Error is thrown when the program counter goes to an invalid location.
|
|
26
|
-
* There is no instruction at the provided pc
|
|
27
|
-
*/
|
|
28
|
-
export class InvalidProgramCounterError extends AvmExecutionError {
|
|
29
|
-
constructor(pc: number, max: number) {
|
|
30
|
-
super(`Invalid program counter ${pc}, max is ${max}`);
|
|
31
|
-
this.name = 'InvalidProgramCounterError';
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Error is thrown when the program counter points to a byte
|
|
37
|
-
* of an invalid opcode.
|
|
38
|
-
*/
|
|
39
|
-
export class InvalidOpcodeError extends AvmExecutionError {
|
|
40
|
-
constructor(str: string) {
|
|
41
|
-
super(str);
|
|
42
|
-
this.name = 'InvalidOpcodeError';
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Error is thrown during parsing.
|
|
48
|
-
*/
|
|
49
|
-
export class AvmParsingError extends AvmExecutionError {
|
|
50
|
-
constructor(str: string) {
|
|
51
|
-
super(str);
|
|
52
|
-
this.name = 'AvmParsingError';
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Error is thrown when the tag has an invalid value.
|
|
58
|
-
*/
|
|
59
|
-
export class InvalidTagValueError extends AvmExecutionError {
|
|
60
|
-
constructor(tagValue: number) {
|
|
61
|
-
super(`Tag check failed: Tag value ${tagValue} is invalid.`);
|
|
62
|
-
this.name = 'InvalidTagValueError';
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Error thrown during an instruction's execution (during its execute()).
|
|
68
|
-
*/
|
|
69
|
-
export class InstructionExecutionError extends AvmExecutionError {
|
|
70
|
-
constructor(message: string) {
|
|
71
|
-
super(message);
|
|
72
|
-
this.name = 'InstructionExecutionError';
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Error thrown on failed AVM memory tag check.
|
|
78
|
-
*/
|
|
79
|
-
export class TagCheckError extends AvmExecutionError {
|
|
80
|
-
public static forBaseAddress(gotTag: string): TagCheckError {
|
|
81
|
-
return new TagCheckError(`Base address (mem[0]) is not a valid address (has tag ${gotTag})`);
|
|
82
|
-
}
|
|
83
|
-
public static forIndirectAddress(address: number, gotTag: string): TagCheckError {
|
|
84
|
-
return new TagCheckError(`Address after indirection is not a valid address (address ${address} has tag ${gotTag})`);
|
|
85
|
-
}
|
|
86
|
-
public static forOffset(offset: number, gotTag: string, expectedTag: string): TagCheckError {
|
|
87
|
-
return new TagCheckError(`Tag mismatch at offset ${offset}, got ${gotTag}, expected ${expectedTag}`);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
public static forTag(gotTag: string, expectedTag: string): TagCheckError {
|
|
91
|
-
return new TagCheckError(`Tag mismatch, got ${gotTag}, expected ${expectedTag}`);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
constructor(message: string) {
|
|
95
|
-
super(message);
|
|
96
|
-
this.name = 'TagCheckError';
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Error is thrown when a relative memory address resolved to an offset which
|
|
102
|
-
* is out of range, i.e, greater than maxUint32.
|
|
103
|
-
*/
|
|
104
|
-
export class RelativeAddressOutOfRangeError extends AvmExecutionError {
|
|
105
|
-
constructor(baseAddr: number, relOffset: number) {
|
|
106
|
-
super(`Relative address out of range. Base address ${baseAddr}, relative offset ${relOffset}`);
|
|
107
|
-
this.name = 'RelativeAddressOutOfRangeError';
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Error is thrown when a memory slice contains addresses which are
|
|
113
|
-
* out of range, i.e, greater than maxUint32.
|
|
114
|
-
*/
|
|
115
|
-
export class MemorySliceOutOfRangeError extends AvmExecutionError {
|
|
116
|
-
constructor(baseAddr: number, size: number) {
|
|
117
|
-
super(`Memory slice is out of range. Base address ${baseAddr}, size ${size}`);
|
|
118
|
-
this.name = 'MemorySliceOutOfRangeError';
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/** Error thrown when out of gas. */
|
|
123
|
-
export class OutOfGasError extends AvmExecutionError {
|
|
124
|
-
constructor(dimensions: string[]) {
|
|
125
|
-
super(`Not enough ${dimensions.map(d => d.toUpperCase()).join(', ')} gas left`);
|
|
126
|
-
this.name = 'OutOfGasError';
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Error is thrown when one of the supplied points does not lie on the Grumpkin curve. Specific for ECADD opcode.
|
|
132
|
-
*/
|
|
133
|
-
export class EcAddPointNotOnCurveError extends AvmExecutionError {
|
|
134
|
-
constructor(pointIndex: number, point: Point) {
|
|
135
|
-
super(`EcAdd point${pointIndex} (${point.toString()}) is not on the curve.`);
|
|
136
|
-
this.name = 'EcAddPointNotOnCurveError';
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Error is thrown when some inputs of ToRadixBE are not valid.
|
|
142
|
-
*/
|
|
143
|
-
export class InvalidToRadixInputsError extends AvmExecutionError {
|
|
144
|
-
constructor(errorString: string) {
|
|
145
|
-
super(errorString);
|
|
146
|
-
this.name = 'InvalidToRadixInputsError';
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Error is thrown when a static call attempts to alter some state
|
|
152
|
-
*/
|
|
153
|
-
export class StaticCallAlterationError extends InstructionExecutionError {
|
|
154
|
-
constructor() {
|
|
155
|
-
super('Static call cannot update the state, emit L2->L1 messages or generate logs');
|
|
156
|
-
this.name = 'StaticCallAlterationError';
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Meaningfully named alias for ExecutionError when used in the context of the AVM.
|
|
162
|
-
* Maintains a recursive structure reflecting the AVM's external callstack/errorstack, where
|
|
163
|
-
* options.cause is the error that caused this error (if this is not the root-cause itself).
|
|
164
|
-
*/
|
|
165
|
-
export class AvmRevertReason extends ExecutionError {
|
|
166
|
-
constructor(message: string, failingFunction: FailingFunction, noirCallStack: NoirCallStack, options?: ErrorOptions) {
|
|
167
|
-
super(message, failingFunction, noirCallStack, options);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Helper to annotate errors occurring during instruction fetching.
|
|
173
|
-
*/
|
|
174
|
-
export function duringInstrFetch(error: Error, pc: number) {
|
|
175
|
-
error.message = `Instruction fetching error at pc ${pc}: ${error.message}`;
|
|
176
|
-
return error;
|
|
177
|
-
}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import { encodeArguments } from '@aztec/stdlib/abi';
|
|
3
|
-
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
4
|
-
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import { GasFees } from '@aztec/stdlib/gas';
|
|
6
|
-
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
7
|
-
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
8
|
-
import { NativeWorldStateService } from '@aztec/world-state';
|
|
9
|
-
|
|
10
|
-
import { SideEffectTrace } from '../../../public/side_effect_trace.js';
|
|
11
|
-
import type { AvmContractCallResult } from '../../avm/avm_contract_call_result.js';
|
|
12
|
-
import { SimpleContractDataSource } from '../../fixtures/simple_contract_data_source.js';
|
|
13
|
-
import { PublicContractsDB, PublicTreesDB } from '../../public_db_sources.js';
|
|
14
|
-
import { PublicPersistableStateManager } from '../../state_manager/state_manager.js';
|
|
15
|
-
import { AvmSimulator } from '../avm_simulator.js';
|
|
16
|
-
import { CallDataArray } from '../calldata.js';
|
|
17
|
-
import { BaseAvmSimulationTester } from './base_avm_simulation_tester.js';
|
|
18
|
-
import { initContext, initExecutionEnvironment } from './initializers.js';
|
|
19
|
-
import {
|
|
20
|
-
DEFAULT_TIMESTAMP,
|
|
21
|
-
getContractFunctionAbi,
|
|
22
|
-
getFunctionSelector,
|
|
23
|
-
resolveContractAssertionMessage,
|
|
24
|
-
} from './utils.js';
|
|
25
|
-
|
|
26
|
-
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the core AvmSimulator.
|
|
30
|
-
* It provides an interface for simulating one top-level call at a time and maintains state between
|
|
31
|
-
* subsequent top-level calls.
|
|
32
|
-
*/
|
|
33
|
-
export class AvmSimulationTester extends BaseAvmSimulationTester {
|
|
34
|
-
constructor(
|
|
35
|
-
contractDataSource: SimpleContractDataSource,
|
|
36
|
-
merkleTrees: MerkleTreeWriteOperations,
|
|
37
|
-
private stateManager: PublicPersistableStateManager,
|
|
38
|
-
) {
|
|
39
|
-
super(contractDataSource, merkleTrees);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
static async create(
|
|
43
|
-
worldStateService: NativeWorldStateService, // make sure to close this later
|
|
44
|
-
): Promise<AvmSimulationTester> {
|
|
45
|
-
const contractDataSource = new SimpleContractDataSource();
|
|
46
|
-
const merkleTrees = await worldStateService.fork();
|
|
47
|
-
const treesDB = new PublicTreesDB(merkleTrees);
|
|
48
|
-
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
49
|
-
const trace = new SideEffectTrace();
|
|
50
|
-
const firstNullifier = new Fr(420000);
|
|
51
|
-
|
|
52
|
-
const stateManager = PublicPersistableStateManager.create(
|
|
53
|
-
treesDB,
|
|
54
|
-
contractsDB,
|
|
55
|
-
trace,
|
|
56
|
-
firstNullifier,
|
|
57
|
-
DEFAULT_TIMESTAMP,
|
|
58
|
-
);
|
|
59
|
-
return new AvmSimulationTester(contractDataSource, merkleTrees, stateManager);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Simulate a top-level contract call.
|
|
64
|
-
*/
|
|
65
|
-
async simulateCall(
|
|
66
|
-
sender: AztecAddress,
|
|
67
|
-
address: AztecAddress,
|
|
68
|
-
fnName: string,
|
|
69
|
-
args: any[],
|
|
70
|
-
isStaticCall = false,
|
|
71
|
-
): Promise<AvmContractCallResult> {
|
|
72
|
-
const contractArtifact = await this.contractDataSource.getContractArtifact(address);
|
|
73
|
-
if (!contractArtifact) {
|
|
74
|
-
throw new Error(`Contract not found at address: ${address}`);
|
|
75
|
-
}
|
|
76
|
-
const fnSelector = await getFunctionSelector(fnName, contractArtifact);
|
|
77
|
-
const fnAbi = getContractFunctionAbi(fnName, contractArtifact);
|
|
78
|
-
const encodedArgs = encodeArguments(fnAbi!, args);
|
|
79
|
-
const calldata = [fnSelector.toField(), ...encodedArgs];
|
|
80
|
-
|
|
81
|
-
const globals = GlobalVariables.empty();
|
|
82
|
-
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
83
|
-
globals.gasFees = DEFAULT_GAS_FEES;
|
|
84
|
-
|
|
85
|
-
const config = PublicSimulatorConfig.from({
|
|
86
|
-
skipFeeEnforcement: false,
|
|
87
|
-
collectDebugLogs: true,
|
|
88
|
-
collectHints: false,
|
|
89
|
-
collectStatistics: false,
|
|
90
|
-
collectCallMetadata: true,
|
|
91
|
-
});
|
|
92
|
-
const environment = initExecutionEnvironment({
|
|
93
|
-
calldata: new CallDataArray(calldata),
|
|
94
|
-
globals,
|
|
95
|
-
address,
|
|
96
|
-
sender,
|
|
97
|
-
isStaticCall,
|
|
98
|
-
config,
|
|
99
|
-
});
|
|
100
|
-
const persistableState = await this.stateManager.fork();
|
|
101
|
-
const context = initContext({ env: environment, persistableState });
|
|
102
|
-
|
|
103
|
-
// First we simulate (though it's not needed in this simple case).
|
|
104
|
-
const simulator = new AvmSimulator(context);
|
|
105
|
-
const result = await simulator.execute();
|
|
106
|
-
if (result.reverted) {
|
|
107
|
-
this.logger.error(`Error in ${fnName}:`);
|
|
108
|
-
this.logger.error(
|
|
109
|
-
resolveContractAssertionMessage(
|
|
110
|
-
fnName,
|
|
111
|
-
result.revertReason!,
|
|
112
|
-
result.output.bestEffortReadAll(),
|
|
113
|
-
contractArtifact,
|
|
114
|
-
)!,
|
|
115
|
-
);
|
|
116
|
-
} else {
|
|
117
|
-
this.logger.info(`Simulation of function ${fnName} succeeded!`);
|
|
118
|
-
await this.stateManager.merge(persistableState);
|
|
119
|
-
}
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
}
|