@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.0b941701
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 +12 -6
- 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 +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 +39 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
- 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 +210 -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 +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 +16 -16
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +52 -45
- 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 +29 -24
- 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 +123 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1693 -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 +52 -102
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +220 -193
- 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 +26 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +573 -136
- package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +13 -46
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -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 +22 -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 +13 -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 +24 -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 +72 -92
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +37 -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 +217 -206
- 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 +22 -67
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +72 -122
- 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 +164 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +395 -0
- package/dest/public/test_executor_metrics.d.ts +55 -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 +17 -32
- 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} +47 -24
- 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 +261 -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 +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 +74 -33
- 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 +47 -24
- 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 +1754 -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 +279 -259
- 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 +243 -178
- package/src/public/public_processor/public_processor_metrics.ts +13 -47
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +121 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +208 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +237 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
- package/src/public/public_tx_simulator/factories.ts +41 -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 +168 -195
- package/src/public/public_tx_simulator/public_tx_simulator.ts +310 -261
- 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 +95 -321
- 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 +546 -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_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,18 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS } from '@aztec/constants';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
5
|
+
import { getCanonicalAuthRegistry } from '@aztec/protocol-contracts/auth-registry';
|
|
5
6
|
import { computeFeePayerBalanceStorageSlot, getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
7
|
+
import { getCanonicalInstanceRegistry } from '@aztec/protocol-contracts/instance-registry';
|
|
6
8
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
7
9
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
8
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
|
-
import type {
|
|
11
|
+
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
10
12
|
import { computePublicDataTreeLeafSlot, siloNullifier } from '@aztec/stdlib/hash';
|
|
11
13
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
12
14
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
13
15
|
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
+
import type { SimpleContractDataSource } from '../../fixtures/simple_contract_data_source.js';
|
|
17
|
+
import { createContractClassAndInstance } from './utils.js';
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* An abstract test class that enables tests of real apps in the AVM without requiring e2e tests.
|
|
@@ -44,7 +46,7 @@ export abstract class BaseAvmSimulationTester {
|
|
|
44
46
|
const leafSlot = await computePublicDataTreeLeafSlot(address, slot);
|
|
45
47
|
// get existing preimage
|
|
46
48
|
const publicDataWrite = new PublicDataWrite(leafSlot, value);
|
|
47
|
-
await this.merkleTrees.
|
|
49
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
/**
|
|
@@ -57,6 +59,7 @@ export abstract class BaseAvmSimulationTester {
|
|
|
57
59
|
contractArtifact: ContractArtifact,
|
|
58
60
|
skipNullifierInsertion = false,
|
|
59
61
|
seed = 0,
|
|
62
|
+
contractClassSeed = seed,
|
|
60
63
|
originalContractClassId?: Fr, // if previously upgraded
|
|
61
64
|
): Promise<ContractInstanceWithAddress> {
|
|
62
65
|
const { contractClass, contractInstance } = await createContractClassAndInstance(
|
|
@@ -64,6 +67,7 @@ export abstract class BaseAvmSimulationTester {
|
|
|
64
67
|
deployer,
|
|
65
68
|
contractArtifact,
|
|
66
69
|
seed,
|
|
70
|
+
contractClassSeed,
|
|
67
71
|
originalContractClassId,
|
|
68
72
|
);
|
|
69
73
|
|
|
@@ -80,16 +84,40 @@ export abstract class BaseAvmSimulationTester {
|
|
|
80
84
|
const feeJuiceContractClassPublic = {
|
|
81
85
|
...feeJuice.contractClass,
|
|
82
86
|
privateFunctions: [],
|
|
83
|
-
|
|
87
|
+
utilityFunctions: [],
|
|
84
88
|
};
|
|
85
89
|
await this.contractDataSource.addNewContract(feeJuice.artifact, feeJuiceContractClassPublic, feeJuice.instance);
|
|
86
90
|
return feeJuice.instance;
|
|
87
91
|
}
|
|
88
92
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
async registerAuthContract(): Promise<ContractInstanceWithAddress> {
|
|
94
|
+
const authRegistry = await getCanonicalAuthRegistry();
|
|
95
|
+
const authRegistryContractClassPublic = {
|
|
96
|
+
...authRegistry.contractClass,
|
|
97
|
+
privateFunctions: [],
|
|
98
|
+
utilityFunctions: [],
|
|
99
|
+
};
|
|
100
|
+
await this.contractDataSource.addNewContract(
|
|
101
|
+
authRegistry.artifact,
|
|
102
|
+
authRegistryContractClassPublic,
|
|
103
|
+
authRegistry.instance,
|
|
104
|
+
);
|
|
105
|
+
return authRegistry.instance;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async registerInstanceRegistryContract(): Promise<ContractInstanceWithAddress> {
|
|
109
|
+
const instanceRegistry = await getCanonicalInstanceRegistry();
|
|
110
|
+
const instanceRegistryContractClassPublic = {
|
|
111
|
+
...instanceRegistry.contractClass,
|
|
112
|
+
privateFunctions: [],
|
|
113
|
+
utilityFunctions: [],
|
|
114
|
+
};
|
|
115
|
+
await this.contractDataSource.addNewContract(
|
|
116
|
+
instanceRegistry.artifact,
|
|
117
|
+
instanceRegistryContractClassPublic,
|
|
118
|
+
instanceRegistry.instance,
|
|
119
|
+
);
|
|
120
|
+
return instanceRegistry.instance;
|
|
93
121
|
}
|
|
94
122
|
|
|
95
123
|
async addContractInstance(contractInstance: ContractInstanceWithAddress, skipNullifierInsertion = false) {
|
|
@@ -101,9 +129,14 @@ export abstract class BaseAvmSimulationTester {
|
|
|
101
129
|
|
|
102
130
|
private async insertContractAddressNullifier(contractAddress: AztecAddress) {
|
|
103
131
|
const contractAddressNullifier = await siloNullifier(
|
|
104
|
-
AztecAddress.fromNumber(
|
|
132
|
+
AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
|
|
105
133
|
contractAddress.toField(),
|
|
106
134
|
);
|
|
107
|
-
await this.merkleTrees.
|
|
135
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [contractAddressNullifier.toBuffer()]);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async insertNullifier(contractThatEmitted: AztecAddress, nullifier: Fr) {
|
|
139
|
+
const siloedNullifier = await siloNullifier(contractThatEmitted, nullifier);
|
|
140
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()]);
|
|
108
141
|
}
|
|
109
142
|
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { AVM_MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
|
|
2
|
+
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
6
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
8
|
+
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
9
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
10
|
+
|
|
11
|
+
import { mock } from 'jest-mock-extended';
|
|
12
|
+
|
|
13
|
+
import type { PublicContractsDB, PublicTreesDB } from '../../public_db_sources.js';
|
|
14
|
+
import type { PublicSideEffectTraceInterface } from '../../side_effect_trace_interface.js';
|
|
15
|
+
import { NullifierManager } from '../../state_manager/nullifiers.js';
|
|
16
|
+
import { PublicStorage } from '../../state_manager/public_storage.js';
|
|
17
|
+
import { PublicPersistableStateManager } from '../../state_manager/state_manager.js';
|
|
18
|
+
import { AvmContext } from '../avm_context.js';
|
|
19
|
+
import { AvmExecutionEnvironment } from '../avm_execution_environment.js';
|
|
20
|
+
import { AvmMachineState } from '../avm_machine_state.js';
|
|
21
|
+
import { AvmSimulator } from '../avm_simulator.js';
|
|
22
|
+
import { CallDataArray } from '../calldata.js';
|
|
23
|
+
import { DEFAULT_TIMESTAMP } from './utils.js';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Create a new AVM context with default values.
|
|
27
|
+
*/
|
|
28
|
+
export function initContext(overrides?: {
|
|
29
|
+
persistableState?: PublicPersistableStateManager;
|
|
30
|
+
env?: AvmExecutionEnvironment;
|
|
31
|
+
machineState?: AvmMachineState;
|
|
32
|
+
}): AvmContext {
|
|
33
|
+
const ctx = new AvmContext(
|
|
34
|
+
overrides?.persistableState || initPersistableStateManager(),
|
|
35
|
+
overrides?.env || initExecutionEnvironment(),
|
|
36
|
+
overrides?.machineState || initMachineState(),
|
|
37
|
+
);
|
|
38
|
+
ctx.provideSimulator = AvmSimulator.build;
|
|
39
|
+
return ctx;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Creates an empty state manager with mocked host storage. */
|
|
43
|
+
export function initPersistableStateManager(overrides?: {
|
|
44
|
+
treesDB?: PublicTreesDB;
|
|
45
|
+
contractsDB?: PublicContractsDB;
|
|
46
|
+
trace?: PublicSideEffectTraceInterface;
|
|
47
|
+
publicStorage?: PublicStorage;
|
|
48
|
+
nullifiers?: NullifierManager;
|
|
49
|
+
firstNullifier?: Fr;
|
|
50
|
+
timestamp?: UInt64;
|
|
51
|
+
}): PublicPersistableStateManager {
|
|
52
|
+
const treesDB = overrides?.treesDB || mock<PublicTreesDB>();
|
|
53
|
+
return new PublicPersistableStateManager(
|
|
54
|
+
treesDB,
|
|
55
|
+
overrides?.contractsDB || mock<PublicContractsDB>(),
|
|
56
|
+
overrides?.trace || mock<PublicSideEffectTraceInterface>(),
|
|
57
|
+
overrides?.firstNullifier || new Fr(27),
|
|
58
|
+
overrides?.timestamp || DEFAULT_TIMESTAMP,
|
|
59
|
+
/*doMerkleOperations=*/ false,
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
|
|
65
|
+
*/
|
|
66
|
+
export function initExecutionEnvironment(overrides?: Partial<AvmExecutionEnvironment>): AvmExecutionEnvironment {
|
|
67
|
+
return new AvmExecutionEnvironment(
|
|
68
|
+
overrides?.address ?? AztecAddress.zero(),
|
|
69
|
+
overrides?.sender ?? AztecAddress.zero(),
|
|
70
|
+
overrides?.contractCallDepth ?? Fr.zero(),
|
|
71
|
+
overrides?.transactionFee ?? Fr.zero(),
|
|
72
|
+
overrides?.globals ?? GlobalVariables.empty(),
|
|
73
|
+
overrides?.isStaticCall ?? false,
|
|
74
|
+
overrides?.calldata ?? new CallDataArray([]),
|
|
75
|
+
overrides?.config ?? PublicSimulatorConfig.empty(),
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
|
|
81
|
+
*/
|
|
82
|
+
export function initGlobalVariables(overrides?: Partial<GlobalVariables>): GlobalVariables {
|
|
83
|
+
return new GlobalVariables(
|
|
84
|
+
overrides?.chainId ?? Fr.zero(),
|
|
85
|
+
overrides?.version ?? Fr.zero(),
|
|
86
|
+
overrides?.blockNumber ?? BlockNumber.ZERO,
|
|
87
|
+
overrides?.slotNumber ?? SlotNumber.ZERO,
|
|
88
|
+
overrides?.timestamp ?? 0n,
|
|
89
|
+
overrides?.coinbase ?? EthAddress.ZERO,
|
|
90
|
+
overrides?.feeRecipient ?? AztecAddress.zero(),
|
|
91
|
+
overrides?.gasFees ?? GasFees.empty(),
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Create an empty instance of the Machine State where all values are set to a large enough amount, unless overridden in the overrides object
|
|
97
|
+
*/
|
|
98
|
+
export function initMachineState(overrides?: Partial<AvmMachineState>): AvmMachineState {
|
|
99
|
+
return AvmMachineState.fromState({
|
|
100
|
+
l2GasLeft: overrides?.l2GasLeft ?? AVM_MAX_PROCESSABLE_L2_GAS,
|
|
101
|
+
daGasLeft: overrides?.daGasLeft ?? 1e8,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS } from '@aztec/constants';
|
|
2
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import {
|
|
5
|
+
type ContractArtifact,
|
|
6
|
+
type FunctionAbi,
|
|
7
|
+
type FunctionArtifact,
|
|
8
|
+
FunctionSelector,
|
|
9
|
+
getAllFunctionAbis,
|
|
10
|
+
} from '@aztec/stdlib/abi';
|
|
11
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
|
+
import {
|
|
13
|
+
type ContractClassPublic,
|
|
14
|
+
type ContractInstanceWithAddress,
|
|
15
|
+
computeInitializationHash,
|
|
16
|
+
} from '@aztec/stdlib/contract';
|
|
17
|
+
import { isNoirCallStackUnresolved } from '@aztec/stdlib/errors';
|
|
18
|
+
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
19
|
+
import { deriveKeys } from '@aztec/stdlib/keys';
|
|
20
|
+
import { makeContractClassPublic, makeContractInstanceFromClassId } from '@aztec/stdlib/testing';
|
|
21
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
22
|
+
|
|
23
|
+
import { strict as assert } from 'assert';
|
|
24
|
+
import merge from 'lodash.merge';
|
|
25
|
+
|
|
26
|
+
import { resolveAssertionMessageFromRevertData, traverseCauseChain } from '../../../common/index.js';
|
|
27
|
+
import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
28
|
+
import type { AvmRevertReason } from '../errors.js';
|
|
29
|
+
|
|
30
|
+
export const PUBLIC_DISPATCH_FN_NAME = 'public_dispatch';
|
|
31
|
+
export const DEFAULT_TIMESTAMP: UInt64 = 99833n;
|
|
32
|
+
export const DEFAULT_BLOCK_NUMBER = BlockNumber(42);
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Create a new object with all the same properties as the original, except for the ones in the overrides object.
|
|
36
|
+
*/
|
|
37
|
+
export function allSameExcept(original: any, overrides: any): any {
|
|
38
|
+
return merge({}, original, overrides);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function randomMemoryBytes(length: number): Uint8[] {
|
|
42
|
+
return [...Array(length)].map(_ => new Uint8(Math.floor(Math.random() * 255)));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function randomMemoryUint32s(length: number): Uint32[] {
|
|
46
|
+
return [...Array(length)].map(_ => new Uint32(Math.floor(Math.random() * 255)));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function randomMemoryUint64s(length: number): Uint64[] {
|
|
50
|
+
return [...Array(length)].map(_ => new Uint64(Math.floor(Math.random() * 255)));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function randomMemoryFields(length: number): Field[] {
|
|
54
|
+
return [...Array(length)].map(_ => new Field(Fr.random()));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function getFunctionSelector(
|
|
58
|
+
functionName: string,
|
|
59
|
+
contractArtifact: ContractArtifact,
|
|
60
|
+
): Promise<FunctionSelector> {
|
|
61
|
+
const fnArtifact = getAllFunctionAbis(contractArtifact).find(f => f.name === functionName)!;
|
|
62
|
+
assert(!!fnArtifact, `Function ${functionName} not found in ${contractArtifact.name}`);
|
|
63
|
+
const params = fnArtifact.parameters;
|
|
64
|
+
return FunctionSelector.fromNameAndParameters(fnArtifact.name, params);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function getContractFunctionArtifact(
|
|
68
|
+
functionName: string,
|
|
69
|
+
contractArtifact: ContractArtifact,
|
|
70
|
+
): FunctionArtifact | undefined {
|
|
71
|
+
return contractArtifact.functions.find(f => f.name === functionName);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function getContractFunctionAbi(
|
|
75
|
+
functionName: string,
|
|
76
|
+
contractArtifact: ContractArtifact,
|
|
77
|
+
): FunctionAbi | undefined {
|
|
78
|
+
return (
|
|
79
|
+
contractArtifact.functions.find(f => f.name === functionName) ??
|
|
80
|
+
contractArtifact.nonDispatchPublicFunctions.find(f => f.name === functionName)
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function resolveContractAssertionMessage(
|
|
85
|
+
functionName: string,
|
|
86
|
+
revertReason: AvmRevertReason,
|
|
87
|
+
output: Fr[],
|
|
88
|
+
contractArtifact: ContractArtifact,
|
|
89
|
+
): string | undefined {
|
|
90
|
+
traverseCauseChain(revertReason, cause => {
|
|
91
|
+
revertReason = cause as AvmRevertReason;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const functionArtifact = getAllFunctionAbis(contractArtifact).find(f => f.name === functionName);
|
|
95
|
+
if (!functionArtifact || !revertReason.noirCallStack || !isNoirCallStackUnresolved(revertReason.noirCallStack)) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return resolveAssertionMessageFromRevertData(output, functionArtifact);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Create a contract class and instance given constructor args, artifact, etc.
|
|
104
|
+
* NOTE: This is useful for testing real-ish contract class registration and instance deployment TXs (via logs)
|
|
105
|
+
* @param constructorArgs - The constructor arguments for the contract.
|
|
106
|
+
* @param deployer - The deployer of the contract.
|
|
107
|
+
* @param contractArtifact - The contract artifact for the contract.
|
|
108
|
+
* @param seed - The seed for the contract.
|
|
109
|
+
* @param originalContractClassId - The original contract class ID (if upgraded)
|
|
110
|
+
* @returns The contract class, instance, and contract address nullifier.
|
|
111
|
+
*/
|
|
112
|
+
export async function createContractClassAndInstance(
|
|
113
|
+
constructorArgs: any[],
|
|
114
|
+
deployer: AztecAddress,
|
|
115
|
+
contractArtifact: ContractArtifact,
|
|
116
|
+
seed = 0,
|
|
117
|
+
contractClassSeed = seed,
|
|
118
|
+
originalContractClassId?: Fr, // if previously upgraded
|
|
119
|
+
): Promise<{
|
|
120
|
+
contractClass: ContractClassPublic;
|
|
121
|
+
contractInstance: ContractInstanceWithAddress;
|
|
122
|
+
contractAddressNullifier: Fr;
|
|
123
|
+
}> {
|
|
124
|
+
const bytecode = (getContractFunctionArtifact(PUBLIC_DISPATCH_FN_NAME, contractArtifact) as FunctionArtifact)!
|
|
125
|
+
.bytecode;
|
|
126
|
+
const contractClass = await makeContractClassPublic(contractClassSeed, bytecode);
|
|
127
|
+
|
|
128
|
+
const constructorAbi = getContractFunctionAbi('constructor', contractArtifact);
|
|
129
|
+
const { publicKeys } = await deriveKeys(new Fr(seed));
|
|
130
|
+
const initializationHash = await computeInitializationHash(constructorAbi, constructorArgs);
|
|
131
|
+
const contractInstance =
|
|
132
|
+
originalContractClassId === undefined
|
|
133
|
+
? await makeContractInstanceFromClassId(contractClass.id, seed, {
|
|
134
|
+
deployer,
|
|
135
|
+
initializationHash,
|
|
136
|
+
publicKeys,
|
|
137
|
+
})
|
|
138
|
+
: await makeContractInstanceFromClassId(originalContractClassId, seed, {
|
|
139
|
+
deployer,
|
|
140
|
+
initializationHash,
|
|
141
|
+
currentClassId: contractClass.id,
|
|
142
|
+
publicKeys,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
const contractAddressNullifier = await siloNullifier(
|
|
146
|
+
AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
|
|
147
|
+
contractInstance.address.toField(),
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
return { contractClass, contractInstance, contractAddressNullifier };
|
|
151
|
+
}
|
package/src/public/avm/index.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { MAX_ETH_ADDRESS_VALUE } from '@aztec/constants';
|
|
2
|
+
|
|
3
|
+
import { NullifierCollisionError } from '../../side_effect_errors.js';
|
|
1
4
|
import type { AvmContext } from '../avm_context.js';
|
|
2
5
|
import { TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
3
6
|
import { InstructionExecutionError, StaticCallAlterationError } from '../errors.js';
|
|
4
|
-
import { NullifierCollisionError } from '../journal/nullifiers.js';
|
|
5
7
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
6
8
|
import { Addressing } from './addressing_mode.js';
|
|
7
9
|
import { Instruction } from './instruction.js';
|
|
@@ -19,7 +21,7 @@ export class NoteHashExists extends Instruction {
|
|
|
19
21
|
];
|
|
20
22
|
|
|
21
23
|
constructor(
|
|
22
|
-
private
|
|
24
|
+
private addressingMode: number,
|
|
23
25
|
private noteHashOffset: number,
|
|
24
26
|
private leafIndexOffset: number,
|
|
25
27
|
private existsOffset: number,
|
|
@@ -29,15 +31,19 @@ export class NoteHashExists extends Instruction {
|
|
|
29
31
|
|
|
30
32
|
public async execute(context: AvmContext): Promise<void> {
|
|
31
33
|
const memory = context.machineState.memory;
|
|
32
|
-
|
|
34
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
35
|
+
|
|
36
|
+
context.machineState.consumeGas(
|
|
37
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
38
|
+
);
|
|
33
39
|
const operands = [this.noteHashOffset, this.leafIndexOffset, this.existsOffset];
|
|
34
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
35
40
|
const [noteHashOffset, leafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
36
|
-
memory.
|
|
41
|
+
memory.checkTag(TypeTag.FIELD, noteHashOffset);
|
|
42
|
+
memory.checkTag(TypeTag.UINT64, leafIndexOffset);
|
|
37
43
|
|
|
38
44
|
// Note that this instruction accepts any type in memory, and converts to Field.
|
|
39
45
|
const noteHash = memory.get(noteHashOffset).toFr();
|
|
40
|
-
const leafIndex = memory.get(leafIndexOffset).
|
|
46
|
+
const leafIndex = memory.get(leafIndexOffset).toBigInt();
|
|
41
47
|
|
|
42
48
|
const exists = await context.persistableState.checkNoteHashExists(context.environment.address, noteHash, leafIndex);
|
|
43
49
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
@@ -50,16 +56,22 @@ export class EmitNoteHash extends Instruction {
|
|
|
50
56
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
51
57
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
52
58
|
|
|
53
|
-
constructor(
|
|
59
|
+
constructor(
|
|
60
|
+
private addressingMode: number,
|
|
61
|
+
private noteHashOffset: number,
|
|
62
|
+
) {
|
|
54
63
|
super();
|
|
55
64
|
}
|
|
56
65
|
|
|
57
66
|
public async execute(context: AvmContext): Promise<void> {
|
|
58
67
|
const memory = context.machineState.memory;
|
|
59
|
-
|
|
68
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
69
|
+
|
|
70
|
+
context.machineState.consumeGas(
|
|
71
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
72
|
+
);
|
|
60
73
|
|
|
61
74
|
const operands = [this.noteHashOffset];
|
|
62
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
63
75
|
const [noteHashOffset] = addressing.resolve(operands, memory);
|
|
64
76
|
memory.checkTag(TypeTag.FIELD, noteHashOffset);
|
|
65
77
|
|
|
@@ -85,7 +97,7 @@ export class NullifierExists extends Instruction {
|
|
|
85
97
|
];
|
|
86
98
|
|
|
87
99
|
constructor(
|
|
88
|
-
private
|
|
100
|
+
private addressingMode: number,
|
|
89
101
|
private nullifierOffset: number,
|
|
90
102
|
private addressOffset: number,
|
|
91
103
|
private existsOffset: number,
|
|
@@ -95,10 +107,13 @@ export class NullifierExists extends Instruction {
|
|
|
95
107
|
|
|
96
108
|
public async execute(context: AvmContext): Promise<void> {
|
|
97
109
|
const memory = context.machineState.memory;
|
|
98
|
-
|
|
110
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
111
|
+
|
|
112
|
+
context.machineState.consumeGas(
|
|
113
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
114
|
+
);
|
|
99
115
|
|
|
100
116
|
const operands = [this.nullifierOffset, this.addressOffset, this.existsOffset];
|
|
101
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
102
117
|
const [nullifierOffset, addressOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
103
118
|
memory.checkTags(TypeTag.FIELD, nullifierOffset, addressOffset);
|
|
104
119
|
|
|
@@ -116,7 +131,10 @@ export class EmitNullifier extends Instruction {
|
|
|
116
131
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
117
132
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
118
133
|
|
|
119
|
-
constructor(
|
|
134
|
+
constructor(
|
|
135
|
+
private addressingMode: number,
|
|
136
|
+
private nullifierOffset: number,
|
|
137
|
+
) {
|
|
120
138
|
super();
|
|
121
139
|
}
|
|
122
140
|
|
|
@@ -126,10 +144,13 @@ export class EmitNullifier extends Instruction {
|
|
|
126
144
|
}
|
|
127
145
|
|
|
128
146
|
const memory = context.machineState.memory;
|
|
129
|
-
|
|
147
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
148
|
+
|
|
149
|
+
context.machineState.consumeGas(
|
|
150
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
151
|
+
);
|
|
130
152
|
|
|
131
153
|
const operands = [this.nullifierOffset];
|
|
132
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
133
154
|
const [nullifierOffset] = addressing.resolve(operands, memory);
|
|
134
155
|
memory.checkTag(TypeTag.FIELD, nullifierOffset);
|
|
135
156
|
|
|
@@ -162,7 +183,7 @@ export class L1ToL2MessageExists extends Instruction {
|
|
|
162
183
|
];
|
|
163
184
|
|
|
164
185
|
constructor(
|
|
165
|
-
private
|
|
186
|
+
private addressingMode: number,
|
|
166
187
|
private msgHashOffset: number,
|
|
167
188
|
private msgLeafIndexOffset: number,
|
|
168
189
|
private existsOffset: number,
|
|
@@ -172,20 +193,21 @@ export class L1ToL2MessageExists extends Instruction {
|
|
|
172
193
|
|
|
173
194
|
public async execute(context: AvmContext): Promise<void> {
|
|
174
195
|
const memory = context.machineState.memory;
|
|
175
|
-
|
|
196
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
197
|
+
|
|
198
|
+
context.machineState.consumeGas(
|
|
199
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
200
|
+
);
|
|
176
201
|
|
|
177
202
|
const operands = [this.msgHashOffset, this.msgLeafIndexOffset, this.existsOffset];
|
|
178
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
179
203
|
const [msgHashOffset, msgLeafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
180
|
-
|
|
204
|
+
|
|
205
|
+
memory.checkTag(TypeTag.FIELD, msgHashOffset);
|
|
206
|
+
memory.checkTag(TypeTag.UINT64, msgLeafIndexOffset);
|
|
181
207
|
|
|
182
208
|
const msgHash = memory.get(msgHashOffset).toFr();
|
|
183
209
|
const msgLeafIndex = memory.get(msgLeafIndexOffset).toFr();
|
|
184
|
-
const exists = await context.persistableState.checkL1ToL2MessageExists(
|
|
185
|
-
context.environment.address,
|
|
186
|
-
msgHash,
|
|
187
|
-
msgLeafIndex,
|
|
188
|
-
);
|
|
210
|
+
const exists = await context.persistableState.checkL1ToL2MessageExists(msgHash, msgLeafIndex);
|
|
189
211
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
190
212
|
}
|
|
191
213
|
}
|
|
@@ -197,7 +219,11 @@ export class EmitUnencryptedLog extends Instruction {
|
|
|
197
219
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
198
220
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
199
221
|
|
|
200
|
-
constructor(
|
|
222
|
+
constructor(
|
|
223
|
+
private addressingMode: number,
|
|
224
|
+
private logSizeOffset: number,
|
|
225
|
+
private logOffset: number,
|
|
226
|
+
) {
|
|
201
227
|
super();
|
|
202
228
|
}
|
|
203
229
|
|
|
@@ -207,17 +233,21 @@ export class EmitUnencryptedLog extends Instruction {
|
|
|
207
233
|
}
|
|
208
234
|
|
|
209
235
|
const memory = context.machineState.memory;
|
|
236
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
237
|
+
|
|
238
|
+
context.machineState.consumeGas(
|
|
239
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
240
|
+
);
|
|
210
241
|
|
|
211
|
-
const operands = [this.
|
|
212
|
-
const
|
|
213
|
-
const [logOffset, logSizeOffset] = addressing.resolve(operands, memory);
|
|
242
|
+
const operands = [this.logSizeOffset, this.logOffset];
|
|
243
|
+
const [logSizeOffset, logOffset] = addressing.resolve(operands, memory);
|
|
214
244
|
memory.checkTag(TypeTag.UINT32, logSizeOffset);
|
|
215
245
|
const logSize = memory.get(logSizeOffset).toNumber();
|
|
216
|
-
memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
|
|
217
246
|
|
|
218
247
|
const contractAddress = context.environment.address;
|
|
219
248
|
|
|
220
|
-
context.machineState.consumeGas(this.
|
|
249
|
+
context.machineState.consumeGas(this.dynamicGasCost(logSize));
|
|
250
|
+
memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
|
|
221
251
|
const log = memory.getSlice(logOffset, logSize).map(f => f.toFr());
|
|
222
252
|
context.persistableState.writePublicLog(contractAddress, log);
|
|
223
253
|
}
|
|
@@ -229,7 +259,11 @@ export class SendL2ToL1Message extends Instruction {
|
|
|
229
259
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
230
260
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
231
261
|
|
|
232
|
-
constructor(
|
|
262
|
+
constructor(
|
|
263
|
+
private addressingMode: number,
|
|
264
|
+
private recipientOffset: number,
|
|
265
|
+
private contentOffset: number,
|
|
266
|
+
) {
|
|
233
267
|
super();
|
|
234
268
|
}
|
|
235
269
|
|
|
@@ -239,14 +273,21 @@ export class SendL2ToL1Message extends Instruction {
|
|
|
239
273
|
}
|
|
240
274
|
|
|
241
275
|
const memory = context.machineState.memory;
|
|
242
|
-
|
|
276
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
277
|
+
|
|
278
|
+
context.machineState.consumeGas(
|
|
279
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
280
|
+
);
|
|
243
281
|
|
|
244
282
|
const operands = [this.recipientOffset, this.contentOffset];
|
|
245
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
246
283
|
const [recipientOffset, contentOffset] = addressing.resolve(operands, memory);
|
|
247
284
|
memory.checkTags(TypeTag.FIELD, recipientOffset, contentOffset);
|
|
248
285
|
|
|
249
286
|
const recipient = memory.get(recipientOffset).toFr();
|
|
287
|
+
|
|
288
|
+
if (recipient.toBigInt() > MAX_ETH_ADDRESS_VALUE) {
|
|
289
|
+
throw new InstructionExecutionError(`SENDL2TOL1MSG: Recipient address is too large`);
|
|
290
|
+
}
|
|
250
291
|
const content = memory.get(contentOffset).toFr();
|
|
251
292
|
context.persistableState.writeL2ToL1Message(context.environment.address, recipient, content);
|
|
252
293
|
}
|