@aztec/simulator 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0
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 +4 -4
- package/dest/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- package/dest/private/acvm/acvm.d.ts +4 -2
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +4 -3
- package/dest/private/acvm_native.d.ts +5 -3
- package/dest/private/acvm_native.d.ts.map +1 -1
- package/dest/private/acvm_native.js +8 -6
- package/dest/private/acvm_wasm.d.ts +4 -3
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm.js +7 -5
- package/dest/private/circuit_recording/circuit_recorder.d.ts +39 -25
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +70 -72
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +9 -20
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +39 -43
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
- 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/private/factory.d.ts +3 -3
- package/dest/private/factory.d.ts.map +1 -1
- package/dest/private/factory.js +7 -4
- 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/testing/account_proof_fetcher.js +152 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +2 -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 +18 -3
- 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 +4 -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/contracts_db_checkpoint.d.ts +2 -2
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
- package/dest/public/contracts_db_checkpoint.js +1 -1
- package/dest/public/executor_metrics.d.ts +1 -1
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +7 -2
- package/dest/public/fixtures/amm_test.js +4 -4
- package/dest/public/fixtures/bulk_test.d.ts +1 -1
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/bulk_test.js +33 -6
- 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 +12 -7
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +32 -15
- 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 +2 -2
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +21 -20
- 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 +11 -8
- 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 +9 -5
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +20 -14
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +8 -7
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +8 -5
- package/dest/public/public_processor/public_processor.d.ts +17 -8
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +119 -77
- package/dest/public/public_processor/public_processor_metrics.d.ts +5 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +28 -4
- 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 +9 -8
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +9 -9
- 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 +43 -71
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +99 -316
- 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 +3 -2
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +2 -2
- package/package.json +22 -19
- package/src/client.ts +0 -2
- package/src/private/acvm/acvm.ts +4 -3
- package/src/private/acvm_native.ts +11 -5
- package/src/private/acvm_wasm.ts +11 -4
- package/src/private/circuit_recording/circuit_recorder.ts +89 -81
- package/src/private/circuit_recording/file_circuit_recorder.ts +45 -50
- package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
- package/src/private/factory.ts +7 -4
- package/src/public/avm/testing/account_proof.json +553 -0
- package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
- package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
- package/src/public/avm/{fixtures → testing}/utils.ts +4 -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/contracts_db_checkpoint.ts +1 -1
- package/src/public/executor_metrics.ts +4 -1
- package/src/public/fixtures/amm_test.ts +4 -4
- package/src/public/fixtures/bulk_test.ts +31 -6
- 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 +45 -18
- 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 +23 -24
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +26 -11
- package/src/public/fuzzing/avm_simulator_bin.ts +14 -6
- package/src/public/index.ts +7 -3
- package/src/public/public_db_sources.ts +36 -19
- package/src/public/public_processor/guarded_merkle_tree.ts +11 -8
- package/src/public/public_processor/public_processor.ts +166 -97
- package/src/public/public_processor/public_processor_metrics.ts +22 -4
- package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +17 -31
- package/src/public/public_tx_simulator/factories.ts +31 -11
- package/src/public/public_tx_simulator/index.ts +6 -5
- package/src/public/public_tx_simulator/public_tx_simulator.ts +142 -470
- 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 +3 -3
- 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 -23
- 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 -97
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -109
- 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 -351
- package/dest/public/avm/avm_simulator.d.ts +0 -40
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -191
- 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/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/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 -83
- 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 -44
- 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 -75
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -255
- 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 -20
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -65
- 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 -19
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -93
- 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 -24
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -68
- 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 -35
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -12
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -174
- 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 -123
- package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
- package/dest/public/fixtures/opcode_spammer.js +0 -1681
- 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 -355
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -18
- 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 -98
- 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 -132
- 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 -22
- 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 -130
- 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 -300
- 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 -164
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -395
- package/src/public/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -67
- package/src/public/avm/avm_execution_environment.ts +0 -46
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -169
- package/src/public/avm/avm_memory_types.ts +0 -436
- package/src/public/avm/avm_simulator.ts +0 -276
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/errors.ts +0 -177
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -116
- package/src/public/avm/fixtures/initializers.ts +0 -102
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -288
- 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 -75
- 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 -105
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -261
- 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 -87
- 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 -50
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -228
- package/src/public/fixtures/minimal_public_tx.ts +0 -26
- package/src/public/fixtures/opcode_spammer.ts +0 -1725
- package/src/public/hinting_db_sources.ts +0 -607
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -121
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -208
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -132
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -237
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -477
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -290
- 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 -546
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
2
|
-
|
|
3
|
-
import type { AvmContext } from '../avm_context.js';
|
|
4
|
-
import { TypeTag } from '../avm_memory_types.js';
|
|
5
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
6
|
-
import { Addressing } from './addressing_mode.js';
|
|
7
|
-
import { Instruction } from './instruction.js';
|
|
8
|
-
|
|
9
|
-
export class DebugLog extends Instruction {
|
|
10
|
-
static type: string = 'DEBUGLOG';
|
|
11
|
-
static readonly opcode: Opcode = Opcode.DEBUGLOG;
|
|
12
|
-
static readonly logger = createLogger('simulator:avm:debug_log');
|
|
13
|
-
|
|
14
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
15
|
-
static readonly wireFormat: OperandType[] = [
|
|
16
|
-
OperandType.UINT8, // Opcode
|
|
17
|
-
OperandType.UINT8, // Indirect
|
|
18
|
-
OperandType.UINT16, // level memory address
|
|
19
|
-
OperandType.UINT16, // message memory address
|
|
20
|
-
OperandType.UINT16, // fields memory address
|
|
21
|
-
OperandType.UINT16, // fields size address
|
|
22
|
-
OperandType.UINT16, // message size
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
constructor(
|
|
26
|
-
private addressingMode: number,
|
|
27
|
-
private levelOffset: number,
|
|
28
|
-
private messageOffset: number,
|
|
29
|
-
private fieldsOffset: number,
|
|
30
|
-
private fieldsSizeOffset: number,
|
|
31
|
-
private messageSize: number,
|
|
32
|
-
) {
|
|
33
|
-
super();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
37
|
-
const memory = context.machineState.memory;
|
|
38
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
39
|
-
|
|
40
|
-
context.machineState.consumeGas(
|
|
41
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
const operands = [this.levelOffset, this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
|
|
45
|
-
const [levelOffset, messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
|
|
46
|
-
|
|
47
|
-
// DebugLog is a no-op except unless the config is set to collect debug logs.
|
|
48
|
-
// Note that we still do address resolution and basic tag-checking (above)
|
|
49
|
-
// To avoid a special-case in the witness generator and circuit.
|
|
50
|
-
if (context.environment.config.collectDebugLogs) {
|
|
51
|
-
memory.checkTag(TypeTag.UINT8, levelOffset);
|
|
52
|
-
const levelNumber = memory.get(levelOffset).toNumber();
|
|
53
|
-
memory.checkTag(TypeTag.UINT32, fieldsSizeOffset);
|
|
54
|
-
const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
|
|
55
|
-
|
|
56
|
-
const memoryReads = 1 /* level */ + 1 /* fieldsSize */ + this.messageSize /* message */ + fieldsSize; /* fields */
|
|
57
|
-
if (
|
|
58
|
-
context.persistableState.getDebugLogMemoryReads() + memoryReads >
|
|
59
|
-
context.environment.config.collectionLimits.maxDebugLogMemoryReads
|
|
60
|
-
) {
|
|
61
|
-
// Regular error on purpose: this is not a recoverable error.
|
|
62
|
-
throw new Error(
|
|
63
|
-
`Max debug log memory reads exceeded: ${context.persistableState.getDebugLogMemoryReads() + memoryReads} > ${context.environment.config.collectionLimits.maxDebugLogMemoryReads}`,
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
context.persistableState.writeDebugLogMemoryReads(memoryReads);
|
|
67
|
-
|
|
68
|
-
const rawMessage = memory.getSlice(messageOffset, this.messageSize);
|
|
69
|
-
const fields = memory.getSlice(fieldsOffset, fieldsSize);
|
|
70
|
-
|
|
71
|
-
memory.checkTagsRange(TypeTag.UINT8, messageOffset, this.messageSize);
|
|
72
|
-
memory.checkTagsRange(TypeTag.FIELD, fieldsOffset, fieldsSize);
|
|
73
|
-
|
|
74
|
-
// Interpret str<N> = [u8; N] to string.
|
|
75
|
-
const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
|
|
76
|
-
|
|
77
|
-
if (!LogLevels[levelNumber]) {
|
|
78
|
-
// Regular error on purpose: this is not a recoverable error.
|
|
79
|
-
throw new Error(`Invalid debug log level: ${levelNumber}`);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const level = LogLevels[levelNumber];
|
|
83
|
-
|
|
84
|
-
context.persistableState.writeDebugLog(
|
|
85
|
-
context.environment.address,
|
|
86
|
-
level,
|
|
87
|
-
messageAsStr,
|
|
88
|
-
fields.map(field => field.toFr()),
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
// Skips string formatting if the level is disabled.
|
|
92
|
-
if (DebugLog.logger.isLevelEnabled(level)) {
|
|
93
|
-
const formattedStr = applyStringFormatting(
|
|
94
|
-
messageAsStr,
|
|
95
|
-
fields.map(field => field.toFr()),
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
DebugLog.logger[level](formattedStr);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { Field, TypeTag } from '../avm_memory_types.js';
|
|
3
|
-
import { StaticCallAlterationError } from '../errors.js';
|
|
4
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
5
|
-
import { Addressing } from './addressing_mode.js';
|
|
6
|
-
import { Instruction } from './instruction.js';
|
|
7
|
-
|
|
8
|
-
abstract class BaseStorageInstruction extends Instruction {
|
|
9
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
10
|
-
public static readonly wireFormat: OperandType[] = [
|
|
11
|
-
OperandType.UINT8,
|
|
12
|
-
OperandType.UINT8,
|
|
13
|
-
OperandType.UINT16,
|
|
14
|
-
OperandType.UINT16,
|
|
15
|
-
];
|
|
16
|
-
|
|
17
|
-
constructor(
|
|
18
|
-
protected addressingMode: number,
|
|
19
|
-
protected aOffset: number,
|
|
20
|
-
protected bOffset: number,
|
|
21
|
-
) {
|
|
22
|
-
super();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export class SStore extends BaseStorageInstruction {
|
|
27
|
-
static readonly type: string = 'SSTORE';
|
|
28
|
-
static readonly opcode = Opcode.SSTORE;
|
|
29
|
-
|
|
30
|
-
constructor(addressingMode: number, srcOffset: number, slotOffset: number) {
|
|
31
|
-
super(addressingMode, srcOffset, slotOffset);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
35
|
-
if (context.environment.isStaticCall) {
|
|
36
|
-
throw new StaticCallAlterationError();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const memory = context.machineState.memory;
|
|
40
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
41
|
-
|
|
42
|
-
context.machineState.consumeGas(
|
|
43
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
const operands = [this.aOffset, this.bOffset];
|
|
47
|
-
const [srcOffset, slotOffset] = addressing.resolve(operands, memory);
|
|
48
|
-
// We read before tag checking since it's needed for gas cost calculation
|
|
49
|
-
const slot = memory.get(slotOffset).toFr();
|
|
50
|
-
|
|
51
|
-
context.machineState.consumeGas(
|
|
52
|
-
this.dynamicGasCost(Number(context.persistableState.isStorageCold(context.environment.address, slot))),
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
memory.checkTag(TypeTag.FIELD, slotOffset);
|
|
56
|
-
memory.checkTag(TypeTag.FIELD, srcOffset);
|
|
57
|
-
|
|
58
|
-
const value = memory.get(srcOffset).toFr();
|
|
59
|
-
await context.persistableState.writeStorage(context.environment.address, slot, value);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export class SLoad extends BaseStorageInstruction {
|
|
64
|
-
static readonly type: string = 'SLOAD';
|
|
65
|
-
static readonly opcode = Opcode.SLOAD;
|
|
66
|
-
|
|
67
|
-
constructor(addressingMode: number, slotOffset: number, dstOffset: number) {
|
|
68
|
-
super(addressingMode, slotOffset, dstOffset);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
72
|
-
const memory = context.machineState.memory;
|
|
73
|
-
const addressing = Addressing.fromWire(this.addressingMode);
|
|
74
|
-
|
|
75
|
-
context.machineState.consumeGas(
|
|
76
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
const operands = [this.aOffset, this.bOffset];
|
|
80
|
-
const [slotOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
81
|
-
memory.checkTag(TypeTag.FIELD, slotOffset);
|
|
82
|
-
|
|
83
|
-
const slot = memory.get(slotOffset).toFr();
|
|
84
|
-
const value = await context.persistableState.readStorage(context.environment.address, slot);
|
|
85
|
-
memory.set(dstOffset, new Field(value));
|
|
86
|
-
}
|
|
87
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
|
|
3
|
-
import type { AvmContext } from './avm_context.js';
|
|
4
|
-
import { type AvmExecutionError, AvmRevertReason } from './errors.js';
|
|
5
|
-
|
|
6
|
-
async function createRevertReason(message: string, revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
|
|
7
|
-
// We drop the returnPc information.
|
|
8
|
-
const internalCallStack = context.machineState.internalCallStack.map(entry => entry.callPc);
|
|
9
|
-
|
|
10
|
-
// If we are reverting due to the same error that we have been tracking, we use the nested error as the cause.
|
|
11
|
-
let nestedError = undefined;
|
|
12
|
-
const revertDataEquals = (a: Fr[], b: Fr[]) => a.length === b.length && a.every((v, i) => v.equals(b[i]));
|
|
13
|
-
if (
|
|
14
|
-
context.machineState.collectedRevertInfo &&
|
|
15
|
-
revertDataEquals(context.machineState.collectedRevertInfo.revertDataRepresentative, revertData)
|
|
16
|
-
) {
|
|
17
|
-
nestedError = context.machineState.collectedRevertInfo.recursiveRevertReason;
|
|
18
|
-
message = context.machineState.collectedRevertInfo.recursiveRevertReason.message;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const { functionSelector, functionName } = await context.persistableState.getPublicFunctionSelectorAndName(
|
|
22
|
-
context.environment,
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
return new AvmRevertReason(
|
|
26
|
-
message,
|
|
27
|
-
/*failingFunction=*/ {
|
|
28
|
-
contractAddress: context.environment.address,
|
|
29
|
-
functionSelector,
|
|
30
|
-
functionName,
|
|
31
|
-
},
|
|
32
|
-
/*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
|
|
33
|
-
/*options=*/ { cause: nestedError },
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Create a "revert reason" error for an exceptional halt.
|
|
39
|
-
*
|
|
40
|
-
* @param haltingError - the lower-level error causing the exceptional halt
|
|
41
|
-
* @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
|
|
42
|
-
*/
|
|
43
|
-
export async function revertReasonFromExceptionalHalt(
|
|
44
|
-
haltingError: AvmExecutionError,
|
|
45
|
-
context: AvmContext,
|
|
46
|
-
): Promise<AvmRevertReason> {
|
|
47
|
-
return await createRevertReason(haltingError.message, [], context);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Create a "revert reason" error for an explicit revert (a root cause).
|
|
52
|
-
*
|
|
53
|
-
* @param revertData - output data of the explicit REVERT instruction
|
|
54
|
-
* @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
|
|
55
|
-
*/
|
|
56
|
-
export async function revertReasonFromExplicitRevert(revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
|
|
57
|
-
return await createRevertReason('Assertion failed: ', revertData, context);
|
|
58
|
-
}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* A Buffer-like class that automatically advances the position.
|
|
3
|
-
*/
|
|
4
|
-
export class BufferCursor {
|
|
5
|
-
constructor(
|
|
6
|
-
private _buffer: Buffer,
|
|
7
|
-
private _position: number = 0,
|
|
8
|
-
) {}
|
|
9
|
-
|
|
10
|
-
public position(): number {
|
|
11
|
-
return this._position;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public buffer(): Buffer {
|
|
15
|
-
return this._buffer;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public eof(): boolean {
|
|
19
|
-
return this._position === this._buffer.length;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public bufferAtPosition(): Buffer {
|
|
23
|
-
return this._buffer.subarray(this._position);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public advance(n: number): void {
|
|
27
|
-
this._position += n;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public peekUint8(): number {
|
|
31
|
-
const ret = this._buffer.readUint8(this._position);
|
|
32
|
-
return ret;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public readUint8(): number {
|
|
36
|
-
const ret = this._buffer.readUint8(this._position);
|
|
37
|
-
this._position += 1;
|
|
38
|
-
return ret;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
public readUint16LE(): number {
|
|
42
|
-
const ret = this._buffer.readUint16LE(this._position);
|
|
43
|
-
this._position += 2;
|
|
44
|
-
return ret;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
public readUint16BE(): number {
|
|
48
|
-
const ret = this._buffer.readUint16BE(this._position);
|
|
49
|
-
this._position += 2;
|
|
50
|
-
return ret;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public readUint32LE(): number {
|
|
54
|
-
const ret = this._buffer.readUint32LE(this._position);
|
|
55
|
-
this._position += 4;
|
|
56
|
-
return ret;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public readUint32BE(): number {
|
|
60
|
-
const ret = this._buffer.readUint32BE(this._position);
|
|
61
|
-
this._position += 4;
|
|
62
|
-
return ret;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
public readBigInt64LE(): bigint {
|
|
66
|
-
const ret = this._buffer.readBigInt64LE(this._position);
|
|
67
|
-
this._position += 8;
|
|
68
|
-
return ret;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public readBigInt64BE(): bigint {
|
|
72
|
-
const ret = this._buffer.readBigInt64BE(this._position);
|
|
73
|
-
this._position += 8;
|
|
74
|
-
return ret;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
public writeUint8(v: number) {
|
|
78
|
-
const ret = this._buffer.writeUint8(v, this._position);
|
|
79
|
-
this._position += 1;
|
|
80
|
-
return ret;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
public writeUint16LE(v: number) {
|
|
84
|
-
const ret = this._buffer.writeUint16LE(v, this._position);
|
|
85
|
-
this._position += 2;
|
|
86
|
-
return ret;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
public writeUint16BE(v: number) {
|
|
90
|
-
const ret = this._buffer.writeUint16BE(v, this._position);
|
|
91
|
-
this._position += 2;
|
|
92
|
-
return ret;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public writeUint32LE(v: number) {
|
|
96
|
-
const ret = this._buffer.writeUint32LE(v, this._position);
|
|
97
|
-
this._position += 4;
|
|
98
|
-
return ret;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
public writeUint32BE(v: number) {
|
|
102
|
-
const ret = this._buffer.writeUint32BE(v, this._position);
|
|
103
|
-
this._position += 4;
|
|
104
|
-
return ret;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
public writeBigInt64LE(v: bigint) {
|
|
108
|
-
const ret = this._buffer.writeBigInt64LE(v, this._position);
|
|
109
|
-
this._position += 8;
|
|
110
|
-
return ret;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
public writeBigInt64BE(v: bigint) {
|
|
114
|
-
const ret = this._buffer.writeBigInt64BE(v, this._position);
|
|
115
|
-
this._position += 8;
|
|
116
|
-
return ret;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
AvmExecutionError,
|
|
5
|
-
AvmParsingError,
|
|
6
|
-
InvalidOpcodeError,
|
|
7
|
-
InvalidProgramCounterError,
|
|
8
|
-
InvalidTagValueError,
|
|
9
|
-
duringInstrFetch,
|
|
10
|
-
} from '../errors.js';
|
|
11
|
-
import {
|
|
12
|
-
Add,
|
|
13
|
-
And,
|
|
14
|
-
Call,
|
|
15
|
-
CalldataCopy,
|
|
16
|
-
Cast,
|
|
17
|
-
DebugLog,
|
|
18
|
-
Div,
|
|
19
|
-
EcAdd,
|
|
20
|
-
EmitNoteHash,
|
|
21
|
-
EmitNullifier,
|
|
22
|
-
EmitUnencryptedLog,
|
|
23
|
-
Eq,
|
|
24
|
-
FieldDiv,
|
|
25
|
-
GetContractInstance,
|
|
26
|
-
GetEnvVar,
|
|
27
|
-
Instruction,
|
|
28
|
-
InternalCall,
|
|
29
|
-
InternalReturn,
|
|
30
|
-
Jump,
|
|
31
|
-
JumpI,
|
|
32
|
-
KeccakF1600,
|
|
33
|
-
L1ToL2MessageExists,
|
|
34
|
-
Lt,
|
|
35
|
-
Lte,
|
|
36
|
-
Mov,
|
|
37
|
-
Mul,
|
|
38
|
-
Not,
|
|
39
|
-
NoteHashExists,
|
|
40
|
-
NullifierExists,
|
|
41
|
-
Or,
|
|
42
|
-
Poseidon2,
|
|
43
|
-
Return,
|
|
44
|
-
ReturndataCopy,
|
|
45
|
-
ReturndataSize,
|
|
46
|
-
Revert,
|
|
47
|
-
SLoad,
|
|
48
|
-
SStore,
|
|
49
|
-
SendL2ToL1Message,
|
|
50
|
-
Set,
|
|
51
|
-
Sha256Compression,
|
|
52
|
-
Shl,
|
|
53
|
-
Shr,
|
|
54
|
-
StaticCall,
|
|
55
|
-
Sub,
|
|
56
|
-
SuccessCopy,
|
|
57
|
-
ToRadixBE,
|
|
58
|
-
Xor,
|
|
59
|
-
} from '../opcodes/index.js';
|
|
60
|
-
import { BufferCursor } from './buffer_cursor.js';
|
|
61
|
-
import { MAX_OPCODE_VALUE, Opcode } from './instruction_serialization.js';
|
|
62
|
-
|
|
63
|
-
export type InstructionDeserializer = (buf: BufferCursor | Buffer) => Instruction;
|
|
64
|
-
|
|
65
|
-
export interface Deserializable {
|
|
66
|
-
deserialize: InstructionDeserializer;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export type InstructionSet = Map<Opcode, InstructionDeserializer>;
|
|
70
|
-
export const INSTRUCTION_SET = new Map<Opcode, InstructionDeserializer>([
|
|
71
|
-
[Opcode.ADD_8, Add.as(Add.wireFormat8).fromBuffer],
|
|
72
|
-
[Opcode.ADD_16, Add.as(Add.wireFormat16).fromBuffer],
|
|
73
|
-
[Opcode.SUB_8, Sub.as(Sub.wireFormat8).fromBuffer],
|
|
74
|
-
[Opcode.SUB_16, Sub.as(Sub.wireFormat16).fromBuffer],
|
|
75
|
-
[Opcode.MUL_8, Mul.as(Mul.wireFormat8).fromBuffer],
|
|
76
|
-
[Opcode.MUL_16, Mul.as(Mul.wireFormat16).fromBuffer],
|
|
77
|
-
[Opcode.DIV_8, Div.as(Div.wireFormat8).fromBuffer],
|
|
78
|
-
[Opcode.DIV_16, Div.as(Div.wireFormat16).fromBuffer],
|
|
79
|
-
[Opcode.FDIV_8, FieldDiv.as(FieldDiv.wireFormat8).fromBuffer],
|
|
80
|
-
[Opcode.FDIV_16, FieldDiv.as(FieldDiv.wireFormat16).fromBuffer],
|
|
81
|
-
[Opcode.EQ_8, Eq.as(Eq.wireFormat8).fromBuffer],
|
|
82
|
-
[Opcode.EQ_16, Eq.as(Eq.wireFormat16).fromBuffer],
|
|
83
|
-
[Opcode.LT_8, Lt.as(Lt.wireFormat8).fromBuffer],
|
|
84
|
-
[Opcode.LT_16, Lt.as(Lt.wireFormat16).fromBuffer],
|
|
85
|
-
[Opcode.LTE_8, Lte.as(Lte.wireFormat8).fromBuffer],
|
|
86
|
-
[Opcode.LTE_16, Lte.as(Lte.wireFormat16).fromBuffer],
|
|
87
|
-
[Opcode.AND_8, And.as(And.wireFormat8).fromBuffer],
|
|
88
|
-
[Opcode.AND_16, And.as(And.wireFormat16).fromBuffer],
|
|
89
|
-
[Opcode.OR_8, Or.as(Or.wireFormat8).fromBuffer],
|
|
90
|
-
[Opcode.OR_16, Or.as(Or.wireFormat16).fromBuffer],
|
|
91
|
-
[Opcode.XOR_8, Xor.as(Xor.wireFormat8).fromBuffer],
|
|
92
|
-
[Opcode.XOR_16, Xor.as(Xor.wireFormat16).fromBuffer],
|
|
93
|
-
[Opcode.NOT_8, Not.as(Not.wireFormat8).fromBuffer],
|
|
94
|
-
[Opcode.NOT_16, Not.as(Not.wireFormat16).fromBuffer],
|
|
95
|
-
[Opcode.SHL_8, Shl.as(Shl.wireFormat8).fromBuffer],
|
|
96
|
-
[Opcode.SHL_16, Shl.as(Shl.wireFormat16).fromBuffer],
|
|
97
|
-
[Opcode.SHR_8, Shr.as(Shr.wireFormat8).fromBuffer],
|
|
98
|
-
[Opcode.SHR_16, Shr.as(Shr.wireFormat16).fromBuffer],
|
|
99
|
-
[Opcode.CAST_8, Cast.as(Cast.wireFormat8).fromBuffer],
|
|
100
|
-
[Opcode.CAST_16, Cast.as(Cast.wireFormat16).fromBuffer],
|
|
101
|
-
// Execution Environment
|
|
102
|
-
[Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).fromBuffer],
|
|
103
|
-
[CalldataCopy.opcode, Instruction.fromBuffer.bind(CalldataCopy)],
|
|
104
|
-
[SuccessCopy.opcode, Instruction.fromBuffer.bind(SuccessCopy)],
|
|
105
|
-
[Opcode.RETURNDATASIZE, Instruction.fromBuffer.bind(ReturndataSize)],
|
|
106
|
-
[Opcode.RETURNDATACOPY, Instruction.fromBuffer.bind(ReturndataCopy)],
|
|
107
|
-
|
|
108
|
-
// Machine State - Internal Control Flow
|
|
109
|
-
[Jump.opcode, Instruction.fromBuffer.bind(Jump)],
|
|
110
|
-
[JumpI.opcode, Instruction.fromBuffer.bind(JumpI)],
|
|
111
|
-
[InternalCall.opcode, Instruction.fromBuffer.bind(InternalCall)],
|
|
112
|
-
[InternalReturn.opcode, Instruction.fromBuffer.bind(InternalReturn)],
|
|
113
|
-
[Opcode.SET_8, Set.as(Set.wireFormat8).fromBuffer],
|
|
114
|
-
[Opcode.SET_16, Set.as(Set.wireFormat16).fromBuffer],
|
|
115
|
-
[Opcode.SET_32, Set.as(Set.wireFormat32).fromBuffer],
|
|
116
|
-
[Opcode.SET_64, Set.as(Set.wireFormat64).fromBuffer],
|
|
117
|
-
[Opcode.SET_128, Set.as(Set.wireFormat128).fromBuffer],
|
|
118
|
-
[Opcode.SET_FF, Set.as(Set.wireFormatFF).fromBuffer],
|
|
119
|
-
[Opcode.MOV_8, Mov.as(Mov.wireFormat8).fromBuffer],
|
|
120
|
-
[Opcode.MOV_16, Mov.as(Mov.wireFormat16).fromBuffer],
|
|
121
|
-
|
|
122
|
-
// World State
|
|
123
|
-
[SLoad.opcode, Instruction.fromBuffer.bind(SLoad)], // Public Storage
|
|
124
|
-
[SStore.opcode, Instruction.fromBuffer.bind(SStore)], // Public Storage
|
|
125
|
-
[NoteHashExists.opcode, Instruction.fromBuffer.bind(NoteHashExists)], // Notes & Nullifiers
|
|
126
|
-
[EmitNoteHash.opcode, Instruction.fromBuffer.bind(EmitNoteHash)], // Notes & Nullifiers
|
|
127
|
-
[NullifierExists.opcode, Instruction.fromBuffer.bind(NullifierExists)], // Notes & Nullifiers
|
|
128
|
-
[EmitNullifier.opcode, Instruction.fromBuffer.bind(EmitNullifier)], // Notes & Nullifiers
|
|
129
|
-
[L1ToL2MessageExists.opcode, Instruction.fromBuffer.bind(L1ToL2MessageExists)], // Messages
|
|
130
|
-
|
|
131
|
-
// Accrued Substate
|
|
132
|
-
[EmitUnencryptedLog.opcode, Instruction.fromBuffer.bind(EmitUnencryptedLog)],
|
|
133
|
-
[SendL2ToL1Message.opcode, Instruction.fromBuffer.bind(SendL2ToL1Message)],
|
|
134
|
-
[GetContractInstance.opcode, Instruction.fromBuffer.bind(GetContractInstance)],
|
|
135
|
-
|
|
136
|
-
// Control Flow - Contract Calls
|
|
137
|
-
[Call.opcode, Instruction.fromBuffer.bind(Call)],
|
|
138
|
-
[StaticCall.opcode, Instruction.fromBuffer.bind(StaticCall)],
|
|
139
|
-
[Return.opcode, Instruction.fromBuffer.bind(Return)],
|
|
140
|
-
[Opcode.REVERT_8, Revert.as(Revert.wireFormat8).fromBuffer],
|
|
141
|
-
[Opcode.REVERT_16, Revert.as(Revert.wireFormat16).fromBuffer],
|
|
142
|
-
|
|
143
|
-
// Misc
|
|
144
|
-
[DebugLog.opcode, Instruction.fromBuffer.bind(DebugLog)],
|
|
145
|
-
|
|
146
|
-
// Gadgets
|
|
147
|
-
[EcAdd.opcode, Instruction.fromBuffer.bind(EcAdd)],
|
|
148
|
-
[Poseidon2.opcode, Instruction.fromBuffer.bind(Poseidon2)],
|
|
149
|
-
[Sha256Compression.opcode, Instruction.fromBuffer.bind(Sha256Compression)],
|
|
150
|
-
[KeccakF1600.opcode, Instruction.fromBuffer.bind(KeccakF1600)],
|
|
151
|
-
|
|
152
|
-
// Conversions
|
|
153
|
-
[ToRadixBE.opcode, Instruction.fromBuffer.bind(ToRadixBE)],
|
|
154
|
-
]);
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Serializes an array of instructions to bytecode.
|
|
158
|
-
*/
|
|
159
|
-
export function encodeToBytecode(instructions: Bufferable[]): Buffer {
|
|
160
|
-
return serializeToBuffer(instructions);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// For testing only
|
|
164
|
-
export function decodeFromBytecode(bytecode: Buffer, instructionSet: InstructionSet = INSTRUCTION_SET): Instruction[] {
|
|
165
|
-
const instructions: Instruction[] = [];
|
|
166
|
-
let pc = 0;
|
|
167
|
-
while (pc < bytecode.length) {
|
|
168
|
-
const [instruction, bytesConsumed] = decodeInstructionFromBytecode(bytecode, pc, instructionSet);
|
|
169
|
-
instructions.push(instruction);
|
|
170
|
-
pc += bytesConsumed;
|
|
171
|
-
}
|
|
172
|
-
return instructions;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Returns the instruction and the number of bytes consumed.
|
|
176
|
-
export function decodeInstructionFromBytecode(
|
|
177
|
-
bytecode: Buffer,
|
|
178
|
-
pc: number,
|
|
179
|
-
instructionSet: InstructionSet = INSTRUCTION_SET,
|
|
180
|
-
): [Instruction, number] {
|
|
181
|
-
if (pc >= bytecode.length) {
|
|
182
|
-
throw new InvalidProgramCounterError(pc, bytecode.length - 1);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
try {
|
|
186
|
-
const cursor = new BufferCursor(bytecode, pc);
|
|
187
|
-
const startingPosition = cursor.position();
|
|
188
|
-
const opcode: number = cursor.bufferAtPosition().readUint8(); // peek.
|
|
189
|
-
|
|
190
|
-
if (opcode > MAX_OPCODE_VALUE) {
|
|
191
|
-
throw new InvalidOpcodeError(
|
|
192
|
-
`Opcode ${opcode} (0x${opcode.toString(16)}) value is not in the range of valid opcodes (at PC ${pc}).`,
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
const instructionDeserializerOrUndef = instructionSet.get(opcode);
|
|
197
|
-
if (instructionDeserializerOrUndef === undefined) {
|
|
198
|
-
throw new InvalidOpcodeError(`Opcode ${Opcode[opcode]} (0x${opcode.toString(16)}) is not implemented`);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const instructionDeserializer: InstructionDeserializer = instructionDeserializerOrUndef;
|
|
202
|
-
|
|
203
|
-
const instruction = instructionDeserializer(cursor);
|
|
204
|
-
return [instruction, cursor.position() - startingPosition];
|
|
205
|
-
} catch (error) {
|
|
206
|
-
if (error instanceof InvalidTagValueError || error instanceof InvalidOpcodeError) {
|
|
207
|
-
throw duringInstrFetch(error, pc);
|
|
208
|
-
} else if (error instanceof AvmExecutionError) {
|
|
209
|
-
throw new AvmParsingError(`Instruction parsing error at pc ${pc}: ${error.message}`);
|
|
210
|
-
} else {
|
|
211
|
-
const msg = error instanceof Error ? `: ${error.message}` : '';
|
|
212
|
-
throw new AvmParsingError(`Instruction fetching error at pc ${pc}${msg}`);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|