@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.03f7ef2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +6 -15
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +1 -2
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +12 -6
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +10 -16
- package/dest/private/acvm/acvm_types.d.ts +2 -2
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +19 -20
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +32 -24
- package/dest/private/acvm/index.d.ts +1 -2
- package/dest/private/acvm/index.d.ts.map +1 -1
- package/dest/private/acvm/index.js +0 -1
- package/dest/private/acvm/serialize.d.ts +21 -4
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +54 -1
- package/dest/private/acvm_native.d.ts +39 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
- package/dest/private/acvm_wasm.d.ts +15 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
- package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/private/acvm_wasm_with_blobs.js +35 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +209 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
- package/dest/private/circuit_simulator.d.ts +35 -0
- package/dest/private/circuit_simulator.d.ts.map +1 -0
- package/dest/private/circuit_simulator.js +43 -0
- package/dest/private/factory.d.ts +12 -0
- package/dest/private/factory.d.ts.map +1 -0
- package/dest/private/{providers/factory.js → factory.js} +2 -2
- package/dest/public/avm/avm_context.d.ts +7 -7
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +6 -4
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +11 -7
- package/dest/public/avm/avm_execution_environment.d.ts +5 -3
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +5 -3
- package/dest/public/avm/avm_gas.d.ts +5 -21
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +27 -35
- package/dest/public/avm/avm_machine_state.d.ts +4 -2
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +2 -0
- package/dest/public/avm/avm_memory_types.d.ts +100 -89
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +18 -7
- package/dest/public/avm/avm_simulator.d.ts +7 -7
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +28 -39
- package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
- package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator_interface.js +3 -0
- package/dest/public/avm/errors.d.ts +11 -29
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +19 -57
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +23 -16
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
- package/dest/public/avm/fixtures/initializers.d.ts +42 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +44 -0
- package/dest/public/avm/fixtures/utils.d.ts +39 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +96 -0
- package/dest/public/avm/index.d.ts +1 -3
- package/dest/public/avm/index.d.ts.map +1 -1
- package/dest/public/avm/index.js +0 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +28 -25
- package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +46 -26
- package/dest/public/avm/opcodes/arithmetic.d.ts +19 -7
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +27 -3
- package/dest/public/avm/opcodes/bitwise.d.ts +10 -18
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +19 -26
- package/dest/public/avm/opcodes/comparators.d.ts +4 -4
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +3 -3
- package/dest/public/avm/opcodes/contract.d.ts +2 -3
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +9 -10
- package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +10 -8
- package/dest/public/avm/opcodes/conversion.d.ts +2 -1
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +267 -3
- package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +8 -8
- package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +17 -19
- package/dest/public/avm/opcodes/external_calls.d.ts +9 -8
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +39 -34
- package/dest/public/avm/opcodes/hashing.d.ts +2 -2
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +15 -10
- package/dest/public/avm/opcodes/index.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction.d.ts +15 -11
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +23 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.d.ts +6 -6
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +37 -33
- package/dest/public/avm/opcodes/misc.d.ts +3 -2
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +41 -16
- package/dest/public/avm/opcodes/storage.d.ts +3 -3
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +7 -5
- package/dest/public/avm/revert_reason.d.ts +18 -0
- package/dest/public/avm/revert_reason.d.ts.map +1 -0
- package/dest/public/avm/revert_reason.js +39 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +79 -75
- package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +70 -35
- package/dest/public/avm/test_utils.d.ts +12 -15
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +17 -25
- package/dest/public/contracts_db_checkpoint.d.ts +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +68 -0
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +3 -0
- package/dest/public/debug_fn_name.d.ts +18 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +35 -0
- package/dest/public/executor_metrics.d.ts +12 -4
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +37 -6
- package/dest/public/executor_metrics_interface.d.ts +10 -0
- package/dest/public/executor_metrics_interface.d.ts.map +1 -0
- package/dest/public/executor_metrics_interface.js +1 -0
- package/dest/public/fixtures/amm_test.d.ts +10 -0
- package/dest/public/fixtures/amm_test.d.ts.map +1 -0
- package/dest/public/fixtures/amm_test.js +213 -0
- package/dest/public/fixtures/bulk_test.d.ts +6 -0
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
- package/dest/public/fixtures/bulk_test.js +278 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
- package/dest/public/fixtures/index.d.ts +10 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +19 -0
- package/dest/public/fixtures/opcode_spammer.d.ts +123 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1681 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
- package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
- package/dest/public/fixtures/token_test.d.ts +12 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +96 -0
- package/dest/public/fixtures/utils.d.ts +18 -5
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +102 -59
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +46 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +139 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +100 -0
- package/dest/public/hinting_db_sources.d.ts +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +353 -0
- package/dest/public/index.d.ts +6 -9
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +52 -102
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +220 -193
- package/dest/public/public_errors.d.ts +12 -0
- package/dest/public/public_errors.d.ts.map +1 -0
- package/dest/public/public_errors.js +13 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +111 -0
- package/dest/public/public_processor/public_processor.d.ts +26 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +177 -121
- package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +1 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +131 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +22 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +13 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +8 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +5 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +24 -31
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +72 -92
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +36 -58
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +213 -205
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
- package/dest/public/side_effect_errors.d.ts +42 -2
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/side_effect_errors.js +70 -1
- package/dest/public/side_effect_trace.d.ts +22 -68
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +72 -122
- package/dest/public/side_effect_trace_interface.d.ts +13 -25
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/index.d.ts +2 -0
- package/dest/public/state_manager/index.d.ts.map +1 -0
- package/dest/public/state_manager/index.js +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
- package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +164 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +395 -0
- package/dest/public/test_executor_metrics.d.ts +55 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +307 -0
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +3 -5
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +7 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +39 -33
- package/src/client.ts +5 -3
- package/src/common/errors.ts +80 -45
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +17 -32
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +36 -30
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +64 -1
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
- package/src/private/acvm_wasm.ts +72 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +260 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
- package/src/private/circuit_simulator.ts +90 -0
- package/src/private/{providers/factory.ts → factory.ts} +6 -6
- package/src/public/avm/avm_context.ts +5 -5
- package/src/public/avm/avm_contract_call_result.ts +18 -6
- package/src/public/avm/avm_execution_environment.ts +9 -2
- package/src/public/avm/avm_gas.ts +26 -38
- package/src/public/avm/avm_machine_state.ts +6 -1
- package/src/public/avm/avm_memory_types.ts +20 -7
- package/src/public/avm/avm_simulator.ts +50 -58
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/avm_simulation_tester.ts +33 -22
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
- package/src/public/avm/fixtures/initializers.ts +102 -0
- package/src/public/avm/fixtures/utils.ts +151 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +64 -29
- package/src/public/avm/opcodes/addressing_mode.ts +56 -32
- package/src/public/avm/opcodes/arithmetic.ts +37 -3
- package/src/public/avm/opcodes/bitwise.ts +33 -29
- package/src/public/avm/opcodes/comparators.ts +6 -3
- package/src/public/avm/opcodes/contract.ts +10 -7
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +27 -3
- package/src/public/avm/opcodes/ec_add.ts +11 -8
- package/src/public/avm/opcodes/environment_getters.ts +27 -22
- package/src/public/avm/opcodes/external_calls.ts +61 -29
- package/src/public/avm/opcodes/hashing.ts +38 -12
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/memory.ts +71 -32
- package/src/public/avm/opcodes/misc.ts +60 -18
- package/src/public/avm/opcodes/storage.ts +22 -6
- package/src/public/avm/revert_reason.ts +58 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +89 -80
- package/src/public/avm/serialization/instruction_serialization.ts +75 -34
- package/src/public/avm/test_utils.ts +25 -42
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +76 -0
- package/src/public/debug_fn_name.ts +50 -0
- package/src/public/executor_metrics.ts +56 -6
- package/src/public/executor_metrics_interface.ts +15 -0
- package/src/public/fixtures/amm_test.ts +331 -0
- package/src/public/fixtures/bulk_test.ts +169 -0
- package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +219 -0
- package/src/public/fixtures/index.ts +13 -0
- package/src/public/fixtures/minimal_public_tx.ts +26 -0
- package/src/public/fixtures/opcode_spammer.ts +1638 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +223 -114
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
- package/src/public/fixtures/token_test.ts +148 -0
- package/src/public/fixtures/utils.ts +141 -69
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +240 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +140 -0
- package/src/public/hinting_db_sources.ts +607 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +279 -259
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
- package/src/public/public_processor/public_processor.ts +242 -178
- package/src/public/public_processor/public_processor_metrics.ts +2 -2
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +121 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +200 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +237 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
- package/src/public/public_tx_simulator/factories.ts +41 -0
- package/src/public/public_tx_simulator/index.ts +7 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +168 -195
- package/src/public/public_tx_simulator/public_tx_simulator.ts +302 -260
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
- package/src/public/side_effect_errors.ts +91 -1
- package/src/public/side_effect_trace.ts +95 -321
- package/src/public/side_effect_trace_interface.ts +11 -59
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
- package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
- package/src/public/state_manager/state_manager.ts +560 -0
- package/src/public/test_executor_metrics.ts +397 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts +0 -40
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
- package/dest/private/providers/factory.d.ts +0 -12
- package/dest/private/providers/factory.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.d.ts +0 -19
- package/dest/private/providers/simulation_provider.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.js +0 -24
- package/dest/private/simulator.d.ts +0 -34
- package/dest/private/simulator.d.ts.map +0 -1
- package/dest/private/simulator.js +0 -76
- package/dest/private/unconstrained_execution.d.ts +0 -10
- package/dest/private/unconstrained_execution.d.ts.map +0 -1
- package/dest/private/unconstrained_execution.js +0 -27
- package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
- package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
- package/dest/private/unconstrained_execution_oracle.js +0 -258
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/dest/public/avm/fixtures/index.d.ts +0 -84
- package/dest/public/avm/fixtures/index.d.ts.map +0 -1
- package/dest/public/avm/fixtures/index.js +0 -175
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/public/avm/journal/index.d.ts +0 -2
- package/dest/public/avm/journal/index.d.ts.map +0 -1
- package/dest/public/avm/journal/index.js +0 -1
- package/dest/public/avm/journal/journal.d.ts +0 -209
- package/dest/public/avm/journal/journal.d.ts.map +0 -1
- package/dest/public/avm/journal/journal.js +0 -486
- package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/bytecode_errors.js +0 -6
- package/dest/public/execution.d.ts +0 -108
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/execution.js +0 -9
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/dest/test/utils.d.ts +0 -13
- package/dest/test/utils.d.ts.map +0 -1
- package/dest/test/utils.js +0 -22
- package/src/common/db_interfaces.ts +0 -94
- package/src/common/debug_fn_name.ts +0 -18
- package/src/common/message_load_oracle_inputs.ts +0 -15
- package/src/private/acvm/oracle/index.ts +0 -16
- package/src/private/acvm/oracle/oracle.ts +0 -455
- package/src/private/acvm/oracle/typed_oracle.ts +0 -259
- package/src/private/execution_data_provider.ts +0 -323
- package/src/private/execution_note_cache.ts +0 -217
- package/src/private/hashed_values_cache.ts +0 -55
- package/src/private/index.ts +0 -16
- package/src/private/pick_notes.ts +0 -141
- package/src/private/private_execution.ts +0 -151
- package/src/private/private_execution_oracle.ts +0 -614
- package/src/private/providers/acvm_wasm.ts +0 -63
- package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
- package/src/private/providers/simulation_provider.ts +0 -45
- package/src/private/simulator.ts +0 -147
- package/src/private/unconstrained_execution.ts +0 -50
- package/src/private/unconstrained_execution_oracle.ts +0 -373
- package/src/public/avm/bytecode_utils.ts +0 -17
- package/src/public/avm/fixtures/index.ts +0 -296
- package/src/public/avm/journal/index.ts +0 -1
- package/src/public/avm/journal/journal.ts +0 -742
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
- package/src/public/bytecode_errors.ts +0 -6
- package/src/public/execution.ts +0 -140
- package/src/public/tx_contract_cache.ts +0 -69
- package/src/test/utils.ts +0 -36
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
|
|
3
|
+
import { strict as assert } from 'assert';
|
|
4
|
+
|
|
1
5
|
import type { AvmContext } from '../avm_context.js';
|
|
2
6
|
import { Field, TaggedMemory, TypeTag, Uint32 } from '../avm_memory_types.js';
|
|
3
7
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
@@ -13,42 +17,42 @@ export class Set extends Instruction {
|
|
|
13
17
|
OperandType.UINT8, // opcode
|
|
14
18
|
OperandType.UINT8, // indirect
|
|
15
19
|
OperandType.UINT8, // dstOffset
|
|
16
|
-
OperandType.
|
|
20
|
+
OperandType.TAG, // tag
|
|
17
21
|
OperandType.UINT8, // const (value)
|
|
18
22
|
];
|
|
19
23
|
public static readonly wireFormat16: OperandType[] = [
|
|
20
24
|
OperandType.UINT8, // opcode
|
|
21
25
|
OperandType.UINT8, // indirect
|
|
22
26
|
OperandType.UINT16, // dstOffset
|
|
23
|
-
OperandType.
|
|
27
|
+
OperandType.TAG, // tag
|
|
24
28
|
OperandType.UINT16, // const (value)
|
|
25
29
|
];
|
|
26
30
|
public static readonly wireFormat32: OperandType[] = [
|
|
27
31
|
OperandType.UINT8, // opcode
|
|
28
32
|
OperandType.UINT8, // indirect
|
|
29
33
|
OperandType.UINT16, // dstOffset
|
|
30
|
-
OperandType.
|
|
34
|
+
OperandType.TAG, // tag
|
|
31
35
|
OperandType.UINT32, // const (value)
|
|
32
36
|
];
|
|
33
37
|
public static readonly wireFormat64: OperandType[] = [
|
|
34
38
|
OperandType.UINT8, // opcode
|
|
35
39
|
OperandType.UINT8, // indirect
|
|
36
40
|
OperandType.UINT16, // dstOffset
|
|
37
|
-
OperandType.
|
|
41
|
+
OperandType.TAG, // tag
|
|
38
42
|
OperandType.UINT64, // const (value)
|
|
39
43
|
];
|
|
40
44
|
public static readonly wireFormat128: OperandType[] = [
|
|
41
45
|
OperandType.UINT8, // opcode
|
|
42
46
|
OperandType.UINT8, // indirect
|
|
43
47
|
OperandType.UINT16, // dstOffset
|
|
44
|
-
OperandType.
|
|
48
|
+
OperandType.TAG, // tag
|
|
45
49
|
OperandType.UINT128, // const (value)
|
|
46
50
|
];
|
|
47
51
|
public static readonly wireFormatFF: OperandType[] = [
|
|
48
52
|
OperandType.UINT8, // opcode
|
|
49
53
|
OperandType.UINT8, // indirect
|
|
50
54
|
OperandType.UINT16, // dstOffset
|
|
51
|
-
OperandType.
|
|
55
|
+
OperandType.TAG, // tag
|
|
52
56
|
OperandType.FF, // const (value)
|
|
53
57
|
];
|
|
54
58
|
|
|
@@ -59,7 +63,8 @@ export class Set extends Instruction {
|
|
|
59
63
|
private value: bigint | number,
|
|
60
64
|
) {
|
|
61
65
|
super();
|
|
62
|
-
|
|
66
|
+
assert(this.value >= 0, `Value ${this.value} is negative`);
|
|
67
|
+
assert(this.value < Fr.MODULUS, `Value ${this.value} is larger than Fr.MODULUS`);
|
|
63
68
|
}
|
|
64
69
|
|
|
65
70
|
public async execute(context: AvmContext): Promise<void> {
|
|
@@ -67,10 +72,13 @@ export class Set extends Instruction {
|
|
|
67
72
|
const res = TaggedMemory.buildFromTagTruncating(this.value, this.inTag);
|
|
68
73
|
|
|
69
74
|
const memory = context.machineState.memory;
|
|
70
|
-
|
|
75
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
76
|
+
|
|
77
|
+
context.machineState.consumeGas(
|
|
78
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
79
|
+
);
|
|
71
80
|
|
|
72
81
|
const operands = [this.dstOffset];
|
|
73
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
74
82
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
75
83
|
memory.set(dstOffset, res);
|
|
76
84
|
}
|
|
@@ -85,27 +93,34 @@ export class Cast extends Instruction {
|
|
|
85
93
|
OperandType.UINT8,
|
|
86
94
|
OperandType.UINT8,
|
|
87
95
|
OperandType.UINT8,
|
|
88
|
-
OperandType.
|
|
96
|
+
OperandType.TAG,
|
|
89
97
|
];
|
|
90
98
|
static readonly wireFormat16 = [
|
|
91
99
|
OperandType.UINT8,
|
|
92
100
|
OperandType.UINT8,
|
|
93
101
|
OperandType.UINT16,
|
|
94
102
|
OperandType.UINT16,
|
|
95
|
-
OperandType.
|
|
103
|
+
OperandType.TAG,
|
|
96
104
|
];
|
|
97
105
|
|
|
98
|
-
constructor(
|
|
106
|
+
constructor(
|
|
107
|
+
private indirect: number,
|
|
108
|
+
private srcOffset: number,
|
|
109
|
+
private dstOffset: number,
|
|
110
|
+
private dstTag: number,
|
|
111
|
+
) {
|
|
99
112
|
super();
|
|
100
|
-
TaggedMemory.checkIsValidTag(dstTag);
|
|
101
113
|
}
|
|
102
114
|
|
|
103
115
|
public async execute(context: AvmContext): Promise<void> {
|
|
104
116
|
const memory = context.machineState.memory;
|
|
105
|
-
|
|
117
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
118
|
+
|
|
119
|
+
context.machineState.consumeGas(
|
|
120
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
121
|
+
);
|
|
106
122
|
|
|
107
123
|
const operands = [this.srcOffset, this.dstOffset];
|
|
108
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
109
124
|
const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
110
125
|
|
|
111
126
|
const a = memory.get(srcOffset);
|
|
@@ -134,16 +149,23 @@ export class Mov extends Instruction {
|
|
|
134
149
|
OperandType.UINT16,
|
|
135
150
|
];
|
|
136
151
|
|
|
137
|
-
constructor(
|
|
152
|
+
constructor(
|
|
153
|
+
private indirect: number,
|
|
154
|
+
private srcOffset: number,
|
|
155
|
+
private dstOffset: number,
|
|
156
|
+
) {
|
|
138
157
|
super();
|
|
139
158
|
}
|
|
140
159
|
|
|
141
160
|
public async execute(context: AvmContext): Promise<void> {
|
|
142
161
|
const memory = context.machineState.memory;
|
|
143
|
-
|
|
162
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
163
|
+
|
|
164
|
+
context.machineState.consumeGas(
|
|
165
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
166
|
+
);
|
|
144
167
|
|
|
145
168
|
const operands = [this.srcOffset, this.dstOffset];
|
|
146
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
147
169
|
const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
148
170
|
const a = memory.get(srcOffset);
|
|
149
171
|
memory.set(dstOffset, a);
|
|
@@ -164,8 +186,8 @@ export class CalldataCopy extends Instruction {
|
|
|
164
186
|
|
|
165
187
|
constructor(
|
|
166
188
|
private indirect: number,
|
|
167
|
-
private cdStartOffset: number,
|
|
168
189
|
private copySizeOffset: number,
|
|
190
|
+
private cdStartOffset: number,
|
|
169
191
|
private dstOffset: number,
|
|
170
192
|
) {
|
|
171
193
|
super();
|
|
@@ -173,14 +195,19 @@ export class CalldataCopy extends Instruction {
|
|
|
173
195
|
|
|
174
196
|
public async execute(context: AvmContext): Promise<void> {
|
|
175
197
|
const memory = context.machineState.memory;
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
198
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
199
|
+
|
|
200
|
+
context.machineState.consumeGas(
|
|
201
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
const operands = [this.copySizeOffset, this.cdStartOffset, this.dstOffset];
|
|
205
|
+
const [copySizeOffset, cdStartOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
179
206
|
|
|
180
207
|
memory.checkTags(TypeTag.UINT32, cdStartOffset, copySizeOffset);
|
|
181
208
|
const cdStart = memory.get(cdStartOffset).toNumber();
|
|
182
209
|
const copySize = memory.get(copySizeOffset).toNumber();
|
|
183
|
-
context.machineState.consumeGas(this.
|
|
210
|
+
context.machineState.consumeGas(this.dynamicGasCost(copySize));
|
|
184
211
|
|
|
185
212
|
// Values which are out-of-range of the calldata array will be set with Field(0);
|
|
186
213
|
const slice = context.environment.calldata.slice(cdStart, cdStart + copySize).map(f => new Field(f));
|
|
@@ -197,16 +224,23 @@ export class ReturndataSize extends Instruction {
|
|
|
197
224
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
198
225
|
static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
199
226
|
|
|
200
|
-
constructor(
|
|
227
|
+
constructor(
|
|
228
|
+
private indirect: number,
|
|
229
|
+
private dstOffset: number,
|
|
230
|
+
) {
|
|
201
231
|
super();
|
|
202
232
|
}
|
|
203
233
|
|
|
204
234
|
public async execute(context: AvmContext): Promise<void> {
|
|
205
235
|
const memory = context.machineState.memory;
|
|
236
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
237
|
+
|
|
238
|
+
context.machineState.consumeGas(
|
|
239
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
240
|
+
);
|
|
241
|
+
|
|
206
242
|
const operands = [this.dstOffset];
|
|
207
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
208
243
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
209
|
-
context.machineState.consumeGas(this.gasCost());
|
|
210
244
|
|
|
211
245
|
memory.set(dstOffset, new Uint32(context.machineState.nestedReturndata.length));
|
|
212
246
|
}
|
|
@@ -226,8 +260,8 @@ export class ReturndataCopy extends Instruction {
|
|
|
226
260
|
|
|
227
261
|
constructor(
|
|
228
262
|
private indirect: number,
|
|
229
|
-
private rdStartOffset: number,
|
|
230
263
|
private copySizeOffset: number,
|
|
264
|
+
private rdStartOffset: number,
|
|
231
265
|
private dstOffset: number,
|
|
232
266
|
) {
|
|
233
267
|
super();
|
|
@@ -235,14 +269,19 @@ export class ReturndataCopy extends Instruction {
|
|
|
235
269
|
|
|
236
270
|
public async execute(context: AvmContext): Promise<void> {
|
|
237
271
|
const memory = context.machineState.memory;
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
|
|
272
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
273
|
+
|
|
274
|
+
context.machineState.consumeGas(
|
|
275
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
const operands = [this.copySizeOffset, this.rdStartOffset, this.dstOffset];
|
|
279
|
+
const [copySizeOffset, rdStartOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
241
280
|
|
|
242
281
|
memory.checkTags(TypeTag.UINT32, rdStartOffset, copySizeOffset);
|
|
243
|
-
const rdStart = memory.get(rdStartOffset).toNumber();
|
|
244
282
|
const copySize = memory.get(copySizeOffset).toNumber();
|
|
245
|
-
|
|
283
|
+
const rdStart = memory.get(rdStartOffset).toNumber();
|
|
284
|
+
context.machineState.consumeGas(this.dynamicGasCost(copySize));
|
|
246
285
|
|
|
247
286
|
// Values which are out-of-range of the returndata array will be set with Field(0);
|
|
248
287
|
const slice = context.machineState.nestedReturndata.slice(rdStart, rdStart + copySize).map(f => new Field(f));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
1
|
+
import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
2
2
|
|
|
3
3
|
import type { AvmContext } from '../avm_context.js';
|
|
4
4
|
import { TypeTag } from '../avm_memory_types.js';
|
|
@@ -15,6 +15,7 @@ export class DebugLog extends Instruction {
|
|
|
15
15
|
static readonly wireFormat: OperandType[] = [
|
|
16
16
|
OperandType.UINT8, // Opcode
|
|
17
17
|
OperandType.UINT8, // Indirect
|
|
18
|
+
OperandType.UINT16, // level memory address
|
|
18
19
|
OperandType.UINT16, // message memory address
|
|
19
20
|
OperandType.UINT16, // fields memory address
|
|
20
21
|
OperandType.UINT16, // fields size address
|
|
@@ -23,6 +24,7 @@ export class DebugLog extends Instruction {
|
|
|
23
24
|
|
|
24
25
|
constructor(
|
|
25
26
|
private indirect: number,
|
|
27
|
+
private levelOffset: number,
|
|
26
28
|
private messageOffset: number,
|
|
27
29
|
private fieldsOffset: number,
|
|
28
30
|
private fieldsSizeOffset: number,
|
|
@@ -33,28 +35,68 @@ export class DebugLog extends Instruction {
|
|
|
33
35
|
|
|
34
36
|
public async execute(context: AvmContext): Promise<void> {
|
|
35
37
|
const memory = context.machineState.memory;
|
|
36
|
-
const
|
|
37
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
38
|
-
const [messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
|
|
38
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
context.machineState.consumeGas(
|
|
41
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
42
|
+
);
|
|
42
43
|
|
|
43
|
-
const
|
|
44
|
-
const
|
|
44
|
+
const operands = [this.levelOffset, this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
|
|
45
|
+
const [levelOffset, messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
// DebugLog is a no-op except unless the config is set to collect debug logs.
|
|
48
|
+
// Note that we still do address resolution and basic tag-checking (above)
|
|
49
|
+
// To avoid a special-case in the witness generator and circuit.
|
|
50
|
+
if (context.environment.config.collectDebugLogs) {
|
|
51
|
+
memory.checkTag(TypeTag.UINT8, levelOffset);
|
|
52
|
+
const levelNumber = memory.get(levelOffset).toNumber();
|
|
53
|
+
memory.checkTag(TypeTag.UINT32, fieldsSizeOffset);
|
|
54
|
+
const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
|
|
48
55
|
|
|
49
|
-
|
|
56
|
+
const memoryReads = 1 /* level */ + 1 /* fieldsSize */ + this.messageSize /* message */ + fieldsSize; /* fields */
|
|
57
|
+
if (
|
|
58
|
+
context.persistableState.getDebugLogMemoryReads() + memoryReads >
|
|
59
|
+
context.environment.config.collectionLimits.maxDebugLogMemoryReads
|
|
60
|
+
) {
|
|
61
|
+
// Regular error on purpose: this is not a recoverable error.
|
|
62
|
+
throw new Error(
|
|
63
|
+
`Max debug log memory reads exceeded: ${context.persistableState.getDebugLogMemoryReads() + memoryReads} > ${context.environment.config.collectionLimits.maxDebugLogMemoryReads}`,
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
context.persistableState.writeDebugLogMemoryReads(memoryReads);
|
|
50
67
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
68
|
+
const rawMessage = memory.getSlice(messageOffset, this.messageSize);
|
|
69
|
+
const fields = memory.getSlice(fieldsOffset, fieldsSize);
|
|
70
|
+
|
|
71
|
+
memory.checkTagsRange(TypeTag.UINT8, messageOffset, this.messageSize);
|
|
72
|
+
memory.checkTagsRange(TypeTag.FIELD, fieldsOffset, fieldsSize);
|
|
73
|
+
|
|
74
|
+
// Interpret str<N> = [u8; N] to string.
|
|
75
|
+
const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
|
|
76
|
+
|
|
77
|
+
if (!LogLevels[levelNumber]) {
|
|
78
|
+
// Regular error on purpose: this is not a recoverable error.
|
|
79
|
+
throw new Error(`Invalid debug log level: ${levelNumber}`);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const level = LogLevels[levelNumber];
|
|
83
|
+
|
|
84
|
+
context.persistableState.writeDebugLog(
|
|
85
|
+
context.environment.address,
|
|
86
|
+
level,
|
|
87
|
+
messageAsStr,
|
|
88
|
+
fields.map(field => field.toFr()),
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
// Skips string formatting if the level is disabled.
|
|
92
|
+
if (DebugLog.logger.isLevelEnabled(level)) {
|
|
93
|
+
const formattedStr = applyStringFormatting(
|
|
94
|
+
messageAsStr,
|
|
95
|
+
fields.map(field => field.toFr()),
|
|
96
|
+
);
|
|
57
97
|
|
|
58
|
-
|
|
98
|
+
DebugLog.logger[level](formattedStr);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
59
101
|
}
|
|
60
102
|
}
|
|
@@ -14,7 +14,11 @@ abstract class BaseStorageInstruction extends Instruction {
|
|
|
14
14
|
OperandType.UINT16,
|
|
15
15
|
];
|
|
16
16
|
|
|
17
|
-
constructor(
|
|
17
|
+
constructor(
|
|
18
|
+
protected indirect: number,
|
|
19
|
+
protected aOffset: number,
|
|
20
|
+
protected bOffset: number,
|
|
21
|
+
) {
|
|
18
22
|
super();
|
|
19
23
|
}
|
|
20
24
|
}
|
|
@@ -33,15 +37,24 @@ export class SStore extends BaseStorageInstruction {
|
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
const memory = context.machineState.memory;
|
|
36
|
-
|
|
40
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
41
|
+
|
|
42
|
+
context.machineState.consumeGas(
|
|
43
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
44
|
+
);
|
|
37
45
|
|
|
38
46
|
const operands = [this.aOffset, this.bOffset];
|
|
39
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
40
47
|
const [srcOffset, slotOffset] = addressing.resolve(operands, memory);
|
|
48
|
+
// We read before tag checking since it's needed for gas cost calculation
|
|
49
|
+
const slot = memory.get(slotOffset).toFr();
|
|
50
|
+
|
|
51
|
+
context.machineState.consumeGas(
|
|
52
|
+
this.dynamicGasCost(Number(context.persistableState.isStorageCold(context.environment.address, slot))),
|
|
53
|
+
);
|
|
54
|
+
|
|
41
55
|
memory.checkTag(TypeTag.FIELD, slotOffset);
|
|
42
56
|
memory.checkTag(TypeTag.FIELD, srcOffset);
|
|
43
57
|
|
|
44
|
-
const slot = memory.get(slotOffset).toFr();
|
|
45
58
|
const value = memory.get(srcOffset).toFr();
|
|
46
59
|
await context.persistableState.writeStorage(context.environment.address, slot, value);
|
|
47
60
|
}
|
|
@@ -57,10 +70,13 @@ export class SLoad extends BaseStorageInstruction {
|
|
|
57
70
|
|
|
58
71
|
public async execute(context: AvmContext): Promise<void> {
|
|
59
72
|
const memory = context.machineState.memory;
|
|
60
|
-
|
|
73
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
74
|
+
|
|
75
|
+
context.machineState.consumeGas(
|
|
76
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
77
|
+
);
|
|
61
78
|
|
|
62
79
|
const operands = [this.aOffset, this.bOffset];
|
|
63
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
64
80
|
const [slotOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
65
81
|
memory.checkTag(TypeTag.FIELD, slotOffset);
|
|
66
82
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
|
|
3
|
+
import type { AvmContext } from './avm_context.js';
|
|
4
|
+
import { type AvmExecutionError, AvmRevertReason } from './errors.js';
|
|
5
|
+
|
|
6
|
+
async function createRevertReason(message: string, revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
|
|
7
|
+
// We drop the returnPc information.
|
|
8
|
+
const internalCallStack = context.machineState.internalCallStack.map(entry => entry.callPc);
|
|
9
|
+
|
|
10
|
+
// If we are reverting due to the same error that we have been tracking, we use the nested error as the cause.
|
|
11
|
+
let nestedError = undefined;
|
|
12
|
+
const revertDataEquals = (a: Fr[], b: Fr[]) => a.length === b.length && a.every((v, i) => v.equals(b[i]));
|
|
13
|
+
if (
|
|
14
|
+
context.machineState.collectedRevertInfo &&
|
|
15
|
+
revertDataEquals(context.machineState.collectedRevertInfo.revertDataRepresentative, revertData)
|
|
16
|
+
) {
|
|
17
|
+
nestedError = context.machineState.collectedRevertInfo.recursiveRevertReason;
|
|
18
|
+
message = context.machineState.collectedRevertInfo.recursiveRevertReason.message;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const { functionSelector, functionName } = await context.persistableState.getPublicFunctionSelectorAndName(
|
|
22
|
+
context.environment,
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
return new AvmRevertReason(
|
|
26
|
+
message,
|
|
27
|
+
/*failingFunction=*/ {
|
|
28
|
+
contractAddress: context.environment.address,
|
|
29
|
+
functionSelector,
|
|
30
|
+
functionName,
|
|
31
|
+
},
|
|
32
|
+
/*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
|
|
33
|
+
/*options=*/ { cause: nestedError },
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Create a "revert reason" error for an exceptional halt.
|
|
39
|
+
*
|
|
40
|
+
* @param haltingError - the lower-level error causing the exceptional halt
|
|
41
|
+
* @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
|
|
42
|
+
*/
|
|
43
|
+
export async function revertReasonFromExceptionalHalt(
|
|
44
|
+
haltingError: AvmExecutionError,
|
|
45
|
+
context: AvmContext,
|
|
46
|
+
): Promise<AvmRevertReason> {
|
|
47
|
+
return await createRevertReason(haltingError.message, [], context);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Create a "revert reason" error for an explicit revert (a root cause).
|
|
52
|
+
*
|
|
53
|
+
* @param revertData - output data of the explicit REVERT instruction
|
|
54
|
+
* @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
|
|
55
|
+
*/
|
|
56
|
+
export async function revertReasonFromExplicitRevert(revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
|
|
57
|
+
return await createRevertReason('Assertion failed: ', revertData, context);
|
|
58
|
+
}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* A Buffer-like class that automatically advances the position.
|
|
3
3
|
*/
|
|
4
4
|
export class BufferCursor {
|
|
5
|
-
constructor(
|
|
5
|
+
constructor(
|
|
6
|
+
private _buffer: Buffer,
|
|
7
|
+
private _position: number = 0,
|
|
8
|
+
) {}
|
|
6
9
|
|
|
7
10
|
public position(): number {
|
|
8
11
|
return this._position;
|