@aztec/simulator 6.0.0-nightly.20260604 → 6.0.0-nightly.20260721
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/dest/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- package/dest/private/circuit_recording/circuit_recorder.d.ts +36 -23
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +65 -69
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +7 -19
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +38 -42
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
- package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +1 -1
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +1 -1
- package/dest/public/avm/testing/utils.d.ts +32 -0
- package/dest/public/avm/testing/utils.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/utils.js +1 -34
- package/dest/public/avm_simulator.d.ts +28 -0
- package/dest/public/avm_simulator.d.ts.map +1 -0
- package/dest/public/avm_simulator.js +4 -0
- package/dest/public/avm_simulator_pool.d.ts +45 -0
- package/dest/public/avm_simulator_pool.d.ts.map +1 -0
- package/dest/public/avm_simulator_pool.js +197 -0
- package/dest/public/cdb/generated/api_types.d.ts +171 -0
- package/dest/public/cdb/generated/api_types.d.ts.map +1 -0
- package/dest/public/cdb/generated/api_types.js +314 -0
- package/dest/public/cdb/generated/server.d.ts +26 -0
- package/dest/public/cdb/generated/server.d.ts.map +1 -0
- package/dest/public/cdb/generated/server.js +135 -0
- package/dest/public/cdb_ipc_server.d.ts +33 -0
- package/dest/public/cdb_ipc_server.d.ts.map +1 -0
- package/dest/public/cdb_ipc_server.js +153 -0
- package/dest/public/fixtures/amm_test.js +2 -2
- package/dest/public/fixtures/bulk_test.js +2 -2
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
- package/dest/public/fixtures/index.d.ts +2 -4
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +1 -3
- package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
- package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
- package/dest/public/fixtures/public_processor_test_env.js +73 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +11 -7
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +33 -43
- package/dest/public/fixtures/simple_contract_data_source.js +1 -1
- package/dest/public/fixtures/token_test.js +3 -3
- package/dest/public/fixtures/utils.d.ts +1 -1
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +5 -3
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
- package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
- package/dest/public/index.d.ts +5 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +2 -1
- package/dest/public/public_db_sources.d.ts +2 -2
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +4 -3
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
- package/dest/public/public_processor/public_processor.d.ts +8 -4
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +18 -14
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
- package/dest/public/public_tx_simulator/factories.d.ts +8 -8
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +8 -8
- package/dest/public/public_tx_simulator/index.d.ts +4 -6
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +2 -4
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -75
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -323
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
- package/dest/public/test_executor_metrics.d.ts +1 -6
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +0 -22
- package/package.json +22 -19
- package/src/client.ts +0 -2
- package/src/private/circuit_recording/circuit_recorder.ts +84 -78
- package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
- package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +1 -1
- package/src/public/avm/{fixtures → testing}/utils.ts +1 -40
- package/src/public/avm_simulator.ts +29 -0
- package/src/public/avm_simulator_pool.ts +226 -0
- package/src/public/cdb/generated/api_types.ts +457 -0
- package/src/public/cdb/generated/server.ts +109 -0
- package/src/public/cdb_ipc_server.ts +197 -0
- package/src/public/fixtures/amm_test.ts +2 -2
- package/src/public/fixtures/bulk_test.ts +2 -2
- package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
- package/src/public/fixtures/index.ts +1 -3
- package/src/public/fixtures/public_processor_test_env.ts +88 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +41 -55
- package/src/public/fixtures/simple_contract_data_source.ts +1 -1
- package/src/public/fixtures/token_test.ts +3 -3
- package/src/public/fixtures/utils.ts +6 -11
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
- package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
- package/src/public/index.ts +7 -3
- package/src/public/public_db_sources.ts +1 -1
- package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
- package/src/public/public_processor/public_processor.ts +24 -17
- package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
- package/src/public/public_tx_simulator/factories.ts +27 -10
- package/src/public/public_tx_simulator/index.ts +6 -5
- package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -480
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
- package/src/public/test_executor_metrics.ts +0 -24
- package/dest/public/avm/avm_context.d.ts +0 -41
- package/dest/public/avm/avm_context.d.ts.map +0 -1
- package/dest/public/avm/avm_context.js +0 -44
- package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
- package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/public/avm/avm_contract_call_result.js +0 -54
- package/dest/public/avm/avm_execution_environment.d.ts +0 -24
- package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/public/avm/avm_execution_environment.js +0 -33
- package/dest/public/avm/avm_gas.d.ts +0 -44
- package/dest/public/avm/avm_gas.d.ts.map +0 -1
- package/dest/public/avm/avm_gas.js +0 -195
- package/dest/public/avm/avm_machine_state.d.ts +0 -98
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -110
- package/dest/public/avm/avm_memory_types.d.ts +0 -275
- package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/public/avm/avm_memory_types.js +0 -354
- package/dest/public/avm/avm_simulator.d.ts +0 -41
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -192
- package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
- package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator_interface.js +0 -3
- package/dest/public/avm/calldata.d.ts +0 -51
- package/dest/public/avm/calldata.d.ts.map +0 -1
- package/dest/public/avm/calldata.js +0 -64
- package/dest/public/avm/errors.d.ts +0 -104
- package/dest/public/avm/errors.d.ts.map +0 -1
- package/dest/public/avm/errors.js +0 -141
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +0 -2
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +0 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -84
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.d.ts +0 -42
- package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.js +0 -45
- package/dest/public/avm/fixtures/utils.d.ts +0 -39
- package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
- package/dest/public/avm/index.d.ts +0 -2
- package/dest/public/avm/index.d.ts.map +0 -1
- package/dest/public/avm/index.js +0 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -74
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -254
- package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/public/avm/opcodes/addressing_mode.js +0 -94
- package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -97
- package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
- package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/public/avm/opcodes/bitwise.js +0 -99
- package/dest/public/avm/opcodes/comparators.d.ts +0 -25
- package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/public/avm/opcodes/comparators.js +0 -43
- package/dest/public/avm/opcodes/contract.d.ts +0 -21
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -69
- package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/public/avm/opcodes/control_flow.js +0 -107
- package/dest/public/avm/opcodes/conversion.d.ts +0 -18
- package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/public/avm/opcodes/conversion.js +0 -333
- package/dest/public/avm/opcodes/ec_add.d.ts +0 -17
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -79
- package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/public/avm/opcodes/environment_getters.js +0 -77
- package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
- package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/public/avm/opcodes/external_calls.js +0 -210
- package/dest/public/avm/opcodes/hashing.d.ts +0 -36
- package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/public/avm/opcodes/hashing.js +0 -119
- package/dest/public/avm/opcodes/index.d.ts +0 -16
- package/dest/public/avm/opcodes/index.d.ts.map +0 -1
- package/dest/public/avm/opcodes/index.js +0 -15
- package/dest/public/avm/opcodes/instruction.d.ts +0 -74
- package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction.js +0 -95
- package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction_impl.js +0 -30
- package/dest/public/avm/opcodes/memory.d.ts +0 -74
- package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/public/avm/opcodes/memory.js +0 -257
- package/dest/public/avm/opcodes/misc.d.ts +0 -18
- package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/public/avm/opcodes/misc.js +0 -73
- package/dest/public/avm/opcodes/storage.d.ts +0 -25
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -78
- package/dest/public/avm/revert_reason.d.ts +0 -18
- package/dest/public/avm/revert_reason.d.ts.map +0 -1
- package/dest/public/avm/revert_reason.js +0 -39
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/public/avm/serialization/buffer_cursor.js +0 -99
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
- package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/instruction_serialization.js +0 -261
- package/dest/public/avm/test_utils.d.ts +0 -15
- package/dest/public/avm/test_utils.d.ts.map +0 -1
- package/dest/public/avm/test_utils.js +0 -44
- package/dest/public/debug_fn_name.d.ts +0 -18
- package/dest/public/debug_fn_name.d.ts.map +0 -1
- package/dest/public/debug_fn_name.js +0 -37
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -14
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -234
- package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
- package/dest/public/fixtures/minimal_public_tx.js +0 -19
- package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
- package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
- package/dest/public/fixtures/opcode_spammer.js +0 -1645
- package/dest/public/hinting_db_sources.d.ts +0 -80
- package/dest/public/hinting_db_sources.d.ts.map +0 -1
- package/dest/public/hinting_db_sources.js +0 -356
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -99
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -131
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -135
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +0 -298
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
- package/dest/public/side_effect_trace.d.ts +0 -87
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace.js +0 -199
- package/dest/public/side_effect_trace_interface.d.ts +0 -22
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.js +0 -1
- package/dest/public/state_manager/index.d.ts +0 -2
- package/dest/public/state_manager/index.d.ts.map +0 -1
- package/dest/public/state_manager/index.js +0 -1
- package/dest/public/state_manager/nullifiers.d.ts +0 -61
- package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
- package/dest/public/state_manager/nullifiers.js +0 -92
- package/dest/public/state_manager/public_storage.d.ts +0 -66
- package/dest/public/state_manager/public_storage.d.ts.map +0 -1
- package/dest/public/state_manager/public_storage.js +0 -145
- package/dest/public/state_manager/state_manager.d.ts +0 -170
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -402
- package/src/public/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -69
- package/src/public/avm/avm_execution_environment.ts +0 -51
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -170
- package/src/public/avm/avm_memory_types.ts +0 -440
- package/src/public/avm/avm_simulator.ts +0 -279
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/calldata.ts +0 -101
- package/src/public/avm/errors.ts +0 -177
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
- package/src/public/avm/fixtures/initializers.ts +0 -103
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -285
- package/src/public/avm/opcodes/addressing_mode.ts +0 -111
- package/src/public/avm/opcodes/arithmetic.ts +0 -129
- package/src/public/avm/opcodes/bitwise.ts +0 -113
- package/src/public/avm/opcodes/comparators.ts +0 -55
- package/src/public/avm/opcodes/contract.ts +0 -76
- package/src/public/avm/opcodes/control_flow.ts +0 -123
- package/src/public/avm/opcodes/conversion.ts +0 -104
- package/src/public/avm/opcodes/ec_add.ts +0 -86
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -262
- package/src/public/avm/opcodes/hashing.ts +0 -151
- package/src/public/avm/opcodes/index.ts +0 -15
- package/src/public/avm/opcodes/instruction.ts +0 -136
- package/src/public/avm/opcodes/instruction_impl.ts +0 -36
- package/src/public/avm/opcodes/memory.ts +0 -293
- package/src/public/avm/opcodes/misc.ts +0 -102
- package/src/public/avm/opcodes/storage.ts +0 -95
- package/src/public/avm/revert_reason.ts +0 -58
- package/src/public/avm/serialization/buffer_cursor.ts +0 -118
- package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
- package/src/public/avm/serialization/instruction_serialization.ts +0 -249
- package/src/public/avm/test_utils.ts +0 -64
- package/src/public/debug_fn_name.ts +0 -52
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -366
- package/src/public/fixtures/minimal_public_tx.ts +0 -26
- package/src/public/fixtures/opcode_spammer.ts +0 -1713
- package/src/public/hinting_db_sources.ts +0 -610
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -125
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -210
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -482
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -293
- package/src/public/side_effect_trace_interface.ts +0 -28
- package/src/public/state_manager/index.ts +0 -1
- package/src/public/state_manager/nullifiers.ts +0 -103
- package/src/public/state_manager/public_storage.ts +0 -174
- package/src/public/state_manager/state_manager.ts +0 -569
- /package/dest/public/avm/{fixtures → testing}/account_proof_fetcher.js +0 -0
- /package/src/public/avm/{fixtures → testing}/account_proof.json +0 -0
- /package/src/public/avm/{fixtures → testing}/account_proof_fetcher.ts +0 -0
|
@@ -1,103 +0,0 @@
|
|
|
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
|
-
}
|
package/src/public/avm/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './avm_simulator.js';
|
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
import { MAX_ETH_ADDRESS_VALUE } from '@aztec/constants';
|
|
2
|
-
|
|
3
|
-
import { NullifierCollisionError } from '../../side_effect_errors.js';
|
|
4
|
-
import type { AvmContext } from '../avm_context.js';
|
|
5
|
-
import { TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
6
|
-
import { InstructionExecutionError, StaticCallAlterationError } from '../errors.js';
|
|
7
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
8
|
-
import { Addressing } from './addressing_mode.js';
|
|
9
|
-
import { Instruction } from './instruction.js';
|
|
10
|
-
|
|
11
|
-
export class NoteHashExists extends Instruction {
|
|
12
|
-
static type: string = 'NOTEHASHEXISTS';
|
|
13
|
-
static readonly opcode: Opcode = Opcode.NOTEHASHEXISTS;
|
|
14
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
15
|
-
static readonly wireFormat = [
|
|
16
|
-
OperandType.UINT8,
|
|
17
|
-
OperandType.UINT8,
|
|
18
|
-
OperandType.UINT16,
|
|
19
|
-
OperandType.UINT16,
|
|
20
|
-
OperandType.UINT16,
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
constructor(
|
|
24
|
-
private addressingMode: number,
|
|
25
|
-
private noteHashOffset: number,
|
|
26
|
-
private leafIndexOffset: number,
|
|
27
|
-
private existsOffset: number,
|
|
28
|
-
) {
|
|
29
|
-
super();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
33
|
-
const memory = context.machineState.memory;
|
|
34
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
35
|
-
|
|
36
|
-
context.machineState.consumeGas(
|
|
37
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
38
|
-
);
|
|
39
|
-
const operands = [this.noteHashOffset, this.leafIndexOffset, this.existsOffset];
|
|
40
|
-
const [noteHashOffset, leafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
41
|
-
memory.checkTag(TypeTag.FIELD, noteHashOffset);
|
|
42
|
-
memory.checkTag(TypeTag.UINT64, leafIndexOffset);
|
|
43
|
-
|
|
44
|
-
// Note that this instruction accepts any type in memory, and converts to Field.
|
|
45
|
-
const noteHash = memory.get(noteHashOffset).toFr();
|
|
46
|
-
const leafIndex = memory.get(leafIndexOffset).toBigInt();
|
|
47
|
-
|
|
48
|
-
const exists = await context.persistableState.checkNoteHashExists(context.environment.address, noteHash, leafIndex);
|
|
49
|
-
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export class EmitNoteHash extends Instruction {
|
|
54
|
-
static type: string = 'EMITNOTEHASH';
|
|
55
|
-
static readonly opcode: Opcode = Opcode.EMITNOTEHASH;
|
|
56
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
57
|
-
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
58
|
-
|
|
59
|
-
constructor(
|
|
60
|
-
private addressingMode: number,
|
|
61
|
-
private noteHashOffset: number,
|
|
62
|
-
) {
|
|
63
|
-
super();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
67
|
-
const memory = context.machineState.memory;
|
|
68
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
69
|
-
|
|
70
|
-
context.machineState.consumeGas(
|
|
71
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
const operands = [this.noteHashOffset];
|
|
75
|
-
const [noteHashOffset] = addressing.resolve(operands, memory);
|
|
76
|
-
memory.checkTag(TypeTag.FIELD, noteHashOffset);
|
|
77
|
-
|
|
78
|
-
if (context.environment.isStaticCall) {
|
|
79
|
-
throw new StaticCallAlterationError();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const noteHash = memory.get(noteHashOffset).toFr();
|
|
83
|
-
await context.persistableState.writeNoteHash(context.environment.address, noteHash);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export class NullifierExists extends Instruction {
|
|
88
|
-
static type: string = 'NULLIFIEREXISTS';
|
|
89
|
-
static readonly opcode: Opcode = Opcode.NULLIFIEREXISTS;
|
|
90
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
91
|
-
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
92
|
-
|
|
93
|
-
constructor(
|
|
94
|
-
private addressingMode: number,
|
|
95
|
-
private siloedNullifierOffset: number,
|
|
96
|
-
private existsOffset: number,
|
|
97
|
-
) {
|
|
98
|
-
super();
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
102
|
-
const memory = context.machineState.memory;
|
|
103
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
104
|
-
|
|
105
|
-
context.machineState.consumeGas(
|
|
106
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
107
|
-
);
|
|
108
|
-
|
|
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);
|
|
115
|
-
|
|
116
|
-
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export class EmitNullifier extends Instruction {
|
|
121
|
-
static type: string = 'EMITNULLIFIER';
|
|
122
|
-
static readonly opcode: Opcode = Opcode.EMITNULLIFIER;
|
|
123
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
124
|
-
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
125
|
-
|
|
126
|
-
constructor(
|
|
127
|
-
private addressingMode: number,
|
|
128
|
-
private nullifierOffset: number,
|
|
129
|
-
) {
|
|
130
|
-
super();
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
134
|
-
if (context.environment.isStaticCall) {
|
|
135
|
-
throw new StaticCallAlterationError();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const memory = context.machineState.memory;
|
|
139
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
140
|
-
|
|
141
|
-
context.machineState.consumeGas(
|
|
142
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
const operands = [this.nullifierOffset];
|
|
146
|
-
const [nullifierOffset] = addressing.resolve(operands, memory);
|
|
147
|
-
memory.checkTag(TypeTag.FIELD, nullifierOffset);
|
|
148
|
-
|
|
149
|
-
const nullifier = memory.get(nullifierOffset).toFr();
|
|
150
|
-
try {
|
|
151
|
-
await context.persistableState.writeNullifier(context.environment.address, nullifier);
|
|
152
|
-
} catch (e) {
|
|
153
|
-
if (e instanceof NullifierCollisionError) {
|
|
154
|
-
// Error is known/expected, raise as InstructionExecutionError that the will lead the simulator to revert this call
|
|
155
|
-
throw new InstructionExecutionError(
|
|
156
|
-
`Attempted to emit duplicate nullifier ${nullifier} (contract address: ${context.environment.address}).`,
|
|
157
|
-
);
|
|
158
|
-
} else {
|
|
159
|
-
throw e;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export class L1ToL2MessageExists extends Instruction {
|
|
166
|
-
static type: string = 'L1TOL2MSGEXISTS';
|
|
167
|
-
static readonly opcode: Opcode = Opcode.L1TOL2MSGEXISTS;
|
|
168
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
169
|
-
static readonly wireFormat = [
|
|
170
|
-
OperandType.UINT8,
|
|
171
|
-
OperandType.UINT8,
|
|
172
|
-
OperandType.UINT16,
|
|
173
|
-
OperandType.UINT16,
|
|
174
|
-
OperandType.UINT16,
|
|
175
|
-
];
|
|
176
|
-
|
|
177
|
-
constructor(
|
|
178
|
-
private addressingMode: number,
|
|
179
|
-
private msgHashOffset: number,
|
|
180
|
-
private msgLeafIndexOffset: number,
|
|
181
|
-
private existsOffset: number,
|
|
182
|
-
) {
|
|
183
|
-
super();
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
187
|
-
const memory = context.machineState.memory;
|
|
188
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
189
|
-
|
|
190
|
-
context.machineState.consumeGas(
|
|
191
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
192
|
-
);
|
|
193
|
-
|
|
194
|
-
const operands = [this.msgHashOffset, this.msgLeafIndexOffset, this.existsOffset];
|
|
195
|
-
const [msgHashOffset, msgLeafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
|
|
196
|
-
|
|
197
|
-
memory.checkTag(TypeTag.FIELD, msgHashOffset);
|
|
198
|
-
memory.checkTag(TypeTag.UINT64, msgLeafIndexOffset);
|
|
199
|
-
|
|
200
|
-
const msgHash = memory.get(msgHashOffset).toFr();
|
|
201
|
-
const msgLeafIndex = memory.get(msgLeafIndexOffset).toFr();
|
|
202
|
-
const exists = await context.persistableState.checkL1ToL2MessageExists(msgHash, msgLeafIndex);
|
|
203
|
-
memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
export class EmitPublicLog extends Instruction {
|
|
208
|
-
static type: string = 'EMITPUBLICLOG';
|
|
209
|
-
static readonly opcode: Opcode = Opcode.EMITPUBLICLOG;
|
|
210
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
211
|
-
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
212
|
-
|
|
213
|
-
constructor(
|
|
214
|
-
private addressingMode: number,
|
|
215
|
-
private logSizeOffset: number,
|
|
216
|
-
private logOffset: number,
|
|
217
|
-
) {
|
|
218
|
-
super();
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
222
|
-
if (context.environment.isStaticCall) {
|
|
223
|
-
throw new StaticCallAlterationError();
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
const memory = context.machineState.memory;
|
|
227
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
228
|
-
|
|
229
|
-
context.machineState.consumeGas(
|
|
230
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
231
|
-
);
|
|
232
|
-
|
|
233
|
-
const operands = [this.logSizeOffset, this.logOffset];
|
|
234
|
-
const [logSizeOffset, logOffset] = addressing.resolve(operands, memory);
|
|
235
|
-
memory.checkTag(TypeTag.UINT32, logSizeOffset);
|
|
236
|
-
const logSize = memory.get(logSizeOffset).toNumber();
|
|
237
|
-
|
|
238
|
-
const contractAddress = context.environment.address;
|
|
239
|
-
|
|
240
|
-
context.machineState.consumeGas(this.dynamicGasCost(logSize));
|
|
241
|
-
memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
|
|
242
|
-
const log = memory.getSlice(logOffset, logSize).map(f => f.toFr());
|
|
243
|
-
context.persistableState.writePublicLog(contractAddress, log);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
export class SendL2ToL1Message extends Instruction {
|
|
248
|
-
static type: string = 'SENDL2TOL1MSG';
|
|
249
|
-
static readonly opcode: Opcode = Opcode.SENDL2TOL1MSG;
|
|
250
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
251
|
-
static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
252
|
-
|
|
253
|
-
constructor(
|
|
254
|
-
private addressingMode: number,
|
|
255
|
-
private recipientOffset: number,
|
|
256
|
-
private contentOffset: number,
|
|
257
|
-
) {
|
|
258
|
-
super();
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
262
|
-
if (context.environment.isStaticCall) {
|
|
263
|
-
throw new StaticCallAlterationError();
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
const memory = context.machineState.memory;
|
|
267
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
268
|
-
|
|
269
|
-
context.machineState.consumeGas(
|
|
270
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
271
|
-
);
|
|
272
|
-
|
|
273
|
-
const operands = [this.recipientOffset, this.contentOffset];
|
|
274
|
-
const [recipientOffset, contentOffset] = addressing.resolve(operands, memory);
|
|
275
|
-
memory.checkTags(TypeTag.FIELD, recipientOffset, contentOffset);
|
|
276
|
-
|
|
277
|
-
const recipient = memory.get(recipientOffset).toFr();
|
|
278
|
-
|
|
279
|
-
if (recipient.toBigInt() > MAX_ETH_ADDRESS_VALUE) {
|
|
280
|
-
throw new InstructionExecutionError(`SENDL2TOL1MSG: Recipient address is too large`);
|
|
281
|
-
}
|
|
282
|
-
const content = memory.get(contentOffset).toFr();
|
|
283
|
-
context.persistableState.writeL2ToL1Message(context.environment.address, recipient, content);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { AVM_MAX_OPERANDS } from '@aztec/constants';
|
|
2
|
-
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
-
import type { Tuple } from '@aztec/foundation/serialize';
|
|
4
|
-
|
|
5
|
-
import { strict as assert } from 'assert';
|
|
6
|
-
|
|
7
|
-
import { MemoryValue, TaggedMemory, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
|
|
8
|
-
import { RelativeAddressOutOfRangeError, TagCheckError } from '../errors.js';
|
|
9
|
-
|
|
10
|
-
export enum AddressingMode {
|
|
11
|
-
DIRECT = 0,
|
|
12
|
-
INDIRECT = 1,
|
|
13
|
-
RELATIVE = 2,
|
|
14
|
-
INDIRECT_RELATIVE = 3,
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** A class to represent the addressing mode of an instruction. */
|
|
18
|
-
export class Addressing {
|
|
19
|
-
public constructor(
|
|
20
|
-
/** The addressing mode for each possible operand. */
|
|
21
|
-
private readonly modePerOperand: Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>,
|
|
22
|
-
) {}
|
|
23
|
-
|
|
24
|
-
public static fromModes(modes: AddressingMode[]): Addressing {
|
|
25
|
-
assert(modes.length <= AVM_MAX_OPERANDS, 'Too many operands for addressing mode');
|
|
26
|
-
return new Addressing(padArrayEnd(modes, AddressingMode.DIRECT, AVM_MAX_OPERANDS));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
public static fromWire(wireModes: number): Addressing {
|
|
30
|
-
// The modes are stored in the wire format as one or two bytes, with each two bits representing the modes for an operand.
|
|
31
|
-
// Even bits are indirect, odd bits are relative.
|
|
32
|
-
const modes = new Array<AddressingMode>(AVM_MAX_OPERANDS);
|
|
33
|
-
for (let i = 0; i < AVM_MAX_OPERANDS; i++) {
|
|
34
|
-
modes[i] =
|
|
35
|
-
(((wireModes >> (i * 2)) & 1) * AddressingMode.INDIRECT) |
|
|
36
|
-
(((wireModes >> (i * 2 + 1)) & 1) * AddressingMode.RELATIVE);
|
|
37
|
-
}
|
|
38
|
-
// Casting the array to tuple since it should be more performant than using makeTuple
|
|
39
|
-
return new Addressing(modes as Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
public toWire(): number {
|
|
43
|
-
// The modes are stored in the wire format as a byte, with each bit representing the mode for an operand.
|
|
44
|
-
// The least significant bit represents the zeroth operand, and the least significant bit represents the last operand.
|
|
45
|
-
let wire: number = 0;
|
|
46
|
-
for (let i = 0; i < this.modePerOperand.length; i++) {
|
|
47
|
-
if (this.modePerOperand[i] & AddressingMode.INDIRECT) {
|
|
48
|
-
wire |= 1 << (i * 2);
|
|
49
|
-
}
|
|
50
|
-
if (this.modePerOperand[i] & AddressingMode.RELATIVE) {
|
|
51
|
-
wire |= 1 << (i * 2 + 1);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return wire;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public indirectOperandsCount(): number {
|
|
58
|
-
return this.modePerOperand.filter(mode => mode & AddressingMode.INDIRECT).length;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
public relativeOperandsCount(): number {
|
|
62
|
-
return this.modePerOperand.filter(mode => mode & AddressingMode.RELATIVE).length;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Resolves the offsets using the addressing mode.
|
|
67
|
-
* @param offsets The offsets to resolve.
|
|
68
|
-
* @param mem The memory to use for resolution.
|
|
69
|
-
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array and the resolved offsets are guaranteed to be valid addresses.
|
|
70
|
-
* @throws An error if any step failed. Should be treated as a black box.
|
|
71
|
-
*/
|
|
72
|
-
public resolve(offsets: number[], mem: TaggedMemoryInterface): number[] {
|
|
73
|
-
const resolved: number[] = new Array(offsets.length);
|
|
74
|
-
// These will be read (once) if we have any relative operands.
|
|
75
|
-
let baseAddr: MemoryValue | undefined;
|
|
76
|
-
|
|
77
|
-
for (const [i, offset] of offsets.entries()) {
|
|
78
|
-
const mode = this.modePerOperand[i];
|
|
79
|
-
// The given offsets are assumed to be valid addresses.
|
|
80
|
-
resolved[i] = offset;
|
|
81
|
-
if (mode & AddressingMode.RELATIVE) {
|
|
82
|
-
if (!baseAddr) {
|
|
83
|
-
baseAddr = mem.get(0);
|
|
84
|
-
const baseAddrTag = baseAddr.getTag();
|
|
85
|
-
if (!TaggedMemory.isValidMemoryAddressTag(baseAddrTag!)) {
|
|
86
|
-
throw TagCheckError.forBaseAddress(TypeTag[baseAddrTag!]);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Here we know that resolved[i] is at most 32 bits and baseAddr is at most 32 bits.
|
|
90
|
-
// Therefore, the addition is safe since the `number` type fits more than 33 bits.
|
|
91
|
-
resolved[i] += Number(baseAddr.toBigInt());
|
|
92
|
-
if (resolved[i] >= TaggedMemory.MAX_MEMORY_SIZE) {
|
|
93
|
-
throw new RelativeAddressOutOfRangeError(Number(baseAddr.toBigInt()), offset);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (mode & AddressingMode.INDIRECT) {
|
|
97
|
-
// At this point we know that resolved[i] is a valid memory address.
|
|
98
|
-
const resolvedValue = mem.get(resolved[i]);
|
|
99
|
-
const resolvedTag = resolvedValue.getTag();
|
|
100
|
-
|
|
101
|
-
// Final check.
|
|
102
|
-
if (!TaggedMemory.isValidMemoryAddressTag(resolvedTag)) {
|
|
103
|
-
throw TagCheckError.forIndirectAddress(resolved[i], TypeTag[resolvedTag]);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
resolved[i] = Number(resolvedValue.toBigInt());
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return resolved;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import {
|
|
3
|
-
type Field,
|
|
4
|
-
type IntegralValue,
|
|
5
|
-
type MemoryValue,
|
|
6
|
-
TaggedMemory,
|
|
7
|
-
type TaggedMemoryInterface,
|
|
8
|
-
TypeTag,
|
|
9
|
-
} from '../avm_memory_types.js';
|
|
10
|
-
import { ArithmeticError } from '../errors.js';
|
|
11
|
-
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
12
|
-
import { Addressing } from './addressing_mode.js';
|
|
13
|
-
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
14
|
-
|
|
15
|
-
export abstract class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
|
|
16
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
17
|
-
const memory = context.machineState.memory;
|
|
18
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
19
|
-
|
|
20
|
-
context.machineState.consumeGas(
|
|
21
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
25
|
-
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
26
|
-
this.checkTags(memory, aOffset, bOffset);
|
|
27
|
-
|
|
28
|
-
const a = memory.get(aOffset);
|
|
29
|
-
const b = memory.get(bOffset);
|
|
30
|
-
|
|
31
|
-
const dest = this.compute(a, b);
|
|
32
|
-
memory.set(dstOffset, dest);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
protected abstract compute(a: MemoryValue, b: MemoryValue): MemoryValue;
|
|
36
|
-
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
37
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export class Add extends ThreeOperandArithmeticInstruction {
|
|
42
|
-
static readonly type: string = 'ADD';
|
|
43
|
-
static readonly opcode = Opcode.ADD_8; // FIXME: needed for gas.
|
|
44
|
-
|
|
45
|
-
protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
|
|
46
|
-
return a.add(b);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export class Sub extends ThreeOperandArithmeticInstruction {
|
|
51
|
-
static readonly type: string = 'SUB';
|
|
52
|
-
static readonly opcode = Opcode.SUB_8; // FIXME: needed for gas.
|
|
53
|
-
|
|
54
|
-
protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
|
|
55
|
-
return a.sub(b);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export class Mul extends ThreeOperandArithmeticInstruction {
|
|
60
|
-
static type: string = 'MUL';
|
|
61
|
-
static readonly opcode = Opcode.MUL_8; // FIXME: needed for gas.
|
|
62
|
-
|
|
63
|
-
protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
|
|
64
|
-
return a.mul(b);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export class Div extends ThreeOperandArithmeticInstruction {
|
|
69
|
-
static type: string = 'DIV';
|
|
70
|
-
static readonly opcode = Opcode.DIV_8; // FIXME: needed for gas.
|
|
71
|
-
|
|
72
|
-
protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
|
|
73
|
-
if (b.toBigInt() === 0n) {
|
|
74
|
-
throw new ArithmeticError('Division by zero');
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return a.div(b);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
81
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
82
|
-
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export class FieldDiv extends ThreeOperandArithmeticInstruction {
|
|
87
|
-
static type: string = 'FDIV';
|
|
88
|
-
static readonly opcode = Opcode.FDIV_8; // FIXME: needed for gas.
|
|
89
|
-
|
|
90
|
-
protected compute(a: Field, b: Field): Field {
|
|
91
|
-
if (b.toBigInt() === 0n) {
|
|
92
|
-
throw new ArithmeticError('Division by zero');
|
|
93
|
-
}
|
|
94
|
-
return a.fdiv(b);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
98
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
99
|
-
memory.checkTag(TypeTag.FIELD, aOffset); // Follows that bOffset has also tag of type Field
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export class Shl extends ThreeOperandArithmeticInstruction {
|
|
104
|
-
static readonly type: string = 'SHL';
|
|
105
|
-
static readonly opcode = Opcode.SHL_8; // FIXME: needed for gas.
|
|
106
|
-
|
|
107
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
108
|
-
return a.shl(b);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
112
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
113
|
-
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export class Shr extends ThreeOperandArithmeticInstruction {
|
|
118
|
-
static readonly type: string = 'SHR';
|
|
119
|
-
static readonly opcode = Opcode.SHR_8; // FIXME: needed for gas.
|
|
120
|
-
|
|
121
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
122
|
-
return a.shr(b);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
126
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
127
|
-
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
|
|
128
|
-
}
|
|
129
|
-
}
|