@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.5476d83
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
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { NullifierCollisionError } from '../../side_effect_errors.js';
|
|
1
2
|
import type { AvmContext } from '../avm_context.js';
|
|
2
3
|
import { TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
3
4
|
import { InstructionExecutionError, StaticCallAlterationError } from '../errors.js';
|
|
4
|
-
import { NullifierCollisionError } from '../journal/nullifiers.js';
|
|
5
5
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
6
6
|
import { Addressing } from './addressing_mode.js';
|
|
7
7
|
import { Instruction } from './instruction.js';
|
|
@@ -29,15 +29,19 @@ export class NoteHashExists extends Instruction {
|
|
|
29
29
|
|
|
30
30
|
public async execute(context: AvmContext): Promise<void> {
|
|
31
31
|
const memory = context.machineState.memory;
|
|
32
|
-
|
|
32
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
33
|
+
|
|
34
|
+
context.machineState.consumeGas(
|
|
35
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
36
|
+
);
|
|
33
37
|
const operands = [this.noteHashOffset, this.leafIndexOffset, this.existsOffset];
|
|
34
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
35
38
|
const [noteHashOffset, leafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
36
|
-
memory.
|
|
39
|
+
memory.checkTag(TypeTag.FIELD, noteHashOffset);
|
|
40
|
+
memory.checkTag(TypeTag.UINT64, leafIndexOffset);
|
|
37
41
|
|
|
38
42
|
// Note that this instruction accepts any type in memory, and converts to Field.
|
|
39
43
|
const noteHash = memory.get(noteHashOffset).toFr();
|
|
40
|
-
const leafIndex = memory.get(leafIndexOffset).
|
|
44
|
+
const leafIndex = memory.get(leafIndexOffset).toBigInt();
|
|
41
45
|
|
|
42
46
|
const exists = await context.persistableState.checkNoteHashExists(context.environment.address, noteHash, leafIndex);
|
|
43
47
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
@@ -50,16 +54,22 @@ export class EmitNoteHash extends Instruction {
|
|
|
50
54
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
51
55
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
52
56
|
|
|
53
|
-
constructor(
|
|
57
|
+
constructor(
|
|
58
|
+
private indirect: number,
|
|
59
|
+
private noteHashOffset: number,
|
|
60
|
+
) {
|
|
54
61
|
super();
|
|
55
62
|
}
|
|
56
63
|
|
|
57
64
|
public async execute(context: AvmContext): Promise<void> {
|
|
58
65
|
const memory = context.machineState.memory;
|
|
59
|
-
|
|
66
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
67
|
+
|
|
68
|
+
context.machineState.consumeGas(
|
|
69
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
70
|
+
);
|
|
60
71
|
|
|
61
72
|
const operands = [this.noteHashOffset];
|
|
62
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
63
73
|
const [noteHashOffset] = addressing.resolve(operands, memory);
|
|
64
74
|
memory.checkTag(TypeTag.FIELD, noteHashOffset);
|
|
65
75
|
|
|
@@ -95,10 +105,13 @@ export class NullifierExists extends Instruction {
|
|
|
95
105
|
|
|
96
106
|
public async execute(context: AvmContext): Promise<void> {
|
|
97
107
|
const memory = context.machineState.memory;
|
|
98
|
-
|
|
108
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
109
|
+
|
|
110
|
+
context.machineState.consumeGas(
|
|
111
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
112
|
+
);
|
|
99
113
|
|
|
100
114
|
const operands = [this.nullifierOffset, this.addressOffset, this.existsOffset];
|
|
101
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
102
115
|
const [nullifierOffset, addressOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
103
116
|
memory.checkTags(TypeTag.FIELD, nullifierOffset, addressOffset);
|
|
104
117
|
|
|
@@ -116,7 +129,10 @@ export class EmitNullifier extends Instruction {
|
|
|
116
129
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
117
130
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
118
131
|
|
|
119
|
-
constructor(
|
|
132
|
+
constructor(
|
|
133
|
+
private indirect: number,
|
|
134
|
+
private nullifierOffset: number,
|
|
135
|
+
) {
|
|
120
136
|
super();
|
|
121
137
|
}
|
|
122
138
|
|
|
@@ -126,10 +142,13 @@ export class EmitNullifier extends Instruction {
|
|
|
126
142
|
}
|
|
127
143
|
|
|
128
144
|
const memory = context.machineState.memory;
|
|
129
|
-
|
|
145
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
146
|
+
|
|
147
|
+
context.machineState.consumeGas(
|
|
148
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
149
|
+
);
|
|
130
150
|
|
|
131
151
|
const operands = [this.nullifierOffset];
|
|
132
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
133
152
|
const [nullifierOffset] = addressing.resolve(operands, memory);
|
|
134
153
|
memory.checkTag(TypeTag.FIELD, nullifierOffset);
|
|
135
154
|
|
|
@@ -172,20 +191,21 @@ export class L1ToL2MessageExists extends Instruction {
|
|
|
172
191
|
|
|
173
192
|
public async execute(context: AvmContext): Promise<void> {
|
|
174
193
|
const memory = context.machineState.memory;
|
|
175
|
-
|
|
194
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
195
|
+
|
|
196
|
+
context.machineState.consumeGas(
|
|
197
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
198
|
+
);
|
|
176
199
|
|
|
177
200
|
const operands = [this.msgHashOffset, this.msgLeafIndexOffset, this.existsOffset];
|
|
178
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
179
201
|
const [msgHashOffset, msgLeafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
180
|
-
|
|
202
|
+
|
|
203
|
+
memory.checkTag(TypeTag.FIELD, msgHashOffset);
|
|
204
|
+
memory.checkTag(TypeTag.UINT64, msgLeafIndexOffset);
|
|
181
205
|
|
|
182
206
|
const msgHash = memory.get(msgHashOffset).toFr();
|
|
183
207
|
const msgLeafIndex = memory.get(msgLeafIndexOffset).toFr();
|
|
184
|
-
const exists = await context.persistableState.checkL1ToL2MessageExists(
|
|
185
|
-
context.environment.address,
|
|
186
|
-
msgHash,
|
|
187
|
-
msgLeafIndex,
|
|
188
|
-
);
|
|
208
|
+
const exists = await context.persistableState.checkL1ToL2MessageExists(msgHash, msgLeafIndex);
|
|
189
209
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
190
210
|
}
|
|
191
211
|
}
|
|
@@ -197,7 +217,11 @@ export class EmitUnencryptedLog extends Instruction {
|
|
|
197
217
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
198
218
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
199
219
|
|
|
200
|
-
constructor(
|
|
220
|
+
constructor(
|
|
221
|
+
private indirect: number,
|
|
222
|
+
private logSizeOffset: number,
|
|
223
|
+
private logOffset: number,
|
|
224
|
+
) {
|
|
201
225
|
super();
|
|
202
226
|
}
|
|
203
227
|
|
|
@@ -207,17 +231,21 @@ export class EmitUnencryptedLog extends Instruction {
|
|
|
207
231
|
}
|
|
208
232
|
|
|
209
233
|
const memory = context.machineState.memory;
|
|
234
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
210
235
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
236
|
+
context.machineState.consumeGas(
|
|
237
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
const operands = [this.logSizeOffset, this.logOffset];
|
|
241
|
+
const [logSizeOffset, logOffset] = addressing.resolve(operands, memory);
|
|
214
242
|
memory.checkTag(TypeTag.UINT32, logSizeOffset);
|
|
215
243
|
const logSize = memory.get(logSizeOffset).toNumber();
|
|
216
244
|
memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
|
|
217
245
|
|
|
218
246
|
const contractAddress = context.environment.address;
|
|
219
247
|
|
|
220
|
-
context.machineState.consumeGas(this.
|
|
248
|
+
context.machineState.consumeGas(this.dynamicGasCost(logSize));
|
|
221
249
|
const log = memory.getSlice(logOffset, logSize).map(f => f.toFr());
|
|
222
250
|
context.persistableState.writePublicLog(contractAddress, log);
|
|
223
251
|
}
|
|
@@ -229,7 +257,11 @@ export class SendL2ToL1Message extends Instruction {
|
|
|
229
257
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
230
258
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
231
259
|
|
|
232
|
-
constructor(
|
|
260
|
+
constructor(
|
|
261
|
+
private indirect: number,
|
|
262
|
+
private recipientOffset: number,
|
|
263
|
+
private contentOffset: number,
|
|
264
|
+
) {
|
|
233
265
|
super();
|
|
234
266
|
}
|
|
235
267
|
|
|
@@ -239,10 +271,13 @@ export class SendL2ToL1Message extends Instruction {
|
|
|
239
271
|
}
|
|
240
272
|
|
|
241
273
|
const memory = context.machineState.memory;
|
|
242
|
-
|
|
274
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
275
|
+
|
|
276
|
+
context.machineState.consumeGas(
|
|
277
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
278
|
+
);
|
|
243
279
|
|
|
244
280
|
const operands = [this.recipientOffset, this.contentOffset];
|
|
245
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
246
281
|
const [recipientOffset, contentOffset] = addressing.resolve(operands, memory);
|
|
247
282
|
memory.checkTags(TypeTag.FIELD, recipientOffset, contentOffset);
|
|
248
283
|
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { AVM_MAX_OPERANDS } from '@aztec/constants';
|
|
2
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
+
import type { Tuple } from '@aztec/foundation/serialize';
|
|
4
|
+
|
|
1
5
|
import { strict as assert } from 'assert';
|
|
2
6
|
|
|
3
|
-
import { TaggedMemory, type TaggedMemoryInterface } from '../avm_memory_types.js';
|
|
4
|
-
import { RelativeAddressOutOfRangeError } from '../errors.js';
|
|
7
|
+
import { MemoryValue, TaggedMemory, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
|
|
8
|
+
import { RelativeAddressOutOfRangeError, TagCheckError } from '../errors.js';
|
|
5
9
|
|
|
6
10
|
export enum AddressingMode {
|
|
7
11
|
DIRECT = 0,
|
|
@@ -13,21 +17,26 @@ export enum AddressingMode {
|
|
|
13
17
|
/** A class to represent the addressing mode of an instruction. */
|
|
14
18
|
export class Addressing {
|
|
15
19
|
public constructor(
|
|
16
|
-
/** The addressing mode for each operand.
|
|
17
|
-
private readonly modePerOperand: AddressingMode
|
|
20
|
+
/** The addressing mode for each possible operand. */
|
|
21
|
+
private readonly modePerOperand: Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>,
|
|
18
22
|
) {}
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
public static fromModes(modes: AddressingMode[]): Addressing {
|
|
25
|
+
assert(modes.length <= AVM_MAX_OPERANDS, 'Too many operands for addressing mode');
|
|
26
|
+
return new Addressing(padArrayEnd(modes, AddressingMode.DIRECT, AVM_MAX_OPERANDS));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public static fromWire(wireModes: number): Addressing {
|
|
30
|
+
// The modes are stored in the wire format as one or two bytes, with each two bits representing the modes for an operand.
|
|
31
|
+
// Even bits are indirect, odd bits are relative.
|
|
32
|
+
const modes = new Array<AddressingMode>(AVM_MAX_OPERANDS);
|
|
33
|
+
for (let i = 0; i < AVM_MAX_OPERANDS; i++) {
|
|
26
34
|
modes[i] =
|
|
27
|
-
(((wireModes >> i) & 1) * AddressingMode.INDIRECT) |
|
|
28
|
-
(((wireModes >> (i +
|
|
35
|
+
(((wireModes >> (i * 2)) & 1) * AddressingMode.INDIRECT) |
|
|
36
|
+
(((wireModes >> (i * 2 + 1)) & 1) * AddressingMode.RELATIVE);
|
|
29
37
|
}
|
|
30
|
-
|
|
38
|
+
// Casting the array to tuple since it should be more performant than using makeTuple
|
|
39
|
+
return new Addressing(modes as Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>);
|
|
31
40
|
}
|
|
32
41
|
|
|
33
42
|
public toWire(): number {
|
|
@@ -36,50 +45,65 @@ export class Addressing {
|
|
|
36
45
|
let wire: number = 0;
|
|
37
46
|
for (let i = 0; i < this.modePerOperand.length; i++) {
|
|
38
47
|
if (this.modePerOperand[i] & AddressingMode.INDIRECT) {
|
|
39
|
-
wire |= 1 << i;
|
|
48
|
+
wire |= 1 << (i * 2);
|
|
40
49
|
}
|
|
41
50
|
if (this.modePerOperand[i] & AddressingMode.RELATIVE) {
|
|
42
|
-
wire |= 1 << (
|
|
51
|
+
wire |= 1 << (i * 2 + 1);
|
|
43
52
|
}
|
|
44
53
|
}
|
|
45
54
|
return wire;
|
|
46
55
|
}
|
|
47
56
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
57
|
+
public indirectOperandsCount(): number {
|
|
58
|
+
return this.modePerOperand.filter(mode => mode & AddressingMode.INDIRECT).length;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public relativeOperandsCount(): number {
|
|
62
|
+
return this.modePerOperand.filter(mode => mode & AddressingMode.RELATIVE).length;
|
|
51
63
|
}
|
|
52
64
|
|
|
53
65
|
/**
|
|
54
66
|
* Resolves the offsets using the addressing mode.
|
|
55
67
|
* @param offsets The offsets to resolve.
|
|
56
68
|
* @param mem The memory to use for resolution.
|
|
57
|
-
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array.
|
|
69
|
+
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array and the resolved offsets are guaranteed to be valid addresses.
|
|
70
|
+
* @throws An error if any step failed. Should be treated as a black box.
|
|
58
71
|
*/
|
|
59
72
|
public resolve(offsets: number[], mem: TaggedMemoryInterface): number[] {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
let didRelativeOnce = false;
|
|
64
|
-
let baseAddr = 0;
|
|
73
|
+
const resolved: number[] = new Array(offsets.length);
|
|
74
|
+
// These will be read (once) if we have any relative operands.
|
|
75
|
+
let baseAddr: MemoryValue | undefined;
|
|
65
76
|
|
|
66
77
|
for (const [i, offset] of offsets.entries()) {
|
|
67
78
|
const mode = this.modePerOperand[i];
|
|
79
|
+
// The given offsets are assumed to be valid addresses.
|
|
68
80
|
resolved[i] = offset;
|
|
69
81
|
if (mode & AddressingMode.RELATIVE) {
|
|
70
|
-
if (!
|
|
71
|
-
mem.
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
if (!baseAddr) {
|
|
83
|
+
baseAddr = mem.get(0);
|
|
84
|
+
const baseAddrTag = baseAddr.getTag();
|
|
85
|
+
if (!TaggedMemory.isValidMemoryAddressTag(baseAddrTag!)) {
|
|
86
|
+
throw TagCheckError.forOffset(0, TypeTag[baseAddrTag!], TypeTag[TypeTag.UINT32]);
|
|
87
|
+
}
|
|
74
88
|
}
|
|
75
|
-
resolved[i]
|
|
89
|
+
// Here we know that resolved[i] is at most 32 bits and baseAddr is at most 32 bits.
|
|
90
|
+
// Therefore, the addition is safe since the `number` type fits more than 33 bits.
|
|
91
|
+
resolved[i] += Number(baseAddr.toBigInt());
|
|
76
92
|
if (resolved[i] >= TaggedMemory.MAX_MEMORY_SIZE) {
|
|
77
|
-
throw new RelativeAddressOutOfRangeError(baseAddr, offset);
|
|
93
|
+
throw new RelativeAddressOutOfRangeError(Number(baseAddr.toBigInt()), offset);
|
|
78
94
|
}
|
|
79
95
|
}
|
|
80
96
|
if (mode & AddressingMode.INDIRECT) {
|
|
81
|
-
|
|
82
|
-
|
|
97
|
+
// At this point we know that resolved[i] is a valid memory address.
|
|
98
|
+
const resolvedValue = mem.get(resolved[i]);
|
|
99
|
+
const resolvedTag = resolvedValue.getTag();
|
|
100
|
+
|
|
101
|
+
// Final check.
|
|
102
|
+
if (!TaggedMemory.isValidMemoryAddressTag(resolvedTag)) {
|
|
103
|
+
throw TagCheckError.forOffset(resolved[i], TypeTag[resolvedTag], TypeTag[TypeTag.UINT32]);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
resolved[i] = Number(resolvedValue.toBigInt());
|
|
83
107
|
}
|
|
84
108
|
}
|
|
85
109
|
return resolved;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
2
|
import {
|
|
3
3
|
type Field,
|
|
4
|
+
type IntegralValue,
|
|
4
5
|
type MemoryValue,
|
|
5
6
|
TaggedMemory,
|
|
6
7
|
type TaggedMemoryInterface,
|
|
@@ -14,10 +15,13 @@ import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
|
14
15
|
export abstract class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
|
|
15
16
|
public async execute(context: AvmContext): Promise<void> {
|
|
16
17
|
const memory = context.machineState.memory;
|
|
17
|
-
|
|
18
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
19
|
+
|
|
20
|
+
context.machineState.consumeGas(
|
|
21
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
22
|
+
);
|
|
18
23
|
|
|
19
24
|
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
20
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
21
25
|
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
22
26
|
this.checkTags(memory, aOffset, bOffset);
|
|
23
27
|
|
|
@@ -93,3 +97,21 @@ export class FieldDiv extends ThreeOperandArithmeticInstruction {
|
|
|
93
97
|
memory.checkTag(TypeTag.FIELD, aOffset); // Follows that bOffset has also tag of type Field
|
|
94
98
|
}
|
|
95
99
|
}
|
|
100
|
+
|
|
101
|
+
export class Shl extends ThreeOperandArithmeticInstruction {
|
|
102
|
+
static readonly type: string = 'SHL';
|
|
103
|
+
static readonly opcode = Opcode.SHL_8; // FIXME: needed for gas.
|
|
104
|
+
|
|
105
|
+
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
106
|
+
return a.shl(b);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export class Shr extends ThreeOperandArithmeticInstruction {
|
|
111
|
+
static readonly type: string = 'SHR';
|
|
112
|
+
static readonly opcode = Opcode.SHR_8; // FIXME: needed for gas.
|
|
113
|
+
|
|
114
|
+
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
115
|
+
return a.shr(b);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { getBitwiseDynamicGasMultiplier } from '../avm_gas.js';
|
|
2
3
|
import { type IntegralValue, TaggedMemory, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
|
|
3
4
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
5
|
import { Addressing } from './addressing_mode.js';
|
|
@@ -8,13 +9,19 @@ import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
|
8
9
|
abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
9
10
|
public async execute(context: AvmContext): Promise<void> {
|
|
10
11
|
const memory = context.machineState.memory;
|
|
11
|
-
|
|
12
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
13
|
+
|
|
14
|
+
context.machineState.consumeGas(
|
|
15
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
16
|
+
);
|
|
12
17
|
|
|
13
18
|
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
14
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
15
19
|
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
16
20
|
this.checkTags(memory, aOffset, bOffset);
|
|
17
21
|
|
|
22
|
+
const multiplier = this.getDynamicMultiplier(memory.getTag(aOffset));
|
|
23
|
+
context.machineState.consumeGas(this.dynamicGasCost(multiplier));
|
|
24
|
+
|
|
18
25
|
const a = memory.getAs<IntegralValue>(aOffset);
|
|
19
26
|
const b = memory.getAs<IntegralValue>(bOffset);
|
|
20
27
|
|
|
@@ -27,6 +34,10 @@ abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
|
27
34
|
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
|
|
28
35
|
memory.checkTagsAreSame(aOffset, bOffset);
|
|
29
36
|
}
|
|
37
|
+
|
|
38
|
+
protected getDynamicMultiplier(_lhsTag: TypeTag): number {
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
30
41
|
}
|
|
31
42
|
|
|
32
43
|
export class And extends ThreeOperandBitwiseInstruction {
|
|
@@ -36,6 +47,10 @@ export class And extends ThreeOperandBitwiseInstruction {
|
|
|
36
47
|
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
37
48
|
return a.and(b);
|
|
38
49
|
}
|
|
50
|
+
|
|
51
|
+
protected override getDynamicMultiplier(lhsTag: TypeTag): number {
|
|
52
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
53
|
+
}
|
|
39
54
|
}
|
|
40
55
|
|
|
41
56
|
export class Or extends ThreeOperandBitwiseInstruction {
|
|
@@ -45,6 +60,10 @@ export class Or extends ThreeOperandBitwiseInstruction {
|
|
|
45
60
|
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
46
61
|
return a.or(b);
|
|
47
62
|
}
|
|
63
|
+
|
|
64
|
+
protected override getDynamicMultiplier(lhsTag: TypeTag): number {
|
|
65
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
66
|
+
}
|
|
48
67
|
}
|
|
49
68
|
|
|
50
69
|
export class Xor extends ThreeOperandBitwiseInstruction {
|
|
@@ -54,31 +73,9 @@ export class Xor extends ThreeOperandBitwiseInstruction {
|
|
|
54
73
|
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
55
74
|
return a.xor(b);
|
|
56
75
|
}
|
|
57
|
-
}
|
|
58
76
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
static readonly opcode = Opcode.SHL_8; // FIXME: needed for gas.
|
|
62
|
-
|
|
63
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
64
|
-
return a.shl(b);
|
|
65
|
-
}
|
|
66
|
-
protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
67
|
-
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
|
|
68
|
-
memory.checkTag(TypeTag.UINT8, bOffset);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export class Shr extends ThreeOperandBitwiseInstruction {
|
|
73
|
-
static readonly type: string = 'SHR';
|
|
74
|
-
static readonly opcode = Opcode.SHR_8; // FIXME: needed for gas.
|
|
75
|
-
|
|
76
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
77
|
-
return a.shr(b);
|
|
78
|
-
}
|
|
79
|
-
protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
80
|
-
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
|
|
81
|
-
memory.checkTag(TypeTag.UINT8, bOffset);
|
|
77
|
+
protected override getDynamicMultiplier(lhsTag: TypeTag): number {
|
|
78
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
82
79
|
}
|
|
83
80
|
}
|
|
84
81
|
|
|
@@ -89,16 +86,23 @@ export class Not extends Instruction {
|
|
|
89
86
|
static readonly wireFormat8 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT8, OperandType.UINT8];
|
|
90
87
|
static readonly wireFormat16 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
91
88
|
|
|
92
|
-
constructor(
|
|
89
|
+
constructor(
|
|
90
|
+
private indirect: number,
|
|
91
|
+
private srcOffset: number,
|
|
92
|
+
private dstOffset: number,
|
|
93
|
+
) {
|
|
93
94
|
super();
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
public async execute(context: AvmContext): Promise<void> {
|
|
97
98
|
const memory = context.machineState.memory;
|
|
98
|
-
|
|
99
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
100
|
+
|
|
101
|
+
context.machineState.consumeGas(
|
|
102
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
103
|
+
);
|
|
99
104
|
|
|
100
105
|
const operands = [this.srcOffset, this.dstOffset];
|
|
101
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
102
106
|
const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
103
107
|
TaggedMemory.checkIsIntegralTag(memory.getTag(srcOffset));
|
|
104
108
|
const value = memory.getAs<IntegralValue>(srcOffset);
|
|
@@ -7,12 +7,15 @@ import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
|
7
7
|
abstract class ComparatorInstruction extends ThreeOperandInstruction {
|
|
8
8
|
public async execute(context: AvmContext): Promise<void> {
|
|
9
9
|
const memory = context.machineState.memory;
|
|
10
|
-
|
|
10
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
11
|
+
|
|
12
|
+
context.machineState.consumeGas(
|
|
13
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
14
|
+
);
|
|
11
15
|
|
|
12
16
|
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
13
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
14
17
|
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
15
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
18
|
+
memory.checkTagsAreSame(aOffset, bOffset); // Brillig semantic enforces that tags match.
|
|
16
19
|
|
|
17
20
|
const a = memory.get(aOffset);
|
|
18
21
|
const b = memory.get(bOffset);
|
|
@@ -20,7 +20,6 @@ export class GetContractInstance extends Instruction {
|
|
|
20
20
|
OperandType.UINT8, // indirect bits
|
|
21
21
|
OperandType.UINT16, // addressOffset
|
|
22
22
|
OperandType.UINT16, // dstOffset
|
|
23
|
-
OperandType.UINT16, // existsOfsset
|
|
24
23
|
OperandType.UINT8, // member enum (immediate)
|
|
25
24
|
];
|
|
26
25
|
|
|
@@ -28,7 +27,6 @@ export class GetContractInstance extends Instruction {
|
|
|
28
27
|
private indirect: number,
|
|
29
28
|
private addressOffset: number,
|
|
30
29
|
private dstOffset: number,
|
|
31
|
-
private existsOffset: number,
|
|
32
30
|
private memberEnum: number,
|
|
33
31
|
) {
|
|
34
32
|
super();
|
|
@@ -36,15 +34,18 @@ export class GetContractInstance extends Instruction {
|
|
|
36
34
|
|
|
37
35
|
async execute(context: AvmContext): Promise<void> {
|
|
38
36
|
const memory = context.machineState.memory;
|
|
39
|
-
|
|
37
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
38
|
+
|
|
39
|
+
context.machineState.consumeGas(
|
|
40
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
41
|
+
);
|
|
40
42
|
|
|
41
43
|
if (!(this.memberEnum in ContractInstanceMember)) {
|
|
42
44
|
throw new InstructionExecutionError(`Invalid GETCONSTRACTINSTANCE member enum ${this.memberEnum}`);
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
const operands = [this.addressOffset, this.dstOffset
|
|
46
|
-
const
|
|
47
|
-
const [addressOffset, dstOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
47
|
+
const operands = [this.addressOffset, this.dstOffset];
|
|
48
|
+
const [addressOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
48
49
|
memory.checkTag(TypeTag.FIELD, addressOffset);
|
|
49
50
|
|
|
50
51
|
const address = memory.get(addressOffset).toAztecAddress();
|
|
@@ -66,7 +67,9 @@ export class GetContractInstance extends Instruction {
|
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
const existsOffset = dstOffset;
|
|
71
|
+
const memberValueOffset = dstOffset + 1;
|
|
69
72
|
memory.set(existsOffset, new Uint1(exists ? 1 : 0));
|
|
70
|
-
memory.set(
|
|
73
|
+
memory.set(memberValueOffset, memberValue);
|
|
71
74
|
}
|
|
72
75
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import type
|
|
2
|
+
import { TypeTag, type Uint1 } from '../avm_memory_types.js';
|
|
3
3
|
import { InstructionExecutionError } from '../errors.js';
|
|
4
4
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
5
5
|
import { Addressing } from './addressing_mode.js';
|
|
@@ -16,7 +16,7 @@ export class Jump extends Instruction {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
public async execute(context: AvmContext): Promise<void> {
|
|
19
|
-
context.machineState.consumeGas(this.
|
|
19
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
20
20
|
|
|
21
21
|
context.machineState.pc = this.jumpOffset;
|
|
22
22
|
}
|
|
@@ -38,20 +38,29 @@ export class JumpI extends Instruction {
|
|
|
38
38
|
OperandType.UINT32,
|
|
39
39
|
];
|
|
40
40
|
|
|
41
|
-
constructor(
|
|
41
|
+
constructor(
|
|
42
|
+
private indirect: number,
|
|
43
|
+
private condOffset: number,
|
|
44
|
+
private loc: number,
|
|
45
|
+
) {
|
|
42
46
|
super();
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
public async execute(context: AvmContext): Promise<void> {
|
|
46
50
|
const memory = context.machineState.memory;
|
|
47
|
-
|
|
51
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
52
|
+
|
|
53
|
+
context.machineState.consumeGas(
|
|
54
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
55
|
+
);
|
|
48
56
|
|
|
49
57
|
const operands = [this.condOffset];
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
const [resolvedCondOffset] = addressing.resolve(operands, memory);
|
|
59
|
+
|
|
60
|
+
memory.checkTag(TypeTag.UINT1, resolvedCondOffset);
|
|
61
|
+
const condition = memory.getAs<Uint1>(resolvedCondOffset);
|
|
53
62
|
|
|
54
|
-
if (condition.
|
|
63
|
+
if (condition.toNumber() == 0) {
|
|
55
64
|
context.machineState.pc = context.machineState.nextPc;
|
|
56
65
|
} else {
|
|
57
66
|
context.machineState.pc = this.loc;
|
|
@@ -74,7 +83,7 @@ export class InternalCall extends Instruction {
|
|
|
74
83
|
}
|
|
75
84
|
|
|
76
85
|
public async execute(context: AvmContext): Promise<void> {
|
|
77
|
-
context.machineState.consumeGas(this.
|
|
86
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
78
87
|
|
|
79
88
|
context.machineState.internalCallStack.push({
|
|
80
89
|
callPc: context.machineState.pc,
|
|
@@ -99,7 +108,7 @@ export class InternalReturn extends Instruction {
|
|
|
99
108
|
}
|
|
100
109
|
|
|
101
110
|
public async execute(context: AvmContext): Promise<void> {
|
|
102
|
-
context.machineState.consumeGas(this.
|
|
111
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
103
112
|
|
|
104
113
|
const stackEntry = context.machineState.internalCallStack.pop();
|
|
105
114
|
if (stackEntry === undefined) {
|