@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.0208eb9
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 +8 -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 -9
- 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 +15 -7
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +14 -19
- 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 +41 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
- package/dest/private/acvm_wasm.d.ts +16 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/acvm_wasm.js +65 -0
- 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 +109 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +212 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -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 +10 -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} +8 -5
- package/dest/public/avm/avm_context.d.ts +8 -8
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +12 -8
- package/dest/public/avm/avm_execution_environment.d.ts +9 -6
- 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 +9 -6
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +5 -2
- 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 +21 -7
- package/dest/public/avm/avm_simulator.d.ts +8 -7
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +32 -42
- 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/calldata.d.ts +51 -0
- package/dest/public/avm/calldata.d.ts.map +1 -0
- package/dest/public/avm/calldata.js +63 -0
- package/dest/public/avm/errors.d.ts +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 +26 -18
- 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 +45 -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 +17 -18
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +58 -55
- 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 +14 -2
- 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 +8 -16
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +22 -29
- package/dest/public/avm/opcodes/comparators.d.ts +1 -1
- 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 +3 -4
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +11 -12
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +13 -11
- package/dest/public/avm/opcodes/conversion.d.ts +4 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +270 -6
- package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +21 -12
- package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +20 -22
- package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +52 -46
- package/dest/public/avm/opcodes/hashing.d.ts +7 -7
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +24 -19
- 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 +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +15 -15
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +52 -48
- package/dest/public/avm/opcodes/misc.d.ts +4 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +42 -17
- package/dest/public/avm/opcodes/storage.d.ts +14 -13
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +39 -27
- 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 +37 -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 +33 -23
- 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 +262 -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 +122 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1653 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +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 +60 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/hinting_db_sources.d.ts +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +355 -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 +54 -103
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +222 -195
- 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 +113 -0
- package/dest/public/public_processor/public_processor.d.ts +28 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +576 -136
- package/dest/public/public_processor/public_processor_metrics.d.ts +4 -4
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +29 -46
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -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 +132 -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 +23 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +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 +25 -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 +75 -95
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +38 -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 +220 -207
- 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 +415 -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 +24 -69
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +74 -124
- 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 +170 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +402 -0
- package/dest/public/test_executor_metrics.d.ts +56 -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 +21 -35
- 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} +57 -28
- package/src/private/acvm_wasm.ts +76 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +263 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -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} +13 -10
- package/src/public/avm/avm_context.ts +6 -6
- package/src/public/avm/avm_contract_call_result.ts +23 -9
- package/src/public/avm/avm_execution_environment.ts +17 -5
- package/src/public/avm/avm_gas.ts +26 -38
- package/src/public/avm/avm_machine_state.ts +12 -6
- package/src/public/avm/avm_memory_types.ts +24 -7
- package/src/public/avm/avm_simulator.ts +57 -62
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
- package/src/public/avm/fixtures/initializers.ts +103 -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 +81 -48
- 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 -10
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +29 -5
- package/src/public/avm/opcodes/ec_add.ts +22 -10
- package/src/public/avm/opcodes/environment_getters.ts +28 -23
- package/src/public/avm/opcodes/external_calls.ts +70 -36
- package/src/public/avm/opcodes/hashing.ts +39 -13
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +81 -42
- package/src/public/avm/opcodes/misc.ts +61 -19
- package/src/public/avm/opcodes/storage.ts +47 -23
- 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 +52 -0
- package/src/public/executor_metrics.ts +49 -23
- 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 +228 -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 +1721 -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 +288 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
- package/src/public/hinting_db_sources.ts +607 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +290 -260
- 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 +257 -179
- package/src/public/public_processor/public_processor_metrics.ts +18 -46
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +211 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +43 -0
- package/src/public/public_tx_simulator/index.ts +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 +179 -199
- package/src/public/public_tx_simulator/public_tx_simulator.ts +316 -263
- 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 +99 -322
- 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 +569 -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.js +0 -62
- 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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { ExecutionError, ForeignCallHandler } from '@aztec/noir-acvm_js';
|
|
2
|
+
import { abiDecodeError } from '@aztec/noir-noirc_abi';
|
|
3
|
+
import { parseDebugSymbols } from '@aztec/stdlib/abi';
|
|
4
|
+
import type { FunctionArtifactWithContractName } from '@aztec/stdlib/abi';
|
|
5
|
+
import type { NoirCompiledCircuit, NoirCompiledCircuitWithName } from '@aztec/stdlib/noir';
|
|
6
|
+
|
|
7
|
+
import { type ACIRCallback, type ACIRExecutionResult, extractCallStack } from './acvm/acvm.js';
|
|
8
|
+
import type { ACVMWitness } from './acvm/acvm_types.js';
|
|
9
|
+
import type { ACVMSuccess } from './acvm_native.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Low level simulation interface
|
|
13
|
+
*/
|
|
14
|
+
export interface CircuitSimulator {
|
|
15
|
+
/**
|
|
16
|
+
* Execute a protocol circuit/generate a witness
|
|
17
|
+
* @param input - The initial witness map defining all of the inputs to `circuit`.
|
|
18
|
+
* @param artifact - ACIR circuit bytecode and its metadata.
|
|
19
|
+
* @param callback - A callback to process any foreign calls from the circuit. Can be undefined as for native
|
|
20
|
+
* ACVM simulator we don't process foreign calls.
|
|
21
|
+
* @returns The solved witness calculated by executing the circuit on the provided inputs.
|
|
22
|
+
*/
|
|
23
|
+
executeProtocolCircuit(
|
|
24
|
+
input: ACVMWitness,
|
|
25
|
+
artifact: NoirCompiledCircuitWithName,
|
|
26
|
+
callback: ForeignCallHandler | undefined,
|
|
27
|
+
): Promise<ACVMSuccess>;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Execute a user circuit (smart contract function)/generate a witness
|
|
31
|
+
* @param input - The initial witness map defining all of the inputs to `circuit`.
|
|
32
|
+
* @param artifact - Contract function ACIR circuit bytecode and its metadata.
|
|
33
|
+
* @param callback - A callback to process any foreign calls from the circuit.
|
|
34
|
+
* @returns The solved witness calculated by executing the circuit on the provided inputs, as well as the return
|
|
35
|
+
* witness indices as specified by the circuit.
|
|
36
|
+
*/
|
|
37
|
+
executeUserCircuit(
|
|
38
|
+
input: ACVMWitness,
|
|
39
|
+
artifact: FunctionArtifactWithContractName,
|
|
40
|
+
callback: ACIRCallback,
|
|
41
|
+
): Promise<ACIRExecutionResult>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export type DecodedError = ExecutionError & { decodedAssertionPayload?: any; noirCallStack?: string[] };
|
|
45
|
+
|
|
46
|
+
// Payload parsing taken from noir/noir-repo/tooling/noir_js/src/witness_generation.ts.
|
|
47
|
+
// TODO: import this in isolation without having to import noir_js in its entirety.
|
|
48
|
+
export function enrichNoirError(artifact: NoirCompiledCircuit, originalError: ExecutionError): DecodedError {
|
|
49
|
+
const enrichedError = originalError as DecodedError;
|
|
50
|
+
|
|
51
|
+
if (originalError.rawAssertionPayload) {
|
|
52
|
+
try {
|
|
53
|
+
// Decode the payload
|
|
54
|
+
const decodedPayload = abiDecodeError(artifact.abi, originalError.rawAssertionPayload);
|
|
55
|
+
|
|
56
|
+
if (typeof decodedPayload === 'string') {
|
|
57
|
+
// If it's a string, just add it to the error message
|
|
58
|
+
enrichedError.message = `Circuit execution failed: ${decodedPayload}`;
|
|
59
|
+
} else {
|
|
60
|
+
// If not, attach the payload to the original error
|
|
61
|
+
enrichedError.decodedAssertionPayload = decodedPayload;
|
|
62
|
+
}
|
|
63
|
+
} catch {
|
|
64
|
+
// Ignore errors decoding the payload
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
// Decode the callstack
|
|
70
|
+
const callStack = extractCallStack(originalError, {
|
|
71
|
+
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/5813)
|
|
72
|
+
// We only support handling debug info for the circuit entry point.
|
|
73
|
+
// So for now we simply index into the first debug info.
|
|
74
|
+
debugSymbols: parseDebugSymbols(artifact.debug_symbols)[0],
|
|
75
|
+
files: artifact.file_map,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
enrichedError.noirCallStack = callStack?.map(errorLocation => {
|
|
79
|
+
if (typeof errorLocation === 'string') {
|
|
80
|
+
return `at opcode ${errorLocation}`;
|
|
81
|
+
} else {
|
|
82
|
+
return `at ${errorLocation.locationText} (${errorLocation.filePath}:${errorLocation.line}:${errorLocation.column})`;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
} catch {
|
|
86
|
+
// Ignore errors resolving the callstack
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return enrichedError;
|
|
90
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { type Logger,
|
|
1
|
+
import { type Logger, type LoggerBindings, resolveLogger } from '@aztec/foundation/log';
|
|
2
2
|
|
|
3
3
|
import { promises as fs } from 'fs';
|
|
4
4
|
|
|
5
5
|
import { NativeACVMSimulator } from './acvm_native.js';
|
|
6
6
|
import { WASMSimulator } from './acvm_wasm.js';
|
|
7
|
-
import type {
|
|
7
|
+
import type { CircuitSimulator } from './circuit_simulator.js';
|
|
8
8
|
|
|
9
|
-
export type
|
|
9
|
+
export type SimulatorConfig = {
|
|
10
10
|
acvmBinaryPath?: string;
|
|
11
11
|
acvmWorkingDirectory?: string;
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
export function
|
|
14
|
+
export function getSimulatorConfigFromEnv() {
|
|
15
15
|
const { ACVM_BINARY_PATH, ACVM_WORKING_DIRECTORY } = process.env;
|
|
16
16
|
return {
|
|
17
17
|
acvmWorkingDirectory: ACVM_WORKING_DIRECTORY ? ACVM_WORKING_DIRECTORY : undefined,
|
|
@@ -19,20 +19,23 @@ export function getSimulationProviderConfigFromEnv() {
|
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export async function
|
|
23
|
-
config:
|
|
24
|
-
|
|
25
|
-
): Promise<
|
|
22
|
+
export async function createSimulator(
|
|
23
|
+
config: SimulatorConfig,
|
|
24
|
+
loggerOrBindings?: Logger | LoggerBindings,
|
|
25
|
+
): Promise<CircuitSimulator> {
|
|
26
|
+
const logger = resolveLogger('simulator', loggerOrBindings);
|
|
26
27
|
if (config.acvmBinaryPath && config.acvmWorkingDirectory) {
|
|
27
28
|
try {
|
|
28
29
|
await fs.access(config.acvmBinaryPath, fs.constants.R_OK);
|
|
29
30
|
await fs.mkdir(config.acvmWorkingDirectory, { recursive: true });
|
|
30
31
|
logger.info(`Using native ACVM at ${config.acvmBinaryPath} and working directory ${config.acvmWorkingDirectory}`);
|
|
31
|
-
|
|
32
|
+
const acvmLogger = logger.createChild('acvm-native');
|
|
33
|
+
return new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath, undefined, acvmLogger);
|
|
32
34
|
} catch {
|
|
33
35
|
logger.warn(`Failed to access ACVM at ${config.acvmBinaryPath}, falling back to WASM`);
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
logger.info('Using WASM ACVM simulation');
|
|
37
|
-
|
|
39
|
+
const wasmLogger = logger.createChild('wasm');
|
|
40
|
+
return new WASMSimulator(wasmLogger);
|
|
38
41
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/fields';
|
|
2
1
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
2
|
|
|
3
|
+
import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
|
|
4
4
|
import type { AvmExecutionEnvironment } from './avm_execution_environment.js';
|
|
5
5
|
import { type Gas, gasToGasLeft } from './avm_gas.js';
|
|
6
6
|
import { AvmMachineState } from './avm_machine_state.js';
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
7
|
+
import type { AvmSimulatorInterface } from './avm_simulator_interface.js';
|
|
8
|
+
import type { CallData } from './calldata.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* An execution context includes the information necessary to initiate AVM
|
|
@@ -20,14 +20,14 @@ export class AvmContext {
|
|
|
20
20
|
* @returns new AvmContext instance
|
|
21
21
|
*/
|
|
22
22
|
constructor(
|
|
23
|
-
public persistableState:
|
|
23
|
+
public persistableState: PublicPersistableStateManager,
|
|
24
24
|
public environment: AvmExecutionEnvironment,
|
|
25
25
|
public machineState: AvmMachineState,
|
|
26
26
|
) {}
|
|
27
27
|
|
|
28
28
|
// This is needed to break a dependency cycle created by the CALL opcode,
|
|
29
29
|
// which needs to create a new simulator but cannot depend directly on AvmSimulator.
|
|
30
|
-
public provideSimulator?: (
|
|
30
|
+
public provideSimulator?: (context: AvmContext) => Promise<AvmSimulatorInterface>;
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Prepare a new AVM context that will be ready for an external/nested call
|
|
@@ -45,7 +45,7 @@ export class AvmContext {
|
|
|
45
45
|
*/
|
|
46
46
|
public async createNestedContractCallContext(
|
|
47
47
|
address: AztecAddress,
|
|
48
|
-
calldata:
|
|
48
|
+
calldata: CallData,
|
|
49
49
|
allocatedGas: Gas,
|
|
50
50
|
callType: 'CALL' | 'STATICCALL',
|
|
51
51
|
): Promise<AvmContext> {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/fields';
|
|
2
1
|
import type { SimulationError } from '@aztec/stdlib/errors';
|
|
3
2
|
import { Gas } from '@aztec/stdlib/gas';
|
|
4
3
|
|
|
@@ -6,6 +5,7 @@ import { inspect } from 'util';
|
|
|
6
5
|
|
|
7
6
|
import { createSimulationError } from '../../common/errors.js';
|
|
8
7
|
import type { Gas as AvmGas } from './avm_gas.js';
|
|
8
|
+
import type { ReturnData } from './calldata.js';
|
|
9
9
|
import type { AvmRevertReason } from './errors.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -14,22 +14,33 @@ import type { AvmRevertReason } from './errors.js';
|
|
|
14
14
|
export class AvmContractCallResult {
|
|
15
15
|
constructor(
|
|
16
16
|
public reverted: boolean,
|
|
17
|
-
public output:
|
|
17
|
+
public output: ReturnData,
|
|
18
18
|
public gasLeft: AvmGas,
|
|
19
19
|
public revertReason?: AvmRevertReason,
|
|
20
|
+
public totalInstructions: number = 0, // including nested calls
|
|
20
21
|
) {}
|
|
21
22
|
|
|
22
23
|
toString(): string {
|
|
23
|
-
let resultsStr = `reverted: ${this.reverted}, output: ${this.output}, gasLeft: ${inspect(
|
|
24
|
+
let resultsStr = `reverted: ${this.reverted}, output: ${this.output.bestEffortReadAll(10)}${this.output.length() > 10 ? ' ...' : ''}, gasLeft: ${inspect(
|
|
25
|
+
this.gasLeft,
|
|
26
|
+
)}, totalInstructions: ${this.totalInstructions}`;
|
|
24
27
|
if (this.revertReason) {
|
|
25
|
-
resultsStr += `, revertReason: ${this.revertReason}`;
|
|
28
|
+
resultsStr += `, revertReason: ${this.revertReason.message}`;
|
|
26
29
|
}
|
|
27
30
|
return resultsStr;
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
finalize(): AvmFinalizedCallResult {
|
|
31
|
-
const revertReason = this.revertReason
|
|
32
|
-
|
|
34
|
+
const revertReason = this.revertReason
|
|
35
|
+
? createSimulationError(this.revertReason, this.output.bestEffortReadAll())
|
|
36
|
+
: undefined;
|
|
37
|
+
return new AvmFinalizedCallResult(
|
|
38
|
+
this.reverted,
|
|
39
|
+
this.output,
|
|
40
|
+
Gas.from(this.gasLeft),
|
|
41
|
+
revertReason,
|
|
42
|
+
this.totalInstructions,
|
|
43
|
+
);
|
|
33
44
|
}
|
|
34
45
|
}
|
|
35
46
|
|
|
@@ -40,15 +51,18 @@ export class AvmContractCallResult {
|
|
|
40
51
|
export class AvmFinalizedCallResult {
|
|
41
52
|
constructor(
|
|
42
53
|
public reverted: boolean,
|
|
43
|
-
public output:
|
|
54
|
+
public output: ReturnData,
|
|
44
55
|
public gasLeft: Gas,
|
|
45
56
|
public revertReason?: SimulationError,
|
|
57
|
+
public totalInstructions: number = 0, // including nested calls
|
|
46
58
|
) {}
|
|
47
59
|
|
|
48
60
|
toString(): string {
|
|
49
|
-
let resultsStr = `reverted: ${this.reverted}, output: ${this.output}, gasLeft: ${inspect(
|
|
61
|
+
let resultsStr = `reverted: ${this.reverted}, output: ${this.output.bestEffortReadAll(10)}${this.output.length() > 10 ? ' ...' : ''}, gasLeft: ${inspect(
|
|
62
|
+
this.gasLeft,
|
|
63
|
+
)}, totalInstructions: ${this.totalInstructions}`;
|
|
50
64
|
if (this.revertReason) {
|
|
51
|
-
resultsStr += `, revertReason: ${this.revertReason}`;
|
|
65
|
+
resultsStr += `, revertReason: ${this.revertReason.message}`;
|
|
52
66
|
}
|
|
53
67
|
return resultsStr;
|
|
54
68
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import type { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
2
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
4
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
4
5
|
|
|
6
|
+
import type { CallData } from './calldata.js';
|
|
7
|
+
|
|
5
8
|
/**
|
|
6
9
|
* Contains variables that remain constant during AVM execution
|
|
7
10
|
* These variables are provided by the public kernel circuit
|
|
@@ -14,10 +17,15 @@ export class AvmExecutionEnvironment {
|
|
|
14
17
|
public readonly transactionFee: Fr,
|
|
15
18
|
public readonly globals: GlobalVariables,
|
|
16
19
|
public readonly isStaticCall: boolean,
|
|
17
|
-
public readonly calldata:
|
|
20
|
+
public readonly calldata: CallData,
|
|
21
|
+
public readonly config: PublicSimulatorConfig,
|
|
18
22
|
) {}
|
|
19
23
|
|
|
20
|
-
private deriveEnvironmentForNestedCallInternal(
|
|
24
|
+
private deriveEnvironmentForNestedCallInternal(
|
|
25
|
+
targetAddress: AztecAddress,
|
|
26
|
+
calldata: CallData,
|
|
27
|
+
isStaticCall: boolean,
|
|
28
|
+
): AvmExecutionEnvironment {
|
|
21
29
|
return new AvmExecutionEnvironment(
|
|
22
30
|
/*address=*/ targetAddress,
|
|
23
31
|
/*sender=*/ this.address,
|
|
@@ -26,14 +34,18 @@ export class AvmExecutionEnvironment {
|
|
|
26
34
|
this.globals,
|
|
27
35
|
isStaticCall,
|
|
28
36
|
calldata,
|
|
37
|
+
this.config,
|
|
29
38
|
);
|
|
30
39
|
}
|
|
31
40
|
|
|
32
|
-
public deriveEnvironmentForNestedCall(targetAddress: AztecAddress, calldata:
|
|
41
|
+
public deriveEnvironmentForNestedCall(targetAddress: AztecAddress, calldata: CallData): AvmExecutionEnvironment {
|
|
33
42
|
return this.deriveEnvironmentForNestedCallInternal(targetAddress, calldata, /*isStaticCall=*/ false);
|
|
34
43
|
}
|
|
35
44
|
|
|
36
|
-
public deriveEnvironmentForNestedStaticCall(
|
|
45
|
+
public deriveEnvironmentForNestedStaticCall(
|
|
46
|
+
targetAddress: AztecAddress,
|
|
47
|
+
calldata: CallData,
|
|
48
|
+
): AvmExecutionEnvironment {
|
|
37
49
|
return this.deriveEnvironmentForNestedCallInternal(targetAddress, calldata, /*isStaticCall=*/ true);
|
|
38
50
|
}
|
|
39
51
|
}
|
|
@@ -2,7 +2,6 @@ import * as c from '@aztec/constants';
|
|
|
2
2
|
|
|
3
3
|
import { TypeTag } from './avm_memory_types.js';
|
|
4
4
|
import { InstructionExecutionError } from './errors.js';
|
|
5
|
-
import { Addressing, AddressingMode } from './opcodes/addressing_mode.js';
|
|
6
5
|
import { Opcode } from './serialization/instruction_serialization.js';
|
|
7
6
|
|
|
8
7
|
/** Gas counters in L1, L2, and DA. */
|
|
@@ -27,9 +26,9 @@ export function makeGas(gasCost: Partial<Gas>) {
|
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
/** Sums together multiple instances of Gas. */
|
|
30
|
-
export function sumGas(...gases: Partial<Gas>[]) {
|
|
31
|
-
return gases.reduce(
|
|
32
|
-
(acc
|
|
29
|
+
export function sumGas(...gases: Partial<Gas>[]): Gas {
|
|
30
|
+
return gases.reduce<Gas>(
|
|
31
|
+
(acc, gas) => ({
|
|
33
32
|
l2Gas: acc.l2Gas + (gas.l2Gas ?? 0),
|
|
34
33
|
daGas: acc.daGas + (gas.daGas ?? 0),
|
|
35
34
|
}),
|
|
@@ -105,13 +104,13 @@ const BASE_GAS_COSTS: Record<Opcode, Gas> = {
|
|
|
105
104
|
[Opcode.MOV_8]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0),
|
|
106
105
|
[Opcode.MOV_16]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0),
|
|
107
106
|
[Opcode.SLOAD]: makeCost(c.AVM_SLOAD_BASE_L2_GAS, 0),
|
|
108
|
-
[Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS,
|
|
107
|
+
[Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS, 0), // DA gas is dynamic
|
|
109
108
|
[Opcode.NOTEHASHEXISTS]: makeCost(c.AVM_NOTEHASHEXISTS_BASE_L2_GAS, 0),
|
|
110
109
|
[Opcode.EMITNOTEHASH]: makeCost(c.AVM_EMITNOTEHASH_BASE_L2_GAS, c.AVM_EMITNOTEHASH_BASE_DA_GAS),
|
|
111
110
|
[Opcode.NULLIFIEREXISTS]: makeCost(c.AVM_NULLIFIEREXISTS_BASE_L2_GAS, 0),
|
|
112
111
|
[Opcode.EMITNULLIFIER]: makeCost(c.AVM_EMITNULLIFIER_BASE_L2_GAS, c.AVM_EMITNULLIFIER_BASE_DA_GAS),
|
|
113
112
|
[Opcode.L1TOL2MSGEXISTS]: makeCost(c.AVM_L1TOL2MSGEXISTS_BASE_L2_GAS, 0),
|
|
114
|
-
[Opcode.EMITUNENCRYPTEDLOG]: makeCost(c.AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS,
|
|
113
|
+
[Opcode.EMITUNENCRYPTEDLOG]: makeCost(c.AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS, c.AVM_EMITUNENCRYPTEDLOG_BASE_DA_GAS),
|
|
115
114
|
[Opcode.SENDL2TOL1MSG]: makeCost(c.AVM_SENDL2TOL1MSG_BASE_L2_GAS, c.AVM_SENDL2TOL1MSG_BASE_DA_GAS),
|
|
116
115
|
[Opcode.GETCONTRACTINSTANCE]: makeCost(c.AVM_GETCONTRACTINSTANCE_BASE_L2_GAS, 0),
|
|
117
116
|
[Opcode.CALL]: makeCost(c.AVM_CALL_BASE_L2_GAS, 0),
|
|
@@ -130,14 +129,16 @@ const BASE_GAS_COSTS: Record<Opcode, Gas> = {
|
|
|
130
129
|
const DYNAMIC_GAS_COSTS = new Map<Opcode, Gas>([
|
|
131
130
|
[Opcode.CALLDATACOPY, makeCost(c.AVM_CALLDATACOPY_DYN_L2_GAS, 0)],
|
|
132
131
|
[Opcode.RETURNDATACOPY, makeCost(c.AVM_RETURNDATACOPY_DYN_L2_GAS, 0)],
|
|
132
|
+
// TODO: Call and static call based on bytecode length
|
|
133
133
|
[Opcode.EMITUNENCRYPTEDLOG, makeCost(c.AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS, c.AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS)],
|
|
134
|
-
[Opcode.CALL, makeCost(c.AVM_CALL_DYN_L2_GAS, 0)],
|
|
135
|
-
[Opcode.STATICCALL, makeCost(c.AVM_STATICCALL_DYN_L2_GAS, 0)],
|
|
136
|
-
[Opcode.RETURN, makeCost(c.AVM_RETURN_DYN_L2_GAS, 0)],
|
|
137
|
-
[Opcode.REVERT_8, makeCost(c.AVM_REVERT_DYN_L2_GAS, 0)],
|
|
138
|
-
[Opcode.REVERT_16, makeCost(c.AVM_REVERT_DYN_L2_GAS, 0)],
|
|
139
|
-
[Opcode.DEBUGLOG, makeCost(c.AVM_DEBUGLOG_DYN_L2_GAS, 0)],
|
|
140
134
|
[Opcode.TORADIXBE, makeCost(c.AVM_TORADIXBE_DYN_L2_GAS, 0)],
|
|
135
|
+
[Opcode.AND_8, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
|
|
136
|
+
[Opcode.AND_16, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
|
|
137
|
+
[Opcode.OR_8, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
|
|
138
|
+
[Opcode.OR_16, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
|
|
139
|
+
[Opcode.XOR_8, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
|
|
140
|
+
[Opcode.XOR_16, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
|
|
141
|
+
[Opcode.SSTORE, makeCost(0, c.AVM_SSTORE_DYN_DA_GAS)],
|
|
141
142
|
]);
|
|
142
143
|
|
|
143
144
|
/** Returns the fixed base gas cost for a given opcode. */
|
|
@@ -145,35 +146,22 @@ export function getBaseGasCost(opcode: Opcode): Gas {
|
|
|
145
146
|
return BASE_GAS_COSTS[opcode];
|
|
146
147
|
}
|
|
147
148
|
|
|
148
|
-
export function
|
|
149
|
-
return
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
const indirectCount = Addressing.fromWire(indirect ?? 0).count(AddressingMode.INDIRECT);
|
|
156
|
-
const l2MemoryGasCost =
|
|
157
|
-
(reads ?? 0) * GAS_COST_CONSTANTS.MEMORY_READ +
|
|
158
|
-
(writes ?? 0) * GAS_COST_CONSTANTS.MEMORY_WRITE +
|
|
159
|
-
indirectCount * GAS_COST_CONSTANTS.MEMORY_INDIRECT_READ_PENALTY;
|
|
160
|
-
return makeGas({ l2Gas: l2MemoryGasCost });
|
|
149
|
+
export function computeAddressingCost(indirectOperandsCount: number, relativeOperandsCount: number): Gas {
|
|
150
|
+
return makeCost(
|
|
151
|
+
(relativeOperandsCount !== 0 ? c.AVM_ADDRESSING_BASE_RESOLUTION_L2_GAS : 0) +
|
|
152
|
+
indirectOperandsCount * c.AVM_ADDRESSING_INDIRECT_L2_GAS +
|
|
153
|
+
relativeOperandsCount * c.AVM_ADDRESSING_RELATIVE_L2_GAS,
|
|
154
|
+
0,
|
|
155
|
+
);
|
|
161
156
|
}
|
|
162
157
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
MEMORY_READ: 10,
|
|
166
|
-
MEMORY_INDIRECT_READ_PENALTY: 10,
|
|
167
|
-
MEMORY_WRITE: 100,
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
/** Returns gas cost for an operation on a given type tag based on the base cost per byte. */
|
|
171
|
-
export function getGasCostForTypeTag(tag: TypeTag, baseCost: Gas) {
|
|
172
|
-
return mulGas(baseCost, getGasCostMultiplierFromTypeTag(tag));
|
|
158
|
+
export function getDynamicGasCost(opcode: Opcode): Gas {
|
|
159
|
+
return DYNAMIC_GAS_COSTS.has(opcode) ? DYNAMIC_GAS_COSTS.get(opcode)! : makeCost(0, 0);
|
|
173
160
|
}
|
|
174
161
|
|
|
175
|
-
/** Returns a multiplier based on the size of the type represented by the tag.
|
|
176
|
-
|
|
162
|
+
/** Returns a multiplier based on the byte size of the type represented by the integer tag.
|
|
163
|
+
* Used to account for necessary rows in the bitwise trace. Throws on invalid. */
|
|
164
|
+
export function getBitwiseDynamicGasMultiplier(tag: TypeTag) {
|
|
177
165
|
switch (tag) {
|
|
178
166
|
case TypeTag.UINT1: // same as u8
|
|
179
167
|
return 1;
|
|
@@ -188,7 +176,7 @@ function getGasCostMultiplierFromTypeTag(tag: TypeTag) {
|
|
|
188
176
|
case TypeTag.UINT128:
|
|
189
177
|
return 16;
|
|
190
178
|
case TypeTag.FIELD:
|
|
191
|
-
return
|
|
179
|
+
return 0; // Field is not allowed for bitwise operations. However we don't fail in gas, since we'll fail in bitwise.
|
|
192
180
|
case TypeTag.INVALID:
|
|
193
181
|
throw new InstructionExecutionError(`Invalid tag type for gas cost multiplier: ${TypeTag[tag]}`);
|
|
194
182
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
|
|
3
3
|
import type { Gas } from './avm_gas.js';
|
|
4
4
|
import { TaggedMemory } from './avm_memory_types.js';
|
|
5
|
+
import { type ReturnData, ReturnDataArray } from './calldata.js';
|
|
5
6
|
import { type AvmRevertReason, OutOfGasError } from './errors.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -39,7 +40,7 @@ export class AvmMachineState {
|
|
|
39
40
|
/** program counter of the next instruction, byte based */
|
|
40
41
|
public nextPc: number = 0;
|
|
41
42
|
/** return/revertdata of the last nested call. */
|
|
42
|
-
public nestedReturndata:
|
|
43
|
+
public nestedReturndata: ReturnData = new ReturnDataArray([]);
|
|
43
44
|
/** Tracks whether the last external call was successful */
|
|
44
45
|
public nestedCallSuccess: boolean = false;
|
|
45
46
|
/**
|
|
@@ -66,7 +67,12 @@ export class AvmMachineState {
|
|
|
66
67
|
/** Signals that execution has reverted normally (this does not cover exceptional halts) */
|
|
67
68
|
private reverted: boolean = false;
|
|
68
69
|
/** Output data must NOT be modified once it is set */
|
|
69
|
-
private output:
|
|
70
|
+
private output: ReturnData = new ReturnDataArray([]);
|
|
71
|
+
|
|
72
|
+
// Metrics only - not needed for execution
|
|
73
|
+
/** instruction counter, including nested calls */
|
|
74
|
+
public instrCounter: number = 0;
|
|
75
|
+
// End metrics only
|
|
70
76
|
|
|
71
77
|
constructor(gasLeft: Gas);
|
|
72
78
|
constructor(l2GasLeft: number, daGasLeft: number);
|
|
@@ -124,7 +130,7 @@ export class AvmMachineState {
|
|
|
124
130
|
* Output data must NOT be modified once it is set
|
|
125
131
|
* @param output
|
|
126
132
|
*/
|
|
127
|
-
public return(output:
|
|
133
|
+
public return(output: ReturnData) {
|
|
128
134
|
this.halted = true;
|
|
129
135
|
this.output = output;
|
|
130
136
|
}
|
|
@@ -134,7 +140,7 @@ export class AvmMachineState {
|
|
|
134
140
|
* Output data must NOT be modified once it is set
|
|
135
141
|
* @param output
|
|
136
142
|
*/
|
|
137
|
-
public revert(output:
|
|
143
|
+
public revert(output: ReturnData) {
|
|
138
144
|
this.halted = true;
|
|
139
145
|
this.reverted = true;
|
|
140
146
|
this.output = output;
|
|
@@ -148,7 +154,7 @@ export class AvmMachineState {
|
|
|
148
154
|
return this.reverted;
|
|
149
155
|
}
|
|
150
156
|
|
|
151
|
-
public getOutput():
|
|
157
|
+
public getOutput(): ReturnData {
|
|
152
158
|
return this.output;
|
|
153
159
|
}
|
|
154
160
|
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
MEM_TAG_U128,
|
|
9
9
|
} from '@aztec/constants';
|
|
10
10
|
import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
11
|
-
import { Fr } from '@aztec/foundation/
|
|
11
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
12
12
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
13
13
|
import type { FunctionsOf } from '@aztec/foundation/types';
|
|
14
14
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -32,6 +32,9 @@ export abstract class MemoryValue {
|
|
|
32
32
|
|
|
33
33
|
// Use sparingly.
|
|
34
34
|
public abstract toBigInt(): bigint;
|
|
35
|
+
public getTag(): TypeTag {
|
|
36
|
+
return TaggedMemory.getTag(this);
|
|
37
|
+
}
|
|
35
38
|
|
|
36
39
|
// To Buffer
|
|
37
40
|
public abstract toBuffer(): Buffer;
|
|
@@ -71,6 +74,7 @@ export abstract class IntegralValue extends MemoryValue {
|
|
|
71
74
|
**/
|
|
72
75
|
function UnsignedIntegerClassFactory(bits: number) {
|
|
73
76
|
return class NewUintClass extends IntegralValue {
|
|
77
|
+
static readonly bits: number = bits;
|
|
74
78
|
static readonly mod: bigint = 1n << BigInt(bits);
|
|
75
79
|
static readonly bitmask: bigint = this.mod - 1n;
|
|
76
80
|
public readonly n: bigint; // Cannot be private due to TS limitations.
|
|
@@ -78,6 +82,7 @@ function UnsignedIntegerClassFactory(bits: number) {
|
|
|
78
82
|
public constructor(n: bigint | number) {
|
|
79
83
|
super();
|
|
80
84
|
this.n = BigInt(n);
|
|
85
|
+
assert(n >= 0n, `${this.constructor.name} cannot handle negative values: ${n}.`);
|
|
81
86
|
assert(n < NewUintClass.mod, `Value ${n} is too large for ${this.constructor.name}.`);
|
|
82
87
|
}
|
|
83
88
|
|
|
@@ -104,12 +109,20 @@ function UnsignedIntegerClassFactory(bits: number) {
|
|
|
104
109
|
|
|
105
110
|
// No sign extension.
|
|
106
111
|
public shr(rhs: NewUintClass): NewUintClass {
|
|
107
|
-
// Note that this.n is
|
|
112
|
+
// Note that this.n is >= 0 by class invariant.
|
|
108
113
|
return this.build(this.n >> rhs.n);
|
|
109
114
|
}
|
|
110
115
|
|
|
111
116
|
public shl(rhs: NewUintClass): NewUintClass {
|
|
112
|
-
|
|
117
|
+
const shiftAmount = rhs.n;
|
|
118
|
+
const bitSize = BigInt(NewUintClass.bits);
|
|
119
|
+
|
|
120
|
+
// Shifting by more than the bit size always results in 0
|
|
121
|
+
if (shiftAmount >= bitSize) {
|
|
122
|
+
return this.build(0n);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return this.build((this.n << shiftAmount) & NewUintClass.bitmask);
|
|
113
126
|
}
|
|
114
127
|
|
|
115
128
|
public and(rhs: NewUintClass): NewUintClass {
|
|
@@ -252,7 +265,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
252
265
|
public getAs<T>(offset: number): T {
|
|
253
266
|
assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
254
267
|
const word = this._mem.get(offset);
|
|
255
|
-
//TaggedMemory.log.trace(`
|
|
268
|
+
//TaggedMemory.log.trace(`Memory read: ${offset} -> ${word}`);
|
|
256
269
|
if (word === undefined) {
|
|
257
270
|
TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
|
|
258
271
|
return new Field(0) as T;
|
|
@@ -288,7 +301,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
288
301
|
public set(offset: number, v: MemoryValue) {
|
|
289
302
|
assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
290
303
|
this._mem.set(offset, v);
|
|
291
|
-
//TaggedMemory.log.trace(`
|
|
304
|
+
//TaggedMemory.log.trace(`Memory write: ${offset} <- ${v}`);
|
|
292
305
|
}
|
|
293
306
|
|
|
294
307
|
public setSlice(offset: number, slice: MemoryValue[]) {
|
|
@@ -319,8 +332,8 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
319
332
|
}
|
|
320
333
|
}
|
|
321
334
|
|
|
322
|
-
public
|
|
323
|
-
|
|
335
|
+
public static isValidMemoryAddressTag(tag: TypeTag) {
|
|
336
|
+
return tag === TypeTag.UINT32;
|
|
324
337
|
}
|
|
325
338
|
|
|
326
339
|
public static checkIsIntegralTag(tag: TypeTag) {
|
|
@@ -356,6 +369,10 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
356
369
|
* Check tags for all memory in the specified range.
|
|
357
370
|
*/
|
|
358
371
|
public checkTagsRange(tag: TypeTag, startOffset: number, size: number) {
|
|
372
|
+
if (startOffset + size > TaggedMemory.MAX_MEMORY_SIZE) {
|
|
373
|
+
throw new MemorySliceOutOfRangeError(startOffset, size);
|
|
374
|
+
}
|
|
375
|
+
|
|
359
376
|
for (let offset = startOffset; offset < startOffset + size; offset++) {
|
|
360
377
|
this.checkTag(tag, offset);
|
|
361
378
|
}
|