@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,52 +1,55 @@
|
|
|
1
1
|
import { TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
2
|
+
import { CallDataMemory, ReturnDataMemory } from '../calldata.js';
|
|
2
3
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
4
|
import { Addressing } from './addressing_mode.js';
|
|
4
5
|
import { Instruction } from './instruction.js';
|
|
5
6
|
class ExternalCall extends Instruction {
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
addressingMode;
|
|
8
|
+
l2GasOffset;
|
|
9
|
+
daGasOffset;
|
|
8
10
|
addrOffset;
|
|
9
|
-
argsOffset;
|
|
10
11
|
argsSizeOffset;
|
|
12
|
+
argsOffset;
|
|
11
13
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
12
14
|
static wireFormat = [
|
|
13
15
|
OperandType.UINT8,
|
|
14
|
-
OperandType.
|
|
16
|
+
OperandType.UINT16,
|
|
17
|
+
OperandType.UINT16,
|
|
15
18
|
OperandType.UINT16,
|
|
16
19
|
OperandType.UINT16,
|
|
17
20
|
OperandType.UINT16,
|
|
18
21
|
OperandType.UINT16
|
|
19
22
|
];
|
|
20
|
-
constructor(
|
|
21
|
-
super(), this.
|
|
23
|
+
constructor(addressingMode, l2GasOffset, daGasOffset, addrOffset, argsSizeOffset, argsOffset){
|
|
24
|
+
super(), this.addressingMode = addressingMode, this.l2GasOffset = l2GasOffset, this.daGasOffset = daGasOffset, this.addrOffset = addrOffset, this.argsSizeOffset = argsSizeOffset, this.argsOffset = argsOffset;
|
|
22
25
|
}
|
|
23
26
|
async execute(context) {
|
|
24
27
|
const memory = context.machineState.memory;
|
|
28
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
29
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
25
30
|
const operands = [
|
|
26
|
-
this.
|
|
31
|
+
this.l2GasOffset,
|
|
32
|
+
this.daGasOffset,
|
|
27
33
|
this.addrOffset,
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
34
|
+
this.argsSizeOffset,
|
|
35
|
+
this.argsOffset
|
|
30
36
|
];
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
memory.checkTags(TypeTag.
|
|
37
|
+
const [l2GasOffset, daGasOffset, addrOffset, argsSizeOffset, argsOffset] = addressing.resolve(operands, memory);
|
|
38
|
+
memory.checkTags(TypeTag.UINT32, l2GasOffset);
|
|
39
|
+
memory.checkTags(TypeTag.UINT32, daGasOffset);
|
|
34
40
|
memory.checkTag(TypeTag.FIELD, addrOffset);
|
|
35
41
|
memory.checkTag(TypeTag.UINT32, argsSizeOffset);
|
|
36
42
|
const calldataSize = memory.get(argsSizeOffset).toNumber();
|
|
37
|
-
const calldata = memory
|
|
38
|
-
memory.checkTagsRange(TypeTag.FIELD, argsOffset, calldataSize);
|
|
43
|
+
const calldata = new CallDataMemory(memory, argsOffset, calldataSize);
|
|
39
44
|
const callAddress = memory.getAs(addrOffset);
|
|
40
45
|
// If we are already in a static call, we propagate the environment.
|
|
41
46
|
const callType = context.environment.isStaticCall ? 'STATICCALL' : this.type;
|
|
42
|
-
//
|
|
43
|
-
context.machineState.consumeGas(this.gasCost(calldataSize));
|
|
44
|
-
// Then we consume the gas allocated for the nested call. The excess will be refunded later.
|
|
47
|
+
// We consume the gas allocated for the nested call. The excess will be refunded later.
|
|
45
48
|
// Gas allocation is capped by the amount of gas left in the current context.
|
|
46
49
|
// We have to do some dancing here because the gas allocation is a field,
|
|
47
50
|
// but in the machine state we track gas as a number.
|
|
48
|
-
const allocatedL2Gas = Number(BigIntMin(memory.get(
|
|
49
|
-
const allocatedDaGas = Number(BigIntMin(memory.get(
|
|
51
|
+
const allocatedL2Gas = Number(BigIntMin(memory.get(l2GasOffset).toBigInt(), BigInt(context.machineState.l2GasLeft)));
|
|
52
|
+
const allocatedDaGas = Number(BigIntMin(memory.get(daGasOffset).toBigInt(), BigInt(context.machineState.daGasLeft)));
|
|
50
53
|
const allocatedGas = {
|
|
51
54
|
l2Gas: allocatedL2Gas,
|
|
52
55
|
daGas: allocatedDaGas
|
|
@@ -58,10 +61,12 @@ class ExternalCall extends Instruction {
|
|
|
58
61
|
const nestedCallResults = await simulator.execute();
|
|
59
62
|
const success = !nestedCallResults.reverted;
|
|
60
63
|
// Save return/revert data for later.
|
|
61
|
-
const
|
|
62
|
-
context.machineState.nestedReturndata =
|
|
64
|
+
const returnData = nestedCallResults.output;
|
|
65
|
+
context.machineState.nestedReturndata = returnData;
|
|
63
66
|
// Track the success status directly
|
|
64
67
|
context.machineState.nestedCallSuccess = success;
|
|
68
|
+
// Account for all instructions executed in the nested call
|
|
69
|
+
context.machineState.instrCounter += nestedCallResults.totalInstructions;
|
|
65
70
|
// If the nested call reverted, we try to save the reason and the revert data.
|
|
66
71
|
// This will be used by the caller to try to reconstruct the call stack.
|
|
67
72
|
// This is only a heuristic and may not always work. It is intended to work
|
|
@@ -69,7 +74,7 @@ class ExternalCall extends Instruction {
|
|
|
69
74
|
// (in Noir code).
|
|
70
75
|
if (!success) {
|
|
71
76
|
context.machineState.collectedRevertInfo = {
|
|
72
|
-
revertDataRepresentative:
|
|
77
|
+
revertDataRepresentative: returnData.bestEffortReadAll(),
|
|
73
78
|
recursiveRevertReason: nestedCallResults.revertReason
|
|
74
79
|
};
|
|
75
80
|
}
|
|
@@ -98,7 +103,7 @@ export class StaticCall extends ExternalCall {
|
|
|
98
103
|
}
|
|
99
104
|
}
|
|
100
105
|
export class SuccessCopy extends Instruction {
|
|
101
|
-
|
|
106
|
+
addressingMode;
|
|
102
107
|
dstOffset;
|
|
103
108
|
static type = 'SUCCESSCOPY';
|
|
104
109
|
static opcode = Opcode.SUCCESSCOPY;
|
|
@@ -108,15 +113,16 @@ export class SuccessCopy extends Instruction {
|
|
|
108
113
|
OperandType.UINT8,
|
|
109
114
|
OperandType.UINT16
|
|
110
115
|
];
|
|
111
|
-
constructor(
|
|
112
|
-
super(), this.
|
|
116
|
+
constructor(addressingMode, dstOffset){
|
|
117
|
+
super(), this.addressingMode = addressingMode, this.dstOffset = dstOffset;
|
|
113
118
|
}
|
|
114
119
|
async execute(context) {
|
|
115
120
|
const memory = context.machineState.memory;
|
|
121
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
122
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
116
123
|
const operands = [
|
|
117
124
|
this.dstOffset
|
|
118
125
|
];
|
|
119
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
120
126
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
121
127
|
// Use the direct success tracking property
|
|
122
128
|
const success = context.machineState.nestedCallSuccess;
|
|
@@ -125,9 +131,9 @@ export class SuccessCopy extends Instruction {
|
|
|
125
131
|
}
|
|
126
132
|
}
|
|
127
133
|
export class Return extends Instruction {
|
|
128
|
-
|
|
129
|
-
returnOffset;
|
|
134
|
+
addressingMode;
|
|
130
135
|
returnSizeOffset;
|
|
136
|
+
returnOffset;
|
|
131
137
|
static type = 'RETURN';
|
|
132
138
|
static opcode = Opcode.RETURN;
|
|
133
139
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
@@ -137,21 +143,21 @@ export class Return extends Instruction {
|
|
|
137
143
|
OperandType.UINT16,
|
|
138
144
|
OperandType.UINT16
|
|
139
145
|
];
|
|
140
|
-
constructor(
|
|
141
|
-
super(), this.
|
|
146
|
+
constructor(addressingMode, returnSizeOffset, returnOffset){
|
|
147
|
+
super(), this.addressingMode = addressingMode, this.returnSizeOffset = returnSizeOffset, this.returnOffset = returnOffset;
|
|
142
148
|
}
|
|
143
149
|
async execute(context) {
|
|
144
150
|
const memory = context.machineState.memory;
|
|
151
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
152
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
145
153
|
const operands = [
|
|
146
|
-
this.
|
|
147
|
-
this.
|
|
154
|
+
this.returnSizeOffset,
|
|
155
|
+
this.returnOffset
|
|
148
156
|
];
|
|
149
|
-
const
|
|
150
|
-
const [returnOffset, returnSizeOffset] = addressing.resolve(operands, memory);
|
|
157
|
+
const [returnSizeOffset, returnOffset] = addressing.resolve(operands, memory);
|
|
151
158
|
memory.checkTag(TypeTag.UINT32, returnSizeOffset);
|
|
152
159
|
const returnSize = memory.get(returnSizeOffset).toNumber();
|
|
153
|
-
|
|
154
|
-
const output = memory.getSlice(returnOffset, returnSize).map((word)=>word.toFr());
|
|
160
|
+
const output = new ReturnDataMemory(memory, returnOffset, returnSize);
|
|
155
161
|
context.machineState.return(output);
|
|
156
162
|
}
|
|
157
163
|
handlesPC() {
|
|
@@ -159,9 +165,9 @@ export class Return extends Instruction {
|
|
|
159
165
|
}
|
|
160
166
|
}
|
|
161
167
|
export class Revert extends Instruction {
|
|
162
|
-
|
|
163
|
-
returnOffset;
|
|
168
|
+
addressingMode;
|
|
164
169
|
retSizeOffset;
|
|
170
|
+
returnOffset;
|
|
165
171
|
static type = 'REVERT';
|
|
166
172
|
static opcode = Opcode.REVERT_8;
|
|
167
173
|
static wireFormat8 = [
|
|
@@ -176,21 +182,21 @@ export class Revert extends Instruction {
|
|
|
176
182
|
OperandType.UINT16,
|
|
177
183
|
OperandType.UINT16
|
|
178
184
|
];
|
|
179
|
-
constructor(
|
|
180
|
-
super(), this.
|
|
185
|
+
constructor(addressingMode, retSizeOffset, returnOffset){
|
|
186
|
+
super(), this.addressingMode = addressingMode, this.retSizeOffset = retSizeOffset, this.returnOffset = returnOffset;
|
|
181
187
|
}
|
|
182
188
|
async execute(context) {
|
|
183
189
|
const memory = context.machineState.memory;
|
|
190
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
191
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
184
192
|
const operands = [
|
|
185
|
-
this.
|
|
186
|
-
this.
|
|
193
|
+
this.retSizeOffset,
|
|
194
|
+
this.returnOffset
|
|
187
195
|
];
|
|
188
|
-
const
|
|
189
|
-
const [returnOffset, retSizeOffset] = addressing.resolve(operands, memory);
|
|
196
|
+
const [retSizeOffset, returnOffset] = addressing.resolve(operands, memory);
|
|
190
197
|
memory.checkTag(TypeTag.UINT32, retSizeOffset);
|
|
191
198
|
const retSize = memory.get(retSizeOffset).toNumber();
|
|
192
|
-
|
|
193
|
-
const output = memory.getSlice(returnOffset, retSize).map((word)=>word.toFr());
|
|
199
|
+
const output = new ReturnDataMemory(memory, returnOffset, retSize);
|
|
194
200
|
context.machineState.revert(output);
|
|
195
201
|
}
|
|
196
202
|
// We don't want to increase the PC after reverting because it breaks messages.
|
|
@@ -2,35 +2,35 @@ import type { AvmContext } from '../avm_context.js';
|
|
|
2
2
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
3
|
import { Instruction } from './instruction.js';
|
|
4
4
|
export declare class Poseidon2 extends Instruction {
|
|
5
|
-
private
|
|
5
|
+
private addressingMode;
|
|
6
6
|
private inputStateOffset;
|
|
7
7
|
private outputStateOffset;
|
|
8
8
|
static type: string;
|
|
9
9
|
static readonly opcode: Opcode;
|
|
10
10
|
static readonly stateSize = 4;
|
|
11
11
|
static readonly wireFormat: OperandType[];
|
|
12
|
-
constructor(
|
|
12
|
+
constructor(addressingMode: number, inputStateOffset: number, outputStateOffset: number);
|
|
13
13
|
execute(context: AvmContext): Promise<void>;
|
|
14
14
|
}
|
|
15
15
|
export declare class KeccakF1600 extends Instruction {
|
|
16
|
-
private
|
|
16
|
+
private addressingMode;
|
|
17
17
|
private dstOffset;
|
|
18
18
|
private inputOffset;
|
|
19
19
|
static type: string;
|
|
20
20
|
static readonly opcode: Opcode;
|
|
21
21
|
static readonly wireFormat: OperandType[];
|
|
22
|
-
constructor(
|
|
22
|
+
constructor(addressingMode: number, dstOffset: number, inputOffset: number);
|
|
23
23
|
execute(context: AvmContext): Promise<void>;
|
|
24
24
|
}
|
|
25
25
|
export declare class Sha256Compression extends Instruction {
|
|
26
|
-
private
|
|
26
|
+
private addressingMode;
|
|
27
27
|
private outputOffset;
|
|
28
28
|
private stateOffset;
|
|
29
29
|
private inputsOffset;
|
|
30
30
|
static type: string;
|
|
31
31
|
static readonly opcode: Opcode;
|
|
32
32
|
static readonly wireFormat: OperandType[];
|
|
33
|
-
constructor(
|
|
33
|
+
constructor(addressingMode: number, outputOffset: number, stateOffset: number, inputsOffset: number);
|
|
34
34
|
execute(context: AvmContext): Promise<void>;
|
|
35
35
|
}
|
|
36
|
-
//# sourceMappingURL=
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3B1YmxpYy9hdm0vb3Bjb2Rlcy9oYXNoaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLHFCQUFhLFNBQVUsU0FBUSxXQUFXO0lBY3RDLE9BQU8sQ0FBQyxjQUFjO0lBQ3RCLE9BQU8sQ0FBQyxnQkFBZ0I7SUFDeEIsT0FBTyxDQUFDLGlCQUFpQjtJQWYzQixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBZTtJQUNsQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQW9CO0lBQ2xELE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLO0lBRzlCLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUt2QztJQUVGLFlBQ1UsY0FBYyxFQUFFLE1BQU0sRUFDdEIsZ0JBQWdCLEVBQUUsTUFBTSxFQUN4QixpQkFBaUIsRUFBRSxNQUFNLEVBR2xDO0lBRVksT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQW9CdkQ7Q0FDRjtBQUVELHFCQUFhLFdBQVksU0FBUSxXQUFXO0lBYXhDLE9BQU8sQ0FBQyxjQUFjO0lBQ3RCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxXQUFXO0lBZHJCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFpQjtJQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQXNCO0lBR3BELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUt2QztJQUVGLFlBQ1UsY0FBYyxFQUFFLE1BQU0sRUFDdEIsU0FBUyxFQUFFLE1BQU0sRUFDakIsV0FBVyxFQUFFLE1BQU0sRUFHNUI7SUFHWSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBbUJ2RDtDQUNGO0FBRUQscUJBQWEsaUJBQWtCLFNBQVEsV0FBVztJQWM5QyxPQUFPLENBQUMsY0FBYztJQUN0QixPQUFPLENBQUMsWUFBWTtJQUNwQixPQUFPLENBQUMsV0FBVztJQUNuQixPQUFPLENBQUMsWUFBWTtJQWhCdEIsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQXVCO0lBQzFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBNEI7SUFHMUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLENBTXZDO0lBRUYsWUFDVSxjQUFjLEVBQUUsTUFBTSxFQUN0QixZQUFZLEVBQUUsTUFBTSxFQUNwQixXQUFXLEVBQUUsTUFBTSxFQUNuQixZQUFZLEVBQUUsTUFBTSxFQUc3QjtJQUVZLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E4QnZEO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/hashing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/hashing.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,SAAU,SAAQ,WAAW;IActC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,iBAAiB;IAf3B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK;IAG9B,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;IAEF,YACU,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,EAGlC;IAEY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvD;CACF;AAED,qBAAa,WAAY,SAAQ,WAAW;IAaxC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IAdrB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAiB;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsB;IAGpD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;IAEF,YACU,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EAG5B;IAGY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvD;CACF;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAc9C,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,YAAY;IAhBtB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAuB;IAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA4B;IAG1D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAMvC;IAEF,YACU,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAG7B;IAEY,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BvD;CACF"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { keccakf1600
|
|
1
|
+
import { keccakf1600 } from '@aztec/foundation/crypto/keccak';
|
|
2
|
+
import { poseidon2Permutation } from '@aztec/foundation/crypto/poseidon';
|
|
3
|
+
import { sha256Compression } from '@aztec/foundation/crypto/sha256';
|
|
2
4
|
import { Field, TypeTag, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
3
5
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
6
|
import { Addressing } from './addressing_mode.js';
|
|
5
7
|
import { Instruction } from './instruction.js';
|
|
6
8
|
export class Poseidon2 extends Instruction {
|
|
7
|
-
|
|
9
|
+
addressingMode;
|
|
8
10
|
inputStateOffset;
|
|
9
11
|
outputStateOffset;
|
|
10
12
|
static type = 'POSEIDON2';
|
|
@@ -17,17 +19,17 @@ export class Poseidon2 extends Instruction {
|
|
|
17
19
|
OperandType.UINT16,
|
|
18
20
|
OperandType.UINT16
|
|
19
21
|
];
|
|
20
|
-
constructor(
|
|
21
|
-
super(), this.
|
|
22
|
+
constructor(addressingMode, inputStateOffset, outputStateOffset){
|
|
23
|
+
super(), this.addressingMode = addressingMode, this.inputStateOffset = inputStateOffset, this.outputStateOffset = outputStateOffset;
|
|
22
24
|
}
|
|
23
25
|
async execute(context) {
|
|
24
26
|
const memory = context.machineState.memory;
|
|
25
|
-
|
|
27
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
28
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
26
29
|
const operands = [
|
|
27
30
|
this.inputStateOffset,
|
|
28
31
|
this.outputStateOffset
|
|
29
32
|
];
|
|
30
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
31
33
|
const [inputOffset, outputOffset] = addressing.resolve(operands, memory);
|
|
32
34
|
const inputState = memory.getSlice(inputOffset, Poseidon2.stateSize);
|
|
33
35
|
memory.checkTagsRange(TypeTag.FIELD, inputOffset, Poseidon2.stateSize);
|
|
@@ -36,7 +38,7 @@ export class Poseidon2 extends Instruction {
|
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
40
|
export class KeccakF1600 extends Instruction {
|
|
39
|
-
|
|
41
|
+
addressingMode;
|
|
40
42
|
dstOffset;
|
|
41
43
|
inputOffset;
|
|
42
44
|
static type = 'KECCAKF1600';
|
|
@@ -48,20 +50,20 @@ export class KeccakF1600 extends Instruction {
|
|
|
48
50
|
OperandType.UINT16,
|
|
49
51
|
OperandType.UINT16
|
|
50
52
|
];
|
|
51
|
-
constructor(
|
|
52
|
-
super(), this.
|
|
53
|
+
constructor(addressingMode, dstOffset, inputOffset){
|
|
54
|
+
super(), this.addressingMode = addressingMode, this.dstOffset = dstOffset, this.inputOffset = inputOffset;
|
|
53
55
|
}
|
|
54
56
|
// pub fn keccakf1600(input: [u64; 25]) -> [u64; 25]
|
|
55
57
|
async execute(context) {
|
|
56
58
|
const inputSize = 25;
|
|
57
59
|
const memory = context.machineState.memory;
|
|
60
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
61
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
58
62
|
const operands = [
|
|
59
63
|
this.dstOffset,
|
|
60
64
|
this.inputOffset
|
|
61
65
|
];
|
|
62
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
63
66
|
const [dstOffset, inputOffset] = addressing.resolve(operands, memory);
|
|
64
|
-
context.machineState.consumeGas(this.gasCost());
|
|
65
67
|
const stateData = memory.getSlice(inputOffset, inputSize).map((word)=>word.toBigInt());
|
|
66
68
|
memory.checkTagsRange(TypeTag.UINT64, inputOffset, inputSize);
|
|
67
69
|
const updatedState = keccakf1600(stateData);
|
|
@@ -70,7 +72,7 @@ export class KeccakF1600 extends Instruction {
|
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
export class Sha256Compression extends Instruction {
|
|
73
|
-
|
|
75
|
+
addressingMode;
|
|
74
76
|
outputOffset;
|
|
75
77
|
stateOffset;
|
|
76
78
|
inputsOffset;
|
|
@@ -84,27 +86,30 @@ export class Sha256Compression extends Instruction {
|
|
|
84
86
|
OperandType.UINT16,
|
|
85
87
|
OperandType.UINT16
|
|
86
88
|
];
|
|
87
|
-
constructor(
|
|
88
|
-
super(), this.
|
|
89
|
+
constructor(addressingMode, outputOffset, stateOffset, inputsOffset){
|
|
90
|
+
super(), this.addressingMode = addressingMode, this.outputOffset = outputOffset, this.stateOffset = stateOffset, this.inputsOffset = inputsOffset;
|
|
89
91
|
}
|
|
90
92
|
async execute(context) {
|
|
91
93
|
const STATE_SIZE = 8;
|
|
92
94
|
const INPUTS_SIZE = 16;
|
|
93
95
|
const memory = context.machineState.memory;
|
|
96
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
97
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
94
98
|
const operands = [
|
|
95
99
|
this.outputOffset,
|
|
96
100
|
this.stateOffset,
|
|
97
101
|
this.inputsOffset
|
|
98
102
|
];
|
|
99
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
100
103
|
const [outputOffset, stateOffset, inputsOffset] = addressing.resolve(operands, memory);
|
|
101
104
|
// Note: size of output is same as size of state
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
const state = Uint32Array.from(memory.getSlice(stateOffset, STATE_SIZE).map((word)=>word.toNumber()));
|
|
105
|
+
const inputs = memory.getSlice(inputsOffset, INPUTS_SIZE).map((word)=>word.toBigInt());
|
|
106
|
+
const state = memory.getSlice(stateOffset, STATE_SIZE).map((word)=>word.toBigInt());
|
|
105
107
|
memory.checkTagsRange(TypeTag.UINT32, inputsOffset, INPUTS_SIZE);
|
|
106
108
|
memory.checkTagsRange(TypeTag.UINT32, stateOffset, STATE_SIZE);
|
|
107
|
-
|
|
109
|
+
// At this point both state and inputs are Uint32Array-compatible
|
|
110
|
+
const inputsArray = new Uint32Array(inputs.map((i)=>Number(i)));
|
|
111
|
+
const stateArray = new Uint32Array(state.map((i)=>Number(i)));
|
|
112
|
+
const output = sha256Compression(stateArray, inputsArray);
|
|
108
113
|
// Conversion required from Uint32Array to Uint32[] (can't map directly, need `...`)
|
|
109
114
|
const res = [
|
|
110
115
|
...output
|
|
@@ -13,4 +13,4 @@ export * from './environment_getters.js';
|
|
|
13
13
|
export * from './accrued_substate.js';
|
|
14
14
|
export * from './hashing.js';
|
|
15
15
|
export * from './ec_add.js';
|
|
16
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdWJsaWMvYXZtL29wY29kZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDIn0=
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
1
|
+
import type { Bufferable } from '@aztec/foundation/serialize';
|
|
3
2
|
import type { AvmContext } from '../avm_context.js';
|
|
4
3
|
import { type Gas } from '../avm_gas.js';
|
|
5
4
|
import type { BufferCursor } from '../serialization/buffer_cursor.js';
|
|
6
|
-
import type { Serializable } from '../serialization/bytecode_serialization.js';
|
|
7
5
|
import { Opcode, type OperandType } from '../serialization/instruction_serialization.js';
|
|
8
6
|
type InstructionConstructor = {
|
|
9
7
|
new (...args: any[]): Instruction;
|
|
@@ -29,18 +27,18 @@ export declare abstract class Instruction {
|
|
|
29
27
|
* @returns Thee string representation.
|
|
30
28
|
*/
|
|
31
29
|
toString(): string;
|
|
32
|
-
static
|
|
30
|
+
static fromBuffer(this: InstructionConstructor & {
|
|
33
31
|
wireFormat: OperandType[];
|
|
34
32
|
as: any;
|
|
35
33
|
}, buf: BufferCursor | Buffer): Instruction;
|
|
36
|
-
|
|
34
|
+
toBuffer(): Buffer;
|
|
37
35
|
/**
|
|
38
36
|
* Returns a new instruction instance that can be serialized with the given opcode and wire format.
|
|
39
37
|
* @param opcode The opcode of the instruction.
|
|
40
38
|
* @param wireFormat The wire format of the instruction.
|
|
41
39
|
* @returns The new instruction instance.
|
|
42
40
|
*/
|
|
43
|
-
as(opcode: Opcode, wireFormat: OperandType[]): Instruction &
|
|
41
|
+
as(opcode: Opcode, wireFormat: OperandType[]): Instruction & Bufferable;
|
|
44
42
|
/**
|
|
45
43
|
* Returns a new instruction class that can be deserialized with the given opcode and wire format.
|
|
46
44
|
* @param opcode The opcode of the instruction.
|
|
@@ -48,13 +46,19 @@ export declare abstract class Instruction {
|
|
|
48
46
|
* @returns The new instruction class.
|
|
49
47
|
*/
|
|
50
48
|
static as(this: InstructionConstructor, wireFormat: OperandType[]): InstructionConstructor & {
|
|
51
|
-
|
|
49
|
+
fromBuffer: (buf: Buffer<ArrayBufferLike> | BufferCursor) => Instruction;
|
|
52
50
|
};
|
|
53
51
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @returns
|
|
52
|
+
* Returns the base gas cost for the instruction.
|
|
53
|
+
* @returns The base gas cost.
|
|
56
54
|
*/
|
|
57
|
-
protected
|
|
55
|
+
protected baseGasCost(indirectOperandsCount: number, relativeOperandsCount: number): Gas;
|
|
56
|
+
/**
|
|
57
|
+
* Computes the dynamic gas cost for the instruction
|
|
58
|
+
* @param dynMultiplier - The multiplier for the dynamic gas cost.
|
|
59
|
+
* @returns The dynamic gas cost.
|
|
60
|
+
*/
|
|
61
|
+
protected dynamicGasCost(dynMultiplier?: number): Gas;
|
|
58
62
|
/**
|
|
59
63
|
* Returns the stringified type of the instruction.
|
|
60
64
|
* Instruction sub-classes should have a static `type` property.
|
|
@@ -67,4 +71,4 @@ export declare abstract class Instruction {
|
|
|
67
71
|
get opcode(): Opcode;
|
|
68
72
|
}
|
|
69
73
|
export {};
|
|
70
|
-
//# sourceMappingURL=
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb24uZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdWJsaWMvYXZtL29wY29kZXMvaW5zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJOUQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssR0FBRyxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssV0FBVyxFQUE0QixNQUFNLCtDQUErQyxDQUFDO0FBRW5ILEtBQUssc0JBQXNCLEdBQUc7SUFDNUIsS0FBSyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUM7Q0FDbkMsQ0FBQztBQUVGOzs7R0FHRztBQUNILDhCQUFzQixXQUFXO0lBQy9COzs7O09BSUc7SUFDSCxTQUFnQixPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUQ7O09BRUc7SUFDSSxTQUFTLElBQUksT0FBTyxDQUUxQjtJQUVEOzs7O09BSUc7SUFDSSxRQUFRLElBQUksTUFBTSxDQVN4QjtJQUdELE9BQWMsVUFBVSxDQUN0QixJQUFJLEVBQUUsc0JBQXNCLEdBQUc7UUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFBQyxFQUFFLEVBQUUsR0FBRyxDQUFBO0tBQUUsRUFDckUsR0FBRyxFQUFFLFlBQVksR0FBRyxNQUFNLEdBQ3pCLFdBQVcsQ0FFYjtJQUdNLFFBQVEsSUFBSSxNQUFNLENBS3hCO0lBRUQ7Ozs7O09BS0c7SUFDSSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FPN0U7SUFFRDs7Ozs7T0FLRztJQUNILE9BQWMsRUFBRSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFOztNQVF2RTtJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sR0FBRyxHQUFHLENBRXZGO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxjQUFjLENBQUMsYUFBYSxHQUFFLE1BQVUsR0FBRyxHQUFHLENBRXZEO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxJQUFJLElBQUksTUFBTSxDQUl4QjtJQUVEOzs7T0FHRztJQUNILElBQVcsTUFBTSxJQUFJLE1BQU0sQ0FRMUI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/instruction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/instruction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,GAAG,EAA4E,MAAM,eAAe,CAAC;AACnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAA4B,MAAM,+CAA+C,CAAC;AAEnH,KAAK,sBAAsB,GAAG;IAC5B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,8BAAsB,WAAW;IAC/B;;;;OAIG;IACH,SAAgB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;OAEG;IACI,SAAS,IAAI,OAAO,CAE1B;IAED;;;;OAIG;IACI,QAAQ,IAAI,MAAM,CASxB;IAGD,OAAc,UAAU,CACtB,IAAI,EAAE,sBAAsB,GAAG;QAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QAAC,EAAE,EAAE,GAAG,CAAA;KAAE,EACrE,GAAG,EAAE,YAAY,GAAG,MAAM,GACzB,WAAW,CAEb;IAGM,QAAQ,IAAI,MAAM,CAKxB;IAED;;;;;OAKG;IACI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,GAAG,UAAU,CAO7E;IAED;;;;;OAKG;IACH,OAAc,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE;;MAQvE;IAED;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,GAAG,CAEvF;IAED;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,aAAa,GAAE,MAAU,GAAG,GAAG,CAEvD;IAED;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAIxB;IAED;;;OAGG;IACH,IAAW,MAAM,IAAI,MAAM,CAQ1B;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { strict as assert } from 'assert';
|
|
2
|
-
import { getBaseGasCost, getDynamicGasCost, mulGas, sumGas } from '../avm_gas.js';
|
|
2
|
+
import { computeAddressingCost, getBaseGasCost, getDynamicGasCost, mulGas, sumGas } from '../avm_gas.js';
|
|
3
3
|
import { Opcode, deserialize, serializeAs } from '../serialization/instruction_serialization.js';
|
|
4
4
|
/**
|
|
5
5
|
* Parent class for all AVM instructions.
|
|
@@ -15,6 +15,8 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
15
15
|
* the instruction sub-class name all of its flags and operands.
|
|
16
16
|
* @returns Thee string representation.
|
|
17
17
|
*/ toString() {
|
|
18
|
+
// Note: we could have this be the actual wire opcode if `bytecode_serialization.ts` were to
|
|
19
|
+
// pass it into the class' static `Instruction.as(this, wireFormat)` method.
|
|
18
20
|
let instructionStr = this.constructor.name + ': ';
|
|
19
21
|
// assumes that all properties are flags or operands
|
|
20
22
|
for (const prop of Object.getOwnPropertyNames(this)){
|
|
@@ -23,15 +25,15 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
23
25
|
return instructionStr;
|
|
24
26
|
}
|
|
25
27
|
// Default deserialization which uses Class.opcode and Class.wireFormat.
|
|
26
|
-
static
|
|
27
|
-
return this.as(this.wireFormat).
|
|
28
|
+
static fromBuffer(buf) {
|
|
29
|
+
return this.as(this.wireFormat).fromBuffer(buf);
|
|
28
30
|
}
|
|
29
31
|
// Default serialization which uses Class.opcode and Class.wireFormat.
|
|
30
|
-
|
|
32
|
+
toBuffer() {
|
|
31
33
|
const klass = this.constructor;
|
|
32
34
|
assert(klass.opcode !== undefined && klass.opcode !== null);
|
|
33
35
|
assert(klass.wireFormat !== undefined && klass.wireFormat !== null);
|
|
34
|
-
return this.as(klass.opcode, klass.wireFormat).
|
|
36
|
+
return this.as(klass.opcode, klass.wireFormat).toBuffer();
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
39
|
* Returns a new instruction instance that can be serialized with the given opcode and wire format.
|
|
@@ -39,7 +41,7 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
39
41
|
* @param wireFormat The wire format of the instruction.
|
|
40
42
|
* @returns The new instruction instance.
|
|
41
43
|
*/ as(opcode, wireFormat) {
|
|
42
|
-
return Object.defineProperty(this, '
|
|
44
|
+
return Object.defineProperty(this, 'toBuffer', {
|
|
43
45
|
value: ()=>{
|
|
44
46
|
return serializeAs(wireFormat, opcode, this);
|
|
45
47
|
},
|
|
@@ -53,7 +55,7 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
53
55
|
* @returns The new instruction class.
|
|
54
56
|
*/ static as(wireFormat) {
|
|
55
57
|
return Object.assign(this, {
|
|
56
|
-
|
|
58
|
+
fromBuffer: (buf)=>{
|
|
57
59
|
const res = deserialize(buf, wireFormat);
|
|
58
60
|
const args = res.slice(1); // Remove opcode.
|
|
59
61
|
return new this(...args);
|
|
@@ -61,21 +63,24 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
61
63
|
});
|
|
62
64
|
}
|
|
63
65
|
/**
|
|
64
|
-
*
|
|
65
|
-
* @returns
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
* Returns the base gas cost for the instruction.
|
|
67
|
+
* @returns The base gas cost.
|
|
68
|
+
*/ baseGasCost(indirectOperandsCount, relativeOperandsCount) {
|
|
69
|
+
return sumGas(getBaseGasCost(this.opcode), computeAddressingCost(indirectOperandsCount, relativeOperandsCount));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Computes the dynamic gas cost for the instruction
|
|
73
|
+
* @param dynMultiplier - The multiplier for the dynamic gas cost.
|
|
74
|
+
* @returns The dynamic gas cost.
|
|
75
|
+
*/ dynamicGasCost(dynMultiplier = 0) {
|
|
76
|
+
return mulGas(getDynamicGasCost(this.opcode), dynMultiplier);
|
|
70
77
|
}
|
|
71
78
|
/**
|
|
72
79
|
* Returns the stringified type of the instruction.
|
|
73
80
|
* Instruction sub-classes should have a static `type` property.
|
|
74
81
|
*/ get type() {
|
|
75
82
|
const type = 'type' in this.constructor && this.constructor.type;
|
|
76
|
-
|
|
77
|
-
throw new Error(`Instruction class ${this.constructor.name} does not have a static 'type' property defined.`);
|
|
78
|
-
}
|
|
83
|
+
assert(!!type, `Instruction class ${this.constructor.name} does not have a static 'type' property defined.`);
|
|
79
84
|
return type;
|
|
80
85
|
}
|
|
81
86
|
/**
|
|
@@ -83,9 +88,8 @@ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_s
|
|
|
83
88
|
* Instruction sub-classes should have a static `opcode` property.
|
|
84
89
|
*/ get opcode() {
|
|
85
90
|
const opcode = 'opcode' in this.constructor ? this.constructor.opcode : undefined;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
91
|
+
assert(opcode !== undefined, `Instruction class ${this.constructor.name} does not have a static 'opcode' property defined.`);
|
|
92
|
+
assert(Opcode[opcode] !== undefined, `Invalid opcode ${opcode} for instruction class ${this.constructor.name}.`);
|
|
89
93
|
return opcode;
|
|
90
94
|
}
|
|
91
95
|
}
|
|
@@ -5,15 +5,15 @@ export declare const ThreeOperandWireFormat8: OperandType[];
|
|
|
5
5
|
export declare const ThreeOperandWireFormat16: OperandType[];
|
|
6
6
|
/**
|
|
7
7
|
* Covers (de)serialization for an instruction with:
|
|
8
|
-
*
|
|
8
|
+
* addressing mode, inTag, and three operands.
|
|
9
9
|
*/
|
|
10
10
|
export declare abstract class ThreeOperandInstruction extends Instruction {
|
|
11
|
-
protected
|
|
11
|
+
protected addressingMode: number;
|
|
12
12
|
protected aOffset: number;
|
|
13
13
|
protected bOffset: number;
|
|
14
14
|
protected dstOffset: number;
|
|
15
15
|
static readonly wireFormat8: OperandType[];
|
|
16
16
|
static readonly wireFormat16: OperandType[];
|
|
17
|
-
constructor(
|
|
17
|
+
constructor(addressingMode: number, aOffset: number, bOffset: number, dstOffset: number);
|
|
18
18
|
}
|
|
19
|
-
//# sourceMappingURL=
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25faW1wbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3B1YmxpYy9hdm0vb3Bjb2Rlcy9pbnN0cnVjdGlvbl9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MscUZBQXFGO0FBQ3JGLGVBQU8sTUFBTSx1QkFBdUIsZUFNbkMsQ0FBQztBQUNGLGVBQU8sTUFBTSx3QkFBd0IsZUFNcEMsQ0FBQztBQUVGOzs7R0FHRztBQUNILDhCQUFzQix1QkFBd0IsU0FBUSxXQUFXO0lBSzdELFNBQVMsQ0FBQyxjQUFjLEVBQUUsTUFBTTtJQUNoQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU07SUFDekIsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNO0lBQ3pCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTTtJQVA3QixNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBMkI7SUFDckUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQTRCO0lBRXZFLFlBQ1ksY0FBYyxFQUFFLE1BQU0sRUFDdEIsT0FBTyxFQUFFLE1BQU0sRUFDZixPQUFPLEVBQUUsTUFBTSxFQUNmLFNBQVMsRUFBRSxNQUFNLEVBRzVCO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction_impl.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/instruction_impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qFAAqF;AACrF,eAAO,MAAM,uBAAuB,eAMnC,CAAC;AACF,eAAO,MAAM,wBAAwB,eAMpC,CAAC;AAEF;;;GAGG;AACH,8BAAsB,uBAAwB,SAAQ,WAAW;IAK7D,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"instruction_impl.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/instruction_impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qFAAqF;AACrF,eAAO,MAAM,uBAAuB,eAMnC,CAAC;AACF,eAAO,MAAM,wBAAwB,eAMpC,CAAC;AAEF;;;GAGG;AACH,8BAAsB,uBAAwB,SAAQ,WAAW;IAK7D,SAAS,CAAC,cAAc,EAAE,MAAM;IAChC,SAAS,CAAC,OAAO,EAAE,MAAM;IACzB,SAAS,CAAC,OAAO,EAAE,MAAM;IACzB,SAAS,CAAC,SAAS,EAAE,MAAM;IAP7B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,CAA2B;IACrE,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAA4B;IAEvE,YACY,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAG5B;CACF"}
|
|
@@ -16,15 +16,15 @@ export const ThreeOperandWireFormat16 = [
|
|
|
16
16
|
];
|
|
17
17
|
/**
|
|
18
18
|
* Covers (de)serialization for an instruction with:
|
|
19
|
-
*
|
|
19
|
+
* addressing mode, inTag, and three operands.
|
|
20
20
|
*/ export class ThreeOperandInstruction extends Instruction {
|
|
21
|
-
|
|
21
|
+
addressingMode;
|
|
22
22
|
aOffset;
|
|
23
23
|
bOffset;
|
|
24
24
|
dstOffset;
|
|
25
25
|
static wireFormat8 = ThreeOperandWireFormat8;
|
|
26
26
|
static wireFormat16 = ThreeOperandWireFormat16;
|
|
27
|
-
constructor(
|
|
28
|
-
super(), this.
|
|
27
|
+
constructor(addressingMode, aOffset, bOffset, dstOffset){
|
|
28
|
+
super(), this.addressingMode = addressingMode, this.aOffset = aOffset, this.bOffset = bOffset, this.dstOffset = dstOffset;
|
|
29
29
|
}
|
|
30
30
|
}
|