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