@aztec/simulator 0.0.0-test.1 → 0.0.1-fake-c83136db25
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 +5 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +4 -7
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +0 -1
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/private/acvm/acvm.d.ts +11 -5
- 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 +1 -1
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +17 -18
- 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 +0 -1
- 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 +19 -2
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +53 -0
- package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +9 -10
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +11 -7
- 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 +5 -5
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
- 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 +3 -1
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +7 -2
- package/dest/public/avm/avm_gas.d.ts +4 -20
- 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 +2 -0
- 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 +98 -87
- 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 +4 -5
- 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 +6 -30
- 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 +5 -4
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +12 -14
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +6 -4
- 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 +43 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +42 -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 +0 -2
- 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 +2 -2
- 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 +11 -7
- 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 +11 -1
- 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 +5 -13
- 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.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +3 -3
- package/dest/public/avm/opcodes/contract.d.ts +1 -2
- 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.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +10 -8
- package/dest/public/avm/opcodes/conversion.d.ts +1 -0
- 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.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +6 -6
- package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
- 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 +8 -7
- 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.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +6 -6
- package/dest/public/avm/opcodes/instruction.d.ts +14 -10
- 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/memory.d.ts +4 -4
- 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 +2 -1
- 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.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 +0 -2
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
- 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 +13 -4
- 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 +10 -13
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +16 -24
- package/dest/public/db_interfaces.d.ts +56 -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 +10 -3
- 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 +9 -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 +7 -0
- 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 +10 -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 -13
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +96 -71
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
- 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 +95 -0
- package/dest/public/fixtures/utils.d.ts +16 -3
- 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 +70 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +297 -0
- package/dest/public/index.d.ts +4 -8
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +30 -39
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +151 -67
- 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 -30
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +141 -96
- package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
- 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/cpp_public_tx_simulator.d.ts +41 -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 +89 -0
- package/dest/public/public_tx_simulator/index.d.ts +4 -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 +24 -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 +19 -29
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +63 -91
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +45 -47
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +209 -184
- 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 +41 -1
- 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 +20 -65
- 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 +11 -22
- 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 +2 -5
- 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 +2 -2
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +42 -85
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +391 -0
- package/dest/public/test_executor_metrics.d.ts +54 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +306 -0
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +2 -4
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +6 -3
- 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 +36 -31
- 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} +30 -15
- 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 +10 -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 +44 -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 +23 -20
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
- package/src/public/avm/fixtures/initializers.ts +104 -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/db_interfaces.ts +61 -0
- package/src/{common → public}/debug_fn_name.ts +7 -7
- package/src/public/executor_metrics.ts +55 -6
- package/src/public/executor_metrics_interface.ts +14 -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 +36 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +158 -113
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
- package/src/public/fixtures/token_test.ts +140 -0
- package/src/public/fixtures/utils.ts +141 -68
- package/src/public/hinting_db_sources.ts +505 -0
- package/src/public/index.ts +9 -8
- package/src/public/public_db_sources.ts +196 -97
- 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 +191 -153
- package/src/public/public_processor/public_processor_metrics.ts +2 -2
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +128 -0
- package/src/public/public_tx_simulator/index.ts +3 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +109 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +160 -193
- package/src/public/public_tx_simulator/public_tx_simulator.ts +294 -220
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +11 -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 +560 -0
- package/src/public/test_executor_metrics.ts +395 -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.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.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.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/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/test/utils.ts +0 -36
- /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
|
@@ -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) {
|
|
@@ -33,8 +33,13 @@ export class ToRadixBE extends Instruction {
|
|
|
33
33
|
|
|
34
34
|
public async execute(context: AvmContext): Promise<void> {
|
|
35
35
|
const memory = context.machineState.memory;
|
|
36
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
37
|
+
|
|
38
|
+
context.machineState.consumeGas(
|
|
39
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
40
|
+
);
|
|
41
|
+
|
|
36
42
|
const operands = [this.srcOffset, this.radixOffset, this.numLimbsOffset, this.outputBitsOffset, this.dstOffset];
|
|
37
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
38
43
|
const [srcOffset, radixOffset, numLimbsOffset, outputBitsOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
39
44
|
|
|
40
45
|
// The radix gadget only takes in a Field
|
|
@@ -44,11 +49,13 @@ export class ToRadixBE extends Instruction {
|
|
|
44
49
|
memory.checkTag(TypeTag.UINT1, outputBitsOffset);
|
|
45
50
|
|
|
46
51
|
const numLimbs = memory.get(numLimbsOffset).toNumber();
|
|
47
|
-
|
|
52
|
+
const radix: bigint = memory.get(radixOffset).toBigInt();
|
|
53
|
+
context.machineState.consumeGas(
|
|
54
|
+
this.dynamicGasCost(Math.max(numLimbs, radix > 256n ? 32 : MODULUS_LIMBS_PER_RADIX[Number(radix)])),
|
|
55
|
+
);
|
|
48
56
|
const outputBits = memory.get(outputBitsOffset).toNumber();
|
|
49
57
|
|
|
50
58
|
let value: bigint = memory.get(srcOffset).toBigInt();
|
|
51
|
-
const radix: bigint = memory.get(radixOffset).toBigInt();
|
|
52
59
|
|
|
53
60
|
if (radix < 2 || radix > 256) {
|
|
54
61
|
throw new InvalidToRadixInputsError(`ToRadixBE instruction's radix should be in range [2,256] (was ${radix}).`);
|
|
@@ -73,8 +80,25 @@ export class ToRadixBE extends Instruction {
|
|
|
73
80
|
value /= radixBN;
|
|
74
81
|
}
|
|
75
82
|
|
|
83
|
+
if (value !== 0n) {
|
|
84
|
+
throw new InvalidToRadixInputsError(`Field failed to decompose in ${numLimbs} limbs.`);
|
|
85
|
+
}
|
|
86
|
+
|
|
76
87
|
const outputType = outputBits != 0 ? Uint1 : Uint8;
|
|
77
88
|
const res = limbArray.map(byte => new outputType(byte));
|
|
78
89
|
memory.setSlice(dstOffset, res);
|
|
79
90
|
}
|
|
80
91
|
}
|
|
92
|
+
|
|
93
|
+
// First two are for radix = 0 and 1, which are invalid, so we have 0 limbs for those cases.
|
|
94
|
+
export const MODULUS_LIMBS_PER_RADIX: number[] = [
|
|
95
|
+
0, 0, 254, 161, 127, 110, 99, 91, 85, 81, 77, 74, 71, 69, 67, 65, 64, 63, 61, 60, 59, 58, 57, 57, 56, 55, 54, 54, 53,
|
|
96
|
+
53, 52, 52, 51, 51, 50, 50, 50, 49, 49, 48, 48, 48, 48, 47, 47, 47, 46, 46, 46, 46, 45, 45, 45, 45, 45, 44, 44, 44,
|
|
97
|
+
44, 44, 43, 43, 43, 43, 43, 43, 42, 42, 42, 42, 42, 42, 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, 40, 40, 40, 40, 40,
|
|
98
|
+
40, 40, 40, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
|
|
99
|
+
37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
|
|
100
|
+
36, 36, 36, 36, 36, 36, 36, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
|
|
101
|
+
35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
|
|
102
|
+
34, 34, 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
|
|
103
|
+
33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
|
|
104
|
+
];
|
|
@@ -3,6 +3,7 @@ import { Point } from '@aztec/foundation/fields';
|
|
|
3
3
|
|
|
4
4
|
import type { AvmContext } from '../avm_context.js';
|
|
5
5
|
import { Field, TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
6
|
+
import { EcAddPointNotOnCurveError } from '../errors.js';
|
|
6
7
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
7
8
|
import { Addressing } from './addressing_mode.js';
|
|
8
9
|
import { Instruction } from './instruction.js';
|
|
@@ -39,7 +40,11 @@ export class EcAdd extends Instruction {
|
|
|
39
40
|
|
|
40
41
|
public async execute(context: AvmContext): Promise<void> {
|
|
41
42
|
const memory = context.machineState.memory;
|
|
42
|
-
|
|
43
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
44
|
+
|
|
45
|
+
context.machineState.consumeGas(
|
|
46
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
47
|
+
);
|
|
43
48
|
|
|
44
49
|
const operands = [
|
|
45
50
|
this.p1XOffset,
|
|
@@ -50,7 +55,6 @@ export class EcAdd extends Instruction {
|
|
|
50
55
|
this.p2IsInfiniteOffset,
|
|
51
56
|
this.dstOffset,
|
|
52
57
|
];
|
|
53
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
54
58
|
const [p1XOffset, p1YOffset, p1IsInfiniteOffset, p2XOffset, p2YOffset, p2IsInfiniteOffset, dstOffset] =
|
|
55
59
|
addressing.resolve(operands, memory);
|
|
56
60
|
|
|
@@ -62,7 +66,7 @@ export class EcAdd extends Instruction {
|
|
|
62
66
|
const p1IsInfinite = memory.get(p1IsInfiniteOffset).toNumber() === 1;
|
|
63
67
|
const p1 = new Point(p1X.toFr(), p1Y.toFr(), p1IsInfinite);
|
|
64
68
|
if (!p1.isOnGrumpkin()) {
|
|
65
|
-
throw new
|
|
69
|
+
throw new EcAddPointNotOnCurveError(/*pointIndex=*/ 1, p1);
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
const p2X = memory.get(p2XOffset);
|
|
@@ -71,17 +75,16 @@ export class EcAdd extends Instruction {
|
|
|
71
75
|
const p2IsInfinite = memory.get(p2IsInfiniteOffset).toNumber() === 1;
|
|
72
76
|
const p2 = new Point(p2X.toFr(), p2Y.toFr(), p2IsInfinite);
|
|
73
77
|
if (!p2.isOnGrumpkin()) {
|
|
74
|
-
throw new
|
|
78
|
+
throw new EcAddPointNotOnCurveError(/*pointIndex=*/ 2, p2);
|
|
75
79
|
}
|
|
76
80
|
|
|
77
|
-
const grumpkin = new Grumpkin();
|
|
78
81
|
let dest;
|
|
79
82
|
if (p1IsInfinite) {
|
|
80
83
|
dest = p2;
|
|
81
84
|
} else if (p2IsInfinite) {
|
|
82
85
|
dest = p1;
|
|
83
86
|
} else {
|
|
84
|
-
dest = await
|
|
87
|
+
dest = await Grumpkin.add(p1, p2);
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
// Important to use setSlice() and not set() in the two following statements as
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { Field, Uint64 } from '../avm_memory_types.js';
|
|
2
|
+
import { Field, Uint1, Uint32, Uint64, Uint128 } 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';
|
|
@@ -13,15 +13,15 @@ export enum EnvironmentVariable {
|
|
|
13
13
|
VERSION,
|
|
14
14
|
BLOCKNUMBER,
|
|
15
15
|
TIMESTAMP,
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
BASEFEEPERL2GAS,
|
|
17
|
+
BASEFEEPERDAGAS,
|
|
18
18
|
ISSTATICCALL,
|
|
19
19
|
L2GASLEFT,
|
|
20
20
|
DAGASLEFT,
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
function getValue(
|
|
24
|
-
switch (
|
|
23
|
+
function getValue(varEnum: EnvironmentVariable, ctx: AvmContext) {
|
|
24
|
+
switch (varEnum) {
|
|
25
25
|
case EnvironmentVariable.ADDRESS:
|
|
26
26
|
return new Field(ctx.environment.address.toField());
|
|
27
27
|
case EnvironmentVariable.SENDER:
|
|
@@ -33,21 +33,21 @@ function getValue(e: EnvironmentVariable, ctx: AvmContext) {
|
|
|
33
33
|
case EnvironmentVariable.VERSION:
|
|
34
34
|
return new Field(ctx.environment.globals.version);
|
|
35
35
|
case EnvironmentVariable.BLOCKNUMBER:
|
|
36
|
-
return new
|
|
36
|
+
return new Uint32(ctx.environment.globals.blockNumber);
|
|
37
37
|
case EnvironmentVariable.TIMESTAMP:
|
|
38
|
-
return new Uint64(ctx.environment.globals.timestamp
|
|
39
|
-
case EnvironmentVariable.
|
|
40
|
-
return new
|
|
41
|
-
case EnvironmentVariable.
|
|
42
|
-
return new
|
|
38
|
+
return new Uint64(ctx.environment.globals.timestamp);
|
|
39
|
+
case EnvironmentVariable.BASEFEEPERL2GAS:
|
|
40
|
+
return new Uint128(ctx.environment.globals.gasFees.feePerL2Gas);
|
|
41
|
+
case EnvironmentVariable.BASEFEEPERDAGAS:
|
|
42
|
+
return new Uint128(ctx.environment.globals.gasFees.feePerDaGas);
|
|
43
43
|
case EnvironmentVariable.ISSTATICCALL:
|
|
44
|
-
return new
|
|
44
|
+
return new Uint1(ctx.environment.isStaticCall ? 1 : 0);
|
|
45
45
|
case EnvironmentVariable.L2GASLEFT:
|
|
46
|
-
return new
|
|
46
|
+
return new Uint32(ctx.machineState.l2GasLeft);
|
|
47
47
|
case EnvironmentVariable.DAGASLEFT:
|
|
48
|
-
return new
|
|
48
|
+
return new Uint32(ctx.machineState.daGasLeft);
|
|
49
49
|
default:
|
|
50
|
-
throw new
|
|
50
|
+
throw new InstructionExecutionError(`Invalid GETENVVAR var enum ${varEnum}`);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -61,22 +61,27 @@ export class GetEnvVar extends Instruction {
|
|
|
61
61
|
OperandType.UINT8, // variable enum (immediate)
|
|
62
62
|
];
|
|
63
63
|
|
|
64
|
-
constructor(
|
|
64
|
+
constructor(
|
|
65
|
+
private indirect: number,
|
|
66
|
+
private dstOffset: number,
|
|
67
|
+
private varEnum: number,
|
|
68
|
+
) {
|
|
65
69
|
super();
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
public async execute(context: AvmContext): Promise<void> {
|
|
69
73
|
const memory = context.machineState.memory;
|
|
70
|
-
|
|
74
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
71
75
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
context.machineState.consumeGas(
|
|
77
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
78
|
+
);
|
|
75
79
|
|
|
76
80
|
const operands = [this.dstOffset];
|
|
77
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
78
81
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
79
82
|
|
|
80
|
-
|
|
83
|
+
const value = getValue(this.varEnum as EnvironmentVariable, context);
|
|
84
|
+
|
|
85
|
+
memory.set(dstOffset, value);
|
|
81
86
|
}
|
|
82
87
|
}
|