@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.023c3e5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +6 -9
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +1 -2
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +15 -7
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +14 -19
- package/dest/private/acvm/acvm_types.d.ts +2 -2
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +19 -20
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +32 -24
- package/dest/private/acvm/index.d.ts +1 -2
- package/dest/private/acvm/index.d.ts.map +1 -1
- package/dest/private/acvm/index.js +0 -1
- package/dest/private/acvm/serialize.d.ts +21 -4
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +54 -1
- package/dest/private/acvm_native.d.ts +41 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
- package/dest/private/acvm_wasm.d.ts +16 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/acvm_wasm.js +65 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/private/acvm_wasm_with_blobs.js +35 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts +109 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +212 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +10 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
- package/dest/private/circuit_simulator.d.ts +35 -0
- package/dest/private/circuit_simulator.d.ts.map +1 -0
- package/dest/private/circuit_simulator.js +43 -0
- package/dest/private/factory.d.ts +12 -0
- package/dest/private/factory.d.ts.map +1 -0
- package/dest/private/{providers/factory.js → factory.js} +8 -5
- package/dest/public/avm/avm_context.d.ts +8 -8
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +12 -8
- package/dest/public/avm/avm_execution_environment.d.ts +9 -6
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +5 -3
- package/dest/public/avm/avm_gas.d.ts +5 -21
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +27 -35
- package/dest/public/avm/avm_machine_state.d.ts +9 -6
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +5 -2
- package/dest/public/avm/avm_memory_types.d.ts +100 -89
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +21 -7
- package/dest/public/avm/avm_simulator.d.ts +8 -7
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +32 -42
- package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
- package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator_interface.js +3 -0
- package/dest/public/avm/calldata.d.ts +51 -0
- package/dest/public/avm/calldata.d.ts.map +1 -0
- package/dest/public/avm/calldata.js +63 -0
- package/dest/public/avm/errors.d.ts +11 -29
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +19 -57
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
- package/dest/public/avm/fixtures/initializers.d.ts +42 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +45 -0
- package/dest/public/avm/fixtures/utils.d.ts +39 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +96 -0
- package/dest/public/avm/index.d.ts +1 -3
- package/dest/public/avm/index.d.ts.map +1 -1
- package/dest/public/avm/index.js +0 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts +17 -18
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +58 -55
- package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +46 -26
- package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +27 -3
- package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +22 -29
- package/dest/public/avm/opcodes/comparators.d.ts +1 -1
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +3 -3
- package/dest/public/avm/opcodes/contract.d.ts +3 -4
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +11 -12
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +13 -11
- package/dest/public/avm/opcodes/conversion.d.ts +4 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +270 -6
- package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +21 -12
- package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +20 -22
- package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +52 -46
- package/dest/public/avm/opcodes/hashing.d.ts +7 -7
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +24 -19
- package/dest/public/avm/opcodes/index.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction.d.ts +15 -11
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +23 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +15 -15
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +52 -48
- package/dest/public/avm/opcodes/misc.d.ts +4 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +42 -17
- package/dest/public/avm/opcodes/storage.d.ts +14 -13
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +39 -27
- package/dest/public/avm/revert_reason.d.ts +18 -0
- package/dest/public/avm/revert_reason.d.ts.map +1 -0
- package/dest/public/avm/revert_reason.js +39 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +79 -75
- package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +70 -35
- package/dest/public/avm/test_utils.d.ts +12 -15
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +17 -25
- package/dest/public/contracts_db_checkpoint.d.ts +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +68 -0
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +3 -0
- package/dest/public/debug_fn_name.d.ts +18 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +37 -0
- package/dest/public/executor_metrics.d.ts +12 -4
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +33 -23
- package/dest/public/executor_metrics_interface.d.ts +10 -0
- package/dest/public/executor_metrics_interface.d.ts.map +1 -0
- package/dest/public/executor_metrics_interface.js +1 -0
- package/dest/public/fixtures/amm_test.d.ts +10 -0
- package/dest/public/fixtures/amm_test.d.ts.map +1 -0
- package/dest/public/fixtures/amm_test.js +213 -0
- package/dest/public/fixtures/bulk_test.d.ts +6 -0
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
- package/dest/public/fixtures/bulk_test.js +262 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
- package/dest/public/fixtures/index.d.ts +10 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +19 -0
- package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1653 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
- package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
- package/dest/public/fixtures/token_test.d.ts +12 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +96 -0
- package/dest/public/fixtures/utils.d.ts +18 -5
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +102 -59
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/hinting_db_sources.d.ts +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +355 -0
- package/dest/public/index.d.ts +6 -9
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +54 -103
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +222 -195
- package/dest/public/public_errors.d.ts +12 -0
- package/dest/public/public_errors.d.ts.map +1 -0
- package/dest/public/public_errors.js +13 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +113 -0
- package/dest/public/public_processor/public_processor.d.ts +28 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +576 -136
- package/dest/public/public_processor/public_processor_metrics.d.ts +4 -4
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +29 -46
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +132 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +8 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +5 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +25 -31
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +75 -95
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +38 -58
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +220 -207
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +415 -0
- package/dest/public/side_effect_errors.d.ts +42 -2
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/side_effect_errors.js +70 -1
- package/dest/public/side_effect_trace.d.ts +24 -69
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +74 -124
- package/dest/public/side_effect_trace_interface.d.ts +13 -25
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/index.d.ts +2 -0
- package/dest/public/state_manager/index.d.ts.map +1 -0
- package/dest/public/state_manager/index.js +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
- package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +170 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +402 -0
- package/dest/public/test_executor_metrics.d.ts +56 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +307 -0
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +3 -5
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +7 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +39 -33
- package/src/client.ts +5 -3
- package/src/common/errors.ts +80 -45
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +21 -35
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +36 -30
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +64 -1
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +57 -28
- package/src/private/acvm_wasm.ts +76 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +263 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -0
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
- package/src/private/circuit_simulator.ts +90 -0
- package/src/private/{providers/factory.ts → factory.ts} +13 -10
- package/src/public/avm/avm_context.ts +6 -6
- package/src/public/avm/avm_contract_call_result.ts +23 -9
- package/src/public/avm/avm_execution_environment.ts +17 -5
- package/src/public/avm/avm_gas.ts +26 -38
- package/src/public/avm/avm_machine_state.ts +12 -6
- package/src/public/avm/avm_memory_types.ts +24 -7
- package/src/public/avm/avm_simulator.ts +57 -62
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
- package/src/public/avm/fixtures/initializers.ts +103 -0
- package/src/public/avm/fixtures/utils.ts +151 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +81 -48
- package/src/public/avm/opcodes/addressing_mode.ts +56 -32
- package/src/public/avm/opcodes/arithmetic.ts +37 -3
- package/src/public/avm/opcodes/bitwise.ts +33 -29
- package/src/public/avm/opcodes/comparators.ts +6 -3
- package/src/public/avm/opcodes/contract.ts +10 -10
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +29 -5
- package/src/public/avm/opcodes/ec_add.ts +22 -10
- package/src/public/avm/opcodes/environment_getters.ts +28 -23
- package/src/public/avm/opcodes/external_calls.ts +70 -36
- package/src/public/avm/opcodes/hashing.ts +39 -13
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +81 -42
- package/src/public/avm/opcodes/misc.ts +61 -19
- package/src/public/avm/opcodes/storage.ts +47 -23
- package/src/public/avm/revert_reason.ts +58 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +89 -80
- package/src/public/avm/serialization/instruction_serialization.ts +75 -34
- package/src/public/avm/test_utils.ts +25 -42
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +76 -0
- package/src/public/debug_fn_name.ts +52 -0
- package/src/public/executor_metrics.ts +49 -23
- package/src/public/executor_metrics_interface.ts +15 -0
- package/src/public/fixtures/amm_test.ts +331 -0
- package/src/public/fixtures/bulk_test.ts +169 -0
- package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +228 -0
- package/src/public/fixtures/index.ts +13 -0
- package/src/public/fixtures/minimal_public_tx.ts +26 -0
- package/src/public/fixtures/opcode_spammer.ts +1721 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +223 -114
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
- package/src/public/fixtures/token_test.ts +148 -0
- package/src/public/fixtures/utils.ts +141 -69
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
- package/src/public/hinting_db_sources.ts +607 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +290 -260
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
- package/src/public/public_processor/public_processor.ts +257 -179
- package/src/public/public_processor/public_processor_metrics.ts +18 -46
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +211 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +43 -0
- package/src/public/public_tx_simulator/index.ts +7 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +179 -199
- package/src/public/public_tx_simulator/public_tx_simulator.ts +316 -263
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
- package/src/public/side_effect_errors.ts +91 -1
- package/src/public/side_effect_trace.ts +99 -322
- package/src/public/side_effect_trace_interface.ts +11 -59
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
- package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
- package/src/public/state_manager/state_manager.ts +569 -0
- package/src/public/test_executor_metrics.ts +397 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts +0 -40
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.js +0 -62
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
- package/dest/private/providers/factory.d.ts +0 -12
- package/dest/private/providers/factory.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.d.ts +0 -19
- package/dest/private/providers/simulation_provider.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.js +0 -24
- package/dest/private/simulator.d.ts +0 -34
- package/dest/private/simulator.d.ts.map +0 -1
- package/dest/private/simulator.js +0 -76
- package/dest/private/unconstrained_execution.d.ts +0 -10
- package/dest/private/unconstrained_execution.d.ts.map +0 -1
- package/dest/private/unconstrained_execution.js +0 -27
- package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
- package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
- package/dest/private/unconstrained_execution_oracle.js +0 -258
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/dest/public/avm/fixtures/index.d.ts +0 -84
- package/dest/public/avm/fixtures/index.d.ts.map +0 -1
- package/dest/public/avm/fixtures/index.js +0 -175
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/public/avm/journal/index.d.ts +0 -2
- package/dest/public/avm/journal/index.d.ts.map +0 -1
- package/dest/public/avm/journal/index.js +0 -1
- package/dest/public/avm/journal/journal.d.ts +0 -209
- package/dest/public/avm/journal/journal.d.ts.map +0 -1
- package/dest/public/avm/journal/journal.js +0 -486
- package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/bytecode_errors.js +0 -6
- package/dest/public/execution.d.ts +0 -108
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/execution.js +0 -9
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/dest/test/utils.d.ts +0 -13
- package/dest/test/utils.d.ts.map +0 -1
- package/dest/test/utils.js +0 -22
- package/src/common/db_interfaces.ts +0 -94
- package/src/common/debug_fn_name.ts +0 -18
- package/src/common/message_load_oracle_inputs.ts +0 -15
- package/src/private/acvm/oracle/index.ts +0 -16
- package/src/private/acvm/oracle/oracle.ts +0 -455
- package/src/private/acvm/oracle/typed_oracle.ts +0 -259
- package/src/private/execution_data_provider.ts +0 -323
- package/src/private/execution_note_cache.ts +0 -217
- package/src/private/hashed_values_cache.ts +0 -55
- package/src/private/index.ts +0 -16
- package/src/private/pick_notes.ts +0 -141
- package/src/private/private_execution.ts +0 -151
- package/src/private/private_execution_oracle.ts +0 -614
- package/src/private/providers/acvm_wasm.ts +0 -63
- package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
- package/src/private/providers/simulation_provider.ts +0 -45
- package/src/private/simulator.ts +0 -147
- package/src/private/unconstrained_execution.ts +0 -50
- package/src/private/unconstrained_execution_oracle.ts +0 -373
- package/src/public/avm/bytecode_utils.ts +0 -17
- package/src/public/avm/fixtures/index.ts +0 -296
- package/src/public/avm/journal/index.ts +0 -1
- package/src/public/avm/journal/journal.ts +0 -742
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
- package/src/public/bytecode_errors.ts +0 -6
- package/src/public/execution.ts +0 -140
- package/src/public/tx_contract_cache.ts +0 -69
- package/src/test/utils.ts +0 -36
|
@@ -1,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
|
|
|
@@ -76,18 +88,11 @@ export class NullifierExists extends Instruction {
|
|
|
76
88
|
static type: string = 'NULLIFIEREXISTS';
|
|
77
89
|
static readonly opcode: Opcode = Opcode.NULLIFIEREXISTS;
|
|
78
90
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
79
|
-
static readonly wireFormat = [
|
|
80
|
-
OperandType.UINT8,
|
|
81
|
-
OperandType.UINT8,
|
|
82
|
-
OperandType.UINT16,
|
|
83
|
-
OperandType.UINT16,
|
|
84
|
-
OperandType.UINT16,
|
|
85
|
-
];
|
|
91
|
+
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
86
92
|
|
|
87
93
|
constructor(
|
|
88
|
-
private
|
|
89
|
-
private
|
|
90
|
-
private addressOffset: number,
|
|
94
|
+
private addressingMode: number,
|
|
95
|
+
private siloedNullifierOffset: number,
|
|
91
96
|
private existsOffset: number,
|
|
92
97
|
) {
|
|
93
98
|
super();
|
|
@@ -95,16 +100,18 @@ export class NullifierExists extends Instruction {
|
|
|
95
100
|
|
|
96
101
|
public async execute(context: AvmContext): Promise<void> {
|
|
97
102
|
const memory = context.machineState.memory;
|
|
98
|
-
|
|
103
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
99
104
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
memory.checkTags(TypeTag.FIELD, nullifierOffset, addressOffset);
|
|
105
|
+
context.machineState.consumeGas(
|
|
106
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
107
|
+
);
|
|
104
108
|
|
|
105
|
-
const
|
|
106
|
-
const
|
|
107
|
-
|
|
109
|
+
const operands = [this.siloedNullifierOffset, this.existsOffset];
|
|
110
|
+
const [siloedNullifierOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
111
|
+
memory.checkTag(TypeTag.FIELD, siloedNullifierOffset);
|
|
112
|
+
|
|
113
|
+
const siloedNullifier = memory.get(siloedNullifierOffset).toFr();
|
|
114
|
+
const exists = await context.persistableState.checkSiloedNullifierExists(siloedNullifier);
|
|
108
115
|
|
|
109
116
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
110
117
|
}
|
|
@@ -116,7 +123,10 @@ export class EmitNullifier extends Instruction {
|
|
|
116
123
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
117
124
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
118
125
|
|
|
119
|
-
constructor(
|
|
126
|
+
constructor(
|
|
127
|
+
private addressingMode: number,
|
|
128
|
+
private nullifierOffset: number,
|
|
129
|
+
) {
|
|
120
130
|
super();
|
|
121
131
|
}
|
|
122
132
|
|
|
@@ -126,10 +136,13 @@ export class EmitNullifier extends Instruction {
|
|
|
126
136
|
}
|
|
127
137
|
|
|
128
138
|
const memory = context.machineState.memory;
|
|
129
|
-
|
|
139
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
140
|
+
|
|
141
|
+
context.machineState.consumeGas(
|
|
142
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
143
|
+
);
|
|
130
144
|
|
|
131
145
|
const operands = [this.nullifierOffset];
|
|
132
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
133
146
|
const [nullifierOffset] = addressing.resolve(operands, memory);
|
|
134
147
|
memory.checkTag(TypeTag.FIELD, nullifierOffset);
|
|
135
148
|
|
|
@@ -162,7 +175,7 @@ export class L1ToL2MessageExists extends Instruction {
|
|
|
162
175
|
];
|
|
163
176
|
|
|
164
177
|
constructor(
|
|
165
|
-
private
|
|
178
|
+
private addressingMode: number,
|
|
166
179
|
private msgHashOffset: number,
|
|
167
180
|
private msgLeafIndexOffset: number,
|
|
168
181
|
private existsOffset: number,
|
|
@@ -172,20 +185,21 @@ export class L1ToL2MessageExists extends Instruction {
|
|
|
172
185
|
|
|
173
186
|
public async execute(context: AvmContext): Promise<void> {
|
|
174
187
|
const memory = context.machineState.memory;
|
|
175
|
-
|
|
188
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
189
|
+
|
|
190
|
+
context.machineState.consumeGas(
|
|
191
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
192
|
+
);
|
|
176
193
|
|
|
177
194
|
const operands = [this.msgHashOffset, this.msgLeafIndexOffset, this.existsOffset];
|
|
178
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
179
195
|
const [msgHashOffset, msgLeafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
180
|
-
|
|
196
|
+
|
|
197
|
+
memory.checkTag(TypeTag.FIELD, msgHashOffset);
|
|
198
|
+
memory.checkTag(TypeTag.UINT64, msgLeafIndexOffset);
|
|
181
199
|
|
|
182
200
|
const msgHash = memory.get(msgHashOffset).toFr();
|
|
183
201
|
const msgLeafIndex = memory.get(msgLeafIndexOffset).toFr();
|
|
184
|
-
const exists = await context.persistableState.checkL1ToL2MessageExists(
|
|
185
|
-
context.environment.address,
|
|
186
|
-
msgHash,
|
|
187
|
-
msgLeafIndex,
|
|
188
|
-
);
|
|
202
|
+
const exists = await context.persistableState.checkL1ToL2MessageExists(msgHash, msgLeafIndex);
|
|
189
203
|
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
190
204
|
}
|
|
191
205
|
}
|
|
@@ -197,7 +211,11 @@ export class EmitUnencryptedLog extends Instruction {
|
|
|
197
211
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
198
212
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
199
213
|
|
|
200
|
-
constructor(
|
|
214
|
+
constructor(
|
|
215
|
+
private addressingMode: number,
|
|
216
|
+
private logSizeOffset: number,
|
|
217
|
+
private logOffset: number,
|
|
218
|
+
) {
|
|
201
219
|
super();
|
|
202
220
|
}
|
|
203
221
|
|
|
@@ -207,17 +225,21 @@ export class EmitUnencryptedLog extends Instruction {
|
|
|
207
225
|
}
|
|
208
226
|
|
|
209
227
|
const memory = context.machineState.memory;
|
|
228
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
210
229
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
230
|
+
context.machineState.consumeGas(
|
|
231
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
const operands = [this.logSizeOffset, this.logOffset];
|
|
235
|
+
const [logSizeOffset, logOffset] = addressing.resolve(operands, memory);
|
|
214
236
|
memory.checkTag(TypeTag.UINT32, logSizeOffset);
|
|
215
237
|
const logSize = memory.get(logSizeOffset).toNumber();
|
|
216
|
-
memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
|
|
217
238
|
|
|
218
239
|
const contractAddress = context.environment.address;
|
|
219
240
|
|
|
220
|
-
context.machineState.consumeGas(this.
|
|
241
|
+
context.machineState.consumeGas(this.dynamicGasCost(logSize));
|
|
242
|
+
memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
|
|
221
243
|
const log = memory.getSlice(logOffset, logSize).map(f => f.toFr());
|
|
222
244
|
context.persistableState.writePublicLog(contractAddress, log);
|
|
223
245
|
}
|
|
@@ -229,7 +251,11 @@ export class SendL2ToL1Message extends Instruction {
|
|
|
229
251
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
230
252
|
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
231
253
|
|
|
232
|
-
constructor(
|
|
254
|
+
constructor(
|
|
255
|
+
private addressingMode: number,
|
|
256
|
+
private recipientOffset: number,
|
|
257
|
+
private contentOffset: number,
|
|
258
|
+
) {
|
|
233
259
|
super();
|
|
234
260
|
}
|
|
235
261
|
|
|
@@ -239,14 +265,21 @@ export class SendL2ToL1Message extends Instruction {
|
|
|
239
265
|
}
|
|
240
266
|
|
|
241
267
|
const memory = context.machineState.memory;
|
|
242
|
-
|
|
268
|
+
const addressing = Addressing.fromWire(this.addressingMode);
|
|
269
|
+
|
|
270
|
+
context.machineState.consumeGas(
|
|
271
|
+
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
272
|
+
);
|
|
243
273
|
|
|
244
274
|
const operands = [this.recipientOffset, this.contentOffset];
|
|
245
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
246
275
|
const [recipientOffset, contentOffset] = addressing.resolve(operands, memory);
|
|
247
276
|
memory.checkTags(TypeTag.FIELD, recipientOffset, contentOffset);
|
|
248
277
|
|
|
249
278
|
const recipient = memory.get(recipientOffset).toFr();
|
|
279
|
+
|
|
280
|
+
if (recipient.toBigInt() > MAX_ETH_ADDRESS_VALUE) {
|
|
281
|
+
throw new InstructionExecutionError(`SENDL2TOL1MSG: Recipient address is too large`);
|
|
282
|
+
}
|
|
250
283
|
const content = memory.get(contentOffset).toFr();
|
|
251
284
|
context.persistableState.writeL2ToL1Message(context.environment.address, recipient, content);
|
|
252
285
|
}
|