@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.017a351
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 +12 -4
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +6 -9
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +1 -2
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +15 -7
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +14 -19
- package/dest/private/acvm/acvm_types.d.ts +2 -2
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +19 -20
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +32 -24
- package/dest/private/acvm/index.d.ts +1 -2
- package/dest/private/acvm/index.d.ts.map +1 -1
- package/dest/private/acvm/index.js +0 -1
- package/dest/private/acvm/serialize.d.ts +21 -4
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +54 -1
- package/dest/private/acvm_native.d.ts +41 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
- package/dest/private/acvm_wasm.d.ts +16 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/acvm_wasm.js +67 -0
- 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 +109 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +212 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -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 +10 -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} +8 -5
- package/dest/public/avm/avm_context.d.ts +8 -8
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +12 -8
- package/dest/public/avm/avm_execution_environment.d.ts +9 -6
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +5 -3
- package/dest/public/avm/avm_gas.d.ts +5 -21
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +29 -37
- package/dest/public/avm/avm_machine_state.d.ts +9 -6
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +5 -2
- package/dest/public/avm/avm_memory_types.d.ts +100 -89
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +21 -7
- package/dest/public/avm/avm_simulator.d.ts +8 -7
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +33 -43
- 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 +11 -29
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +19 -57
- 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/account_proof_fetcher.js +152 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +9 -6
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +53 -15
- 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/fixtures/utils.js +99 -0
- package/dest/public/avm/index.d.ts +1 -3
- package/dest/public/avm/index.d.ts.map +1 -1
- package/dest/public/avm/index.js +0 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts +18 -19
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +61 -59
- package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +46 -26
- package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +27 -3
- package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +22 -29
- package/dest/public/avm/opcodes/comparators.d.ts +1 -1
- 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 +5 -5
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +16 -13
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +13 -11
- package/dest/public/avm/opcodes/conversion.d.ts +4 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +270 -6
- package/dest/public/avm/opcodes/ec_add.d.ts +3 -5
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +28 -33
- package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +20 -22
- package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +52 -46
- package/dest/public/avm/opcodes/hashing.d.ts +7 -7
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +24 -19
- package/dest/public/avm/opcodes/index.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction.d.ts +15 -11
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +23 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +15 -15
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +52 -48
- package/dest/public/avm/opcodes/misc.d.ts +4 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +42 -17
- package/dest/public/avm/opcodes/storage.d.ts +14 -13
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +39 -27
- 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 +1 -3
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +81 -77
- package/dest/public/avm/serialization/instruction_serialization.d.ts +15 -6
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +71 -36
- package/dest/public/avm/test_utils.d.ts +12 -15
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +17 -25
- package/dest/public/contracts_db_checkpoint.d.ts +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +68 -0
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +3 -0
- package/dest/public/debug_fn_name.d.ts +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/executor_metrics.d.ts +12 -4
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +33 -23
- package/dest/public/executor_metrics_interface.d.ts +10 -0
- package/dest/public/executor_metrics_interface.d.ts.map +1 -0
- package/dest/public/executor_metrics_interface.js +1 -0
- package/dest/public/fixtures/amm_test.d.ts +10 -0
- package/dest/public/fixtures/amm_test.d.ts.map +1 -0
- package/dest/public/fixtures/amm_test.js +213 -0
- package/dest/public/fixtures/bulk_test.d.ts +6 -0
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
- package/dest/public/fixtures/bulk_test.js +289 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +14 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +234 -0
- package/dest/public/fixtures/index.d.ts +10 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +9 -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 +56 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +164 -71
- package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
- package/dest/public/fixtures/token_test.d.ts +12 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +96 -0
- package/dest/public/fixtures/utils.d.ts +18 -5
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +112 -70
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/hinting_db_sources.d.ts +81 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +359 -0
- package/dest/public/index.d.ts +6 -9
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +58 -104
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +227 -194
- 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 +52 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +116 -0
- package/dest/public/public_processor/public_processor.d.ts +32 -39
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +642 -167
- package/dest/public/public_processor/public_processor_metrics.d.ts +7 -4
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +37 -46
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +99 -0
- 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 +126 -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 +167 -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_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +8 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +5 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +31 -33
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +83 -105
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -58
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +225 -207
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -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 +415 -0
- package/dest/public/side_effect_errors.d.ts +42 -2
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/side_effect_errors.js +70 -1
- package/dest/public/side_effect_trace.d.ts +24 -69
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +74 -124
- package/dest/public/side_effect_trace_interface.d.ts +13 -25
- 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 +4 -7
- 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 +4 -4
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
- 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 +61 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +329 -0
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +3 -5
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +7 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +39 -33
- package/src/client.ts +5 -3
- package/src/common/errors.ts +80 -45
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +21 -35
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +36 -30
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +64 -1
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +57 -28
- package/src/private/acvm_wasm.ts +79 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +263 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -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} +13 -10
- package/src/public/avm/avm_context.ts +6 -6
- package/src/public/avm/avm_contract_call_result.ts +23 -9
- package/src/public/avm/avm_execution_environment.ts +17 -5
- package/src/public/avm/avm_gas.ts +27 -39
- package/src/public/avm/avm_machine_state.ts +12 -6
- package/src/public/avm/avm_memory_types.ts +24 -7
- package/src/public/avm/avm_simulator.ts +58 -63
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/calldata.ts +101 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/account_proof.json +553 -0
- package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
- package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +66 -13
- package/src/public/avm/fixtures/initializers.ts +103 -0
- package/src/public/avm/fixtures/utils.ts +154 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +84 -52
- package/src/public/avm/opcodes/addressing_mode.ts +56 -32
- package/src/public/avm/opcodes/arithmetic.ts +37 -3
- 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 +15 -11
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +29 -5
- package/src/public/avm/opcodes/ec_add.ts +30 -37
- package/src/public/avm/opcodes/environment_getters.ts +28 -23
- package/src/public/avm/opcodes/external_calls.ts +70 -36
- package/src/public/avm/opcodes/hashing.ts +39 -13
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +81 -42
- package/src/public/avm/opcodes/misc.ts +61 -19
- package/src/public/avm/opcodes/storage.ts +47 -23
- package/src/public/avm/revert_reason.ts +58 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +90 -81
- package/src/public/avm/serialization/instruction_serialization.ts +76 -35
- package/src/public/avm/test_utils.ts +25 -42
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +76 -0
- package/src/public/debug_fn_name.ts +52 -0
- package/src/public/executor_metrics.ts +49 -23
- package/src/public/executor_metrics_interface.ts +15 -0
- package/src/public/fixtures/amm_test.ts +331 -0
- package/src/public/fixtures/bulk_test.ts +194 -0
- package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +366 -0
- package/src/public/fixtures/index.ts +13 -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 +264 -114
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
- package/src/public/fixtures/token_test.ts +148 -0
- package/src/public/fixtures/utils.ts +156 -80
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
- package/src/public/hinting_db_sources.ts +614 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +295 -258
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +161 -0
- package/src/public/public_processor/public_processor.ts +354 -227
- package/src/public/public_processor/public_processor_metrics.ts +30 -46
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +125 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +201 -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 +232 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +44 -0
- package/src/public/public_tx_simulator/index.ts +7 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +187 -209
- package/src/public/public_tx_simulator/public_tx_simulator.ts +320 -263
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -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 +99 -322
- package/src/public/side_effect_trace_interface.ts +11 -59
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
- package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
- package/src/public/state_manager/state_manager.ts +569 -0
- package/src/public/test_executor_metrics.ts +421 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts +0 -40
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.js +0 -62
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
- package/dest/private/providers/factory.d.ts +0 -12
- package/dest/private/providers/factory.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.d.ts +0 -19
- package/dest/private/providers/simulation_provider.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.js +0 -24
- package/dest/private/simulator.d.ts +0 -34
- package/dest/private/simulator.d.ts.map +0 -1
- package/dest/private/simulator.js +0 -76
- package/dest/private/unconstrained_execution.d.ts +0 -10
- package/dest/private/unconstrained_execution.d.ts.map +0 -1
- package/dest/private/unconstrained_execution.js +0 -27
- package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
- package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
- package/dest/private/unconstrained_execution_oracle.js +0 -258
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/dest/public/avm/fixtures/index.d.ts +0 -84
- package/dest/public/avm/fixtures/index.d.ts.map +0 -1
- package/dest/public/avm/fixtures/index.js +0 -175
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/public/avm/journal/index.d.ts +0 -2
- package/dest/public/avm/journal/index.d.ts.map +0 -1
- package/dest/public/avm/journal/index.js +0 -1
- package/dest/public/avm/journal/journal.d.ts +0 -209
- package/dest/public/avm/journal/journal.d.ts.map +0 -1
- package/dest/public/avm/journal/journal.js +0 -486
- package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/bytecode_errors.js +0 -6
- package/dest/public/execution.d.ts +0 -108
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/execution.js +0 -9
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/dest/test/utils.d.ts +0 -13
- package/dest/test/utils.d.ts.map +0 -1
- package/dest/test/utils.js +0 -22
- package/src/common/db_interfaces.ts +0 -94
- package/src/common/debug_fn_name.ts +0 -18
- package/src/common/message_load_oracle_inputs.ts +0 -15
- package/src/private/acvm/oracle/index.ts +0 -16
- package/src/private/acvm/oracle/oracle.ts +0 -455
- package/src/private/acvm/oracle/typed_oracle.ts +0 -259
- package/src/private/execution_data_provider.ts +0 -323
- package/src/private/execution_note_cache.ts +0 -217
- package/src/private/hashed_values_cache.ts +0 -55
- package/src/private/index.ts +0 -16
- package/src/private/pick_notes.ts +0 -141
- package/src/private/private_execution.ts +0 -151
- package/src/private/private_execution_oracle.ts +0 -614
- package/src/private/providers/acvm_wasm.ts +0 -63
- package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
- package/src/private/providers/simulation_provider.ts +0 -45
- package/src/private/simulator.ts +0 -147
- package/src/private/unconstrained_execution.ts +0 -50
- package/src/private/unconstrained_execution_oracle.ts +0 -373
- package/src/public/avm/bytecode_utils.ts +0 -17
- package/src/public/avm/fixtures/index.ts +0 -296
- package/src/public/avm/journal/index.ts +0 -1
- package/src/public/avm/journal/journal.ts +0 -742
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
- package/src/public/bytecode_errors.ts +0 -6
- package/src/public/execution.ts +0 -140
- package/src/public/tx_contract_cache.ts +0 -69
- package/src/test/utils.ts +0 -36
|
@@ -5,7 +5,9 @@ import { Opcode, OperandType } from '../serialization/instruction_serialization.
|
|
|
5
5
|
import { Addressing } from './addressing_mode.js';
|
|
6
6
|
import { Instruction } from './instruction.js';
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
export class SStore extends Instruction {
|
|
9
|
+
static readonly type: string = 'SSTORE';
|
|
10
|
+
static readonly opcode = Opcode.SSTORE;
|
|
9
11
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
10
12
|
public static readonly wireFormat: OperandType[] = [
|
|
11
13
|
OperandType.UINT8,
|
|
@@ -14,18 +16,13 @@ abstract class BaseStorageInstruction extends Instruction {
|
|
|
14
16
|
OperandType.UINT16,
|
|
15
17
|
];
|
|
16
18
|
|
|
17
|
-
constructor(
|
|
19
|
+
constructor(
|
|
20
|
+
private addressingMode: number,
|
|
21
|
+
private srcOffset: number,
|
|
22
|
+
private slotOffset: number,
|
|
23
|
+
) {
|
|
18
24
|
super();
|
|
19
25
|
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export class SStore extends BaseStorageInstruction {
|
|
23
|
-
static readonly type: string = 'SSTORE';
|
|
24
|
-
static readonly opcode = Opcode.SSTORE;
|
|
25
|
-
|
|
26
|
-
constructor(indirect: number, srcOffset: number, slotOffset: number) {
|
|
27
|
-
super(indirect, srcOffset, slotOffset);
|
|
28
|
-
}
|
|
29
26
|
|
|
30
27
|
public async execute(context: AvmContext): Promise<void> {
|
|
31
28
|
if (context.environment.isStaticCall) {
|
|
@@ -33,39 +30,66 @@ export class SStore extends BaseStorageInstruction {
|
|
|
33
30
|
}
|
|
34
31
|
|
|
35
32
|
const memory = context.machineState.memory;
|
|
36
|
-
|
|
33
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
34
|
+
|
|
35
|
+
context.machineState.consumeGas(
|
|
36
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
37
|
+
);
|
|
37
38
|
|
|
38
|
-
const operands = [this.
|
|
39
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
39
|
+
const operands = [this.srcOffset, this.slotOffset];
|
|
40
40
|
const [srcOffset, slotOffset] = addressing.resolve(operands, memory);
|
|
41
|
+
// We read before tag checking since it's needed for gas cost calculation
|
|
42
|
+
const slot = memory.get(slotOffset).toFr();
|
|
43
|
+
|
|
44
|
+
context.machineState.consumeGas(
|
|
45
|
+
this.dynamicGasCost(Number(context.persistableState.isStorageCold(context.environment.address, slot))),
|
|
46
|
+
);
|
|
47
|
+
|
|
41
48
|
memory.checkTag(TypeTag.FIELD, slotOffset);
|
|
42
49
|
memory.checkTag(TypeTag.FIELD, srcOffset);
|
|
43
50
|
|
|
44
|
-
const slot = memory.get(slotOffset).toFr();
|
|
45
51
|
const value = memory.get(srcOffset).toFr();
|
|
46
52
|
await context.persistableState.writeStorage(context.environment.address, slot, value);
|
|
47
53
|
}
|
|
48
54
|
}
|
|
49
55
|
|
|
50
|
-
export class SLoad extends
|
|
56
|
+
export class SLoad extends Instruction {
|
|
51
57
|
static readonly type: string = 'SLOAD';
|
|
52
58
|
static readonly opcode = Opcode.SLOAD;
|
|
59
|
+
// Informs (de)serialization. See Instruction.deserialize.
|
|
60
|
+
public static readonly wireFormat: OperandType[] = [
|
|
61
|
+
OperandType.UINT8,
|
|
62
|
+
OperandType.UINT8,
|
|
63
|
+
OperandType.UINT16,
|
|
64
|
+
OperandType.UINT16,
|
|
65
|
+
OperandType.UINT16,
|
|
66
|
+
];
|
|
53
67
|
|
|
54
|
-
constructor(
|
|
55
|
-
|
|
68
|
+
constructor(
|
|
69
|
+
private addressingMode: number,
|
|
70
|
+
private slotOffset: number,
|
|
71
|
+
private contractAddressOffset: number,
|
|
72
|
+
private dstOffset: number,
|
|
73
|
+
) {
|
|
74
|
+
super();
|
|
56
75
|
}
|
|
57
76
|
|
|
58
77
|
public async execute(context: AvmContext): Promise<void> {
|
|
59
78
|
const memory = context.machineState.memory;
|
|
60
|
-
|
|
79
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
80
|
+
|
|
81
|
+
context.machineState.consumeGas(
|
|
82
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
83
|
+
);
|
|
61
84
|
|
|
62
|
-
const operands = [this.
|
|
63
|
-
const
|
|
64
|
-
const [slotOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
85
|
+
const operands = [this.slotOffset, this.contractAddressOffset, this.dstOffset];
|
|
86
|
+
const [slotOffset, contractAddressOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
65
87
|
memory.checkTag(TypeTag.FIELD, slotOffset);
|
|
88
|
+
memory.checkTag(TypeTag.FIELD, contractAddressOffset);
|
|
66
89
|
|
|
67
90
|
const slot = memory.get(slotOffset).toFr();
|
|
68
|
-
const
|
|
91
|
+
const contractAddress = memory.get(contractAddressOffset).toAztecAddress();
|
|
92
|
+
const value = await context.persistableState.readStorage(contractAddress, slot);
|
|
69
93
|
memory.set(dstOffset, new Field(value));
|
|
70
94
|
}
|
|
71
95
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
|
|
3
|
+
import type { AvmContext } from './avm_context.js';
|
|
4
|
+
import { type AvmExecutionError, AvmRevertReason } from './errors.js';
|
|
5
|
+
|
|
6
|
+
async function createRevertReason(message: string, revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
|
|
7
|
+
// We drop the returnPc information.
|
|
8
|
+
const internalCallStack = context.machineState.internalCallStack.map(entry => entry.callPc);
|
|
9
|
+
|
|
10
|
+
// If we are reverting due to the same error that we have been tracking, we use the nested error as the cause.
|
|
11
|
+
let nestedError = undefined;
|
|
12
|
+
const revertDataEquals = (a: Fr[], b: Fr[]) => a.length === b.length && a.every((v, i) => v.equals(b[i]));
|
|
13
|
+
if (
|
|
14
|
+
context.machineState.collectedRevertInfo &&
|
|
15
|
+
revertDataEquals(context.machineState.collectedRevertInfo.revertDataRepresentative, revertData)
|
|
16
|
+
) {
|
|
17
|
+
nestedError = context.machineState.collectedRevertInfo.recursiveRevertReason;
|
|
18
|
+
message = context.machineState.collectedRevertInfo.recursiveRevertReason.message;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const { functionSelector, functionName } = await context.persistableState.getPublicFunctionSelectorAndName(
|
|
22
|
+
context.environment,
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
return new AvmRevertReason(
|
|
26
|
+
message,
|
|
27
|
+
/*failingFunction=*/ {
|
|
28
|
+
contractAddress: context.environment.address,
|
|
29
|
+
functionSelector,
|
|
30
|
+
functionName,
|
|
31
|
+
},
|
|
32
|
+
/*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
|
|
33
|
+
/*options=*/ { cause: nestedError },
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Create a "revert reason" error for an exceptional halt.
|
|
39
|
+
*
|
|
40
|
+
* @param haltingError - the lower-level error causing the exceptional halt
|
|
41
|
+
* @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
|
|
42
|
+
*/
|
|
43
|
+
export async function revertReasonFromExceptionalHalt(
|
|
44
|
+
haltingError: AvmExecutionError,
|
|
45
|
+
context: AvmContext,
|
|
46
|
+
): Promise<AvmRevertReason> {
|
|
47
|
+
return await createRevertReason(haltingError.message, [], context);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Create a "revert reason" error for an explicit revert (a root cause).
|
|
52
|
+
*
|
|
53
|
+
* @param revertData - output data of the explicit REVERT instruction
|
|
54
|
+
* @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
|
|
55
|
+
*/
|
|
56
|
+
export async function revertReasonFromExplicitRevert(revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
|
|
57
|
+
return await createRevertReason('Assertion failed: ', revertData, context);
|
|
58
|
+
}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* A Buffer-like class that automatically advances the position.
|
|
3
3
|
*/
|
|
4
4
|
export class BufferCursor {
|
|
5
|
-
constructor(
|
|
5
|
+
constructor(
|
|
6
|
+
private _buffer: Buffer,
|
|
7
|
+
private _position: number = 0,
|
|
8
|
+
) {}
|
|
6
9
|
|
|
7
10
|
public position(): number {
|
|
8
11
|
return this._position;
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
AvmExecutionError,
|
|
5
|
+
AvmParsingError,
|
|
6
|
+
InvalidOpcodeError,
|
|
7
|
+
InvalidProgramCounterError,
|
|
8
|
+
InvalidTagValueError,
|
|
9
|
+
duringInstrFetch,
|
|
10
|
+
} from '../errors.js';
|
|
2
11
|
import {
|
|
3
12
|
Add,
|
|
4
13
|
And,
|
|
@@ -10,7 +19,7 @@ import {
|
|
|
10
19
|
EcAdd,
|
|
11
20
|
EmitNoteHash,
|
|
12
21
|
EmitNullifier,
|
|
13
|
-
|
|
22
|
+
EmitPublicLog,
|
|
14
23
|
Eq,
|
|
15
24
|
FieldDiv,
|
|
16
25
|
GetContractInstance,
|
|
@@ -53,106 +62,102 @@ import { MAX_OPCODE_VALUE, Opcode } from './instruction_serialization.js';
|
|
|
53
62
|
|
|
54
63
|
export type InstructionDeserializer = (buf: BufferCursor | Buffer) => Instruction;
|
|
55
64
|
|
|
56
|
-
export interface Serializable {
|
|
57
|
-
serialize(): Buffer;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
65
|
export interface Deserializable {
|
|
61
66
|
deserialize: InstructionDeserializer;
|
|
62
67
|
}
|
|
63
68
|
|
|
64
69
|
export type InstructionSet = Map<Opcode, InstructionDeserializer>;
|
|
65
70
|
export const INSTRUCTION_SET = new Map<Opcode, InstructionDeserializer>([
|
|
66
|
-
[Opcode.ADD_8, Add.as(Add.wireFormat8).
|
|
67
|
-
[Opcode.ADD_16, Add.as(Add.wireFormat16).
|
|
68
|
-
[Opcode.SUB_8, Sub.as(Sub.wireFormat8).
|
|
69
|
-
[Opcode.SUB_16, Sub.as(Sub.wireFormat16).
|
|
70
|
-
[Opcode.MUL_8, Mul.as(Mul.wireFormat8).
|
|
71
|
-
[Opcode.MUL_16, Mul.as(Mul.wireFormat16).
|
|
72
|
-
[Opcode.DIV_8, Div.as(Div.wireFormat8).
|
|
73
|
-
[Opcode.DIV_16, Div.as(Div.wireFormat16).
|
|
74
|
-
[Opcode.FDIV_8, FieldDiv.as(FieldDiv.wireFormat8).
|
|
75
|
-
[Opcode.FDIV_16, FieldDiv.as(FieldDiv.wireFormat16).
|
|
76
|
-
[Opcode.EQ_8, Eq.as(Eq.wireFormat8).
|
|
77
|
-
[Opcode.EQ_16, Eq.as(Eq.wireFormat16).
|
|
78
|
-
[Opcode.LT_8, Lt.as(Lt.wireFormat8).
|
|
79
|
-
[Opcode.LT_16, Lt.as(Lt.wireFormat16).
|
|
80
|
-
[Opcode.LTE_8, Lte.as(Lte.wireFormat8).
|
|
81
|
-
[Opcode.LTE_16, Lte.as(Lte.wireFormat16).
|
|
82
|
-
[Opcode.AND_8, And.as(And.wireFormat8).
|
|
83
|
-
[Opcode.AND_16, And.as(And.wireFormat16).
|
|
84
|
-
[Opcode.OR_8, Or.as(Or.wireFormat8).
|
|
85
|
-
[Opcode.OR_16, Or.as(Or.wireFormat16).
|
|
86
|
-
[Opcode.XOR_8, Xor.as(Xor.wireFormat8).
|
|
87
|
-
[Opcode.XOR_16, Xor.as(Xor.wireFormat16).
|
|
88
|
-
[Opcode.NOT_8, Not.as(Not.wireFormat8).
|
|
89
|
-
[Opcode.NOT_16, Not.as(Not.wireFormat16).
|
|
90
|
-
[Opcode.SHL_8, Shl.as(Shl.wireFormat8).
|
|
91
|
-
[Opcode.SHL_16, Shl.as(Shl.wireFormat16).
|
|
92
|
-
[Opcode.SHR_8, Shr.as(Shr.wireFormat8).
|
|
93
|
-
[Opcode.SHR_16, Shr.as(Shr.wireFormat16).
|
|
94
|
-
[Opcode.CAST_8, Cast.as(Cast.wireFormat8).
|
|
95
|
-
[Opcode.CAST_16, Cast.as(Cast.wireFormat16).
|
|
71
|
+
[Opcode.ADD_8, Add.as(Add.wireFormat8).fromBuffer],
|
|
72
|
+
[Opcode.ADD_16, Add.as(Add.wireFormat16).fromBuffer],
|
|
73
|
+
[Opcode.SUB_8, Sub.as(Sub.wireFormat8).fromBuffer],
|
|
74
|
+
[Opcode.SUB_16, Sub.as(Sub.wireFormat16).fromBuffer],
|
|
75
|
+
[Opcode.MUL_8, Mul.as(Mul.wireFormat8).fromBuffer],
|
|
76
|
+
[Opcode.MUL_16, Mul.as(Mul.wireFormat16).fromBuffer],
|
|
77
|
+
[Opcode.DIV_8, Div.as(Div.wireFormat8).fromBuffer],
|
|
78
|
+
[Opcode.DIV_16, Div.as(Div.wireFormat16).fromBuffer],
|
|
79
|
+
[Opcode.FDIV_8, FieldDiv.as(FieldDiv.wireFormat8).fromBuffer],
|
|
80
|
+
[Opcode.FDIV_16, FieldDiv.as(FieldDiv.wireFormat16).fromBuffer],
|
|
81
|
+
[Opcode.EQ_8, Eq.as(Eq.wireFormat8).fromBuffer],
|
|
82
|
+
[Opcode.EQ_16, Eq.as(Eq.wireFormat16).fromBuffer],
|
|
83
|
+
[Opcode.LT_8, Lt.as(Lt.wireFormat8).fromBuffer],
|
|
84
|
+
[Opcode.LT_16, Lt.as(Lt.wireFormat16).fromBuffer],
|
|
85
|
+
[Opcode.LTE_8, Lte.as(Lte.wireFormat8).fromBuffer],
|
|
86
|
+
[Opcode.LTE_16, Lte.as(Lte.wireFormat16).fromBuffer],
|
|
87
|
+
[Opcode.AND_8, And.as(And.wireFormat8).fromBuffer],
|
|
88
|
+
[Opcode.AND_16, And.as(And.wireFormat16).fromBuffer],
|
|
89
|
+
[Opcode.OR_8, Or.as(Or.wireFormat8).fromBuffer],
|
|
90
|
+
[Opcode.OR_16, Or.as(Or.wireFormat16).fromBuffer],
|
|
91
|
+
[Opcode.XOR_8, Xor.as(Xor.wireFormat8).fromBuffer],
|
|
92
|
+
[Opcode.XOR_16, Xor.as(Xor.wireFormat16).fromBuffer],
|
|
93
|
+
[Opcode.NOT_8, Not.as(Not.wireFormat8).fromBuffer],
|
|
94
|
+
[Opcode.NOT_16, Not.as(Not.wireFormat16).fromBuffer],
|
|
95
|
+
[Opcode.SHL_8, Shl.as(Shl.wireFormat8).fromBuffer],
|
|
96
|
+
[Opcode.SHL_16, Shl.as(Shl.wireFormat16).fromBuffer],
|
|
97
|
+
[Opcode.SHR_8, Shr.as(Shr.wireFormat8).fromBuffer],
|
|
98
|
+
[Opcode.SHR_16, Shr.as(Shr.wireFormat16).fromBuffer],
|
|
99
|
+
[Opcode.CAST_8, Cast.as(Cast.wireFormat8).fromBuffer],
|
|
100
|
+
[Opcode.CAST_16, Cast.as(Cast.wireFormat16).fromBuffer],
|
|
96
101
|
// Execution Environment
|
|
97
|
-
[Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).
|
|
98
|
-
[CalldataCopy.opcode, Instruction.
|
|
99
|
-
[SuccessCopy.opcode, Instruction.
|
|
100
|
-
[Opcode.RETURNDATASIZE, Instruction.
|
|
101
|
-
[Opcode.RETURNDATACOPY, Instruction.
|
|
102
|
+
[Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).fromBuffer],
|
|
103
|
+
[CalldataCopy.opcode, Instruction.fromBuffer.bind(CalldataCopy)],
|
|
104
|
+
[SuccessCopy.opcode, Instruction.fromBuffer.bind(SuccessCopy)],
|
|
105
|
+
[Opcode.RETURNDATASIZE, Instruction.fromBuffer.bind(ReturndataSize)],
|
|
106
|
+
[Opcode.RETURNDATACOPY, Instruction.fromBuffer.bind(ReturndataCopy)],
|
|
102
107
|
|
|
103
108
|
// Machine State - Internal Control Flow
|
|
104
|
-
[Jump.opcode, Instruction.
|
|
105
|
-
[JumpI.opcode, Instruction.
|
|
106
|
-
[InternalCall.opcode, Instruction.
|
|
107
|
-
[InternalReturn.opcode, Instruction.
|
|
108
|
-
[Opcode.SET_8, Set.as(Set.wireFormat8).
|
|
109
|
-
[Opcode.SET_16, Set.as(Set.wireFormat16).
|
|
110
|
-
[Opcode.SET_32, Set.as(Set.wireFormat32).
|
|
111
|
-
[Opcode.SET_64, Set.as(Set.wireFormat64).
|
|
112
|
-
[Opcode.SET_128, Set.as(Set.wireFormat128).
|
|
113
|
-
[Opcode.SET_FF, Set.as(Set.wireFormatFF).
|
|
114
|
-
[Opcode.MOV_8, Mov.as(Mov.wireFormat8).
|
|
115
|
-
[Opcode.MOV_16, Mov.as(Mov.wireFormat16).
|
|
109
|
+
[Jump.opcode, Instruction.fromBuffer.bind(Jump)],
|
|
110
|
+
[JumpI.opcode, Instruction.fromBuffer.bind(JumpI)],
|
|
111
|
+
[InternalCall.opcode, Instruction.fromBuffer.bind(InternalCall)],
|
|
112
|
+
[InternalReturn.opcode, Instruction.fromBuffer.bind(InternalReturn)],
|
|
113
|
+
[Opcode.SET_8, Set.as(Set.wireFormat8).fromBuffer],
|
|
114
|
+
[Opcode.SET_16, Set.as(Set.wireFormat16).fromBuffer],
|
|
115
|
+
[Opcode.SET_32, Set.as(Set.wireFormat32).fromBuffer],
|
|
116
|
+
[Opcode.SET_64, Set.as(Set.wireFormat64).fromBuffer],
|
|
117
|
+
[Opcode.SET_128, Set.as(Set.wireFormat128).fromBuffer],
|
|
118
|
+
[Opcode.SET_FF, Set.as(Set.wireFormatFF).fromBuffer],
|
|
119
|
+
[Opcode.MOV_8, Mov.as(Mov.wireFormat8).fromBuffer],
|
|
120
|
+
[Opcode.MOV_16, Mov.as(Mov.wireFormat16).fromBuffer],
|
|
116
121
|
|
|
117
122
|
// World State
|
|
118
|
-
[SLoad.opcode, Instruction.
|
|
119
|
-
[SStore.opcode, Instruction.
|
|
120
|
-
[NoteHashExists.opcode, Instruction.
|
|
121
|
-
[EmitNoteHash.opcode, Instruction.
|
|
122
|
-
[NullifierExists.opcode, Instruction.
|
|
123
|
-
[EmitNullifier.opcode, Instruction.
|
|
124
|
-
[L1ToL2MessageExists.opcode, Instruction.
|
|
123
|
+
[SLoad.opcode, Instruction.fromBuffer.bind(SLoad)], // Public Storage
|
|
124
|
+
[SStore.opcode, Instruction.fromBuffer.bind(SStore)], // Public Storage
|
|
125
|
+
[NoteHashExists.opcode, Instruction.fromBuffer.bind(NoteHashExists)], // Notes & Nullifiers
|
|
126
|
+
[EmitNoteHash.opcode, Instruction.fromBuffer.bind(EmitNoteHash)], // Notes & Nullifiers
|
|
127
|
+
[NullifierExists.opcode, Instruction.fromBuffer.bind(NullifierExists)], // Notes & Nullifiers
|
|
128
|
+
[EmitNullifier.opcode, Instruction.fromBuffer.bind(EmitNullifier)], // Notes & Nullifiers
|
|
129
|
+
[L1ToL2MessageExists.opcode, Instruction.fromBuffer.bind(L1ToL2MessageExists)], // Messages
|
|
125
130
|
|
|
126
131
|
// Accrued Substate
|
|
127
|
-
[
|
|
128
|
-
[SendL2ToL1Message.opcode, Instruction.
|
|
129
|
-
[GetContractInstance.opcode, Instruction.
|
|
132
|
+
[EmitPublicLog.opcode, Instruction.fromBuffer.bind(EmitPublicLog)],
|
|
133
|
+
[SendL2ToL1Message.opcode, Instruction.fromBuffer.bind(SendL2ToL1Message)],
|
|
134
|
+
[GetContractInstance.opcode, Instruction.fromBuffer.bind(GetContractInstance)],
|
|
130
135
|
|
|
131
136
|
// Control Flow - Contract Calls
|
|
132
|
-
[Call.opcode, Instruction.
|
|
133
|
-
[StaticCall.opcode, Instruction.
|
|
134
|
-
[Return.opcode, Instruction.
|
|
135
|
-
[Opcode.REVERT_8, Revert.as(Revert.wireFormat8).
|
|
136
|
-
[Opcode.REVERT_16, Revert.as(Revert.wireFormat16).
|
|
137
|
+
[Call.opcode, Instruction.fromBuffer.bind(Call)],
|
|
138
|
+
[StaticCall.opcode, Instruction.fromBuffer.bind(StaticCall)],
|
|
139
|
+
[Return.opcode, Instruction.fromBuffer.bind(Return)],
|
|
140
|
+
[Opcode.REVERT_8, Revert.as(Revert.wireFormat8).fromBuffer],
|
|
141
|
+
[Opcode.REVERT_16, Revert.as(Revert.wireFormat16).fromBuffer],
|
|
137
142
|
|
|
138
143
|
// Misc
|
|
139
|
-
[DebugLog.opcode, Instruction.
|
|
144
|
+
[DebugLog.opcode, Instruction.fromBuffer.bind(DebugLog)],
|
|
140
145
|
|
|
141
146
|
// Gadgets
|
|
142
|
-
[EcAdd.opcode, Instruction.
|
|
143
|
-
[Poseidon2.opcode, Instruction.
|
|
144
|
-
[Sha256Compression.opcode, Instruction.
|
|
145
|
-
[KeccakF1600.opcode, Instruction.
|
|
147
|
+
[EcAdd.opcode, Instruction.fromBuffer.bind(EcAdd)],
|
|
148
|
+
[Poseidon2.opcode, Instruction.fromBuffer.bind(Poseidon2)],
|
|
149
|
+
[Sha256Compression.opcode, Instruction.fromBuffer.bind(Sha256Compression)],
|
|
150
|
+
[KeccakF1600.opcode, Instruction.fromBuffer.bind(KeccakF1600)],
|
|
146
151
|
|
|
147
152
|
// Conversions
|
|
148
|
-
[ToRadixBE.opcode, Instruction.
|
|
153
|
+
[ToRadixBE.opcode, Instruction.fromBuffer.bind(ToRadixBE)],
|
|
149
154
|
]);
|
|
150
155
|
|
|
151
156
|
/**
|
|
152
157
|
* Serializes an array of instructions to bytecode.
|
|
153
158
|
*/
|
|
154
|
-
export function encodeToBytecode(instructions:
|
|
155
|
-
return
|
|
159
|
+
export function encodeToBytecode(instructions: Bufferable[]): Buffer {
|
|
160
|
+
return serializeToBuffer(instructions);
|
|
156
161
|
}
|
|
157
162
|
|
|
158
163
|
// For testing only
|
|
@@ -174,7 +179,7 @@ export function decodeInstructionFromBytecode(
|
|
|
174
179
|
instructionSet: InstructionSet = INSTRUCTION_SET,
|
|
175
180
|
): [Instruction, number] {
|
|
176
181
|
if (pc >= bytecode.length) {
|
|
177
|
-
throw new InvalidProgramCounterError(pc, bytecode.length);
|
|
182
|
+
throw new InvalidProgramCounterError(pc, bytecode.length - 1);
|
|
178
183
|
}
|
|
179
184
|
|
|
180
185
|
try {
|
|
@@ -184,7 +189,7 @@ export function decodeInstructionFromBytecode(
|
|
|
184
189
|
|
|
185
190
|
if (opcode > MAX_OPCODE_VALUE) {
|
|
186
191
|
throw new InvalidOpcodeError(
|
|
187
|
-
`Opcode ${opcode} (0x${opcode.toString(16)}) value is not in the range of valid opcodes.`,
|
|
192
|
+
`Opcode ${opcode} (0x${opcode.toString(16)}) value is not in the range of valid opcodes (at PC ${pc}).`,
|
|
188
193
|
);
|
|
189
194
|
}
|
|
190
195
|
|
|
@@ -194,13 +199,17 @@ export function decodeInstructionFromBytecode(
|
|
|
194
199
|
}
|
|
195
200
|
|
|
196
201
|
const instructionDeserializer: InstructionDeserializer = instructionDeserializerOrUndef;
|
|
202
|
+
|
|
197
203
|
const instruction = instructionDeserializer(cursor);
|
|
198
204
|
return [instruction, cursor.position() - startingPosition];
|
|
199
205
|
} catch (error) {
|
|
200
|
-
if (error instanceof
|
|
201
|
-
throw error;
|
|
206
|
+
if (error instanceof InvalidTagValueError || error instanceof InvalidOpcodeError) {
|
|
207
|
+
throw duringInstrFetch(error, pc);
|
|
208
|
+
} else if (error instanceof AvmExecutionError) {
|
|
209
|
+
throw new AvmParsingError(`Instruction parsing error at pc ${pc}: ${error.message}`);
|
|
202
210
|
} else {
|
|
203
|
-
|
|
211
|
+
const msg = error instanceof Error ? `: ${error.message}` : '';
|
|
212
|
+
throw new AvmParsingError(`Instruction fetching error at pc ${pc}${msg}`);
|
|
204
213
|
}
|
|
205
214
|
}
|
|
206
215
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
|
|
1
3
|
import { strict as assert } from 'assert';
|
|
2
4
|
|
|
5
|
+
import { TaggedMemory } from '../avm_memory_types.js';
|
|
3
6
|
import { BufferCursor } from './buffer_cursor.js';
|
|
4
7
|
|
|
5
8
|
/**
|
|
@@ -67,7 +70,7 @@ export enum Opcode {
|
|
|
67
70
|
EMITNULLIFIER,
|
|
68
71
|
L1TOL2MSGEXISTS,
|
|
69
72
|
GETCONTRACTINSTANCE,
|
|
70
|
-
|
|
73
|
+
EMITPUBLICLOG,
|
|
71
74
|
SENDL2TOL1MSG,
|
|
72
75
|
// External calls
|
|
73
76
|
CALL,
|
|
@@ -92,10 +95,8 @@ export const MAX_OPCODE_VALUE = Math.max(
|
|
|
92
95
|
.filter(k => !isNaN(k)),
|
|
93
96
|
);
|
|
94
97
|
|
|
95
|
-
// Possible types for an instruction's operand in its wire format.
|
|
96
|
-
//
|
|
97
|
-
// Note that cpp code introduced an additional enum value TAG to express the instruction tag. In TS,
|
|
98
|
-
// this one is parsed as UINT8.
|
|
98
|
+
// Possible types for an instruction's operand in its wire format.
|
|
99
|
+
// The counterpart cpp file is: vm2/simulation/lib/serialization.hpp.
|
|
99
100
|
export enum OperandType {
|
|
100
101
|
UINT8,
|
|
101
102
|
UINT16,
|
|
@@ -103,8 +104,12 @@ export enum OperandType {
|
|
|
103
104
|
UINT64,
|
|
104
105
|
UINT128,
|
|
105
106
|
FF,
|
|
107
|
+
TAG,
|
|
106
108
|
}
|
|
107
109
|
|
|
110
|
+
// Define a type that represents the possible types of the deserialized values.
|
|
111
|
+
type DeserializedValue = number | bigint;
|
|
112
|
+
|
|
108
113
|
type OperandNativeType = number | bigint;
|
|
109
114
|
type OperandWriter = (value: any) => void;
|
|
110
115
|
|
|
@@ -113,45 +118,70 @@ const OPERAND_SPEC = new Map<OperandType, [number, (offset: number) => OperandNa
|
|
|
113
118
|
[OperandType.UINT8, [1, Buffer.prototype.readUint8, Buffer.prototype.writeUint8]],
|
|
114
119
|
[OperandType.UINT16, [2, Buffer.prototype.readUint16BE, Buffer.prototype.writeUint16BE]],
|
|
115
120
|
[OperandType.UINT32, [4, Buffer.prototype.readUint32BE, Buffer.prototype.writeUint32BE]],
|
|
116
|
-
[OperandType.UINT64, [8,
|
|
117
|
-
[OperandType.UINT128, [16,
|
|
118
|
-
[OperandType.FF, [32,
|
|
121
|
+
[OperandType.UINT64, [8, readUint64BE, writeUint64BE]],
|
|
122
|
+
[OperandType.UINT128, [16, readUint128BE, writeUint128BE]],
|
|
123
|
+
[OperandType.FF, [32, readUint254BE, writeUint254BE]],
|
|
124
|
+
[OperandType.TAG, [1, Buffer.prototype.readUint8, Buffer.prototype.writeUint8]],
|
|
119
125
|
]);
|
|
120
126
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
127
|
+
/**
|
|
128
|
+
* Returns the size of an operand in bytes.
|
|
129
|
+
* Should not be called with unknown operand types.
|
|
130
|
+
* @param operandType
|
|
131
|
+
* @returns number size in bytes
|
|
132
|
+
* @throws AssertionError if the operand type is unknown
|
|
133
|
+
*/
|
|
134
|
+
export function getOperandSize(operandType: OperandType): number {
|
|
135
|
+
assert(OPERAND_SPEC.has(operandType), `Unknown operand type: ${operandType}`);
|
|
136
|
+
return OPERAND_SPEC.get(operandType)![0];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function readUintBE(buf: Buffer, offset: number, totalBytes: number): bigint {
|
|
140
|
+
let value: bigint = 0n;
|
|
124
141
|
for (let i = 0; i < totalBytes; ++i) {
|
|
125
|
-
|
|
126
|
-
|
|
142
|
+
value <<= 8n;
|
|
143
|
+
value |= BigInt(buf.readUint8(i + offset));
|
|
127
144
|
}
|
|
128
|
-
return
|
|
145
|
+
return value;
|
|
129
146
|
}
|
|
130
147
|
|
|
131
|
-
function
|
|
132
|
-
const totalBytes = 32;
|
|
148
|
+
function writeUintBE(buf: Buffer, value: bigint, totalBytes: number): void {
|
|
133
149
|
for (let offset = totalBytes - 1; offset >= 0; --offset) {
|
|
134
|
-
|
|
150
|
+
buf.writeUint8(Number(value & 0xffn), offset);
|
|
135
151
|
value >>= 8n;
|
|
136
152
|
}
|
|
137
153
|
}
|
|
138
154
|
|
|
139
|
-
function
|
|
140
|
-
|
|
141
|
-
let ret: bigint = 0n;
|
|
142
|
-
for (let i = 0; i < totalBytes; ++i) {
|
|
143
|
-
ret <<= 8n;
|
|
144
|
-
ret |= BigInt(this.readUint8(i + offset));
|
|
145
|
-
}
|
|
146
|
-
return ret;
|
|
155
|
+
function readUint64BE(this: Buffer, offset: number): bigint {
|
|
156
|
+
return readUintBE(this, offset, 8);
|
|
147
157
|
}
|
|
148
158
|
|
|
149
|
-
function
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
159
|
+
function writeUint64BE(this: Buffer, value: bigint): void {
|
|
160
|
+
writeUintBE(this, value, 8);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function readUint254BE(this: Buffer, offset: number): bigint {
|
|
164
|
+
let value = readUintBE(this, offset, 32);
|
|
165
|
+
|
|
166
|
+
// In circuit, we only support values up to Fr.MODULUS and any deserialized value
|
|
167
|
+
// would naturally undergo a modulus reduction.
|
|
168
|
+
if (value >= Fr.MODULUS) {
|
|
169
|
+
value = value % Fr.MODULUS;
|
|
154
170
|
}
|
|
171
|
+
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function writeUint254BE(this: Buffer, value: bigint): void {
|
|
176
|
+
writeUintBE(this, value, 32);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function readUint128BE(this: Buffer, offset: number): bigint {
|
|
180
|
+
return readUintBE(this, offset, 16);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function writeUint128BE(this: Buffer, value: bigint): void {
|
|
184
|
+
writeUintBE(this, value, 16);
|
|
155
185
|
}
|
|
156
186
|
|
|
157
187
|
/**
|
|
@@ -160,19 +190,30 @@ function writeBigInt128BE(this: Buffer, value: bigint): void {
|
|
|
160
190
|
* @param operands Specification of the operand types.
|
|
161
191
|
* @returns An array as big as {@code operands}, with the converted TS values.
|
|
162
192
|
*/
|
|
163
|
-
export function deserialize(cursor: BufferCursor | Buffer, operands: OperandType[]):
|
|
164
|
-
const argValues = [];
|
|
193
|
+
export function deserialize(cursor: BufferCursor | Buffer, operands: OperandType[]): DeserializedValue[] {
|
|
194
|
+
const argValues: DeserializedValue[] = [];
|
|
165
195
|
if (Buffer.isBuffer(cursor)) {
|
|
166
196
|
cursor = new BufferCursor(cursor);
|
|
167
197
|
}
|
|
168
198
|
|
|
169
|
-
for (const
|
|
170
|
-
const opType = op;
|
|
199
|
+
for (const opType of operands) {
|
|
171
200
|
const [sizeBytes, reader, _writer] = OPERAND_SPEC.get(opType)!;
|
|
172
|
-
|
|
201
|
+
const value = reader.call(cursor.buffer(), cursor.position());
|
|
202
|
+
argValues.push(value);
|
|
173
203
|
cursor.advance(sizeBytes);
|
|
174
204
|
}
|
|
175
205
|
|
|
206
|
+
// We first want to detect other parsing errors (e.g., instruction size
|
|
207
|
+
// is longer than remaining bytes) first and therefore tag validation is done after completion
|
|
208
|
+
// of parsing above. Order of errors need to match with circuit.
|
|
209
|
+
for (let i = 0; i < operands.length; i++) {
|
|
210
|
+
if (operands[i] === OperandType.TAG) {
|
|
211
|
+
// We parsed a single byte (readUInt8()) and therefore value is of number type (not bigint)
|
|
212
|
+
// We need to cast to number because checkIsValidTag expects a number.
|
|
213
|
+
TaggedMemory.checkIsValidTag(Number(argValues[i] ?? 0));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
176
217
|
return argValues;
|
|
177
218
|
}
|
|
178
219
|
|