@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.0208eb9
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 +8 -0
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +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 +65 -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 +27 -35
- 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 +32 -42
- 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 +63 -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/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 +8 -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 +38 -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 +96 -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 +17 -18
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +58 -55
- 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 +3 -4
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +11 -12
- 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 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +21 -12
- 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 +79 -75
- package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +70 -35
- package/dest/public/avm/test_utils.d.ts +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 +262 -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 +12 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +174 -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 +1653 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
- 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 +102 -59
- 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 +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +355 -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 +54 -103
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +222 -195
- 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 +51 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +113 -0
- package/dest/public/public_processor/public_processor.d.ts +28 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +576 -136
- package/dest/public/public_processor/public_processor_metrics.d.ts +4 -4
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +29 -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 +98 -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 +132 -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_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 +25 -31
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +75 -95
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +38 -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 +220 -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 +56 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +307 -0
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +3 -5
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +7 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +39 -33
- package/src/client.ts +5 -3
- package/src/common/errors.ts +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 +76 -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 +26 -38
- 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 +57 -62
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
- package/src/public/avm/fixtures/initializers.ts +103 -0
- package/src/public/avm/fixtures/utils.ts +151 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +81 -48
- 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 +10 -10
- 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 +22 -10
- 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 +89 -80
- package/src/public/avm/serialization/instruction_serialization.ts +75 -34
- 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 +169 -0
- package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +228 -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 +1721 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +223 -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 +141 -69
- 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 +607 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +290 -260
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
- package/src/public/public_processor/public_processor.ts +257 -179
- package/src/public/public_processor/public_processor_metrics.ts +18 -46
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +211 -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_cpp_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +43 -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 +179 -199
- package/src/public/public_tx_simulator/public_tx_simulator.ts +316 -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 +397 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts +0 -40
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.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
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { MAX_ETH_ADDRESS_VALUE } from '@aztec/constants';
|
|
2
|
+
import { NullifierCollisionError } from '../../side_effect_errors.js';
|
|
1
3
|
import { TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
2
4
|
import { InstructionExecutionError, StaticCallAlterationError } from '../errors.js';
|
|
3
|
-
import { NullifierCollisionError } from '../journal/nullifiers.js';
|
|
4
5
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
5
6
|
import { Addressing } from './addressing_mode.js';
|
|
6
7
|
import { Instruction } from './instruction.js';
|
|
7
8
|
export class NoteHashExists extends Instruction {
|
|
8
|
-
|
|
9
|
+
addressingMode;
|
|
9
10
|
noteHashOffset;
|
|
10
11
|
leafIndexOffset;
|
|
11
12
|
existsOffset;
|
|
@@ -19,29 +20,30 @@ export class NoteHashExists extends Instruction {
|
|
|
19
20
|
OperandType.UINT16,
|
|
20
21
|
OperandType.UINT16
|
|
21
22
|
];
|
|
22
|
-
constructor(
|
|
23
|
-
super(), this.
|
|
23
|
+
constructor(addressingMode, noteHashOffset, leafIndexOffset, existsOffset){
|
|
24
|
+
super(), this.addressingMode = addressingMode, this.noteHashOffset = noteHashOffset, this.leafIndexOffset = leafIndexOffset, this.existsOffset = existsOffset;
|
|
24
25
|
}
|
|
25
26
|
async execute(context) {
|
|
26
27
|
const memory = context.machineState.memory;
|
|
27
|
-
|
|
28
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
29
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
28
30
|
const operands = [
|
|
29
31
|
this.noteHashOffset,
|
|
30
32
|
this.leafIndexOffset,
|
|
31
33
|
this.existsOffset
|
|
32
34
|
];
|
|
33
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
34
35
|
const [noteHashOffset, leafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
35
|
-
memory.
|
|
36
|
+
memory.checkTag(TypeTag.FIELD, noteHashOffset);
|
|
37
|
+
memory.checkTag(TypeTag.UINT64, leafIndexOffset);
|
|
36
38
|
// Note that this instruction accepts any type in memory, and converts to Field.
|
|
37
39
|
const noteHash = memory.get(noteHashOffset).toFr();
|
|
38
|
-
const leafIndex = memory.get(leafIndexOffset).
|
|
40
|
+
const leafIndex = memory.get(leafIndexOffset).toBigInt();
|
|
39
41
|
const exists = await context.persistableState.checkNoteHashExists(context.environment.address, noteHash, leafIndex);
|
|
40
42
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
export class EmitNoteHash extends Instruction {
|
|
44
|
-
|
|
46
|
+
addressingMode;
|
|
45
47
|
noteHashOffset;
|
|
46
48
|
static type = 'EMITNOTEHASH';
|
|
47
49
|
static opcode = Opcode.EMITNOTEHASH;
|
|
@@ -51,16 +53,16 @@ export class EmitNoteHash extends Instruction {
|
|
|
51
53
|
OperandType.UINT8,
|
|
52
54
|
OperandType.UINT16
|
|
53
55
|
];
|
|
54
|
-
constructor(
|
|
55
|
-
super(), this.
|
|
56
|
+
constructor(addressingMode, noteHashOffset){
|
|
57
|
+
super(), this.addressingMode = addressingMode, this.noteHashOffset = noteHashOffset;
|
|
56
58
|
}
|
|
57
59
|
async execute(context) {
|
|
58
60
|
const memory = context.machineState.memory;
|
|
59
|
-
|
|
61
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
62
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
60
63
|
const operands = [
|
|
61
64
|
this.noteHashOffset
|
|
62
65
|
];
|
|
63
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
64
66
|
const [noteHashOffset] = addressing.resolve(operands, memory);
|
|
65
67
|
memory.checkTag(TypeTag.FIELD, noteHashOffset);
|
|
66
68
|
if (context.environment.isStaticCall) {
|
|
@@ -71,9 +73,8 @@ export class EmitNoteHash extends Instruction {
|
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
export class NullifierExists extends Instruction {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
addressOffset;
|
|
76
|
+
addressingMode;
|
|
77
|
+
siloedNullifierOffset;
|
|
77
78
|
existsOffset;
|
|
78
79
|
static type = 'NULLIFIEREXISTS';
|
|
79
80
|
static opcode = Opcode.NULLIFIEREXISTS;
|
|
@@ -82,31 +83,28 @@ export class NullifierExists extends Instruction {
|
|
|
82
83
|
OperandType.UINT8,
|
|
83
84
|
OperandType.UINT8,
|
|
84
85
|
OperandType.UINT16,
|
|
85
|
-
OperandType.UINT16,
|
|
86
86
|
OperandType.UINT16
|
|
87
87
|
];
|
|
88
|
-
constructor(
|
|
89
|
-
super(), this.
|
|
88
|
+
constructor(addressingMode, siloedNullifierOffset, existsOffset){
|
|
89
|
+
super(), this.addressingMode = addressingMode, this.siloedNullifierOffset = siloedNullifierOffset, this.existsOffset = existsOffset;
|
|
90
90
|
}
|
|
91
91
|
async execute(context) {
|
|
92
92
|
const memory = context.machineState.memory;
|
|
93
|
-
|
|
93
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
94
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
94
95
|
const operands = [
|
|
95
|
-
this.
|
|
96
|
-
this.addressOffset,
|
|
96
|
+
this.siloedNullifierOffset,
|
|
97
97
|
this.existsOffset
|
|
98
98
|
];
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
memory.
|
|
102
|
-
const
|
|
103
|
-
const address = memory.get(addressOffset).toAztecAddress();
|
|
104
|
-
const exists = await context.persistableState.checkNullifierExists(address, nullifier);
|
|
99
|
+
const [siloedNullifierOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
100
|
+
memory.checkTag(TypeTag.FIELD, siloedNullifierOffset);
|
|
101
|
+
const siloedNullifier = memory.get(siloedNullifierOffset).toFr();
|
|
102
|
+
const exists = await context.persistableState.checkSiloedNullifierExists(siloedNullifier);
|
|
105
103
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
106
104
|
}
|
|
107
105
|
}
|
|
108
106
|
export class EmitNullifier extends Instruction {
|
|
109
|
-
|
|
107
|
+
addressingMode;
|
|
110
108
|
nullifierOffset;
|
|
111
109
|
static type = 'EMITNULLIFIER';
|
|
112
110
|
static opcode = Opcode.EMITNULLIFIER;
|
|
@@ -116,19 +114,19 @@ export class EmitNullifier extends Instruction {
|
|
|
116
114
|
OperandType.UINT8,
|
|
117
115
|
OperandType.UINT16
|
|
118
116
|
];
|
|
119
|
-
constructor(
|
|
120
|
-
super(), this.
|
|
117
|
+
constructor(addressingMode, nullifierOffset){
|
|
118
|
+
super(), this.addressingMode = addressingMode, this.nullifierOffset = nullifierOffset;
|
|
121
119
|
}
|
|
122
120
|
async execute(context) {
|
|
123
121
|
if (context.environment.isStaticCall) {
|
|
124
122
|
throw new StaticCallAlterationError();
|
|
125
123
|
}
|
|
126
124
|
const memory = context.machineState.memory;
|
|
127
|
-
|
|
125
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
126
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
128
127
|
const operands = [
|
|
129
128
|
this.nullifierOffset
|
|
130
129
|
];
|
|
131
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
132
130
|
const [nullifierOffset] = addressing.resolve(operands, memory);
|
|
133
131
|
memory.checkTag(TypeTag.FIELD, nullifierOffset);
|
|
134
132
|
const nullifier = memory.get(nullifierOffset).toFr();
|
|
@@ -145,7 +143,7 @@ export class EmitNullifier extends Instruction {
|
|
|
145
143
|
}
|
|
146
144
|
}
|
|
147
145
|
export class L1ToL2MessageExists extends Instruction {
|
|
148
|
-
|
|
146
|
+
addressingMode;
|
|
149
147
|
msgHashOffset;
|
|
150
148
|
msgLeafIndexOffset;
|
|
151
149
|
existsOffset;
|
|
@@ -159,30 +157,31 @@ export class L1ToL2MessageExists extends Instruction {
|
|
|
159
157
|
OperandType.UINT16,
|
|
160
158
|
OperandType.UINT16
|
|
161
159
|
];
|
|
162
|
-
constructor(
|
|
163
|
-
super(), this.
|
|
160
|
+
constructor(addressingMode, msgHashOffset, msgLeafIndexOffset, existsOffset){
|
|
161
|
+
super(), this.addressingMode = addressingMode, this.msgHashOffset = msgHashOffset, this.msgLeafIndexOffset = msgLeafIndexOffset, this.existsOffset = existsOffset;
|
|
164
162
|
}
|
|
165
163
|
async execute(context) {
|
|
166
164
|
const memory = context.machineState.memory;
|
|
167
|
-
|
|
165
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
166
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
168
167
|
const operands = [
|
|
169
168
|
this.msgHashOffset,
|
|
170
169
|
this.msgLeafIndexOffset,
|
|
171
170
|
this.existsOffset
|
|
172
171
|
];
|
|
173
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
174
172
|
const [msgHashOffset, msgLeafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
175
|
-
memory.
|
|
173
|
+
memory.checkTag(TypeTag.FIELD, msgHashOffset);
|
|
174
|
+
memory.checkTag(TypeTag.UINT64, msgLeafIndexOffset);
|
|
176
175
|
const msgHash = memory.get(msgHashOffset).toFr();
|
|
177
176
|
const msgLeafIndex = memory.get(msgLeafIndexOffset).toFr();
|
|
178
|
-
const exists = await context.persistableState.checkL1ToL2MessageExists(
|
|
177
|
+
const exists = await context.persistableState.checkL1ToL2MessageExists(msgHash, msgLeafIndex);
|
|
179
178
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
180
179
|
}
|
|
181
180
|
}
|
|
182
181
|
export class EmitUnencryptedLog extends Instruction {
|
|
183
|
-
|
|
184
|
-
logOffset;
|
|
182
|
+
addressingMode;
|
|
185
183
|
logSizeOffset;
|
|
184
|
+
logOffset;
|
|
186
185
|
// TODO(#11124): rename unencrypted -> public
|
|
187
186
|
static type = 'EMITUNENCRYPTEDLOG';
|
|
188
187
|
static opcode = Opcode.EMITUNENCRYPTEDLOG;
|
|
@@ -193,31 +192,32 @@ export class EmitUnencryptedLog extends Instruction {
|
|
|
193
192
|
OperandType.UINT16,
|
|
194
193
|
OperandType.UINT16
|
|
195
194
|
];
|
|
196
|
-
constructor(
|
|
197
|
-
super(), this.
|
|
195
|
+
constructor(addressingMode, logSizeOffset, logOffset){
|
|
196
|
+
super(), this.addressingMode = addressingMode, this.logSizeOffset = logSizeOffset, this.logOffset = logOffset;
|
|
198
197
|
}
|
|
199
198
|
async execute(context) {
|
|
200
199
|
if (context.environment.isStaticCall) {
|
|
201
200
|
throw new StaticCallAlterationError();
|
|
202
201
|
}
|
|
203
202
|
const memory = context.machineState.memory;
|
|
203
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
204
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
204
205
|
const operands = [
|
|
205
|
-
this.
|
|
206
|
-
this.
|
|
206
|
+
this.logSizeOffset,
|
|
207
|
+
this.logOffset
|
|
207
208
|
];
|
|
208
|
-
const
|
|
209
|
-
const [logOffset, logSizeOffset] = addressing.resolve(operands, memory);
|
|
209
|
+
const [logSizeOffset, logOffset] = addressing.resolve(operands, memory);
|
|
210
210
|
memory.checkTag(TypeTag.UINT32, logSizeOffset);
|
|
211
211
|
const logSize = memory.get(logSizeOffset).toNumber();
|
|
212
|
-
memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
|
|
213
212
|
const contractAddress = context.environment.address;
|
|
214
|
-
context.machineState.consumeGas(this.
|
|
213
|
+
context.machineState.consumeGas(this.dynamicGasCost(logSize));
|
|
214
|
+
memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
|
|
215
215
|
const log = memory.getSlice(logOffset, logSize).map((f)=>f.toFr());
|
|
216
216
|
context.persistableState.writePublicLog(contractAddress, log);
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
export class SendL2ToL1Message extends Instruction {
|
|
220
|
-
|
|
220
|
+
addressingMode;
|
|
221
221
|
recipientOffset;
|
|
222
222
|
contentOffset;
|
|
223
223
|
static type = 'SENDL2TOL1MSG';
|
|
@@ -229,23 +229,26 @@ export class SendL2ToL1Message extends Instruction {
|
|
|
229
229
|
OperandType.UINT16,
|
|
230
230
|
OperandType.UINT16
|
|
231
231
|
];
|
|
232
|
-
constructor(
|
|
233
|
-
super(), this.
|
|
232
|
+
constructor(addressingMode, recipientOffset, contentOffset){
|
|
233
|
+
super(), this.addressingMode = addressingMode, this.recipientOffset = recipientOffset, this.contentOffset = contentOffset;
|
|
234
234
|
}
|
|
235
235
|
async execute(context) {
|
|
236
236
|
if (context.environment.isStaticCall) {
|
|
237
237
|
throw new StaticCallAlterationError();
|
|
238
238
|
}
|
|
239
239
|
const memory = context.machineState.memory;
|
|
240
|
-
|
|
240
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
241
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
241
242
|
const operands = [
|
|
242
243
|
this.recipientOffset,
|
|
243
244
|
this.contentOffset
|
|
244
245
|
];
|
|
245
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
246
246
|
const [recipientOffset, contentOffset] = addressing.resolve(operands, memory);
|
|
247
247
|
memory.checkTags(TypeTag.FIELD, recipientOffset, contentOffset);
|
|
248
248
|
const recipient = memory.get(recipientOffset).toFr();
|
|
249
|
+
if (recipient.toBigInt() > MAX_ETH_ADDRESS_VALUE) {
|
|
250
|
+
throw new InstructionExecutionError(`SENDL2TOL1MSG: Recipient address is too large`);
|
|
251
|
+
}
|
|
249
252
|
const content = memory.get(contentOffset).toFr();
|
|
250
253
|
context.persistableState.writeL2ToL1Message(context.environment.address, recipient, content);
|
|
251
254
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { AVM_MAX_OPERANDS } from '@aztec/constants';
|
|
2
|
+
import type { Tuple } from '@aztec/foundation/serialize';
|
|
1
3
|
import { type TaggedMemoryInterface } from '../avm_memory_types.js';
|
|
2
4
|
export declare enum AddressingMode {
|
|
3
5
|
DIRECT = 0,
|
|
@@ -7,21 +9,23 @@ export declare enum AddressingMode {
|
|
|
7
9
|
}
|
|
8
10
|
/** A class to represent the addressing mode of an instruction. */
|
|
9
11
|
export declare class Addressing {
|
|
10
|
-
/** The addressing mode for each operand.
|
|
12
|
+
/** The addressing mode for each possible operand. */
|
|
11
13
|
private readonly modePerOperand;
|
|
12
14
|
constructor(
|
|
13
|
-
/** The addressing mode for each operand.
|
|
14
|
-
modePerOperand: AddressingMode
|
|
15
|
-
static
|
|
15
|
+
/** The addressing mode for each possible operand. */
|
|
16
|
+
modePerOperand: Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>);
|
|
17
|
+
static fromModes(modes: AddressingMode[]): Addressing;
|
|
18
|
+
static fromWire(wireModes: number): Addressing;
|
|
16
19
|
toWire(): number;
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
indirectOperandsCount(): number;
|
|
21
|
+
relativeOperandsCount(): number;
|
|
19
22
|
/**
|
|
20
23
|
* Resolves the offsets using the addressing mode.
|
|
21
24
|
* @param offsets The offsets to resolve.
|
|
22
25
|
* @param mem The memory to use for resolution.
|
|
23
|
-
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array.
|
|
26
|
+
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array and the resolved offsets are guaranteed to be valid addresses.
|
|
27
|
+
* @throws An error if any step failed. Should be treated as a black box.
|
|
24
28
|
*/
|
|
25
29
|
resolve(offsets: number[], mem: TaggedMemoryInterface): number[];
|
|
26
30
|
}
|
|
27
|
-
//# sourceMappingURL=
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc2luZ19tb2RlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHVibGljL2F2bS9vcGNvZGVzL2FkZHJlc3NpbmdfbW9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUl6RCxPQUFPLEVBQTZCLEtBQUsscUJBQXFCLEVBQVcsTUFBTSx3QkFBd0IsQ0FBQztBQUd4RyxvQkFBWSxjQUFjO0lBQ3hCLE1BQU0sSUFBSTtJQUNWLFFBQVEsSUFBSTtJQUNaLFFBQVEsSUFBSTtJQUNaLGlCQUFpQixJQUFJO0NBQ3RCO0FBRUQsa0VBQWtFO0FBQ2xFLHFCQUFhLFVBQVU7SUFFbkIscURBQXFEO0lBQ3JELE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYztJQUZqQztJQUNFLHFEQUFxRDtJQUNwQyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLGdCQUFnQixDQUFDLEVBQzdFO0lBRUosT0FBYyxTQUFTLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FHM0Q7SUFFRCxPQUFjLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLFVBQVUsQ0FXcEQ7SUFFTSxNQUFNLElBQUksTUFBTSxDQWF0QjtJQUVNLHFCQUFxQixJQUFJLE1BQU0sQ0FFckM7SUFFTSxxQkFBcUIsSUFBSSxNQUFNLENBRXJDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUscUJBQXFCLEdBQUcsTUFBTSxFQUFFLENBc0N0RTtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addressing_mode.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/addressing_mode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"addressing_mode.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/addressing_mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,EAA6B,KAAK,qBAAqB,EAAW,MAAM,wBAAwB,CAAC;AAGxG,oBAAY,cAAc;IACxB,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,iBAAiB,IAAI;CACtB;AAED,kEAAkE;AAClE,qBAAa,UAAU;IAEnB,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc;IAFjC;IACE,qDAAqD;IACpC,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,OAAO,gBAAgB,CAAC,EAC7E;IAEJ,OAAc,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,UAAU,CAG3D;IAED,OAAc,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAWpD;IAEM,MAAM,IAAI,MAAM,CAatB;IAEM,qBAAqB,IAAI,MAAM,CAErC;IAEM,qBAAqB,IAAI,MAAM,CAErC;IAED;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAsCtE;CACF"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { AVM_MAX_OPERANDS } from '@aztec/constants';
|
|
2
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
1
3
|
import { strict as assert } from 'assert';
|
|
2
|
-
import { TaggedMemory } from '../avm_memory_types.js';
|
|
3
|
-
import { RelativeAddressOutOfRangeError } from '../errors.js';
|
|
4
|
+
import { TaggedMemory, TypeTag } from '../avm_memory_types.js';
|
|
5
|
+
import { RelativeAddressOutOfRangeError, TagCheckError } from '../errors.js';
|
|
4
6
|
export var AddressingMode = /*#__PURE__*/ function(AddressingMode) {
|
|
5
7
|
AddressingMode[AddressingMode["DIRECT"] = 0] = "DIRECT";
|
|
6
8
|
AddressingMode[AddressingMode["INDIRECT"] = 1] = "INDIRECT";
|
|
@@ -10,17 +12,21 @@ export var AddressingMode = /*#__PURE__*/ function(AddressingMode) {
|
|
|
10
12
|
}({});
|
|
11
13
|
/** A class to represent the addressing mode of an instruction. */ export class Addressing {
|
|
12
14
|
modePerOperand;
|
|
13
|
-
constructor(/** The addressing mode for each operand.
|
|
15
|
+
constructor(/** The addressing mode for each possible operand. */ modePerOperand){
|
|
14
16
|
this.modePerOperand = modePerOperand;
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
static fromModes(modes) {
|
|
19
|
+
assert(modes.length <= AVM_MAX_OPERANDS, 'Too many operands for addressing mode');
|
|
20
|
+
return new Addressing(padArrayEnd(modes, 0, AVM_MAX_OPERANDS));
|
|
21
|
+
}
|
|
22
|
+
static fromWire(wireModes) {
|
|
23
|
+
// The modes are stored in the wire format as one or two bytes, with each two bits representing the modes for an operand.
|
|
24
|
+
// Even bits are indirect, odd bits are relative.
|
|
25
|
+
const modes = new Array(AVM_MAX_OPERANDS);
|
|
26
|
+
for(let i = 0; i < AVM_MAX_OPERANDS; i++){
|
|
27
|
+
modes[i] = (wireModes >> i * 2 & 1) * 1 | (wireModes >> i * 2 + 1 & 1) * 2;
|
|
23
28
|
}
|
|
29
|
+
// Casting the array to tuple since it should be more performant than using makeTuple
|
|
24
30
|
return new Addressing(modes);
|
|
25
31
|
}
|
|
26
32
|
toWire() {
|
|
@@ -29,44 +35,58 @@ export var AddressingMode = /*#__PURE__*/ function(AddressingMode) {
|
|
|
29
35
|
let wire = 0;
|
|
30
36
|
for(let i = 0; i < this.modePerOperand.length; i++){
|
|
31
37
|
if (this.modePerOperand[i] & 1) {
|
|
32
|
-
wire |= 1 << i;
|
|
38
|
+
wire |= 1 << i * 2;
|
|
33
39
|
}
|
|
34
40
|
if (this.modePerOperand[i] & 2) {
|
|
35
|
-
wire |= 1 <<
|
|
41
|
+
wire |= 1 << i * 2 + 1;
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
44
|
return wire;
|
|
39
45
|
}
|
|
40
|
-
|
|
41
|
-
return this.modePerOperand.filter((
|
|
46
|
+
indirectOperandsCount() {
|
|
47
|
+
return this.modePerOperand.filter((mode)=>mode & 1).length;
|
|
48
|
+
}
|
|
49
|
+
relativeOperandsCount() {
|
|
50
|
+
return this.modePerOperand.filter((mode)=>mode & 2).length;
|
|
42
51
|
}
|
|
43
52
|
/**
|
|
44
53
|
* Resolves the offsets using the addressing mode.
|
|
45
54
|
* @param offsets The offsets to resolve.
|
|
46
55
|
* @param mem The memory to use for resolution.
|
|
47
|
-
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array.
|
|
56
|
+
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array and the resolved offsets are guaranteed to be valid addresses.
|
|
57
|
+
* @throws An error if any step failed. Should be treated as a black box.
|
|
48
58
|
*/ resolve(offsets, mem) {
|
|
49
|
-
assert(offsets.length <= this.modePerOperand.length);
|
|
50
59
|
const resolved = new Array(offsets.length);
|
|
51
|
-
|
|
52
|
-
let baseAddr
|
|
60
|
+
// These will be read (once) if we have any relative operands.
|
|
61
|
+
let baseAddr;
|
|
53
62
|
for (const [i, offset] of offsets.entries()){
|
|
54
63
|
const mode = this.modePerOperand[i];
|
|
64
|
+
// The given offsets are assumed to be valid addresses.
|
|
55
65
|
resolved[i] = offset;
|
|
56
66
|
if (mode & 2) {
|
|
57
|
-
if (!
|
|
58
|
-
mem.
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
if (!baseAddr) {
|
|
68
|
+
baseAddr = mem.get(0);
|
|
69
|
+
const baseAddrTag = baseAddr.getTag();
|
|
70
|
+
if (!TaggedMemory.isValidMemoryAddressTag(baseAddrTag)) {
|
|
71
|
+
throw TagCheckError.forBaseAddress(TypeTag[baseAddrTag]);
|
|
72
|
+
}
|
|
61
73
|
}
|
|
62
|
-
resolved[i]
|
|
74
|
+
// Here we know that resolved[i] is at most 32 bits and baseAddr is at most 32 bits.
|
|
75
|
+
// Therefore, the addition is safe since the `number` type fits more than 33 bits.
|
|
76
|
+
resolved[i] += Number(baseAddr.toBigInt());
|
|
63
77
|
if (resolved[i] >= TaggedMemory.MAX_MEMORY_SIZE) {
|
|
64
|
-
throw new RelativeAddressOutOfRangeError(baseAddr, offset);
|
|
78
|
+
throw new RelativeAddressOutOfRangeError(Number(baseAddr.toBigInt()), offset);
|
|
65
79
|
}
|
|
66
80
|
}
|
|
67
81
|
if (mode & 1) {
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
// At this point we know that resolved[i] is a valid memory address.
|
|
83
|
+
const resolvedValue = mem.get(resolved[i]);
|
|
84
|
+
const resolvedTag = resolvedValue.getTag();
|
|
85
|
+
// Final check.
|
|
86
|
+
if (!TaggedMemory.isValidMemoryAddressTag(resolvedTag)) {
|
|
87
|
+
throw TagCheckError.forIndirectAddress(resolved[i], TypeTag[resolvedTag]);
|
|
88
|
+
}
|
|
89
|
+
resolved[i] = Number(resolvedValue.toBigInt());
|
|
70
90
|
}
|
|
71
91
|
}
|
|
72
92
|
return resolved;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { type Field, type MemoryValue, type TaggedMemoryInterface } from '../avm_memory_types.js';
|
|
2
|
+
import { type Field, type IntegralValue, type MemoryValue, type TaggedMemoryInterface } from '../avm_memory_types.js';
|
|
3
3
|
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
4
4
|
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
5
5
|
export declare abstract class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
|
|
@@ -34,4 +34,16 @@ export declare class FieldDiv extends ThreeOperandArithmeticInstruction {
|
|
|
34
34
|
protected compute(a: Field, b: Field): Field;
|
|
35
35
|
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number): void;
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
export declare class Shl extends ThreeOperandArithmeticInstruction {
|
|
38
|
+
static readonly type: string;
|
|
39
|
+
static readonly opcode = Opcode.SHL_8;
|
|
40
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
41
|
+
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number): void;
|
|
42
|
+
}
|
|
43
|
+
export declare class Shr extends ThreeOperandArithmeticInstruction {
|
|
44
|
+
static readonly type: string;
|
|
45
|
+
static readonly opcode = Opcode.SHR_8;
|
|
46
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
47
|
+
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number): void;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpdGhtZXRpYy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3B1YmxpYy9hdm0vb3Bjb2Rlcy9hcml0aG1ldGljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxLQUFLLEtBQUssRUFDVixLQUFLLGFBQWEsRUFDbEIsS0FBSyxXQUFXLEVBRWhCLEtBQUsscUJBQXFCLEVBRTNCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhFLDhCQUFzQixpQ0FBa0MsU0FBUSx1QkFBdUI7SUFDeEUsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWlCdkQ7SUFFRCxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ3hFLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFFbEY7Q0FDRjtBQUVELHFCQUFhLEdBQUksU0FBUSxpQ0FBaUM7SUFDeEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFTO0lBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxnQkFBZ0I7SUFFdEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEdBQUcsV0FBVyxDQUU3RDtDQUNGO0FBRUQscUJBQWEsR0FBSSxTQUFRLGlDQUFpQztJQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQVM7SUFDckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLGdCQUFnQjtJQUV0QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsR0FBRyxXQUFXLENBRTdEO0NBQ0Y7QUFFRCxxQkFBYSxHQUFJLFNBQVEsaUNBQWlDO0lBQ3hELE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFTO0lBQzVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxnQkFBZ0I7SUFFdEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEdBQUcsV0FBVyxDQUU3RDtDQUNGO0FBRUQscUJBQWEsR0FBSSxTQUFRLGlDQUFpQztJQUN4RCxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUztJQUM1QixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZ0JBQWdCO0lBRXRDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxHQUFHLFdBQVcsQ0FNN0Q7SUFFRCxVQUFtQixTQUFTLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFHM0Y7Q0FDRjtBQUVELHFCQUFhLFFBQVMsU0FBUSxpQ0FBaUM7SUFDN0QsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQVU7SUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLGlCQUFpQjtJQUV2QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBSzNDO0lBRUQsVUFBbUIsU0FBUyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBRzNGO0NBQ0Y7QUFFRCxxQkFBYSxHQUFJLFNBQVEsaUNBQWlDO0lBQ3hELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUztJQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZ0JBQWdCO0lBRXRDLFVBQW1CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsYUFBYSxDQUU1RTtJQUVELFVBQW1CLFNBQVMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUczRjtDQUNGO0FBRUQscUJBQWEsR0FBSSxTQUFRLGlDQUFpQztJQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQVM7SUFDckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLGdCQUFnQjtJQUV0QyxVQUFtQixPQUFPLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsYUFBYSxHQUFHLGFBQWEsQ0FFNUU7SUFFRCxVQUFtQixTQUFTLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFHM0Y7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/arithmetic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,WAAW,EAEhB,KAAK,qBAAqB,EAE3B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,8BAAsB,iCAAkC,SAAQ,uBAAuB;IACxE,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/arithmetic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,qBAAqB,EAE3B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,8BAAsB,iCAAkC,SAAQ,uBAAuB;IACxE,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,WAAW,CAAC;IACxE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAElF;CACF;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,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,WAAW,CAE7D;CACF;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,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,WAAW,CAE7D;CACF;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW,CAE7D;CACF;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW,CAM7D;IAED,UAAmB,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAG3F;CACF;AAED,qBAAa,QAAS,SAAQ,iCAAiC;IAC7D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,iBAAiB;IAEvC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAK3C;IAED,UAAmB,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAG3F;CACF;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,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,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAG3F;CACF;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,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,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAG3F;CACF"}
|
|
@@ -6,13 +6,13 @@ import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
|
6
6
|
export class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
|
|
7
7
|
async execute(context) {
|
|
8
8
|
const memory = context.machineState.memory;
|
|
9
|
-
|
|
9
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
10
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
10
11
|
const operands = [
|
|
11
12
|
this.aOffset,
|
|
12
13
|
this.bOffset,
|
|
13
14
|
this.dstOffset
|
|
14
15
|
];
|
|
15
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
16
16
|
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
17
17
|
this.checkTags(memory, aOffset, bOffset);
|
|
18
18
|
const a = memory.get(aOffset);
|
|
@@ -63,7 +63,9 @@ export class FieldDiv extends ThreeOperandArithmeticInstruction {
|
|
|
63
63
|
static type = 'FDIV';
|
|
64
64
|
static opcode = Opcode.FDIV_8;
|
|
65
65
|
compute(a, b) {
|
|
66
|
-
|
|
66
|
+
if (b.toBigInt() === 0n) {
|
|
67
|
+
throw new ArithmeticError('Division by zero');
|
|
68
|
+
}
|
|
67
69
|
return a.fdiv(b);
|
|
68
70
|
}
|
|
69
71
|
checkTags(memory, aOffset, bOffset) {
|
|
@@ -71,3 +73,25 @@ export class FieldDiv extends ThreeOperandArithmeticInstruction {
|
|
|
71
73
|
memory.checkTag(TypeTag.FIELD, aOffset); // Follows that bOffset has also tag of type Field
|
|
72
74
|
}
|
|
73
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
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { type IntegralValue, type TaggedMemoryInterface } from '../avm_memory_types.js';
|
|
2
|
+
import { type IntegralValue, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
|
|
3
3
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
4
|
import { Instruction } from './instruction.js';
|
|
5
5
|
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
@@ -7,44 +7,36 @@ declare abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstru
|
|
|
7
7
|
execute(context: AvmContext): Promise<void>;
|
|
8
8
|
protected abstract compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
9
9
|
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number): void;
|
|
10
|
+
protected getDynamicMultiplier(_lhsTag: TypeTag): number;
|
|
10
11
|
}
|
|
11
12
|
export declare class And extends ThreeOperandBitwiseInstruction {
|
|
12
13
|
static readonly type: string;
|
|
13
14
|
static readonly opcode = Opcode.AND_8;
|
|
14
15
|
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
16
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
15
17
|
}
|
|
16
18
|
export declare class Or extends ThreeOperandBitwiseInstruction {
|
|
17
19
|
static readonly type: string;
|
|
18
20
|
static readonly opcode = Opcode.OR_8;
|
|
19
21
|
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
22
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
20
23
|
}
|
|
21
24
|
export declare class Xor extends ThreeOperandBitwiseInstruction {
|
|
22
25
|
static readonly type: string;
|
|
23
26
|
static readonly opcode = Opcode.XOR_8;
|
|
24
27
|
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
25
|
-
|
|
26
|
-
export declare class Shl extends ThreeOperandBitwiseInstruction {
|
|
27
|
-
static readonly type: string;
|
|
28
|
-
static readonly opcode = Opcode.SHL_8;
|
|
29
|
-
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
30
|
-
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number): void;
|
|
31
|
-
}
|
|
32
|
-
export declare class Shr extends ThreeOperandBitwiseInstruction {
|
|
33
|
-
static readonly type: string;
|
|
34
|
-
static readonly opcode = Opcode.SHR_8;
|
|
35
|
-
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
36
|
-
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number): void;
|
|
28
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
37
29
|
}
|
|
38
30
|
export declare class Not extends Instruction {
|
|
39
|
-
private
|
|
31
|
+
private addressingMode;
|
|
40
32
|
private srcOffset;
|
|
41
33
|
private dstOffset;
|
|
42
34
|
static readonly type: string;
|
|
43
35
|
static readonly opcode = Opcode.NOT_8;
|
|
44
36
|
static readonly wireFormat8: OperandType[];
|
|
45
37
|
static readonly wireFormat16: OperandType[];
|
|
46
|
-
constructor(
|
|
38
|
+
constructor(addressingMode: number, srcOffset: number, dstOffset: number);
|
|
47
39
|
execute(context: AvmContext): Promise<void>;
|
|
48
40
|
}
|
|
49
41
|
export {};
|
|
50
|
-
//# sourceMappingURL=
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0d2lzZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3B1YmxpYy9hdm0vb3Bjb2Rlcy9iaXR3aXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBZ0IsS0FBSyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVoRSx1QkFBZSw4QkFBK0IsU0FBUSx1QkFBdUI7SUFDOUQsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQW9CdkQ7SUFFRCxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQzlFLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFHbEY7SUFFRCxTQUFTLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxNQUFNLENBRXZEO0NBQ0Y7QUFFRCxxQkFBYSxHQUFJLFNBQVEsOEJBQThCO0lBQ3JELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUztJQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZ0JBQWdCO0lBRXRDLFVBQW1CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsYUFBYSxDQUU1RTtJQUVELFVBQW1CLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsTUFBTSxDQUUvRDtDQUNGO0FBRUQscUJBQWEsRUFBRyxTQUFRLDhCQUE4QjtJQUNwRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQVE7SUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLGVBQWU7SUFFckMsVUFBbUIsT0FBTyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLGFBQWEsR0FBRyxhQUFhLENBRTVFO0lBRUQsVUFBbUIsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxNQUFNLENBRS9EO0NBQ0Y7QUFFRCxxQkFBYSxHQUFJLFNBQVEsOEJBQThCO0lBQ3JELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBUztJQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sZ0JBQWdCO0lBRXRDLFVBQW1CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsYUFBYSxDQUU1RTtJQUVELFVBQW1CLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsTUFBTSxDQUUvRDtDQUNGO0FBRUQscUJBQWEsR0FBSSxTQUFRLFdBQVc7SUFRaEMsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFNBQVM7SUFDakIsT0FBTyxDQUFDLFNBQVM7SUFUbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFTO0lBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxnQkFBZ0I7SUFFdEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLGdCQUFnRjtJQUMzRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksZ0JBQWtGO0lBRTlHLFlBQ1UsY0FBYyxFQUFFLE1BQU0sRUFDdEIsU0FBUyxFQUFFLE1BQU0sRUFDakIsU0FBUyxFQUFFLE1BQU0sRUFHMUI7SUFFWSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBZXZEO0NBQ0YifQ==
|
|
@@ -1 +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;
|
|
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"}
|