@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.5daedc8
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 +5 -14
- 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 +18 -19
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +31 -23
- 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 +20 -3
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +53 -0
- 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 +6 -6
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +5 -3
- 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 +4 -2
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +4 -2
- 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 +3 -1
- 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 +99 -88
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +17 -6
- package/dest/public/avm/avm_simulator.d.ts +6 -6
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +23 -35
- 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 +7 -31
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +7 -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 +22 -15
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +7 -5
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +37 -14
- 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 +38 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +95 -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 +17 -7
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +16 -2
- 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 +6 -6
- 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 +6 -6
- 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 +38 -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 +70 -69
- 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 +11 -14
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +16 -24
- 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 +5 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +9 -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 +326 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +9 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +109 -0
- package/dest/public/fixtures/index.d.ts +8 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +7 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +29 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +35 -14
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +100 -71
- package/dest/public/fixtures/simple_contract_data_source.d.ts +35 -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 +8 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +94 -0
- package/dest/public/fixtures/utils.d.ts +17 -4
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +100 -58
- package/dest/public/hinting_db_sources.d.ts +78 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +350 -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 +51 -101
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +219 -192
- 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 +49 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +108 -0
- package/dest/public/public_processor/public_processor.d.ts +25 -37
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +154 -111
- 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 +30 -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 +133 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +66 -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 +210 -0
- package/dest/public/public_tx_simulator/index.d.ts +5 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +2 -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 +23 -30
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +71 -91
- 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 +208 -206
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -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 +21 -67
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +71 -121
- package/dest/public/side_effect_trace_interface.d.ts +12 -24
- 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 +3 -6
- 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 +3 -3
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.d.ts +159 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +392 -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 +79 -44
- 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 +35 -29
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +63 -0
- 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 +4 -4
- package/src/public/avm/avm_contract_call_result.ts +17 -5
- package/src/public/avm/avm_execution_environment.ts +8 -1
- package/src/public/avm/avm_gas.ts +23 -35
- package/src/public/avm/avm_machine_state.ts +5 -0
- package/src/public/avm/avm_memory_types.ts +19 -6
- package/src/public/avm/avm_simulator.ts +43 -54
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/errors.ts +8 -77
- package/src/public/avm/fixtures/avm_simulation_tester.ts +32 -21
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
- package/src/public/avm/fixtures/initializers.ts +102 -0
- package/src/public/avm/fixtures/utils.ts +150 -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 +24 -2
- 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 +9 -6
- 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 +28 -8
- 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 +55 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
- package/src/public/avm/serialization/instruction_serialization.ts +75 -34
- package/src/public/avm/test_utils.ts +24 -41
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +76 -0
- package/src/{common → public}/debug_fn_name.ts +7 -7
- 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 +49 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +135 -0
- package/src/public/fixtures/index.ts +7 -0
- package/src/public/fixtures/minimal_public_tx.ts +35 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +166 -113
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
- package/src/public/fixtures/token_test.ts +139 -0
- package/src/public/fixtures/utils.ts +141 -68
- package/src/public/hinting_db_sources.ts +602 -0
- package/src/public/index.ts +5 -8
- package/src/public/public_db_sources.ts +278 -258
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +153 -0
- package/src/public/public_processor/public_processor.ts +212 -164
- package/src/public/public_processor/public_processor_metrics.ts +2 -2
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +162 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +306 -0
- package/src/public/public_tx_simulator/index.ts +4 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +167 -194
- package/src/public/public_tx_simulator/public_tx_simulator.ts +292 -265
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +10 -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 +94 -320
- package/src/public/side_effect_trace_interface.ts +10 -58
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +5 -11
- package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
- package/src/public/state_manager/state_manager.ts +553 -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/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
- /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
|
@@ -4,14 +4,14 @@ 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,10 +19,10 @@ export function getSimulationProviderConfigFromEnv() {
|
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export async function
|
|
23
|
-
config:
|
|
22
|
+
export async function createSimulator(
|
|
23
|
+
config: SimulatorConfig,
|
|
24
24
|
logger: Logger = createLogger('simulator'),
|
|
25
|
-
): Promise<
|
|
25
|
+
): Promise<CircuitSimulator> {
|
|
26
26
|
if (config.acvmBinaryPath && config.acvmWorkingDirectory) {
|
|
27
27
|
try {
|
|
28
28
|
await fs.access(config.acvmBinaryPath, fs.constants.R_OK);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { Fr } from '@aztec/foundation/fields';
|
|
2
2
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
|
|
4
|
+
import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
|
|
4
5
|
import type { AvmExecutionEnvironment } from './avm_execution_environment.js';
|
|
5
6
|
import { type Gas, gasToGasLeft } from './avm_gas.js';
|
|
6
7
|
import { AvmMachineState } from './avm_machine_state.js';
|
|
7
|
-
import type {
|
|
8
|
-
import type { AvmPersistableStateManager } from './journal/journal.js';
|
|
8
|
+
import type { AvmSimulatorInterface } from './avm_simulator_interface.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
|
|
@@ -17,19 +17,28 @@ export class AvmContractCallResult {
|
|
|
17
17
|
public output: Fr[],
|
|
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}, 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
34
|
const revertReason = this.revertReason ? createSimulationError(this.revertReason, this.output) : undefined;
|
|
32
|
-
return new AvmFinalizedCallResult(
|
|
35
|
+
return new AvmFinalizedCallResult(
|
|
36
|
+
this.reverted,
|
|
37
|
+
this.output,
|
|
38
|
+
Gas.from(this.gasLeft),
|
|
39
|
+
revertReason,
|
|
40
|
+
this.totalInstructions,
|
|
41
|
+
);
|
|
33
42
|
}
|
|
34
43
|
}
|
|
35
44
|
|
|
@@ -43,12 +52,15 @@ export class AvmFinalizedCallResult {
|
|
|
43
52
|
public output: Fr[],
|
|
44
53
|
public gasLeft: Gas,
|
|
45
54
|
public revertReason?: SimulationError,
|
|
55
|
+
public totalInstructions: number = 0, // including nested calls
|
|
46
56
|
) {}
|
|
47
57
|
|
|
48
58
|
toString(): string {
|
|
49
|
-
let resultsStr = `reverted: ${this.reverted}, output: ${this.output}, gasLeft: ${inspect(
|
|
59
|
+
let resultsStr = `reverted: ${this.reverted}, output: ${this.output}, gasLeft: ${inspect(
|
|
60
|
+
this.gasLeft,
|
|
61
|
+
)}, totalInstructions: ${this.totalInstructions}`;
|
|
50
62
|
if (this.revertReason) {
|
|
51
|
-
resultsStr += `, revertReason: ${this.revertReason}`;
|
|
63
|
+
resultsStr += `, revertReason: ${this.revertReason.message}`;
|
|
52
64
|
}
|
|
53
65
|
return resultsStr;
|
|
54
66
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
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
|
|
|
@@ -15,9 +16,14 @@ export class AvmExecutionEnvironment {
|
|
|
15
16
|
public readonly globals: GlobalVariables,
|
|
16
17
|
public readonly isStaticCall: boolean,
|
|
17
18
|
public readonly calldata: Fr[],
|
|
19
|
+
public readonly config: PublicSimulatorConfig,
|
|
18
20
|
) {}
|
|
19
21
|
|
|
20
|
-
private deriveEnvironmentForNestedCallInternal(
|
|
22
|
+
private deriveEnvironmentForNestedCallInternal(
|
|
23
|
+
targetAddress: AztecAddress,
|
|
24
|
+
calldata: Fr[],
|
|
25
|
+
isStaticCall: boolean,
|
|
26
|
+
): AvmExecutionEnvironment {
|
|
21
27
|
return new AvmExecutionEnvironment(
|
|
22
28
|
/*address=*/ targetAddress,
|
|
23
29
|
/*sender=*/ this.address,
|
|
@@ -26,6 +32,7 @@ export class AvmExecutionEnvironment {
|
|
|
26
32
|
this.globals,
|
|
27
33
|
isStaticCall,
|
|
28
34
|
calldata,
|
|
35
|
+
this.config,
|
|
29
36
|
);
|
|
30
37
|
}
|
|
31
38
|
|
|
@@ -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. */
|
|
@@ -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
|
}
|
|
@@ -68,6 +68,11 @@ export class AvmMachineState {
|
|
|
68
68
|
/** Output data must NOT be modified once it is set */
|
|
69
69
|
private output: Fr[] = [];
|
|
70
70
|
|
|
71
|
+
// Metrics only - not needed for execution
|
|
72
|
+
/** instruction counter, including nested calls */
|
|
73
|
+
public instrCounter: number = 0;
|
|
74
|
+
// End metrics only
|
|
75
|
+
|
|
71
76
|
constructor(gasLeft: Gas);
|
|
72
77
|
constructor(l2GasLeft: number, daGasLeft: number);
|
|
73
78
|
constructor(gasLeftOrL2GasLeft: Gas | number, daGasLeft?: number) {
|
|
@@ -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) {
|
|
@@ -1,27 +1,23 @@
|
|
|
1
|
-
import { MAX_L2_GAS_PER_TX_PUBLIC_PORTION } from '@aztec/constants';
|
|
2
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
2
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
+
import type { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
4
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
6
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
6
7
|
|
|
7
8
|
import { strict as assert } from 'assert';
|
|
8
9
|
|
|
9
|
-
import {
|
|
10
|
+
import { CheckedPublicExecutionError } from '../public_errors.js';
|
|
11
|
+
import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
|
|
10
12
|
import { AvmContext } from './avm_context.js';
|
|
11
13
|
import { AvmContractCallResult } from './avm_contract_call_result.js';
|
|
12
14
|
import { AvmExecutionEnvironment } from './avm_execution_environment.js';
|
|
13
15
|
import type { Gas } from './avm_gas.js';
|
|
14
16
|
import { AvmMachineState } from './avm_machine_state.js';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
AvmExecutionError,
|
|
18
|
-
AvmRevertReason,
|
|
19
|
-
InvalidProgramCounterError,
|
|
20
|
-
revertReasonFromExceptionalHalt,
|
|
21
|
-
revertReasonFromExplicitRevert,
|
|
22
|
-
} from './errors.js';
|
|
23
|
-
import type { AvmPersistableStateManager } from './journal/journal.js';
|
|
17
|
+
import type { AvmSimulatorInterface } from './avm_simulator_interface.js';
|
|
18
|
+
import { AvmRevertReason, InvalidProgramCounterError } from './errors.js';
|
|
24
19
|
import type { Instruction } from './opcodes/instruction.js';
|
|
20
|
+
import { revertReasonFromExceptionalHalt, revertReasonFromExplicitRevert } from './revert_reason.js';
|
|
25
21
|
import {
|
|
26
22
|
INSTRUCTION_SET,
|
|
27
23
|
type InstructionSet,
|
|
@@ -33,7 +29,7 @@ type OpcodeTally = {
|
|
|
33
29
|
gas: Gas;
|
|
34
30
|
};
|
|
35
31
|
|
|
36
|
-
export class AvmSimulator {
|
|
32
|
+
export class AvmSimulator implements AvmSimulatorInterface {
|
|
37
33
|
private log: Logger;
|
|
38
34
|
private bytecode: Buffer | undefined;
|
|
39
35
|
private opcodeTallies: Map<string, OpcodeTally> = new Map();
|
|
@@ -53,10 +49,6 @@ export class AvmSimulator {
|
|
|
53
49
|
// This will be used by the CALL opcode to create a new simulator. It is required to
|
|
54
50
|
// avoid a dependency cycle.
|
|
55
51
|
context.provideSimulator = AvmSimulator.build;
|
|
56
|
-
assert(
|
|
57
|
-
context.machineState.gasLeft.l2Gas <= MAX_L2_GAS_PER_TX_PUBLIC_PORTION,
|
|
58
|
-
`Cannot allocate more than ${MAX_L2_GAS_PER_TX_PUBLIC_PORTION} to the AVM for execution.`,
|
|
59
|
-
);
|
|
60
52
|
this.log = createLogger(`simulator:avm(calldata[0]: ${context.environment.calldata[0]})`);
|
|
61
53
|
// Turn on tallying if explicitly enabled or if trace logging
|
|
62
54
|
if (enableTallying || this.log.isLevelEnabled('trace')) {
|
|
@@ -76,7 +68,7 @@ export class AvmSimulator {
|
|
|
76
68
|
}
|
|
77
69
|
|
|
78
70
|
public static async create(
|
|
79
|
-
stateManager:
|
|
71
|
+
stateManager: PublicPersistableStateManager,
|
|
80
72
|
address: AztecAddress,
|
|
81
73
|
sender: AztecAddress,
|
|
82
74
|
transactionFee: Fr,
|
|
@@ -84,6 +76,7 @@ export class AvmSimulator {
|
|
|
84
76
|
isStaticCall: boolean,
|
|
85
77
|
calldata: Fr[],
|
|
86
78
|
allocatedGas: Gas,
|
|
79
|
+
config: PublicSimulatorConfig,
|
|
87
80
|
) {
|
|
88
81
|
const avmExecutionEnv = new AvmExecutionEnvironment(
|
|
89
82
|
address,
|
|
@@ -93,6 +86,7 @@ export class AvmSimulator {
|
|
|
93
86
|
globals,
|
|
94
87
|
isStaticCall,
|
|
95
88
|
calldata,
|
|
89
|
+
config,
|
|
96
90
|
);
|
|
97
91
|
|
|
98
92
|
const avmMachineState = new AvmMachineState(allocatedGas);
|
|
@@ -104,22 +98,13 @@ export class AvmSimulator {
|
|
|
104
98
|
* Fetch the bytecode and execute it in the current context.
|
|
105
99
|
*/
|
|
106
100
|
public async execute(): Promise<AvmContractCallResult> {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
} catch (err: any) {
|
|
111
|
-
if (!(err instanceof AvmExecutionError || err instanceof SideEffectLimitReachedError)) {
|
|
112
|
-
this.log.error(`Unknown error thrown by AVM during bytecode retrieval: ${err}`);
|
|
113
|
-
throw err;
|
|
114
|
-
}
|
|
115
|
-
return await this.handleFailureToRetrieveBytecode(
|
|
116
|
-
`Bytecode retrieval for contract '${this.context.environment.address}' failed with ${err}. Reverting...`,
|
|
117
|
-
);
|
|
118
|
-
}
|
|
101
|
+
const bytecode = await this.context.persistableState.getBytecode(this.context.environment.address);
|
|
102
|
+
// getBytecode returns undefined if bytecode is not found or if the limit of contract calls to unique class IDs is reached.
|
|
103
|
+
// If it throws an error that reaches this point, it is a bug.
|
|
119
104
|
|
|
120
105
|
if (!bytecode) {
|
|
121
106
|
return await this.handleFailureToRetrieveBytecode(
|
|
122
|
-
`No bytecode found
|
|
107
|
+
`No bytecode found, or limit encountered for max calls to unique contract class IDs. Contract address: ${this.context.environment.address}. Reverting...`,
|
|
123
108
|
);
|
|
124
109
|
}
|
|
125
110
|
|
|
@@ -138,18 +123,17 @@ export class AvmSimulator {
|
|
|
138
123
|
* This method is useful for testing and debugging.
|
|
139
124
|
*/
|
|
140
125
|
public async executeBytecode(bytecode: Buffer): Promise<AvmContractCallResult> {
|
|
141
|
-
const
|
|
142
|
-
assert(isAvmBytecode(bytecode), "AVM simulator can't execute non-AVM bytecode");
|
|
126
|
+
const timer = new Timer();
|
|
143
127
|
assert(bytecode.length > 0, "AVM simulator can't execute empty bytecode");
|
|
144
128
|
|
|
145
129
|
this.bytecode = bytecode;
|
|
130
|
+
let instructionName = 'NONE'; // This is used for logging purposes
|
|
146
131
|
|
|
147
132
|
const { machineState } = this.context;
|
|
148
133
|
const callStartGas = machineState.gasLeft; // Save gas before executing instruction (for profiling)
|
|
149
134
|
try {
|
|
150
135
|
// Execute instruction pointed to by the current program counter
|
|
151
136
|
// continuing until the machine state signifies a halt
|
|
152
|
-
let instrCounter = 0;
|
|
153
137
|
while (!machineState.getHalted()) {
|
|
154
138
|
// Get the instruction from cache, or deserialize for the first time
|
|
155
139
|
let cachedInstruction = this.deserializedInstructionsCache.get(machineState.pc);
|
|
@@ -165,15 +149,14 @@ export class AvmSimulator {
|
|
|
165
149
|
if (this.log.isLevelEnabled('trace')) {
|
|
166
150
|
// Skip this entirely to avoid toStringing etc if trace is not enabled
|
|
167
151
|
this.log.trace(
|
|
168
|
-
`[PC:${machineState.pc}] [IC:${instrCounter}] ${instruction.toString()} (gasLeft l2=${
|
|
152
|
+
`[PC:${machineState.pc}] [IC:${machineState.instrCounter}] ${instruction.toString()} (gasLeft l2=${
|
|
169
153
|
machineState.l2GasLeft
|
|
170
154
|
} da=${machineState.daGasLeft})`,
|
|
171
155
|
);
|
|
172
156
|
}
|
|
173
|
-
instrCounter++;
|
|
174
|
-
|
|
175
157
|
machineState.nextPc = machineState.pc + bytesRead;
|
|
176
158
|
|
|
159
|
+
instructionName = instruction.constructor.name;
|
|
177
160
|
// Execute the instruction.
|
|
178
161
|
// Normal returns and reverts will return normally here.
|
|
179
162
|
// "Exceptional halts" will throw.
|
|
@@ -183,6 +166,8 @@ export class AvmSimulator {
|
|
|
183
166
|
machineState.pc += bytesRead;
|
|
184
167
|
}
|
|
185
168
|
|
|
169
|
+
machineState.instrCounter++;
|
|
170
|
+
|
|
186
171
|
// gas used by this instruction - used for profiling/tallying
|
|
187
172
|
const gasUsed: Gas = {
|
|
188
173
|
l2Gas: instrStartGas.l2Gas - machineState.l2GasLeft,
|
|
@@ -199,35 +184,33 @@ export class AvmSimulator {
|
|
|
199
184
|
const output = machineState.getOutput();
|
|
200
185
|
const reverted = machineState.getReverted();
|
|
201
186
|
const revertReason = reverted ? await revertReasonFromExplicitRevert(output, this.context) : undefined;
|
|
202
|
-
const results = new AvmContractCallResult(
|
|
187
|
+
const results = new AvmContractCallResult(
|
|
188
|
+
reverted,
|
|
189
|
+
output,
|
|
190
|
+
machineState.gasLeft,
|
|
191
|
+
revertReason,
|
|
192
|
+
machineState.instrCounter,
|
|
193
|
+
);
|
|
203
194
|
this.log.debug(`Context execution results: ${results.toString()}`);
|
|
204
195
|
const totalGasUsed: Gas = {
|
|
205
196
|
l2Gas: callStartGas.l2Gas - machineState.l2GasLeft,
|
|
206
197
|
daGas: callStartGas.daGas - machineState.daGasLeft,
|
|
207
198
|
};
|
|
208
|
-
this.log.debug(`Executed ${instrCounter} instructions and consumed ${totalGasUsed.l2Gas} L2 Gas`);
|
|
199
|
+
this.log.debug(`Executed ${machineState.instrCounter} instructions and consumed ${totalGasUsed.l2Gas} L2 Gas`);
|
|
209
200
|
|
|
210
201
|
this.tallyPrintFunction();
|
|
211
202
|
|
|
212
|
-
|
|
213
|
-
const totalTime = endTotalTime - startTotalTime;
|
|
214
|
-
this.log.debug(`Core AVM simulation took ${totalTime}ms`);
|
|
203
|
+
this.log.debug(`Core AVM simulation took ${timer.ms()}ms`);
|
|
215
204
|
|
|
216
205
|
// Return results for processing by calling context
|
|
217
206
|
return results;
|
|
218
207
|
} catch (err: any) {
|
|
219
|
-
this.log.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if (
|
|
224
|
-
|
|
225
|
-
err.constructor.name == 'OutOfGasError' ||
|
|
226
|
-
err instanceof AvmExecutionError ||
|
|
227
|
-
err instanceof SideEffectLimitReachedError
|
|
228
|
-
)
|
|
229
|
-
) {
|
|
230
|
-
this.log.error(`Unknown error thrown by AVM: ${err}`);
|
|
208
|
+
this.log.info(
|
|
209
|
+
`Exceptional halt (revert by something other than REVERT opcode) for instruction
|
|
210
|
+
${instructionName} at pc ${machineState.pc} and instruction counter ${machineState.instrCounter}`,
|
|
211
|
+
);
|
|
212
|
+
if (!(err instanceof CheckedPublicExecutionError)) {
|
|
213
|
+
this.log.error(`Unchecked/unknown error thrown by AVM. This is a bug. Error: ${err}`);
|
|
231
214
|
throw err;
|
|
232
215
|
}
|
|
233
216
|
|
|
@@ -235,7 +218,13 @@ export class AvmSimulator {
|
|
|
235
218
|
// Exceptional halts consume all allocated gas
|
|
236
219
|
const noGasLeft = { l2Gas: 0, daGas: 0 };
|
|
237
220
|
// Note: "exceptional halts" cannot return data, hence [].
|
|
238
|
-
const results = new AvmContractCallResult(
|
|
221
|
+
const results = new AvmContractCallResult(
|
|
222
|
+
/*reverted=*/ true,
|
|
223
|
+
/*output=*/ [],
|
|
224
|
+
noGasLeft,
|
|
225
|
+
revertReason,
|
|
226
|
+
machineState.instrCounter,
|
|
227
|
+
);
|
|
239
228
|
this.log.debug(`Context execution results: ${results.toString()}`);
|
|
240
229
|
|
|
241
230
|
this.tallyPrintFunction();
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface for AvmSimulator to break the circular dependency between avm_context.ts and avm_simulator.ts
|
|
3
|
+
*/
|
|
4
|
+
export interface AvmSimulatorInterface {
|
|
5
|
+
execute(): Promise<any>; // Using any here to avoid importing AvmContractCallResult
|
|
6
|
+
executeBytecode(bytecode: Buffer): Promise<any>;
|
|
7
|
+
getBytecode(): Buffer | undefined;
|
|
8
|
+
}
|