@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.24de95ac
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} +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 +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} +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 +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,6 +1,7 @@
|
|
|
1
1
|
import { Grumpkin } from '@aztec/foundation/crypto';
|
|
2
2
|
import { Point } from '@aztec/foundation/fields';
|
|
3
3
|
import { Field, TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
4
|
+
import { EcAddPointNotOnCurveError } from '../errors.js';
|
|
4
5
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
5
6
|
import { Addressing } from './addressing_mode.js';
|
|
6
7
|
import { Instruction } from './instruction.js';
|
|
@@ -32,7 +33,8 @@ export class EcAdd extends Instruction {
|
|
|
32
33
|
}
|
|
33
34
|
async execute(context) {
|
|
34
35
|
const memory = context.machineState.memory;
|
|
35
|
-
|
|
36
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
37
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
36
38
|
const operands = [
|
|
37
39
|
this.p1XOffset,
|
|
38
40
|
this.p1YOffset,
|
|
@@ -42,7 +44,6 @@ export class EcAdd extends Instruction {
|
|
|
42
44
|
this.p2IsInfiniteOffset,
|
|
43
45
|
this.dstOffset
|
|
44
46
|
];
|
|
45
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
46
47
|
const [p1XOffset, p1YOffset, p1IsInfiniteOffset, p2XOffset, p2YOffset, p2IsInfiniteOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
47
48
|
memory.checkTags(TypeTag.FIELD, p1XOffset, p1YOffset, p2XOffset, p2YOffset);
|
|
48
49
|
memory.checkTags(TypeTag.UINT1, p1IsInfiniteOffset, p2IsInfiniteOffset);
|
|
@@ -51,7 +52,7 @@ export class EcAdd extends Instruction {
|
|
|
51
52
|
const p1IsInfinite = memory.get(p1IsInfiniteOffset).toNumber() === 1;
|
|
52
53
|
const p1 = new Point(p1X.toFr(), p1Y.toFr(), p1IsInfinite);
|
|
53
54
|
if (!p1.isOnGrumpkin()) {
|
|
54
|
-
throw new
|
|
55
|
+
throw new EcAddPointNotOnCurveError(/*pointIndex=*/ 1, p1);
|
|
55
56
|
}
|
|
56
57
|
const p2X = memory.get(p2XOffset);
|
|
57
58
|
const p2Y = memory.get(p2YOffset);
|
|
@@ -59,16 +60,15 @@ export class EcAdd extends Instruction {
|
|
|
59
60
|
const p2IsInfinite = memory.get(p2IsInfiniteOffset).toNumber() === 1;
|
|
60
61
|
const p2 = new Point(p2X.toFr(), p2Y.toFr(), p2IsInfinite);
|
|
61
62
|
if (!p2.isOnGrumpkin()) {
|
|
62
|
-
throw new
|
|
63
|
+
throw new EcAddPointNotOnCurveError(/*pointIndex=*/ 2, p2);
|
|
63
64
|
}
|
|
64
|
-
const grumpkin = new Grumpkin();
|
|
65
65
|
let dest;
|
|
66
66
|
if (p1IsInfinite) {
|
|
67
67
|
dest = p2;
|
|
68
68
|
} else if (p2IsInfinite) {
|
|
69
69
|
dest = p1;
|
|
70
70
|
} else {
|
|
71
|
-
dest = await
|
|
71
|
+
dest = await Grumpkin.add(p1, p2);
|
|
72
72
|
}
|
|
73
73
|
// Important to use setSlice() and not set() in the two following statements as
|
|
74
74
|
// this checks that the offsets lie within memory range.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment_getters.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/environment_getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,mBAAmB;IAC7B,OAAO,IAAA;IACP,MAAM,IAAA;IACN,cAAc,IAAA;IACd,OAAO,IAAA;IACP,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,
|
|
1
|
+
{"version":3,"file":"environment_getters.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/environment_getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,mBAAmB;IAC7B,OAAO,IAAA;IACP,MAAM,IAAA;IACN,cAAc,IAAA;IACd,OAAO,IAAA;IACP,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,eAAe,IAAA;IACf,eAAe,IAAA;IACf,YAAY,IAAA;IACZ,SAAS,KAAA;IACT,SAAS,KAAA;CACV;AAiCD,qBAAa,SAAU,SAAQ,WAAW;IAWtC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAZjB,gBAAuB,IAAI,EAAE,MAAM,CAAe;IAClD,gBAAuB,MAAM,EAAE,MAAM,CAAuB;IAC5D,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAKzC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM;IAKZ,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAezD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Field, Uint64 } from '../avm_memory_types.js';
|
|
1
|
+
import { Field, Uint1, Uint32, Uint64, Uint128 } from '../avm_memory_types.js';
|
|
2
2
|
import { InstructionExecutionError } from '../errors.js';
|
|
3
3
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
4
|
import { Addressing } from './addressing_mode.js';
|
|
@@ -11,15 +11,15 @@ export var EnvironmentVariable = /*#__PURE__*/ function(EnvironmentVariable) {
|
|
|
11
11
|
EnvironmentVariable[EnvironmentVariable["VERSION"] = 4] = "VERSION";
|
|
12
12
|
EnvironmentVariable[EnvironmentVariable["BLOCKNUMBER"] = 5] = "BLOCKNUMBER";
|
|
13
13
|
EnvironmentVariable[EnvironmentVariable["TIMESTAMP"] = 6] = "TIMESTAMP";
|
|
14
|
-
EnvironmentVariable[EnvironmentVariable["
|
|
15
|
-
EnvironmentVariable[EnvironmentVariable["
|
|
14
|
+
EnvironmentVariable[EnvironmentVariable["BASEFEEPERL2GAS"] = 7] = "BASEFEEPERL2GAS";
|
|
15
|
+
EnvironmentVariable[EnvironmentVariable["BASEFEEPERDAGAS"] = 8] = "BASEFEEPERDAGAS";
|
|
16
16
|
EnvironmentVariable[EnvironmentVariable["ISSTATICCALL"] = 9] = "ISSTATICCALL";
|
|
17
17
|
EnvironmentVariable[EnvironmentVariable["L2GASLEFT"] = 10] = "L2GASLEFT";
|
|
18
18
|
EnvironmentVariable[EnvironmentVariable["DAGASLEFT"] = 11] = "DAGASLEFT";
|
|
19
19
|
return EnvironmentVariable;
|
|
20
20
|
}({});
|
|
21
|
-
function getValue(
|
|
22
|
-
switch(
|
|
21
|
+
function getValue(varEnum, ctx) {
|
|
22
|
+
switch(varEnum){
|
|
23
23
|
case 0:
|
|
24
24
|
return new Field(ctx.environment.address.toField());
|
|
25
25
|
case 1:
|
|
@@ -31,21 +31,21 @@ function getValue(e, ctx) {
|
|
|
31
31
|
case 4:
|
|
32
32
|
return new Field(ctx.environment.globals.version);
|
|
33
33
|
case 5:
|
|
34
|
-
return new
|
|
34
|
+
return new Uint32(ctx.environment.globals.blockNumber);
|
|
35
35
|
case 6:
|
|
36
|
-
return new Uint64(ctx.environment.globals.timestamp
|
|
36
|
+
return new Uint64(ctx.environment.globals.timestamp);
|
|
37
37
|
case 7:
|
|
38
|
-
return new
|
|
38
|
+
return new Uint128(ctx.environment.globals.gasFees.feePerL2Gas);
|
|
39
39
|
case 8:
|
|
40
|
-
return new
|
|
40
|
+
return new Uint128(ctx.environment.globals.gasFees.feePerDaGas);
|
|
41
41
|
case 9:
|
|
42
|
-
return new
|
|
42
|
+
return new Uint1(ctx.environment.isStaticCall ? 1 : 0);
|
|
43
43
|
case 10:
|
|
44
|
-
return new
|
|
44
|
+
return new Uint32(ctx.machineState.l2GasLeft);
|
|
45
45
|
case 11:
|
|
46
|
-
return new
|
|
46
|
+
return new Uint32(ctx.machineState.daGasLeft);
|
|
47
47
|
default:
|
|
48
|
-
throw new
|
|
48
|
+
throw new InstructionExecutionError(`Invalid GETENVVAR var enum ${varEnum}`);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
export class GetEnvVar extends Instruction {
|
|
@@ -65,15 +65,13 @@ export class GetEnvVar extends Instruction {
|
|
|
65
65
|
}
|
|
66
66
|
async execute(context) {
|
|
67
67
|
const memory = context.machineState.memory;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
throw new InstructionExecutionError(`Invalid GETENVVAR var enum ${this.varEnum}`);
|
|
71
|
-
}
|
|
68
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
69
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
72
70
|
const operands = [
|
|
73
71
|
this.dstOffset
|
|
74
72
|
];
|
|
75
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
76
73
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
77
|
-
|
|
74
|
+
const value = getValue(this.varEnum, context);
|
|
75
|
+
memory.set(dstOffset, value);
|
|
78
76
|
}
|
|
79
77
|
}
|
|
@@ -3,12 +3,13 @@ import { Opcode, OperandType } from '../serialization/instruction_serialization.
|
|
|
3
3
|
import { Instruction } from './instruction.js';
|
|
4
4
|
declare abstract class ExternalCall extends Instruction {
|
|
5
5
|
private indirect;
|
|
6
|
-
private
|
|
6
|
+
private l2GasOffset;
|
|
7
|
+
private daGasOffset;
|
|
7
8
|
private addrOffset;
|
|
8
|
-
private argsOffset;
|
|
9
9
|
private argsSizeOffset;
|
|
10
|
+
private argsOffset;
|
|
10
11
|
static readonly wireFormat: OperandType[];
|
|
11
|
-
constructor(indirect: number,
|
|
12
|
+
constructor(indirect: number, l2GasOffset: number, daGasOffset: number, addrOffset: number, argsSizeOffset: number, argsOffset: number);
|
|
12
13
|
execute(context: AvmContext): Promise<void>;
|
|
13
14
|
abstract get type(): 'CALL' | 'STATICCALL';
|
|
14
15
|
}
|
|
@@ -33,24 +34,24 @@ export declare class SuccessCopy extends Instruction {
|
|
|
33
34
|
}
|
|
34
35
|
export declare class Return extends Instruction {
|
|
35
36
|
private indirect;
|
|
36
|
-
private returnOffset;
|
|
37
37
|
private returnSizeOffset;
|
|
38
|
+
private returnOffset;
|
|
38
39
|
static type: string;
|
|
39
40
|
static readonly opcode: Opcode;
|
|
40
41
|
static readonly wireFormat: OperandType[];
|
|
41
|
-
constructor(indirect: number,
|
|
42
|
+
constructor(indirect: number, returnSizeOffset: number, returnOffset: number);
|
|
42
43
|
execute(context: AvmContext): Promise<void>;
|
|
43
44
|
handlesPC(): boolean;
|
|
44
45
|
}
|
|
45
46
|
export declare class Revert extends Instruction {
|
|
46
47
|
private indirect;
|
|
47
|
-
private returnOffset;
|
|
48
48
|
private retSizeOffset;
|
|
49
|
+
private returnOffset;
|
|
49
50
|
static type: string;
|
|
50
51
|
static readonly opcode: Opcode;
|
|
51
52
|
static readonly wireFormat8: OperandType[];
|
|
52
53
|
static readonly wireFormat16: OperandType[];
|
|
53
|
-
constructor(indirect: number,
|
|
54
|
+
constructor(indirect: number, retSizeOffset: number, returnOffset: number);
|
|
54
55
|
execute(context: AvmContext): Promise<void>;
|
|
55
56
|
handlesPC(): boolean;
|
|
56
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external_calls.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/external_calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,YAAa,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"external_calls.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/external_calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,YAAa,SAAQ,WAAW;IAa3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAhBpB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAQvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM;IAKf,OAAO,CAAC,OAAO,EAAE,UAAU;IA4ExC,aAA6B,IAAI,IAAI,MAAM,GAAG,YAAY,CAAC;CAC5D;AAED,qBAAa,IAAK,SAAQ,YAAY;IACpC,MAAM,CAAC,IAAI,EAAG,MAAM,CAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAe;IAE7C,IAAW,IAAI,WAEd;CACF;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,MAAM,CAAC,IAAI,EAAG,YAAY,CAAU;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAqB;IAEnD,IAAW,IAAI,iBAEd;CACF;AAED,qBAAa,WAAY,SAAQ,WAAW;IAWxC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IAXnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAiB;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsB;IAEpD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAIvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM;IAKd,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzD;AAED,qBAAa,MAAO,SAAQ,WAAW;IAYnC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,YAAY;IAbtB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAY;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAiB;IAE/C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,MAAO,SAAQ,WAAW;IAkBnC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IAnBtB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAY;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAEjD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,CAKxC;IACF,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAKzC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBxC,SAAS,IAAI,OAAO;CAGrC"}
|
|
@@ -4,49 +4,51 @@ import { Addressing } from './addressing_mode.js';
|
|
|
4
4
|
import { Instruction } from './instruction.js';
|
|
5
5
|
class ExternalCall extends Instruction {
|
|
6
6
|
indirect;
|
|
7
|
-
|
|
7
|
+
l2GasOffset;
|
|
8
|
+
daGasOffset;
|
|
8
9
|
addrOffset;
|
|
9
|
-
argsOffset;
|
|
10
10
|
argsSizeOffset;
|
|
11
|
+
argsOffset;
|
|
11
12
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
12
13
|
static wireFormat = [
|
|
13
14
|
OperandType.UINT8,
|
|
14
|
-
OperandType.
|
|
15
|
+
OperandType.UINT16,
|
|
16
|
+
OperandType.UINT16,
|
|
15
17
|
OperandType.UINT16,
|
|
16
18
|
OperandType.UINT16,
|
|
17
19
|
OperandType.UINT16,
|
|
18
20
|
OperandType.UINT16
|
|
19
21
|
];
|
|
20
|
-
constructor(indirect,
|
|
21
|
-
super(), this.indirect = indirect, this.
|
|
22
|
+
constructor(indirect, l2GasOffset, daGasOffset, addrOffset, argsSizeOffset, argsOffset){
|
|
23
|
+
super(), this.indirect = indirect, this.l2GasOffset = l2GasOffset, this.daGasOffset = daGasOffset, this.addrOffset = addrOffset, this.argsSizeOffset = argsSizeOffset, this.argsOffset = argsOffset;
|
|
22
24
|
}
|
|
23
25
|
async execute(context) {
|
|
24
26
|
const memory = context.machineState.memory;
|
|
27
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
28
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
25
29
|
const operands = [
|
|
26
|
-
this.
|
|
30
|
+
this.l2GasOffset,
|
|
31
|
+
this.daGasOffset,
|
|
27
32
|
this.addrOffset,
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
33
|
+
this.argsSizeOffset,
|
|
34
|
+
this.argsOffset
|
|
30
35
|
];
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
memory.checkTags(TypeTag.
|
|
36
|
+
const [l2GasOffset, daGasOffset, addrOffset, argsSizeOffset, argsOffset] = addressing.resolve(operands, memory);
|
|
37
|
+
memory.checkTags(TypeTag.UINT32, l2GasOffset);
|
|
38
|
+
memory.checkTags(TypeTag.UINT32, daGasOffset);
|
|
34
39
|
memory.checkTag(TypeTag.FIELD, addrOffset);
|
|
35
40
|
memory.checkTag(TypeTag.UINT32, argsSizeOffset);
|
|
36
41
|
const calldataSize = memory.get(argsSizeOffset).toNumber();
|
|
37
42
|
const calldata = memory.getSlice(argsOffset, calldataSize).map((f)=>f.toFr());
|
|
38
|
-
memory.checkTagsRange(TypeTag.FIELD, argsOffset, calldataSize);
|
|
39
43
|
const callAddress = memory.getAs(addrOffset);
|
|
40
44
|
// If we are already in a static call, we propagate the environment.
|
|
41
45
|
const callType = context.environment.isStaticCall ? 'STATICCALL' : this.type;
|
|
42
|
-
//
|
|
43
|
-
context.machineState.consumeGas(this.gasCost(calldataSize));
|
|
44
|
-
// Then we consume the gas allocated for the nested call. The excess will be refunded later.
|
|
46
|
+
// We consume the gas allocated for the nested call. The excess will be refunded later.
|
|
45
47
|
// Gas allocation is capped by the amount of gas left in the current context.
|
|
46
48
|
// We have to do some dancing here because the gas allocation is a field,
|
|
47
49
|
// but in the machine state we track gas as a number.
|
|
48
|
-
const allocatedL2Gas = Number(BigIntMin(memory.get(
|
|
49
|
-
const allocatedDaGas = Number(BigIntMin(memory.get(
|
|
50
|
+
const allocatedL2Gas = Number(BigIntMin(memory.get(l2GasOffset).toBigInt(), BigInt(context.machineState.l2GasLeft)));
|
|
51
|
+
const allocatedDaGas = Number(BigIntMin(memory.get(daGasOffset).toBigInt(), BigInt(context.machineState.daGasLeft)));
|
|
50
52
|
const allocatedGas = {
|
|
51
53
|
l2Gas: allocatedL2Gas,
|
|
52
54
|
daGas: allocatedDaGas
|
|
@@ -62,6 +64,8 @@ class ExternalCall extends Instruction {
|
|
|
62
64
|
context.machineState.nestedReturndata = fullReturnData;
|
|
63
65
|
// Track the success status directly
|
|
64
66
|
context.machineState.nestedCallSuccess = success;
|
|
67
|
+
// Account for all instructions executed in the nested call
|
|
68
|
+
context.machineState.instrCounter += nestedCallResults.totalInstructions;
|
|
65
69
|
// If the nested call reverted, we try to save the reason and the revert data.
|
|
66
70
|
// This will be used by the caller to try to reconstruct the call stack.
|
|
67
71
|
// This is only a heuristic and may not always work. It is intended to work
|
|
@@ -113,10 +117,11 @@ export class SuccessCopy extends Instruction {
|
|
|
113
117
|
}
|
|
114
118
|
async execute(context) {
|
|
115
119
|
const memory = context.machineState.memory;
|
|
120
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
121
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
116
122
|
const operands = [
|
|
117
123
|
this.dstOffset
|
|
118
124
|
];
|
|
119
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
120
125
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
121
126
|
// Use the direct success tracking property
|
|
122
127
|
const success = context.machineState.nestedCallSuccess;
|
|
@@ -126,8 +131,8 @@ export class SuccessCopy extends Instruction {
|
|
|
126
131
|
}
|
|
127
132
|
export class Return extends Instruction {
|
|
128
133
|
indirect;
|
|
129
|
-
returnOffset;
|
|
130
134
|
returnSizeOffset;
|
|
135
|
+
returnOffset;
|
|
131
136
|
static type = 'RETURN';
|
|
132
137
|
static opcode = Opcode.RETURN;
|
|
133
138
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
@@ -137,20 +142,20 @@ export class Return extends Instruction {
|
|
|
137
142
|
OperandType.UINT16,
|
|
138
143
|
OperandType.UINT16
|
|
139
144
|
];
|
|
140
|
-
constructor(indirect,
|
|
141
|
-
super(), this.indirect = indirect, this.
|
|
145
|
+
constructor(indirect, returnSizeOffset, returnOffset){
|
|
146
|
+
super(), this.indirect = indirect, this.returnSizeOffset = returnSizeOffset, this.returnOffset = returnOffset;
|
|
142
147
|
}
|
|
143
148
|
async execute(context) {
|
|
144
149
|
const memory = context.machineState.memory;
|
|
150
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
151
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
145
152
|
const operands = [
|
|
146
|
-
this.
|
|
147
|
-
this.
|
|
153
|
+
this.returnSizeOffset,
|
|
154
|
+
this.returnOffset
|
|
148
155
|
];
|
|
149
|
-
const
|
|
150
|
-
const [returnOffset, returnSizeOffset] = addressing.resolve(operands, memory);
|
|
156
|
+
const [returnSizeOffset, returnOffset] = addressing.resolve(operands, memory);
|
|
151
157
|
memory.checkTag(TypeTag.UINT32, returnSizeOffset);
|
|
152
158
|
const returnSize = memory.get(returnSizeOffset).toNumber();
|
|
153
|
-
context.machineState.consumeGas(this.gasCost(returnSize));
|
|
154
159
|
const output = memory.getSlice(returnOffset, returnSize).map((word)=>word.toFr());
|
|
155
160
|
context.machineState.return(output);
|
|
156
161
|
}
|
|
@@ -160,8 +165,8 @@ export class Return extends Instruction {
|
|
|
160
165
|
}
|
|
161
166
|
export class Revert extends Instruction {
|
|
162
167
|
indirect;
|
|
163
|
-
returnOffset;
|
|
164
168
|
retSizeOffset;
|
|
169
|
+
returnOffset;
|
|
165
170
|
static type = 'REVERT';
|
|
166
171
|
static opcode = Opcode.REVERT_8;
|
|
167
172
|
static wireFormat8 = [
|
|
@@ -176,20 +181,20 @@ export class Revert extends Instruction {
|
|
|
176
181
|
OperandType.UINT16,
|
|
177
182
|
OperandType.UINT16
|
|
178
183
|
];
|
|
179
|
-
constructor(indirect,
|
|
180
|
-
super(), this.indirect = indirect, this.
|
|
184
|
+
constructor(indirect, retSizeOffset, returnOffset){
|
|
185
|
+
super(), this.indirect = indirect, this.retSizeOffset = retSizeOffset, this.returnOffset = returnOffset;
|
|
181
186
|
}
|
|
182
187
|
async execute(context) {
|
|
183
188
|
const memory = context.machineState.memory;
|
|
189
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
190
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
184
191
|
const operands = [
|
|
185
|
-
this.
|
|
186
|
-
this.
|
|
192
|
+
this.retSizeOffset,
|
|
193
|
+
this.returnOffset
|
|
187
194
|
];
|
|
188
|
-
const
|
|
189
|
-
const [returnOffset, retSizeOffset] = addressing.resolve(operands, memory);
|
|
195
|
+
const [retSizeOffset, returnOffset] = addressing.resolve(operands, memory);
|
|
190
196
|
memory.checkTag(TypeTag.UINT32, retSizeOffset);
|
|
191
197
|
const retSize = memory.get(retSizeOffset).toNumber();
|
|
192
|
-
context.machineState.consumeGas(this.gasCost(retSize));
|
|
193
198
|
const output = memory.getSlice(returnOffset, retSize).map((word)=>word.toFr());
|
|
194
199
|
context.machineState.revert(output);
|
|
195
200
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/hashing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,SAAU,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/hashing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,SAAU,SAAQ,WAAW;IActC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,iBAAiB;IAf3B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK;IAG9B,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM;IAKtB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBzD;AAED,qBAAa,WAAY,SAAQ,WAAW;IAaxC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IAdrB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAiB;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsB;IAGpD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM;IAMhB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBzD;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAc9C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,YAAY;IAhBtB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAuB;IAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA4B;IAG1D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAMvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BzD"}
|
|
@@ -22,12 +22,12 @@ export class Poseidon2 extends Instruction {
|
|
|
22
22
|
}
|
|
23
23
|
async execute(context) {
|
|
24
24
|
const memory = context.machineState.memory;
|
|
25
|
-
|
|
25
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
26
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
26
27
|
const operands = [
|
|
27
28
|
this.inputStateOffset,
|
|
28
29
|
this.outputStateOffset
|
|
29
30
|
];
|
|
30
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
31
31
|
const [inputOffset, outputOffset] = addressing.resolve(operands, memory);
|
|
32
32
|
const inputState = memory.getSlice(inputOffset, Poseidon2.stateSize);
|
|
33
33
|
memory.checkTagsRange(TypeTag.FIELD, inputOffset, Poseidon2.stateSize);
|
|
@@ -55,13 +55,13 @@ export class KeccakF1600 extends Instruction {
|
|
|
55
55
|
async execute(context) {
|
|
56
56
|
const inputSize = 25;
|
|
57
57
|
const memory = context.machineState.memory;
|
|
58
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
59
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
58
60
|
const operands = [
|
|
59
61
|
this.dstOffset,
|
|
60
62
|
this.inputOffset
|
|
61
63
|
];
|
|
62
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
63
64
|
const [dstOffset, inputOffset] = addressing.resolve(operands, memory);
|
|
64
|
-
context.machineState.consumeGas(this.gasCost());
|
|
65
65
|
const stateData = memory.getSlice(inputOffset, inputSize).map((word)=>word.toBigInt());
|
|
66
66
|
memory.checkTagsRange(TypeTag.UINT64, inputOffset, inputSize);
|
|
67
67
|
const updatedState = keccakf1600(stateData);
|
|
@@ -91,15 +91,15 @@ export class Sha256Compression extends Instruction {
|
|
|
91
91
|
const STATE_SIZE = 8;
|
|
92
92
|
const INPUTS_SIZE = 16;
|
|
93
93
|
const memory = context.machineState.memory;
|
|
94
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
95
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
94
96
|
const operands = [
|
|
95
97
|
this.outputOffset,
|
|
96
98
|
this.stateOffset,
|
|
97
99
|
this.inputsOffset
|
|
98
100
|
];
|
|
99
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
100
101
|
const [outputOffset, stateOffset, inputsOffset] = addressing.resolve(operands, memory);
|
|
101
102
|
// Note: size of output is same as size of state
|
|
102
|
-
context.machineState.consumeGas(this.gasCost());
|
|
103
103
|
const inputs = Uint32Array.from(memory.getSlice(inputsOffset, INPUTS_SIZE).map((word)=>word.toNumber()));
|
|
104
104
|
const state = Uint32Array.from(memory.getSlice(stateOffset, STATE_SIZE).map((word)=>word.toNumber()));
|
|
105
105
|
memory.checkTagsRange(TypeTag.UINT32, inputsOffset, INPUTS_SIZE);
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
1
|
+
import type { Bufferable } from '@aztec/foundation/serialize';
|
|
3
2
|
import type { AvmContext } from '../avm_context.js';
|
|
4
3
|
import { type Gas } from '../avm_gas.js';
|
|
5
4
|
import type { BufferCursor } from '../serialization/buffer_cursor.js';
|
|
6
|
-
import type { Serializable } from '../serialization/bytecode_serialization.js';
|
|
7
5
|
import { Opcode, type OperandType } from '../serialization/instruction_serialization.js';
|
|
8
6
|
type InstructionConstructor = {
|
|
9
7
|
new (...args: any[]): Instruction;
|
|
@@ -29,18 +27,18 @@ export declare abstract class Instruction {
|
|
|
29
27
|
* @returns Thee string representation.
|
|
30
28
|
*/
|
|
31
29
|
toString(): string;
|
|
32
|
-
static
|
|
30
|
+
static fromBuffer(this: InstructionConstructor & {
|
|
33
31
|
wireFormat: OperandType[];
|
|
34
32
|
as: any;
|
|
35
33
|
}, buf: BufferCursor | Buffer): Instruction;
|
|
36
|
-
|
|
34
|
+
toBuffer(): Buffer;
|
|
37
35
|
/**
|
|
38
36
|
* Returns a new instruction instance that can be serialized with the given opcode and wire format.
|
|
39
37
|
* @param opcode The opcode of the instruction.
|
|
40
38
|
* @param wireFormat The wire format of the instruction.
|
|
41
39
|
* @returns The new instruction instance.
|
|
42
40
|
*/
|
|
43
|
-
as(opcode: Opcode, wireFormat: OperandType[]): Instruction &
|
|
41
|
+
as(opcode: Opcode, wireFormat: OperandType[]): Instruction & Bufferable;
|
|
44
42
|
/**
|
|
45
43
|
* Returns a new instruction class that can be deserialized with the given opcode and wire format.
|
|
46
44
|
* @param opcode The opcode of the instruction.
|
|
@@ -48,13 +46,19 @@ export declare abstract class Instruction {
|
|
|
48
46
|
* @returns The new instruction class.
|
|
49
47
|
*/
|
|
50
48
|
static as(this: InstructionConstructor, wireFormat: OperandType[]): InstructionConstructor & {
|
|
51
|
-
|
|
49
|
+
fromBuffer: (buf: BufferCursor | Buffer) => Instruction;
|
|
52
50
|
};
|
|
53
51
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @returns
|
|
52
|
+
* Returns the base gas cost for the instruction.
|
|
53
|
+
* @returns The base gas cost.
|
|
56
54
|
*/
|
|
57
|
-
protected
|
|
55
|
+
protected baseGasCost(indirectOperandsCount: number, relativeOperandsCount: number): Gas;
|
|
56
|
+
/**
|
|
57
|
+
* Computes the dynamic gas cost for the instruction
|
|
58
|
+
* @param dynMultiplier - The multiplier for the dynamic gas cost.
|
|
59
|
+
* @returns The dynamic gas cost.
|
|
60
|
+
*/
|
|
61
|
+
protected dynamicGasCost(dynMultiplier?: number): Gas;
|
|
58
62
|
/**
|
|
59
63
|
* Returns the stringified type of the instruction.
|
|
60
64
|
* Instruction sub-classes should have a static `type` property.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/instruction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/instruction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,GAAG,EAA4E,MAAM,eAAe,CAAC;AACnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAA4B,MAAM,+CAA+C,CAAC;AAEnH,KAAK,sBAAsB,GAAG;IAC5B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,8BAAsB,WAAW;IAC/B;;;;OAIG;aACa,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3D;;OAEG;IACI,SAAS,IAAI,OAAO;IAI3B;;;;OAIG;IACI,QAAQ,IAAI,MAAM;WAYX,UAAU,CACtB,IAAI,EAAE,sBAAsB,GAAG;QAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QAAC,EAAE,EAAE,GAAG,CAAA;KAAE,EACrE,GAAG,EAAE,YAAY,GAAG,MAAM,GACzB,WAAW;IAKP,QAAQ,IAAI,MAAM;IAOzB;;;;;OAKG;IACI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,GAAG,UAAU;IAS9E;;;;;OAKG;WACW,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE;0BAElD,YAAY,GAAG,MAAM,KAAG,WAAW;;IAQzD;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,GAAG;IAIxF;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,aAAa,GAAE,MAAU,GAAG,GAAG;IAIxD;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAIxB;IAED;;;OAGG;IACH,IAAW,MAAM,IAAI,MAAM,CAQ1B;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { strict as assert } from 'assert';
|
|
2
|
-
import { getBaseGasCost, getDynamicGasCost, mulGas, sumGas } from '../avm_gas.js';
|
|
2
|
+
import { computeAddressingCost, getBaseGasCost, getDynamicGasCost, mulGas, sumGas } from '../avm_gas.js';
|
|
3
3
|
import { Opcode, deserialize, serializeAs } from '../serialization/instruction_serialization.js';
|
|
4
4
|
/**
|
|
5
5
|
* Parent class for all AVM instructions.
|
|
@@ -15,6 +15,8 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
15
15
|
* the instruction sub-class name all of its flags and operands.
|
|
16
16
|
* @returns Thee string representation.
|
|
17
17
|
*/ toString() {
|
|
18
|
+
// Note: we could have this be the actual wire opcode if `bytecode_serialization.ts` were to
|
|
19
|
+
// pass it into the class' static `Instruction.as(this, wireFormat)` method.
|
|
18
20
|
let instructionStr = this.constructor.name + ': ';
|
|
19
21
|
// assumes that all properties are flags or operands
|
|
20
22
|
for (const prop of Object.getOwnPropertyNames(this)){
|
|
@@ -23,15 +25,15 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
23
25
|
return instructionStr;
|
|
24
26
|
}
|
|
25
27
|
// Default deserialization which uses Class.opcode and Class.wireFormat.
|
|
26
|
-
static
|
|
27
|
-
return this.as(this.wireFormat).
|
|
28
|
+
static fromBuffer(buf) {
|
|
29
|
+
return this.as(this.wireFormat).fromBuffer(buf);
|
|
28
30
|
}
|
|
29
31
|
// Default serialization which uses Class.opcode and Class.wireFormat.
|
|
30
|
-
|
|
32
|
+
toBuffer() {
|
|
31
33
|
const klass = this.constructor;
|
|
32
34
|
assert(klass.opcode !== undefined && klass.opcode !== null);
|
|
33
35
|
assert(klass.wireFormat !== undefined && klass.wireFormat !== null);
|
|
34
|
-
return this.as(klass.opcode, klass.wireFormat).
|
|
36
|
+
return this.as(klass.opcode, klass.wireFormat).toBuffer();
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
39
|
* Returns a new instruction instance that can be serialized with the given opcode and wire format.
|
|
@@ -39,7 +41,7 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
39
41
|
* @param wireFormat The wire format of the instruction.
|
|
40
42
|
* @returns The new instruction instance.
|
|
41
43
|
*/ as(opcode, wireFormat) {
|
|
42
|
-
return Object.defineProperty(this, '
|
|
44
|
+
return Object.defineProperty(this, 'toBuffer', {
|
|
43
45
|
value: ()=>{
|
|
44
46
|
return serializeAs(wireFormat, opcode, this);
|
|
45
47
|
},
|
|
@@ -53,7 +55,7 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
53
55
|
* @returns The new instruction class.
|
|
54
56
|
*/ static as(wireFormat) {
|
|
55
57
|
return Object.assign(this, {
|
|
56
|
-
|
|
58
|
+
fromBuffer: (buf)=>{
|
|
57
59
|
const res = deserialize(buf, wireFormat);
|
|
58
60
|
const args = res.slice(1); // Remove opcode.
|
|
59
61
|
return new this(...args);
|
|
@@ -61,21 +63,24 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
61
63
|
});
|
|
62
64
|
}
|
|
63
65
|
/**
|
|
64
|
-
*
|
|
65
|
-
* @returns
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
* Returns the base gas cost for the instruction.
|
|
67
|
+
* @returns The base gas cost.
|
|
68
|
+
*/ baseGasCost(indirectOperandsCount, relativeOperandsCount) {
|
|
69
|
+
return sumGas(getBaseGasCost(this.opcode), computeAddressingCost(indirectOperandsCount, relativeOperandsCount));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Computes the dynamic gas cost for the instruction
|
|
73
|
+
* @param dynMultiplier - The multiplier for the dynamic gas cost.
|
|
74
|
+
* @returns The dynamic gas cost.
|
|
75
|
+
*/ dynamicGasCost(dynMultiplier = 0) {
|
|
76
|
+
return mulGas(getDynamicGasCost(this.opcode), dynMultiplier);
|
|
70
77
|
}
|
|
71
78
|
/**
|
|
72
79
|
* Returns the stringified type of the instruction.
|
|
73
80
|
* Instruction sub-classes should have a static `type` property.
|
|
74
81
|
*/ get type() {
|
|
75
82
|
const type = 'type' in this.constructor && this.constructor.type;
|
|
76
|
-
|
|
77
|
-
throw new Error(`Instruction class ${this.constructor.name} does not have a static 'type' property defined.`);
|
|
78
|
-
}
|
|
83
|
+
assert(!!type, `Instruction class ${this.constructor.name} does not have a static 'type' property defined.`);
|
|
79
84
|
return type;
|
|
80
85
|
}
|
|
81
86
|
/**
|
|
@@ -83,9 +88,8 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
83
88
|
* Instruction sub-classes should have a static `opcode` property.
|
|
84
89
|
*/ get opcode() {
|
|
85
90
|
const opcode = 'opcode' in this.constructor ? this.constructor.opcode : undefined;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
91
|
+
assert(opcode !== undefined, `Instruction class ${this.constructor.name} does not have a static 'opcode' property defined.`);
|
|
92
|
+
assert(Opcode[opcode] !== undefined, `Invalid opcode ${opcode} for instruction class ${this.constructor.name}.`);
|
|
89
93
|
return opcode;
|
|
90
94
|
}
|
|
91
95
|
}
|
|
@@ -42,13 +42,13 @@ export declare class Mov extends Instruction {
|
|
|
42
42
|
}
|
|
43
43
|
export declare class CalldataCopy extends Instruction {
|
|
44
44
|
private indirect;
|
|
45
|
-
private cdStartOffset;
|
|
46
45
|
private copySizeOffset;
|
|
46
|
+
private cdStartOffset;
|
|
47
47
|
private dstOffset;
|
|
48
48
|
static readonly type: string;
|
|
49
49
|
static readonly opcode: Opcode;
|
|
50
50
|
static readonly wireFormat: OperandType[];
|
|
51
|
-
constructor(indirect: number,
|
|
51
|
+
constructor(indirect: number, copySizeOffset: number, cdStartOffset: number, dstOffset: number);
|
|
52
52
|
execute(context: AvmContext): Promise<void>;
|
|
53
53
|
}
|
|
54
54
|
export declare class ReturndataSize extends Instruction {
|
|
@@ -62,13 +62,13 @@ export declare class ReturndataSize extends Instruction {
|
|
|
62
62
|
}
|
|
63
63
|
export declare class ReturndataCopy extends Instruction {
|
|
64
64
|
private indirect;
|
|
65
|
-
private rdStartOffset;
|
|
66
65
|
private copySizeOffset;
|
|
66
|
+
private rdStartOffset;
|
|
67
67
|
private dstOffset;
|
|
68
68
|
static readonly type: string;
|
|
69
69
|
static readonly opcode: Opcode;
|
|
70
70
|
static readonly wireFormat: OperandType[];
|
|
71
|
-
constructor(indirect: number,
|
|
71
|
+
constructor(indirect: number, copySizeOffset: number, rdStartOffset: number, dstOffset: number);
|
|
72
72
|
execute(context: AvmContext): Promise<void>;
|
|
73
73
|
}
|
|
74
74
|
//# sourceMappingURL=memory.d.ts.map
|