@aztec/simulator 0.0.1-commit.2f68f620 → 0.0.1-commit.3100065
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/dest/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- package/dest/private/circuit_recording/circuit_recorder.d.ts +36 -23
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +65 -69
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +7 -19
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +38 -42
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
- package/dest/public/avm/avm_context.d.ts +41 -0
- package/dest/public/avm/avm_context.d.ts.map +1 -0
- package/dest/public/avm/avm_context.js +44 -0
- package/dest/public/avm/avm_contract_call_result.d.ts +32 -0
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -0
- package/dest/public/avm/avm_contract_call_result.js +54 -0
- package/dest/public/avm/avm_execution_environment.d.ts +24 -0
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -0
- package/dest/public/avm/avm_execution_environment.js +33 -0
- package/dest/public/avm/avm_gas.d.ts +44 -0
- package/dest/public/avm/avm_gas.d.ts.map +1 -0
- package/dest/public/avm/avm_gas.js +195 -0
- package/dest/public/avm/avm_machine_state.d.ts +98 -0
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -0
- package/dest/public/avm/avm_machine_state.js +110 -0
- package/dest/public/avm/avm_memory_types.d.ts +275 -0
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -0
- package/dest/public/avm/avm_memory_types.js +354 -0
- package/dest/public/avm/avm_simulator.d.ts +41 -0
- package/dest/public/avm/avm_simulator.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator.js +192 -0
- 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/calldata.d.ts +51 -0
- package/dest/public/avm/calldata.d.ts.map +1 -0
- package/dest/public/avm/calldata.js +64 -0
- package/dest/public/avm/errors.d.ts +104 -0
- package/dest/public/avm/errors.d.ts.map +1 -0
- package/dest/public/avm/errors.js +141 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +22 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.js +84 -0
- package/dest/public/avm/{testing → fixtures}/base_avm_simulation_tester.d.ts +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/{testing → fixtures}/base_avm_simulation_tester.js +1 -1
- package/dest/public/avm/fixtures/initializers.d.ts +42 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +45 -0
- package/dest/public/avm/fixtures/utils.d.ts +39 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/{testing → fixtures}/utils.js +34 -1
- package/dest/public/avm/index.d.ts +2 -0
- package/dest/public/avm/index.d.ts.map +1 -0
- package/dest/public/avm/index.js +1 -0
- package/dest/public/avm/opcodes/accrued_substate.d.ts +74 -0
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -0
- package/dest/public/avm/opcodes/accrued_substate.js +254 -0
- package/dest/public/avm/opcodes/addressing_mode.d.ts +31 -0
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -0
- package/dest/public/avm/opcodes/addressing_mode.js +94 -0
- package/dest/public/avm/opcodes/arithmetic.d.ts +49 -0
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -0
- package/dest/public/avm/opcodes/arithmetic.js +97 -0
- package/dest/public/avm/opcodes/bitwise.d.ts +42 -0
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -0
- package/dest/public/avm/opcodes/bitwise.js +99 -0
- package/dest/public/avm/opcodes/comparators.d.ts +25 -0
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -0
- package/dest/public/avm/opcodes/comparators.js +43 -0
- package/dest/public/avm/opcodes/contract.d.ts +21 -0
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -0
- package/dest/public/avm/opcodes/contract.js +69 -0
- package/dest/public/avm/opcodes/control_flow.d.ts +41 -0
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -0
- package/dest/public/avm/opcodes/control_flow.js +107 -0
- package/dest/public/avm/opcodes/conversion.d.ts +18 -0
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -0
- package/dest/public/avm/opcodes/conversion.js +333 -0
- package/dest/public/avm/opcodes/ec_add.d.ts +17 -0
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -0
- package/dest/public/avm/opcodes/ec_add.js +79 -0
- package/dest/public/avm/opcodes/environment_getters.d.ts +28 -0
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -0
- package/dest/public/avm/opcodes/environment_getters.js +77 -0
- package/dest/public/avm/opcodes/external_calls.d.ts +59 -0
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -0
- package/dest/public/avm/opcodes/external_calls.js +210 -0
- package/dest/public/avm/opcodes/hashing.d.ts +36 -0
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -0
- package/dest/public/avm/opcodes/hashing.js +119 -0
- package/dest/public/avm/opcodes/index.d.ts +16 -0
- package/dest/public/avm/opcodes/index.d.ts.map +1 -0
- package/dest/public/avm/opcodes/index.js +15 -0
- package/dest/public/avm/opcodes/instruction.d.ts +74 -0
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -0
- package/dest/public/avm/opcodes/instruction.js +95 -0
- package/dest/public/avm/opcodes/instruction_impl.d.ts +19 -0
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -0
- package/dest/public/avm/opcodes/instruction_impl.js +30 -0
- package/dest/public/avm/opcodes/memory.d.ts +74 -0
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -0
- package/dest/public/avm/opcodes/memory.js +257 -0
- package/dest/public/avm/opcodes/misc.d.ts +18 -0
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -0
- package/dest/public/avm/opcodes/misc.js +73 -0
- package/dest/public/avm/opcodes/storage.d.ts +25 -0
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -0
- package/dest/public/avm/opcodes/storage.js +78 -0
- package/dest/public/avm/revert_reason.d.ts +18 -0
- package/dest/public/avm/revert_reason.d.ts.map +1 -0
- package/dest/public/avm/revert_reason.js +39 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +26 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -0
- package/dest/public/avm/serialization/buffer_cursor.js +99 -0
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +17 -0
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -0
- package/dest/public/avm/serialization/bytecode_serialization.js +336 -0
- package/dest/public/avm/serialization/instruction_serialization.d.ts +114 -0
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -0
- package/dest/public/avm/serialization/instruction_serialization.js +261 -0
- package/dest/public/avm/test_utils.d.ts +15 -0
- package/dest/public/avm/test_utils.d.ts.map +1 -0
- package/dest/public/avm/test_utils.js +44 -0
- package/dest/public/debug_fn_name.d.ts +18 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +37 -0
- package/dest/public/fixtures/amm_test.js +2 -2
- package/dest/public/fixtures/bulk_test.js +2 -2
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +19 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +263 -0
- package/dest/public/fixtures/index.d.ts +4 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +3 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +19 -0
- package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1645 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +3 -3
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +38 -8
- package/dest/public/fixtures/simple_contract_data_source.js +1 -1
- package/dest/public/fixtures/token_test.js +3 -3
- package/dest/public/fixtures/utils.d.ts +1 -1
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +5 -3
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +4 -6
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +7 -12
- package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
- package/dest/public/hinting_db_sources.d.ts +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +356 -0
- package/dest/public/index.d.ts +2 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +3 -4
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +0 -3
- package/dest/public/public_processor/public_processor.d.ts +1 -1
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +22 -3
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +2 -2
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +131 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/{dumping_public_tx_simulator.js → dumping_cpp_public_tx_simulator.js} +2 -2
- package/dest/public/public_tx_simulator/factories.d.ts +6 -6
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +6 -6
- package/dest/public/public_tx_simulator/index.d.ts +5 -3
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +4 -2
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +135 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_context.js +298 -0
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +74 -41
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +324 -98
- 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 +415 -0
- package/dest/public/side_effect_trace.d.ts +87 -0
- package/dest/public/side_effect_trace.d.ts.map +1 -0
- package/dest/public/side_effect_trace.js +199 -0
- package/dest/public/side_effect_trace_interface.d.ts +22 -0
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -0
- package/dest/public/side_effect_trace_interface.js +1 -0
- 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/state_manager/nullifiers.d.ts +61 -0
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
- package/dest/public/state_manager/nullifiers.js +92 -0
- package/dest/public/state_manager/public_storage.d.ts +66 -0
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/state_manager/public_storage.js +145 -0
- package/dest/public/state_manager/state_manager.d.ts +170 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +402 -0
- package/dest/public/test_executor_metrics.d.ts +6 -1
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +22 -0
- package/package.json +18 -17
- package/src/client.ts +0 -2
- package/src/private/circuit_recording/circuit_recorder.ts +84 -78
- package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
- package/src/public/avm/avm_context.ts +61 -0
- package/src/public/avm/avm_contract_call_result.ts +69 -0
- package/src/public/avm/avm_execution_environment.ts +51 -0
- package/src/public/avm/avm_gas.ts +183 -0
- package/src/public/avm/avm_machine_state.ts +170 -0
- package/src/public/avm/avm_memory_types.ts +440 -0
- package/src/public/avm/avm_simulator.ts +279 -0
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/calldata.ts +101 -0
- package/src/public/avm/errors.ts +177 -0
- package/src/public/avm/fixtures/avm_simulation_tester.ts +122 -0
- package/src/public/avm/{testing → fixtures}/base_avm_simulation_tester.ts +1 -1
- package/src/public/avm/fixtures/initializers.ts +103 -0
- package/src/public/avm/{testing → fixtures}/utils.ts +40 -1
- package/src/public/avm/index.ts +1 -0
- package/src/public/avm/opcodes/accrued_substate.ts +285 -0
- package/src/public/avm/opcodes/addressing_mode.ts +111 -0
- package/src/public/avm/opcodes/arithmetic.ts +129 -0
- package/src/public/avm/opcodes/bitwise.ts +113 -0
- package/src/public/avm/opcodes/comparators.ts +55 -0
- package/src/public/avm/opcodes/contract.ts +76 -0
- package/src/public/avm/opcodes/control_flow.ts +123 -0
- package/src/public/avm/opcodes/conversion.ts +104 -0
- package/src/public/avm/opcodes/ec_add.ts +86 -0
- package/src/public/avm/opcodes/environment_getters.ts +87 -0
- package/src/public/avm/opcodes/external_calls.ts +262 -0
- package/src/public/avm/opcodes/hashing.ts +151 -0
- package/src/public/avm/opcodes/index.ts +15 -0
- package/src/public/avm/opcodes/instruction.ts +136 -0
- package/src/public/avm/opcodes/instruction_impl.ts +36 -0
- package/src/public/avm/opcodes/memory.ts +293 -0
- package/src/public/avm/opcodes/misc.ts +102 -0
- package/src/public/avm/opcodes/storage.ts +95 -0
- package/src/public/avm/revert_reason.ts +58 -0
- package/src/public/avm/serialization/buffer_cursor.ts +118 -0
- package/src/public/avm/serialization/bytecode_serialization.ts +215 -0
- package/src/public/avm/serialization/instruction_serialization.ts +249 -0
- package/src/public/avm/test_utils.ts +64 -0
- package/src/public/debug_fn_name.ts +52 -0
- package/src/public/fixtures/amm_test.ts +2 -2
- package/src/public/fixtures/bulk_test.ts +2 -2
- package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
- package/src/public/fixtures/custom_bytecode_tests.ts +435 -0
- package/src/public/fixtures/index.ts +3 -0
- package/src/public/fixtures/minimal_public_tx.ts +26 -0
- package/src/public/fixtures/opcode_spammer.ts +1713 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +36 -11
- package/src/public/fixtures/simple_contract_data_source.ts +1 -1
- package/src/public/fixtures/token_test.ts +3 -3
- package/src/public/fixtures/utils.ts +6 -11
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +18 -15
- package/src/public/fuzzing/avm_simulator_bin.ts +5 -3
- package/src/public/hinting_db_sources.ts +610 -0
- package/src/public/index.ts +3 -3
- package/src/public/public_processor/guarded_merkle_tree.ts +2 -5
- package/src/public/public_processor/public_processor.ts +24 -3
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +2 -2
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +210 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
- package/src/public/public_tx_simulator/{dumping_public_tx_simulator.ts → dumping_cpp_public_tx_simulator.ts} +2 -2
- package/src/public/public_tx_simulator/factories.ts +6 -6
- package/src/public/public_tx_simulator/index.ts +4 -2
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +482 -0
- package/src/public/public_tx_simulator/public_tx_simulator.ts +480 -150
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
- package/src/public/side_effect_trace.ts +293 -0
- package/src/public/side_effect_trace_interface.ts +28 -0
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/state_manager/nullifiers.ts +103 -0
- package/src/public/state_manager/public_storage.ts +174 -0
- package/src/public/state_manager/state_manager.ts +569 -0
- package/src/public/test_executor_metrics.ts +24 -0
- package/dest/public/avm/testing/account_proof_fetcher.d.ts +0 -2
- package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +0 -1
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/testing/utils.d.ts +0 -32
- package/dest/public/avm/testing/utils.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +0 -23
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +0 -22
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_simulator_base.js +0 -28
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +0 -35
- /package/dest/public/avm/{testing → fixtures}/account_proof_fetcher.js +0 -0
- /package/src/public/avm/{testing → fixtures}/account_proof.json +0 -0
- /package/src/public/avm/{testing → fixtures}/account_proof_fetcher.ts +0 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { TaggedMemory, TypeTag } from '../avm_memory_types.js';
|
|
2
|
+
import { ArithmeticError } from '../errors.js';
|
|
3
|
+
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { Addressing } from './addressing_mode.js';
|
|
5
|
+
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
6
|
+
export class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
|
|
7
|
+
async execute(context) {
|
|
8
|
+
const memory = context.machineState.memory;
|
|
9
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
10
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
11
|
+
const operands = [
|
|
12
|
+
this.aOffset,
|
|
13
|
+
this.bOffset,
|
|
14
|
+
this.dstOffset
|
|
15
|
+
];
|
|
16
|
+
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
17
|
+
this.checkTags(memory, aOffset, bOffset);
|
|
18
|
+
const a = memory.get(aOffset);
|
|
19
|
+
const b = memory.get(bOffset);
|
|
20
|
+
const dest = this.compute(a, b);
|
|
21
|
+
memory.set(dstOffset, dest);
|
|
22
|
+
}
|
|
23
|
+
checkTags(memory, aOffset, bOffset) {
|
|
24
|
+
memory.checkTagsAreSame(aOffset, bOffset);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class Add extends ThreeOperandArithmeticInstruction {
|
|
28
|
+
static type = 'ADD';
|
|
29
|
+
static opcode = Opcode.ADD_8;
|
|
30
|
+
compute(a, b) {
|
|
31
|
+
return a.add(b);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class Sub extends ThreeOperandArithmeticInstruction {
|
|
35
|
+
static type = 'SUB';
|
|
36
|
+
static opcode = Opcode.SUB_8;
|
|
37
|
+
compute(a, b) {
|
|
38
|
+
return a.sub(b);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class Mul extends ThreeOperandArithmeticInstruction {
|
|
42
|
+
static type = 'MUL';
|
|
43
|
+
static opcode = Opcode.MUL_8;
|
|
44
|
+
compute(a, b) {
|
|
45
|
+
return a.mul(b);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class Div extends ThreeOperandArithmeticInstruction {
|
|
49
|
+
static type = 'DIV';
|
|
50
|
+
static opcode = Opcode.DIV_8;
|
|
51
|
+
compute(a, b) {
|
|
52
|
+
if (b.toBigInt() === 0n) {
|
|
53
|
+
throw new ArithmeticError('Division by zero');
|
|
54
|
+
}
|
|
55
|
+
return a.div(b);
|
|
56
|
+
}
|
|
57
|
+
checkTags(memory, aOffset, bOffset) {
|
|
58
|
+
memory.checkTagsAreSame(aOffset, bOffset);
|
|
59
|
+
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class FieldDiv extends ThreeOperandArithmeticInstruction {
|
|
63
|
+
static type = 'FDIV';
|
|
64
|
+
static opcode = Opcode.FDIV_8;
|
|
65
|
+
compute(a, b) {
|
|
66
|
+
if (b.toBigInt() === 0n) {
|
|
67
|
+
throw new ArithmeticError('Division by zero');
|
|
68
|
+
}
|
|
69
|
+
return a.fdiv(b);
|
|
70
|
+
}
|
|
71
|
+
checkTags(memory, aOffset, bOffset) {
|
|
72
|
+
memory.checkTagsAreSame(aOffset, bOffset);
|
|
73
|
+
memory.checkTag(TypeTag.FIELD, aOffset); // Follows that bOffset has also tag of type Field
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export class Shl extends ThreeOperandArithmeticInstruction {
|
|
77
|
+
static type = 'SHL';
|
|
78
|
+
static opcode = Opcode.SHL_8;
|
|
79
|
+
compute(a, b) {
|
|
80
|
+
return a.shl(b);
|
|
81
|
+
}
|
|
82
|
+
checkTags(memory, aOffset, bOffset) {
|
|
83
|
+
memory.checkTagsAreSame(aOffset, bOffset);
|
|
84
|
+
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export class Shr extends ThreeOperandArithmeticInstruction {
|
|
88
|
+
static type = 'SHR';
|
|
89
|
+
static opcode = Opcode.SHR_8;
|
|
90
|
+
compute(a, b) {
|
|
91
|
+
return a.shr(b);
|
|
92
|
+
}
|
|
93
|
+
checkTags(memory, aOffset, bOffset) {
|
|
94
|
+
memory.checkTagsAreSame(aOffset, bOffset);
|
|
95
|
+
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { type IntegralValue, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
|
|
3
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { Instruction } from './instruction.js';
|
|
5
|
+
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
6
|
+
declare abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
7
|
+
execute(context: AvmContext): Promise<void>;
|
|
8
|
+
protected abstract compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
9
|
+
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number): void;
|
|
10
|
+
protected getDynamicMultiplier(_lhsTag: TypeTag): number;
|
|
11
|
+
}
|
|
12
|
+
export declare class And extends ThreeOperandBitwiseInstruction {
|
|
13
|
+
static readonly type: string;
|
|
14
|
+
static readonly opcode = Opcode.AND_8;
|
|
15
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
16
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
17
|
+
}
|
|
18
|
+
export declare class Or extends ThreeOperandBitwiseInstruction {
|
|
19
|
+
static readonly type: string;
|
|
20
|
+
static readonly opcode = Opcode.OR_8;
|
|
21
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
22
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
23
|
+
}
|
|
24
|
+
export declare class Xor extends ThreeOperandBitwiseInstruction {
|
|
25
|
+
static readonly type: string;
|
|
26
|
+
static readonly opcode = Opcode.XOR_8;
|
|
27
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
28
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
29
|
+
}
|
|
30
|
+
export declare class Not extends Instruction {
|
|
31
|
+
private addressingMode;
|
|
32
|
+
private srcOffset;
|
|
33
|
+
private dstOffset;
|
|
34
|
+
static readonly type: string;
|
|
35
|
+
static readonly opcode = Opcode.NOT_8;
|
|
36
|
+
static readonly wireFormat8: OperandType[];
|
|
37
|
+
static readonly wireFormat16: OperandType[];
|
|
38
|
+
constructor(addressingMode: number, srcOffset: number, dstOffset: number);
|
|
39
|
+
execute(context: AvmContext): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0d2lzZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3B1YmxpYy9hdm0vb3Bjb2Rlcy9iaXR3aXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBZ0IsS0FBSyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVoRSx1QkFBZSw4QkFBK0IsU0FBUSx1QkFBdUI7SUFDOUQsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQW9CdkQ7SUFFRCxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQzlFLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFHbEY7SUFFRCxTQUFTLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxNQUFNLENBRXZEO0NBQ0Y7QUFFRCxxQkFBYSxHQUFJLFNBQVEsOEJBQThCO0lBQ3JELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUztJQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZ0JBQWdCO0lBRXRDLFVBQW1CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsYUFBYSxDQUU1RTtJQUVELFVBQW1CLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsTUFBTSxDQUUvRDtDQUNGO0FBRUQscUJBQWEsRUFBRyxTQUFRLDhCQUE4QjtJQUNwRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQVE7SUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLGVBQWU7SUFFckMsVUFBbUIsT0FBTyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLGFBQWEsR0FBRyxhQUFhLENBRTVFO0lBRUQsVUFBbUIsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxNQUFNLENBRS9EO0NBQ0Y7QUFFRCxxQkFBYSxHQUFJLFNBQVEsOEJBQThCO0lBQ3JELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUztJQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZ0JBQWdCO0lBRXRDLFVBQW1CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsYUFBYSxDQUU1RTtJQUVELFVBQW1CLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsTUFBTSxDQUUvRDtDQUNGO0FBRUQscUJBQWEsR0FBSSxTQUFRLFdBQVc7SUFRaEMsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFNBQVM7SUFDakIsT0FBTyxDQUFDLFNBQVM7SUFUbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFTO0lBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxnQkFBZ0I7SUFFdEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLGdCQUFnRjtJQUMzRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksZ0JBQWtGO0lBRTlHLFlBQ1UsY0FBYyxFQUFFLE1BQU0sRUFDdEIsU0FBUyxFQUFFLE1BQU0sRUFDakIsU0FBUyxFQUFFLE1BQU0sRUFHMUI7SUFFWSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBZXZEO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitwise.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/bitwise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,KAAK,aAAa,EAAgB,KAAK,qBAAqB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,uBAAe,8BAA+B,SAAQ,uBAAuB;IAC9D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvD;IAED,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CAAC;IAC9E,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAGlF;IAED,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEvD;CACF;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,UAAmB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CAE5E;IAED,UAAmB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE/D;CACF;AAED,qBAAa,EAAG,SAAQ,8BAA8B;IACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,eAAe;IAErC,UAAmB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CAE5E;IAED,UAAmB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE/D;CACF;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,UAAmB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CAE5E;IAED,UAAmB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE/D;CACF;AAED,qBAAa,GAAI,SAAQ,WAAW;IAQhC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IATnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,MAAM,CAAC,QAAQ,CAAC,WAAW,gBAAgF;IAC3G,MAAM,CAAC,QAAQ,CAAC,YAAY,gBAAkF;IAE9G,YACU,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAG1B;IAEY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAevD;CACF"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { getBitwiseDynamicGasMultiplier } from '../avm_gas.js';
|
|
2
|
+
import { TaggedMemory } from '../avm_memory_types.js';
|
|
3
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { Addressing } from './addressing_mode.js';
|
|
5
|
+
import { Instruction } from './instruction.js';
|
|
6
|
+
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
7
|
+
class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
8
|
+
async execute(context) {
|
|
9
|
+
const memory = context.machineState.memory;
|
|
10
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
11
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
12
|
+
const operands = [
|
|
13
|
+
this.aOffset,
|
|
14
|
+
this.bOffset,
|
|
15
|
+
this.dstOffset
|
|
16
|
+
];
|
|
17
|
+
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
18
|
+
this.checkTags(memory, aOffset, bOffset);
|
|
19
|
+
const multiplier = this.getDynamicMultiplier(memory.getTag(aOffset));
|
|
20
|
+
context.machineState.consumeGas(this.dynamicGasCost(multiplier));
|
|
21
|
+
const a = memory.getAs(aOffset);
|
|
22
|
+
const b = memory.getAs(bOffset);
|
|
23
|
+
const res = this.compute(a, b);
|
|
24
|
+
memory.set(dstOffset, res);
|
|
25
|
+
}
|
|
26
|
+
checkTags(memory, aOffset, bOffset) {
|
|
27
|
+
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
|
|
28
|
+
memory.checkTagsAreSame(aOffset, bOffset);
|
|
29
|
+
}
|
|
30
|
+
getDynamicMultiplier(_lhsTag) {
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class And extends ThreeOperandBitwiseInstruction {
|
|
35
|
+
static type = 'AND';
|
|
36
|
+
static opcode = Opcode.AND_8;
|
|
37
|
+
compute(a, b) {
|
|
38
|
+
return a.and(b);
|
|
39
|
+
}
|
|
40
|
+
getDynamicMultiplier(lhsTag) {
|
|
41
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class Or extends ThreeOperandBitwiseInstruction {
|
|
45
|
+
static type = 'OR';
|
|
46
|
+
static opcode = Opcode.OR_8;
|
|
47
|
+
compute(a, b) {
|
|
48
|
+
return a.or(b);
|
|
49
|
+
}
|
|
50
|
+
getDynamicMultiplier(lhsTag) {
|
|
51
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export class Xor extends ThreeOperandBitwiseInstruction {
|
|
55
|
+
static type = 'XOR';
|
|
56
|
+
static opcode = Opcode.XOR_8;
|
|
57
|
+
compute(a, b) {
|
|
58
|
+
return a.xor(b);
|
|
59
|
+
}
|
|
60
|
+
getDynamicMultiplier(lhsTag) {
|
|
61
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export class Not extends Instruction {
|
|
65
|
+
addressingMode;
|
|
66
|
+
srcOffset;
|
|
67
|
+
dstOffset;
|
|
68
|
+
static type = 'NOT';
|
|
69
|
+
static opcode = Opcode.NOT_8;
|
|
70
|
+
static wireFormat8 = [
|
|
71
|
+
OperandType.UINT8,
|
|
72
|
+
OperandType.UINT8,
|
|
73
|
+
OperandType.UINT8,
|
|
74
|
+
OperandType.UINT8
|
|
75
|
+
];
|
|
76
|
+
static wireFormat16 = [
|
|
77
|
+
OperandType.UINT8,
|
|
78
|
+
OperandType.UINT8,
|
|
79
|
+
OperandType.UINT16,
|
|
80
|
+
OperandType.UINT16
|
|
81
|
+
];
|
|
82
|
+
constructor(addressingMode, srcOffset, dstOffset){
|
|
83
|
+
super(), this.addressingMode = addressingMode, this.srcOffset = srcOffset, this.dstOffset = dstOffset;
|
|
84
|
+
}
|
|
85
|
+
async execute(context) {
|
|
86
|
+
const memory = context.machineState.memory;
|
|
87
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
88
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
89
|
+
const operands = [
|
|
90
|
+
this.srcOffset,
|
|
91
|
+
this.dstOffset
|
|
92
|
+
];
|
|
93
|
+
const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
94
|
+
TaggedMemory.checkIsIntegralTag(memory.getTag(srcOffset));
|
|
95
|
+
const value = memory.getAs(srcOffset);
|
|
96
|
+
const res = value.not();
|
|
97
|
+
memory.set(dstOffset, res);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { type MemoryValue } from '../avm_memory_types.js';
|
|
3
|
+
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
5
|
+
declare abstract class ComparatorInstruction extends ThreeOperandInstruction {
|
|
6
|
+
execute(context: AvmContext): Promise<void>;
|
|
7
|
+
protected abstract compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class Eq extends ComparatorInstruction {
|
|
10
|
+
static readonly type: string;
|
|
11
|
+
static readonly opcode = Opcode.EQ_8;
|
|
12
|
+
protected compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare class Lt extends ComparatorInstruction {
|
|
15
|
+
static readonly type: string;
|
|
16
|
+
static readonly opcode = Opcode.LT_8;
|
|
17
|
+
protected compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare class Lte extends ComparatorInstruction {
|
|
20
|
+
static readonly type: string;
|
|
21
|
+
static readonly opcode = Opcode.LTE_8;
|
|
22
|
+
protected compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyYXRvcnMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdWJsaWMvYXZtL29wY29kZXMvY29tcGFyYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhFLHVCQUFlLHFCQUFzQixTQUFRLHVCQUF1QjtJQUNyRCxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBaUJ2RDtJQUVELFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUM7Q0FDckU7QUFFRCxxQkFBYSxFQUFHLFNBQVEscUJBQXFCO0lBQzNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUTtJQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZUFBZTtJQUVyQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBRXpEO0NBQ0Y7QUFFRCxxQkFBYSxFQUFHLFNBQVEscUJBQXFCO0lBQzNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUTtJQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZUFBZTtJQUVyQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBRXpEO0NBQ0Y7QUFFRCxxQkFBYSxHQUFJLFNBQVEscUJBQXFCO0lBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUztJQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZ0JBQWdCO0lBRXRDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FFekQ7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/comparators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,uBAAe,qBAAsB,SAAQ,uBAAuB;IACrD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBvD;IAED,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;CACrE;AAED,qBAAa,EAAG,SAAQ,qBAAqB;IAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,eAAe;IAErC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAEzD;CACF;AAED,qBAAa,EAAG,SAAQ,qBAAqB;IAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,eAAe;IAErC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAEzD;CACF;AAED,qBAAa,GAAI,SAAQ,qBAAqB;IAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAEzD;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Uint1 } from '../avm_memory_types.js';
|
|
2
|
+
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
3
|
+
import { Addressing } from './addressing_mode.js';
|
|
4
|
+
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
5
|
+
class ComparatorInstruction extends ThreeOperandInstruction {
|
|
6
|
+
async execute(context) {
|
|
7
|
+
const memory = context.machineState.memory;
|
|
8
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
9
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
10
|
+
const operands = [
|
|
11
|
+
this.aOffset,
|
|
12
|
+
this.bOffset,
|
|
13
|
+
this.dstOffset
|
|
14
|
+
];
|
|
15
|
+
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
16
|
+
memory.checkTagsAreSame(aOffset, bOffset); // Brillig semantic enforces that tags match.
|
|
17
|
+
const a = memory.get(aOffset);
|
|
18
|
+
const b = memory.get(bOffset);
|
|
19
|
+
const dest = new Uint1(this.compare(a, b) ? 1 : 0);
|
|
20
|
+
memory.set(dstOffset, dest);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class Eq extends ComparatorInstruction {
|
|
24
|
+
static type = 'EQ';
|
|
25
|
+
static opcode = Opcode.EQ_8;
|
|
26
|
+
compare(a, b) {
|
|
27
|
+
return a.equals(b);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class Lt extends ComparatorInstruction {
|
|
31
|
+
static type = 'LT';
|
|
32
|
+
static opcode = Opcode.LT_8;
|
|
33
|
+
compare(a, b) {
|
|
34
|
+
return a.lt(b);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class Lte extends ComparatorInstruction {
|
|
38
|
+
static type = 'LTE';
|
|
39
|
+
static opcode = Opcode.LTE_8;
|
|
40
|
+
compare(a, b) {
|
|
41
|
+
return a.lt(b) || a.equals(b);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
|
+
import { Instruction } from './instruction.js';
|
|
4
|
+
export declare enum ContractInstanceMember {
|
|
5
|
+
DEPLOYER = 0,
|
|
6
|
+
CLASS_ID = 1,
|
|
7
|
+
INIT_HASH = 2,
|
|
8
|
+
IMMUTABLES_HASH = 3
|
|
9
|
+
}
|
|
10
|
+
export declare class GetContractInstance extends Instruction {
|
|
11
|
+
private addressingMode;
|
|
12
|
+
private addressOffset;
|
|
13
|
+
private dstOffset;
|
|
14
|
+
private memberEnum;
|
|
15
|
+
static readonly type: string;
|
|
16
|
+
static readonly opcode: Opcode;
|
|
17
|
+
static readonly wireFormat: OperandType[];
|
|
18
|
+
constructor(addressingMode: number, addressOffset: number, dstOffset: number, memberEnum: number);
|
|
19
|
+
execute(context: AvmContext): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdWJsaWMvYXZtL29wY29kZXMvY29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0Msb0JBQVksc0JBQXNCO0lBQ2hDLFFBQVEsSUFBQTtJQUNSLFFBQVEsSUFBQTtJQUNSLFNBQVMsSUFBQTtJQUNULGVBQWUsSUFBQTtDQUNoQjtBQUVELHFCQUFhLG1CQUFvQixTQUFRLFdBQVc7SUFhaEQsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLFNBQVM7SUFDakIsT0FBTyxDQUFDLFVBQVU7SUFmcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUF5QjtJQUNyRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQThCO0lBRTVELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQU12QztJQUVGLFlBQ1UsY0FBYyxFQUFFLE1BQU0sRUFDdEIsYUFBYSxFQUFFLE1BQU0sRUFDckIsU0FBUyxFQUFFLE1BQU0sRUFDakIsVUFBVSxFQUFFLE1BQU0sRUFHM0I7SUFFSyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBdUNoRDtDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/contract.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,sBAAsB;IAChC,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,SAAS,IAAA;IACT,eAAe,IAAA;CAChB;AAED,qBAAa,mBAAoB,SAAQ,WAAW;IAahD,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAfpB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAyB;IACrD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA8B;IAE5D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAMvC;IAEF,YACU,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAG3B;IAEK,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChD;CACF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Field, TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
2
|
+
import { InstructionExecutionError } from '../errors.js';
|
|
3
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { Addressing } from './addressing_mode.js';
|
|
5
|
+
import { Instruction } from './instruction.js';
|
|
6
|
+
export var ContractInstanceMember = /*#__PURE__*/ function(ContractInstanceMember) {
|
|
7
|
+
ContractInstanceMember[ContractInstanceMember["DEPLOYER"] = 0] = "DEPLOYER";
|
|
8
|
+
ContractInstanceMember[ContractInstanceMember["CLASS_ID"] = 1] = "CLASS_ID";
|
|
9
|
+
ContractInstanceMember[ContractInstanceMember["INIT_HASH"] = 2] = "INIT_HASH";
|
|
10
|
+
ContractInstanceMember[ContractInstanceMember["IMMUTABLES_HASH"] = 3] = "IMMUTABLES_HASH";
|
|
11
|
+
return ContractInstanceMember;
|
|
12
|
+
}({});
|
|
13
|
+
export class GetContractInstance extends Instruction {
|
|
14
|
+
addressingMode;
|
|
15
|
+
addressOffset;
|
|
16
|
+
dstOffset;
|
|
17
|
+
memberEnum;
|
|
18
|
+
static type = 'GETCONTRACTINSTANCE';
|
|
19
|
+
static opcode = Opcode.GETCONTRACTINSTANCE;
|
|
20
|
+
// Informs (de)serialization. See Instruction.deserialize.
|
|
21
|
+
static wireFormat = [
|
|
22
|
+
OperandType.UINT8,
|
|
23
|
+
OperandType.UINT8,
|
|
24
|
+
OperandType.UINT16,
|
|
25
|
+
OperandType.UINT16,
|
|
26
|
+
OperandType.UINT8
|
|
27
|
+
];
|
|
28
|
+
constructor(addressingMode, addressOffset, dstOffset, memberEnum){
|
|
29
|
+
super(), this.addressingMode = addressingMode, this.addressOffset = addressOffset, this.dstOffset = dstOffset, this.memberEnum = memberEnum;
|
|
30
|
+
}
|
|
31
|
+
async execute(context) {
|
|
32
|
+
const memory = context.machineState.memory;
|
|
33
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
34
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
35
|
+
if (!(this.memberEnum in ContractInstanceMember)) {
|
|
36
|
+
throw new InstructionExecutionError(`Invalid GETCONTRACTINSTANCE member enum ${this.memberEnum}`);
|
|
37
|
+
}
|
|
38
|
+
const operands = [
|
|
39
|
+
this.addressOffset,
|
|
40
|
+
this.dstOffset
|
|
41
|
+
];
|
|
42
|
+
const [addressOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
43
|
+
memory.checkTag(TypeTag.FIELD, addressOffset);
|
|
44
|
+
const address = memory.get(addressOffset).toAztecAddress();
|
|
45
|
+
const instance = await context.persistableState.getContractInstance(address);
|
|
46
|
+
const exists = instance !== undefined;
|
|
47
|
+
let memberValue = new Field(0);
|
|
48
|
+
if (exists) {
|
|
49
|
+
switch(this.memberEnum){
|
|
50
|
+
case 0:
|
|
51
|
+
memberValue = new Field(instance.deployer.toField());
|
|
52
|
+
break;
|
|
53
|
+
case 1:
|
|
54
|
+
memberValue = new Field(instance.currentContractClassId.toField());
|
|
55
|
+
break;
|
|
56
|
+
case 2:
|
|
57
|
+
memberValue = new Field(instance.initializationHash);
|
|
58
|
+
break;
|
|
59
|
+
case 3:
|
|
60
|
+
memberValue = new Field(instance.immutablesHash);
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
memory.setSlice(dstOffset, [
|
|
65
|
+
new Uint1(exists ? 1 : 0),
|
|
66
|
+
memberValue
|
|
67
|
+
]);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
|
+
import { Instruction } from './instruction.js';
|
|
4
|
+
export declare class Jump extends Instruction {
|
|
5
|
+
private jumpOffset;
|
|
6
|
+
static type: string;
|
|
7
|
+
static readonly opcode: Opcode;
|
|
8
|
+
static readonly wireFormat: OperandType[];
|
|
9
|
+
constructor(jumpOffset: number);
|
|
10
|
+
execute(context: AvmContext): Promise<void>;
|
|
11
|
+
handlesPC(): boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class JumpI extends Instruction {
|
|
14
|
+
private addressingMode;
|
|
15
|
+
private condOffset;
|
|
16
|
+
private loc;
|
|
17
|
+
static type: string;
|
|
18
|
+
static readonly opcode: Opcode;
|
|
19
|
+
static readonly wireFormat: OperandType[];
|
|
20
|
+
constructor(addressingMode: number, condOffset: number, loc: number);
|
|
21
|
+
execute(context: AvmContext): Promise<void>;
|
|
22
|
+
handlesPC(): boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare class InternalCall extends Instruction {
|
|
25
|
+
private loc;
|
|
26
|
+
static readonly type: string;
|
|
27
|
+
static readonly opcode: Opcode;
|
|
28
|
+
static readonly wireFormat: OperandType[];
|
|
29
|
+
constructor(loc: number);
|
|
30
|
+
execute(context: AvmContext): Promise<void>;
|
|
31
|
+
handlesPC(): boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare class InternalReturn extends Instruction {
|
|
34
|
+
static readonly type: string;
|
|
35
|
+
static readonly opcode: Opcode;
|
|
36
|
+
static readonly wireFormat: OperandType[];
|
|
37
|
+
constructor();
|
|
38
|
+
execute(context: AvmContext): Promise<void>;
|
|
39
|
+
handlesPC(): boolean;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbF9mbG93LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHVibGljL2F2bS9vcGNvZGVzL2NvbnRyb2xfZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxxQkFBYSxJQUFLLFNBQVEsV0FBVztJQU12QixPQUFPLENBQUMsVUFBVTtJQUw5QixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBVTtJQUM3QixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQWtCO0lBRWhELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUEyQztJQUVwRixZQUFvQixVQUFVLEVBQUUsTUFBTSxFQUVyQztJQUVZLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJdkQ7SUFFZSxTQUFTLElBQUksT0FBTyxDQUVuQztDQUNGO0FBRUQscUJBQWEsS0FBTSxTQUFRLFdBQVc7SUFhbEMsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFVBQVU7SUFDbEIsT0FBTyxDQUFDLEdBQUc7SUFkYixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBVztJQUM5QixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQW1CO0lBR2pELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUt2QztJQUVGLFlBQ1UsY0FBYyxFQUFFLE1BQU0sRUFDdEIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsR0FBRyxFQUFFLE1BQU0sRUFHcEI7SUFFWSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBbUJ2RDtJQUVlLFNBQVMsSUFBSSxPQUFPLENBRW5DO0NBQ0Y7QUFFRCxxQkFBYSxZQUFhLFNBQVEsV0FBVztJQU0vQixPQUFPLENBQUMsR0FBRztJQUx2QixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQWtCO0lBQzlDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBdUI7SUFFckQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQTJDO0lBRXBGLFlBQW9CLEdBQUcsRUFBRSxNQUFNLEVBRTlCO0lBRVksT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVF2RDtJQUVlLFNBQVMsSUFBSSxPQUFPLENBRW5DO0NBQ0Y7QUFFRCxxQkFBYSxjQUFlLFNBQVEsV0FBVztJQUM3QyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQW9CO0lBQ2hELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBeUI7SUFFdkQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQXVCO0lBRWhFLGNBRUM7SUFFWSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBUXZEO0lBRWUsU0FBUyxJQUFJLE9BQU8sQ0FFbkM7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control_flow.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/control_flow.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,qBAAa,IAAK,SAAQ,WAAW;IAMvB,OAAO,CAAC,UAAU;IAL9B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAkB;IAEhD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;IAEpF,YAAoB,UAAU,EAAE,MAAM,EAErC;IAEY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvD;IAEe,SAAS,IAAI,OAAO,CAEnC;CACF;AAED,qBAAa,KAAM,SAAQ,WAAW;IAalC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAdb,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAGjD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;IAEF,YACU,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EAGpB;IAEY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvD;IAEe,SAAS,IAAI,OAAO,CAEnC;CACF;AAED,qBAAa,YAAa,SAAQ,WAAW;IAM/B,OAAO,CAAC,GAAG;IALvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAuB;IAErD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;IAEpF,YAAoB,GAAG,EAAE,MAAM,EAE9B;IAEY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvD;IAEe,SAAS,IAAI,OAAO,CAEnC;CACF;AAED,qBAAa,cAAe,SAAQ,WAAW;IAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAoB;IAChD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAyB;IAEvD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAAuB;IAEhE,cAEC;IAEY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvD;IAEe,SAAS,IAAI,OAAO,CAEnC;CACF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { TypeTag } from '../avm_memory_types.js';
|
|
2
|
+
import { InstructionExecutionError } from '../errors.js';
|
|
3
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { Addressing } from './addressing_mode.js';
|
|
5
|
+
import { Instruction } from './instruction.js';
|
|
6
|
+
export class Jump extends Instruction {
|
|
7
|
+
jumpOffset;
|
|
8
|
+
static type = 'JUMP';
|
|
9
|
+
static opcode = Opcode.JUMP_32;
|
|
10
|
+
// Informs (de)serialization. See Instruction.deserialize.
|
|
11
|
+
static wireFormat = [
|
|
12
|
+
OperandType.UINT8,
|
|
13
|
+
OperandType.UINT32
|
|
14
|
+
];
|
|
15
|
+
constructor(jumpOffset){
|
|
16
|
+
super(), this.jumpOffset = jumpOffset;
|
|
17
|
+
}
|
|
18
|
+
async execute(context) {
|
|
19
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
20
|
+
context.machineState.pc = this.jumpOffset;
|
|
21
|
+
}
|
|
22
|
+
handlesPC() {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class JumpI extends Instruction {
|
|
27
|
+
addressingMode;
|
|
28
|
+
condOffset;
|
|
29
|
+
loc;
|
|
30
|
+
static type = 'JUMPI';
|
|
31
|
+
static opcode = Opcode.JUMPI_32;
|
|
32
|
+
// Instruction wire format with opcode.
|
|
33
|
+
static wireFormat = [
|
|
34
|
+
OperandType.UINT8,
|
|
35
|
+
OperandType.UINT8,
|
|
36
|
+
OperandType.UINT16,
|
|
37
|
+
OperandType.UINT32
|
|
38
|
+
];
|
|
39
|
+
constructor(addressingMode, condOffset, loc){
|
|
40
|
+
super(), this.addressingMode = addressingMode, this.condOffset = condOffset, this.loc = loc;
|
|
41
|
+
}
|
|
42
|
+
async execute(context) {
|
|
43
|
+
const memory = context.machineState.memory;
|
|
44
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
45
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
46
|
+
const operands = [
|
|
47
|
+
this.condOffset
|
|
48
|
+
];
|
|
49
|
+
const [resolvedCondOffset] = addressing.resolve(operands, memory);
|
|
50
|
+
memory.checkTag(TypeTag.UINT1, resolvedCondOffset);
|
|
51
|
+
const condition = memory.getAs(resolvedCondOffset);
|
|
52
|
+
if (condition.toNumber() == 0) {
|
|
53
|
+
context.machineState.pc = context.machineState.nextPc;
|
|
54
|
+
} else {
|
|
55
|
+
context.machineState.pc = this.loc;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
handlesPC() {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class InternalCall extends Instruction {
|
|
63
|
+
loc;
|
|
64
|
+
static type = 'INTERNALCALL';
|
|
65
|
+
static opcode = Opcode.INTERNALCALL;
|
|
66
|
+
// Informs (de)serialization. See Instruction.deserialize.
|
|
67
|
+
static wireFormat = [
|
|
68
|
+
OperandType.UINT8,
|
|
69
|
+
OperandType.UINT32
|
|
70
|
+
];
|
|
71
|
+
constructor(loc){
|
|
72
|
+
super(), this.loc = loc;
|
|
73
|
+
}
|
|
74
|
+
async execute(context) {
|
|
75
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
76
|
+
context.machineState.internalCallStack.push({
|
|
77
|
+
callPc: context.machineState.pc,
|
|
78
|
+
returnPc: context.machineState.nextPc
|
|
79
|
+
});
|
|
80
|
+
context.machineState.pc = this.loc;
|
|
81
|
+
}
|
|
82
|
+
handlesPC() {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export class InternalReturn extends Instruction {
|
|
87
|
+
static type = 'INTERNALRETURN';
|
|
88
|
+
static opcode = Opcode.INTERNALRETURN;
|
|
89
|
+
// Informs (de)serialization. See Instruction.deserialize.
|
|
90
|
+
static wireFormat = [
|
|
91
|
+
OperandType.UINT8
|
|
92
|
+
];
|
|
93
|
+
constructor(){
|
|
94
|
+
super();
|
|
95
|
+
}
|
|
96
|
+
async execute(context) {
|
|
97
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
98
|
+
const stackEntry = context.machineState.internalCallStack.pop();
|
|
99
|
+
if (stackEntry === undefined) {
|
|
100
|
+
throw new InstructionExecutionError('Internal call stack empty!');
|
|
101
|
+
}
|
|
102
|
+
context.machineState.pc = stackEntry.returnPc;
|
|
103
|
+
}
|
|
104
|
+
handlesPC() {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
|
+
import { Instruction } from './instruction.js';
|
|
4
|
+
export declare class ToRadixBE extends Instruction {
|
|
5
|
+
private addressingMode;
|
|
6
|
+
private srcOffset;
|
|
7
|
+
private radixOffset;
|
|
8
|
+
private numLimbsOffset;
|
|
9
|
+
private outputBitsOffset;
|
|
10
|
+
private dstOffset;
|
|
11
|
+
static type: string;
|
|
12
|
+
static readonly opcode: Opcode;
|
|
13
|
+
static readonly wireFormat: OperandType[];
|
|
14
|
+
constructor(addressingMode: number, srcOffset: number, radixOffset: number, numLimbsOffset: number, outputBitsOffset: number, dstOffset: number);
|
|
15
|
+
execute(context: AvmContext): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare const MODULUS_LIMBS_PER_RADIX: number[];
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2lvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3B1YmxpYy9hdm0vb3Bjb2Rlcy9jb252ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLHFCQUFhLFNBQVUsU0FBUSxXQUFXO0lBZ0J0QyxPQUFPLENBQUMsY0FBYztJQUN0QixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsV0FBVztJQUNuQixPQUFPLENBQUMsY0FBYztJQUN0QixPQUFPLENBQUMsZ0JBQWdCO0lBQ3hCLE9BQU8sQ0FBQyxTQUFTO0lBcEJuQixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBZTtJQUNsQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQW9CO0lBR2xELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQVF2QztJQUVGLFlBQ1UsY0FBYyxFQUFFLE1BQU0sRUFDdEIsU0FBUyxFQUFFLE1BQU0sRUFDakIsV0FBVyxFQUFFLE1BQU0sRUFDbkIsY0FBYyxFQUFFLE1BQU0sRUFDdEIsZ0JBQWdCLEVBQUUsTUFBTSxFQUN4QixTQUFTLEVBQUUsTUFBTSxFQUcxQjtJQUVZLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0F3RHZEO0NBQ0Y7QUFHRCxlQUFPLE1BQU0sdUJBQXVCLEVBQUUsTUFBTSxFQVUzQyxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/conversion.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,qBAAa,SAAU,SAAQ,WAAW;IAgBtC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,SAAS;IApBnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAGlD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAQvC;IAEF,YACU,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EAG1B;IAEY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDvD;CACF;AAGD,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAU3C,CAAC"}
|