@aztec/simulator 0.0.1-commit.4d3c002 → 0.0.1-commit.4d9804df
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/acvm_wasm.d.ts +1 -1
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm.js +3 -1
- 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 +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/fixtures/amm_test.js +2 -2
- 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 +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 +16 -15
- 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 +5 -2
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +9 -3
- 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 +11 -6
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +67 -38
- package/dest/public/public_processor/public_processor_metrics.d.ts +4 -1
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +8 -0
- 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 -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 +98 -318
- 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 -18
- package/src/client.ts +0 -2
- package/src/private/acvm_wasm.ts +4 -1
- 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 +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/fixtures/amm_test.ts +2 -2
- 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 +41 -60
- 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 +18 -20
- 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 +12 -3
- package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
- package/src/public/public_processor/public_processor.ts +89 -46
- package/src/public/public_processor/public_processor_metrics.ts +12 -0
- 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 -476
- 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 -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 -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 -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 -122
- package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
- package/dest/public/fixtures/opcode_spammer.js +0 -1653
- 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 -72
- 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 -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 -228
- package/src/public/fixtures/minimal_public_tx.ts +0 -26
- package/src/public/fixtures/opcode_spammer.ts +0 -1717
- package/src/public/hinting_db_sources.ts +0 -609
- 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
|
@@ -2,10 +2,8 @@ import {
|
|
|
2
2
|
CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE,
|
|
3
3
|
CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,
|
|
4
4
|
CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
DEFAULT_TEARDOWN_DA_GAS_LIMIT,
|
|
8
|
-
DEFAULT_TEARDOWN_L2_GAS_LIMIT,
|
|
5
|
+
MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT,
|
|
6
|
+
MAX_PROCESSABLE_L2_GAS,
|
|
9
7
|
PRIVATE_LOG_SIZE_IN_FIELDS,
|
|
10
8
|
} from '@aztec/constants';
|
|
11
9
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
@@ -38,6 +36,9 @@ import {
|
|
|
38
36
|
|
|
39
37
|
import { strict as assert } from 'assert';
|
|
40
38
|
|
|
39
|
+
const TEARDOWN_DA_GAS_LIMIT = 98_304;
|
|
40
|
+
const TEARDOWN_L2_GAS_LIMIT = 817_500;
|
|
41
|
+
|
|
41
42
|
export type TestPrivateInsertions = {
|
|
42
43
|
revertible?: {
|
|
43
44
|
nullifiers?: Fr[];
|
|
@@ -69,7 +70,7 @@ export async function createTxForPublicCalls(
|
|
|
69
70
|
"Can't create public tx with no enqueued calls",
|
|
70
71
|
);
|
|
71
72
|
// use max limits
|
|
72
|
-
gasLimits = gasLimits ?? new Gas(
|
|
73
|
+
gasLimits = gasLimits ?? new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
|
|
73
74
|
|
|
74
75
|
const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
|
|
75
76
|
|
|
@@ -128,9 +129,7 @@ export async function createTxForPublicCalls(
|
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
|
|
131
|
-
const teardownGasLimits = teardownCallRequest
|
|
132
|
-
? new Gas(DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT)
|
|
133
|
-
: Gas.empty();
|
|
132
|
+
const teardownGasLimits = teardownCallRequest ? new Gas(TEARDOWN_DA_GAS_LIMIT, TEARDOWN_L2_GAS_LIMIT) : Gas.empty();
|
|
134
133
|
const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
|
|
135
134
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
136
135
|
const header = BlockHeader.empty({ globalVariables: globals });
|
|
@@ -164,7 +163,7 @@ export async function createTxForPrivateOnly(
|
|
|
164
163
|
gasUsedByPrivate: Gas = new Gas(10, 10),
|
|
165
164
|
): Promise<Tx> {
|
|
166
165
|
// use max limits
|
|
167
|
-
const gasLimits = new Gas(
|
|
166
|
+
const gasLimits = new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
|
|
168
167
|
|
|
169
168
|
const forRollup = PartialPrivateTailPublicInputsForRollup.empty();
|
|
170
169
|
|
|
@@ -229,17 +228,15 @@ export async function addNewContractInstanceToTx(
|
|
|
229
228
|
contractInstance: ContractInstanceWithAddress,
|
|
230
229
|
skipNullifierInsertion = false,
|
|
231
230
|
) {
|
|
232
|
-
//
|
|
233
|
-
// is not broadcast in such private logs
|
|
231
|
+
// Only ivpk_m is broadcast as a point (x, y); the other five keys are hashes.
|
|
234
232
|
const publicKeysAsFields = [
|
|
235
|
-
contractInstance.publicKeys.
|
|
236
|
-
contractInstance.publicKeys.
|
|
237
|
-
contractInstance.publicKeys.
|
|
238
|
-
contractInstance.publicKeys.
|
|
239
|
-
contractInstance.publicKeys.
|
|
240
|
-
contractInstance.publicKeys.
|
|
241
|
-
contractInstance.publicKeys.
|
|
242
|
-
contractInstance.publicKeys.masterTaggingPublicKey.y,
|
|
233
|
+
contractInstance.publicKeys.npkMHash,
|
|
234
|
+
contractInstance.publicKeys.ivpkM.x,
|
|
235
|
+
contractInstance.publicKeys.ivpkM.y,
|
|
236
|
+
contractInstance.publicKeys.ovpkMHash,
|
|
237
|
+
contractInstance.publicKeys.tpkMHash,
|
|
238
|
+
contractInstance.publicKeys.mspkMHash,
|
|
239
|
+
contractInstance.publicKeys.fbpkMHash,
|
|
243
240
|
];
|
|
244
241
|
const logFields = [
|
|
245
242
|
CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG,
|
|
@@ -248,6 +245,7 @@ export async function addNewContractInstanceToTx(
|
|
|
248
245
|
new Fr(contractInstance.salt),
|
|
249
246
|
contractInstance.currentContractClassId,
|
|
250
247
|
contractInstance.initializationHash,
|
|
248
|
+
contractInstance.immutablesHash,
|
|
251
249
|
...publicKeysAsFields,
|
|
252
250
|
contractInstance.deployer.toField(),
|
|
253
251
|
];
|
|
@@ -257,7 +255,7 @@ export async function addNewContractInstanceToTx(
|
|
|
257
255
|
);
|
|
258
256
|
|
|
259
257
|
const contractAddressNullifier = await siloNullifier(
|
|
260
|
-
AztecAddress.
|
|
258
|
+
AztecAddress.fromNumberUnsafe(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
|
|
261
259
|
contractInstance.address.toField(),
|
|
262
260
|
);
|
|
263
261
|
|
|
@@ -33,7 +33,8 @@ import {
|
|
|
33
33
|
} from '@aztec/stdlib/tx';
|
|
34
34
|
import type { NativeWorldStateService } from '@aztec/world-state';
|
|
35
35
|
|
|
36
|
-
import { BaseAvmSimulationTester } from '../avm/
|
|
36
|
+
import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
|
|
37
|
+
import { AvmSimulatorPool } from '../avm_simulator_pool.js';
|
|
37
38
|
import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
|
|
38
39
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
39
40
|
import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
@@ -75,7 +76,7 @@ export class FuzzerSimulationRequest {
|
|
|
75
76
|
|
|
76
77
|
/**
|
|
77
78
|
* Creates a TypeScript Tx object from a deserialized C++ Tx (AvmTxHint-like structure).
|
|
78
|
-
* This allows
|
|
79
|
+
* This allows simulating fuzzer-generated transactions with the C++ public tx simulator.
|
|
79
80
|
*/
|
|
80
81
|
async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
|
|
81
82
|
// Create TxHash from the C++ tx hash string
|
|
@@ -189,6 +190,8 @@ async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
|
|
|
189
190
|
/**
|
|
190
191
|
* A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
|
|
191
192
|
* It provides methods for registering contracts from C++ msgpack data and simulating transactions.
|
|
193
|
+
* The simulation itself runs on the production C++ AVM simulator, so the fuzzer compares brillig
|
|
194
|
+
* execution against the real AVM rather than a TS reference.
|
|
192
195
|
*/
|
|
193
196
|
export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
194
197
|
private simulator: PublicTxSimulator;
|
|
@@ -197,22 +200,27 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
|
197
200
|
merkleTrees: MerkleTreeWriteOperations,
|
|
198
201
|
contractDataSource: SimpleContractDataSource,
|
|
199
202
|
globals: GlobalVariables,
|
|
200
|
-
|
|
203
|
+
private avmSimulator: AvmSimulatorPool,
|
|
204
|
+
contractsDB: PublicContractsDB,
|
|
205
|
+
forkId: number,
|
|
201
206
|
) {
|
|
202
207
|
super(contractDataSource, merkleTrees);
|
|
203
|
-
|
|
208
|
+
// collectPublicInputs and collectCallMetadata are required so the C++ result carries the end
|
|
209
|
+
// tree snapshots and app-logic return values that the fuzzer bin reports back to the harness.
|
|
204
210
|
this.simulator = new PublicTxSimulator(
|
|
205
|
-
|
|
206
|
-
contractsDb,
|
|
211
|
+
avmSimulator,
|
|
207
212
|
globals,
|
|
213
|
+
contractsDB,
|
|
214
|
+
forkId,
|
|
208
215
|
{
|
|
209
216
|
skipFeeEnforcement: false,
|
|
210
217
|
collectDebugLogs: false,
|
|
211
218
|
collectHints: false,
|
|
219
|
+
collectPublicInputs: true,
|
|
212
220
|
collectStatistics: false,
|
|
213
|
-
collectCallMetadata:
|
|
221
|
+
collectCallMetadata: true,
|
|
214
222
|
},
|
|
215
|
-
|
|
223
|
+
undefined,
|
|
216
224
|
);
|
|
217
225
|
}
|
|
218
226
|
|
|
@@ -222,11 +230,18 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
|
222
230
|
public static async create(
|
|
223
231
|
worldStateService: NativeWorldStateService,
|
|
224
232
|
globals: GlobalVariables,
|
|
225
|
-
protocolContracts: ProtocolContracts,
|
|
226
233
|
): Promise<AvmFuzzerSimulator> {
|
|
227
234
|
const contractDataSource = new SimpleContractDataSource();
|
|
228
235
|
const merkleTrees = await worldStateService.fork();
|
|
229
|
-
|
|
236
|
+
const forkId = merkleTrees.getRevision().forkId;
|
|
237
|
+
const avmSimulator = await AvmSimulatorPool.spawn({ wsdbIpcPath: worldStateService.getIpcPath() });
|
|
238
|
+
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
239
|
+
return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, avmSimulator, contractsDB, forkId);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Tear down the AVM simulator pool (AVM processes and CDB server). */
|
|
243
|
+
public async close(): Promise<void> {
|
|
244
|
+
await this.avmSimulator[Symbol.asyncDispose]();
|
|
230
245
|
}
|
|
231
246
|
|
|
232
247
|
/**
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
deserializeFromMessagePack,
|
|
8
8
|
serializeWithMessagePack,
|
|
9
9
|
} from '@aztec/stdlib/avm';
|
|
10
|
-
import { GlobalVariables,
|
|
10
|
+
import { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
|
|
11
11
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
12
12
|
|
|
13
13
|
import { createInterface } from 'readline';
|
|
@@ -58,7 +58,6 @@ async function simulateWithFuzzer(
|
|
|
58
58
|
rawContractInstances: [any, any][], // Replace these when we are moving contract instances to TS
|
|
59
59
|
rawPublicDataWrites: any[], // Public data tree writes to apply before simulation
|
|
60
60
|
rawNoteHashes: any[], // Note hashes to apply before simulation
|
|
61
|
-
protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
|
|
62
61
|
): Promise<{
|
|
63
62
|
reverted: boolean;
|
|
64
63
|
output: Fr[];
|
|
@@ -68,7 +67,7 @@ async function simulateWithFuzzer(
|
|
|
68
67
|
}> {
|
|
69
68
|
const worldStateService = await openExistingWorldState(dataDir, mapSizeKb);
|
|
70
69
|
|
|
71
|
-
const simulator = await AvmFuzzerSimulator.create(worldStateService, globals
|
|
70
|
+
const simulator = await AvmFuzzerSimulator.create(worldStateService, globals);
|
|
72
71
|
|
|
73
72
|
await simulator.applyNoteHashes(rawNoteHashes);
|
|
74
73
|
|
|
@@ -108,7 +107,7 @@ async function execute(base64Line: string): Promise<void> {
|
|
|
108
107
|
const rawRequest = deserializeFromMessagePack(buffer);
|
|
109
108
|
const request = FuzzerSimulationRequest.fromPlainObject(rawRequest);
|
|
110
109
|
|
|
111
|
-
// Run the
|
|
110
|
+
// Run the simulation on the C++ AVM simulator
|
|
112
111
|
const result = await simulateWithFuzzer(
|
|
113
112
|
request.wsDataDir,
|
|
114
113
|
request.wsMapSizeKb,
|
|
@@ -118,7 +117,6 @@ async function execute(base64Line: string): Promise<void> {
|
|
|
118
117
|
request.contractInstances,
|
|
119
118
|
request.publicDataWrites,
|
|
120
119
|
request.noteHashes,
|
|
121
|
-
request.protocolContracts,
|
|
122
120
|
);
|
|
123
121
|
|
|
124
122
|
// Serialize the result to msgpack and encode it in base64 for output
|
package/src/public/index.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
export { AvmSimulatorPool, type AvmSimulatorPoolOptions } from './avm_simulator_pool.js';
|
|
2
|
+
export type { PublicContractsDBInterface } from './db_interfaces.js';
|
|
1
3
|
export { PublicContractsDB } from './public_db_sources.js';
|
|
2
4
|
export { GuardedMerkleTreeOperations } from './public_processor/guarded_merkle_tree.js';
|
|
3
5
|
export { PublicProcessor, PublicProcessorFactory } from './public_processor/public_processor.js';
|
|
6
|
+
export type { AvmContractsDBContext, AvmSimulator } from './avm_simulator.js';
|
|
4
7
|
export {
|
|
5
|
-
|
|
8
|
+
PublicTxSimulator,
|
|
9
|
+
MeasuredPublicTxSimulator,
|
|
6
10
|
createPublicTxSimulatorForBlockBuilding,
|
|
7
|
-
|
|
11
|
+
DumpingPublicTxSimulator,
|
|
8
12
|
type PublicTxSimulatorInterface,
|
|
9
|
-
|
|
13
|
+
TelemetryPublicTxSimulator,
|
|
10
14
|
} from './public_tx_simulator/index.js';
|
|
11
15
|
export type { PublicTxResult, PublicSimulatorConfig as PublicTxSimulatorConfig } from '@aztec/stdlib/avm';
|
|
12
16
|
export { getCallRequestsWithCalldataByPhase } from './utils.js';
|
|
@@ -55,7 +55,8 @@ export class PublicContractsDB implements PublicContractsDBInterface {
|
|
|
55
55
|
this.log = createLogger('simulator:contracts-data-source', bindings);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
/** Parses raw contract deployment data and inserts the resulting contracts into the current checkpoint. */
|
|
59
|
+
public addContractsFromLogs(contractDeploymentData: ContractDeploymentData): void {
|
|
59
60
|
const currentState = this.getCurrentState();
|
|
60
61
|
|
|
61
62
|
this.addContractClassesFromEvents(
|
|
@@ -71,8 +72,16 @@ export class PublicContractsDB implements PublicContractsDBInterface {
|
|
|
71
72
|
|
|
72
73
|
public addNewContracts(tx: Tx): void {
|
|
73
74
|
const contractDeploymentData = AllContractDeploymentData.fromTx(tx);
|
|
74
|
-
this.
|
|
75
|
-
this.
|
|
75
|
+
this.addContractsFromLogs(contractDeploymentData.getNonRevertibleContractDeploymentData());
|
|
76
|
+
this.addContractsFromLogs(contractDeploymentData.getRevertibleContractDeploymentData());
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Inserts typed contract instances directly into the current checkpoint. */
|
|
80
|
+
public addContracts(contractInstances?: ContractInstanceWithAddress[]): void {
|
|
81
|
+
const currentState = this.getCurrentState();
|
|
82
|
+
for (const instance of contractInstances ?? []) {
|
|
83
|
+
currentState.addInstance(instance.address, instance);
|
|
84
|
+
}
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
/**
|
|
@@ -12,7 +12,7 @@ import type {
|
|
|
12
12
|
TreeInfo,
|
|
13
13
|
} from '@aztec/stdlib/trees';
|
|
14
14
|
import type { BlockHeader, StateReference } from '@aztec/stdlib/tx';
|
|
15
|
-
import type { WorldStateRevision
|
|
15
|
+
import type { WorldStateRevision } from '@aztec/stdlib/world-state';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Wraps an instance of `MerkleTreeWriteOperations` to allow the sequencer to gate access.
|
|
@@ -94,9 +94,12 @@ export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
|
|
|
94
94
|
getInitialHeader(): BlockHeader {
|
|
95
95
|
return this.target.getInitialHeader();
|
|
96
96
|
}
|
|
97
|
-
public getRevision(): WorldStateRevision
|
|
97
|
+
public getRevision(): WorldStateRevision {
|
|
98
98
|
return this.target.getRevision();
|
|
99
99
|
}
|
|
100
|
+
public getIpcPath(): string {
|
|
101
|
+
return this.target.getIpcPath();
|
|
102
|
+
}
|
|
100
103
|
getSiblingPath<ID extends MerkleTreeId>(treeId: ID, index: bigint): Promise<SiblingPath<TreeHeights[ID]>> {
|
|
101
104
|
return this.guardAndPush(() => this.target.getSiblingPath(treeId, index));
|
|
102
105
|
}
|
|
@@ -3,7 +3,7 @@ import { padArrayEnd } from '@aztec/foundation/collection';
|
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { sleep } from '@aztec/foundation/sleep';
|
|
6
|
-
import { DateProvider, Timer, elapsed,
|
|
6
|
+
import { DateProvider, Timer, elapsed, execWithSignal } from '@aztec/foundation/timer';
|
|
7
7
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
8
8
|
import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
9
9
|
import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
@@ -50,11 +50,12 @@ import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
|
50
50
|
|
|
51
51
|
import { AssertionError } from 'assert';
|
|
52
52
|
|
|
53
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
53
54
|
import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
54
55
|
import {
|
|
55
56
|
type PublicTxSimulatorConfig,
|
|
56
57
|
type PublicTxSimulatorInterface,
|
|
57
|
-
|
|
58
|
+
TelemetryPublicTxSimulator,
|
|
58
59
|
} from '../public_tx_simulator/index.js';
|
|
59
60
|
import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
|
|
60
61
|
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
@@ -66,6 +67,7 @@ export class PublicProcessorFactory {
|
|
|
66
67
|
private log: Logger;
|
|
67
68
|
constructor(
|
|
68
69
|
private contractDataSource: ContractDataSource,
|
|
70
|
+
private avmSimulator: AvmSimulator,
|
|
69
71
|
private dateProvider: DateProvider = new DateProvider(),
|
|
70
72
|
protected telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
71
73
|
bindings?: LoggerBindings,
|
|
@@ -74,21 +76,23 @@ export class PublicProcessorFactory {
|
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
/**
|
|
77
|
-
* Creates a new instance of a PublicProcessor.
|
|
79
|
+
* Creates a new instance of a PublicProcessor. The simulator it drives reads contract data from the fork's
|
|
80
|
+
* contracts DB, scoped by the fork id so AVM requests route to the right state.
|
|
81
|
+
*
|
|
78
82
|
* @param globalVariables - The global variables for the block being processed.
|
|
79
|
-
* @param
|
|
83
|
+
* @param contractsDB - Optional pre-populated contracts DB; a fresh one is constructed if omitted.
|
|
80
84
|
* @returns A new instance of a PublicProcessor.
|
|
81
85
|
*/
|
|
82
86
|
public create(
|
|
83
87
|
merkleTree: MerkleTreeWriteOperations,
|
|
84
88
|
globalVariables: GlobalVariables,
|
|
85
89
|
config: PublicSimulatorConfig,
|
|
90
|
+
contractsDB: PublicContractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings()),
|
|
86
91
|
): PublicProcessor {
|
|
87
|
-
const
|
|
88
|
-
const contractsDB = new PublicContractsDB(this.contractDataSource, bindings);
|
|
92
|
+
const forkId = merkleTree.getRevision().forkId;
|
|
89
93
|
|
|
90
94
|
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
91
|
-
const publicTxSimulator = this.createPublicTxSimulator(
|
|
95
|
+
const publicTxSimulator = this.createPublicTxSimulator(forkId, globalVariables, contractsDB, config);
|
|
92
96
|
|
|
93
97
|
return new PublicProcessor(
|
|
94
98
|
globalVariables,
|
|
@@ -97,20 +101,21 @@ export class PublicProcessorFactory {
|
|
|
97
101
|
publicTxSimulator,
|
|
98
102
|
this.dateProvider,
|
|
99
103
|
this.telemetryClient,
|
|
100
|
-
createLogger('simulator:public-processor',
|
|
104
|
+
createLogger('simulator:public-processor', this.log.getBindings()),
|
|
101
105
|
);
|
|
102
106
|
}
|
|
103
107
|
|
|
104
108
|
protected createPublicTxSimulator(
|
|
105
|
-
|
|
106
|
-
contractsDB: PublicContractsDB,
|
|
109
|
+
forkId: number,
|
|
107
110
|
globalVariables: GlobalVariables,
|
|
111
|
+
contractsDB: PublicContractsDB,
|
|
108
112
|
config?: Partial<PublicTxSimulatorConfig>,
|
|
109
113
|
): PublicTxSimulatorInterface {
|
|
110
|
-
return new
|
|
111
|
-
|
|
112
|
-
contractsDB,
|
|
114
|
+
return new TelemetryPublicTxSimulator(
|
|
115
|
+
this.avmSimulator,
|
|
113
116
|
globalVariables,
|
|
117
|
+
contractsDB,
|
|
118
|
+
forkId,
|
|
114
119
|
this.telemetryClient,
|
|
115
120
|
config,
|
|
116
121
|
this.log.getBindings(),
|
|
@@ -125,6 +130,13 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
125
130
|
}
|
|
126
131
|
}
|
|
127
132
|
|
|
133
|
+
class PublicProcessorAbortError extends Error {
|
|
134
|
+
constructor(message: string = 'Aborted while processing tx') {
|
|
135
|
+
super(message);
|
|
136
|
+
this.name = 'PublicProcessorAbortError';
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
128
140
|
/**
|
|
129
141
|
* Converts Txs lifted from the P2P module into ProcessedTx objects by executing
|
|
130
142
|
* any public function calls in them. Txs with private calls only are unaffected.
|
|
@@ -161,7 +173,7 @@ export class PublicProcessor implements Traceable {
|
|
|
161
173
|
limits: PublicProcessorLimits = {},
|
|
162
174
|
validator: PublicProcessorValidator = {},
|
|
163
175
|
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], DebugLog[]]> {
|
|
164
|
-
const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal } = limits;
|
|
176
|
+
const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal, signal } = limits;
|
|
165
177
|
const { preprocessValidator, nullifierCache } = validator;
|
|
166
178
|
const result: ProcessedTx[] = [];
|
|
167
179
|
const usedTxs: Tx[] = [];
|
|
@@ -174,6 +186,8 @@ export class PublicProcessor implements Traceable {
|
|
|
174
186
|
let totalPublicGas = new Gas(0, 0);
|
|
175
187
|
let totalBlockGas = new Gas(0, 0);
|
|
176
188
|
let totalBlobFields = 0;
|
|
189
|
+
let silentlySkippedCount = 0;
|
|
190
|
+
let totalSilentlySkippedDurationMs = 0;
|
|
177
191
|
|
|
178
192
|
for await (const tx of txs) {
|
|
179
193
|
// Only process up to the max tx limit
|
|
@@ -182,11 +196,15 @@ export class PublicProcessor implements Traceable {
|
|
|
182
196
|
break;
|
|
183
197
|
}
|
|
184
198
|
|
|
185
|
-
// Bail if we've hit the deadline
|
|
199
|
+
// Bail if we've hit the deadline or have been interrupted.
|
|
186
200
|
if (deadline && this.dateProvider.now() > +deadline) {
|
|
187
201
|
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
188
202
|
break;
|
|
189
203
|
}
|
|
204
|
+
if (signal?.aborted) {
|
|
205
|
+
this.log.warn(`Stopping tx processing due to abort signal.`);
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
190
208
|
|
|
191
209
|
const txHash = tx.getTxHash().toString();
|
|
192
210
|
|
|
@@ -224,11 +242,6 @@ export class PublicProcessor implements Traceable {
|
|
|
224
242
|
failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
|
|
225
243
|
returns.push(new NestedProcessReturnValues([]));
|
|
226
244
|
continue;
|
|
227
|
-
} else if (result.result === 'skipped') {
|
|
228
|
-
const reason = result.reason.join(', ');
|
|
229
|
-
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
230
|
-
returns.push(new NestedProcessReturnValues([]));
|
|
231
|
-
continue;
|
|
232
245
|
} else {
|
|
233
246
|
this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
|
|
234
247
|
}
|
|
@@ -244,7 +257,9 @@ export class PublicProcessor implements Traceable {
|
|
|
244
257
|
this.contractsDB.createCheckpoint();
|
|
245
258
|
|
|
246
259
|
try {
|
|
247
|
-
const [processedTx, returnValues, txDebugLogs] = await
|
|
260
|
+
const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(() =>
|
|
261
|
+
this.processTx(tx, deadline, signal),
|
|
262
|
+
);
|
|
248
263
|
|
|
249
264
|
// Inject a fake processing failure after N txs if requested
|
|
250
265
|
const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
|
|
@@ -265,8 +280,12 @@ export class PublicProcessor implements Traceable {
|
|
|
265
280
|
txBlobFields,
|
|
266
281
|
totalBlobFields,
|
|
267
282
|
maxBlobFields,
|
|
283
|
+
txProcessingTimeMs,
|
|
268
284
|
},
|
|
269
285
|
);
|
|
286
|
+
silentlySkippedCount += 1;
|
|
287
|
+
totalSilentlySkippedDurationMs += txProcessingTimeMs;
|
|
288
|
+
this.metrics.recordSilentlySkipped(txProcessingTimeMs);
|
|
270
289
|
// Need to revert the checkpoint here and don't go any further
|
|
271
290
|
await checkpoint.revert();
|
|
272
291
|
this.contractsDB.revertCheckpoint();
|
|
@@ -310,15 +329,15 @@ export class PublicProcessor implements Traceable {
|
|
|
310
329
|
// Commit the tx-level contracts checkpoint on success
|
|
311
330
|
this.contractsDB.commitCheckpoint();
|
|
312
331
|
} catch (err: any) {
|
|
313
|
-
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
314
|
-
this.log.warn(
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
//
|
|
318
|
-
//
|
|
319
|
-
//
|
|
320
|
-
//
|
|
321
|
-
//
|
|
332
|
+
if (err?.name === 'PublicProcessorTimeoutError' || err?.name === 'PublicProcessorAbortError') {
|
|
333
|
+
this.log.warn(
|
|
334
|
+
`Stopping tx processing due to ${err.name === 'PublicProcessorTimeoutError' ? 'timeout' : 'abort'}.`,
|
|
335
|
+
);
|
|
336
|
+
// We hit the transaction execution deadline or an external abort signal.
|
|
337
|
+
// There may still be a simulation in progress.
|
|
338
|
+
// Signal cancellation AND WAIT for the simulation to actually stop. Cancellation is
|
|
339
|
+
// cooperative: the simulator may be mid slow-operation and won't observe the flag until it
|
|
340
|
+
// completes, and without waiting we'd revert checkpoints while it's still writing to state.
|
|
322
341
|
await this.publicTxSimulator.cancel?.();
|
|
323
342
|
|
|
324
343
|
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|
|
@@ -364,13 +383,24 @@ export class PublicProcessor implements Traceable {
|
|
|
364
383
|
const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
|
|
365
384
|
this.metrics.recordAllTxs(totalPublicGas, rate);
|
|
366
385
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
386
|
+
const silentlySkippedDurationMs = Math.round(totalSilentlySkippedDurationMs);
|
|
387
|
+
this.log.info(
|
|
388
|
+
`Processed ${result.length} successful txs and ${failed.length} failed txs ` +
|
|
389
|
+
`(${silentlySkippedCount} silently skipped, ${silentlySkippedDurationMs}ms wasted) ` +
|
|
390
|
+
`in ${duration}s`,
|
|
391
|
+
{
|
|
392
|
+
blockNumber: this.globalVariables.blockNumber,
|
|
393
|
+
successfulCount: result.length,
|
|
394
|
+
failedCount: failed.length,
|
|
395
|
+
duration,
|
|
396
|
+
rate,
|
|
397
|
+
totalPublicGas,
|
|
398
|
+
totalBlockGas,
|
|
399
|
+
totalSizeInBytes,
|
|
400
|
+
silentlySkippedCount,
|
|
401
|
+
silentlySkippedDurationMs,
|
|
402
|
+
},
|
|
403
|
+
);
|
|
374
404
|
|
|
375
405
|
return [result, failed, usedTxs, returns, debugLogs];
|
|
376
406
|
}
|
|
@@ -395,9 +425,10 @@ export class PublicProcessor implements Traceable {
|
|
|
395
425
|
private async processTx(
|
|
396
426
|
tx: Tx,
|
|
397
427
|
deadline: Date | undefined,
|
|
428
|
+
signal: AbortSignal | undefined,
|
|
398
429
|
): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
|
|
399
430
|
const [time, [processedTx, returnValues, debugLogs]] = await elapsed(() =>
|
|
400
|
-
this.processTxWithinDeadline(tx, deadline),
|
|
431
|
+
this.processTxWithinDeadline(tx, deadline, signal),
|
|
401
432
|
);
|
|
402
433
|
|
|
403
434
|
this.log.verbose(
|
|
@@ -451,10 +482,11 @@ export class PublicProcessor implements Traceable {
|
|
|
451
482
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
452
483
|
}
|
|
453
484
|
|
|
454
|
-
/** Processes the given tx within deadline
|
|
485
|
+
/** Processes the given tx within deadline or until the signal is aborted. */
|
|
455
486
|
private async processTxWithinDeadline(
|
|
456
487
|
tx: Tx,
|
|
457
488
|
deadline: Date | undefined,
|
|
489
|
+
signal: AbortSignal | undefined,
|
|
458
490
|
): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> {
|
|
459
491
|
const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> =
|
|
460
492
|
tx.hasPublicCalls() ? () => this.processTxWithPublicCalls(tx) : () => this.processPrivateOnlyTx(tx);
|
|
@@ -471,27 +503,38 @@ export class PublicProcessor implements Traceable {
|
|
|
471
503
|
}
|
|
472
504
|
: innerProcessFn;
|
|
473
505
|
|
|
474
|
-
|
|
506
|
+
const processingSignal = this.getProcessingSignal(tx, deadline, signal);
|
|
507
|
+
if (!processingSignal) {
|
|
475
508
|
return await processFn();
|
|
476
509
|
}
|
|
477
510
|
|
|
478
|
-
|
|
511
|
+
return await execWithSignal(
|
|
512
|
+
() => processFn(),
|
|
513
|
+
processingSignal,
|
|
514
|
+
signal =>
|
|
515
|
+
signal.reason?.name === 'TimeoutError' ? new PublicProcessorTimeoutError() : new PublicProcessorAbortError(),
|
|
516
|
+
);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
private getProcessingSignal(tx: Tx, deadline: Date | undefined, signal: AbortSignal | undefined) {
|
|
520
|
+
if (!deadline) {
|
|
521
|
+
return signal;
|
|
522
|
+
}
|
|
523
|
+
|
|
479
524
|
const timeout = +deadline - this.dateProvider.now();
|
|
480
525
|
if (timeout <= 0) {
|
|
481
526
|
throw new PublicProcessorTimeoutError();
|
|
482
527
|
}
|
|
483
528
|
|
|
529
|
+
const txHash = tx.getTxHash();
|
|
484
530
|
this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
|
|
485
531
|
deadline: deadline.toISOString(),
|
|
486
532
|
now: new Date(this.dateProvider.now()).toISOString(),
|
|
487
533
|
txHash,
|
|
488
534
|
});
|
|
489
535
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
timeout,
|
|
493
|
-
() => new PublicProcessorTimeoutError(),
|
|
494
|
-
);
|
|
536
|
+
const timeoutSignal = AbortSignal.timeout(timeout);
|
|
537
|
+
return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
|
|
495
538
|
}
|
|
496
539
|
|
|
497
540
|
/**
|
|
@@ -30,6 +30,9 @@ export class PublicProcessorMetrics {
|
|
|
30
30
|
|
|
31
31
|
private treeInsertionDuration: Histogram;
|
|
32
32
|
|
|
33
|
+
private silentlySkippedCount: UpDownCounter;
|
|
34
|
+
private silentlySkippedDuration: Histogram;
|
|
35
|
+
|
|
33
36
|
constructor(client: TelemetryClient, name = 'PublicProcessor') {
|
|
34
37
|
this.tracer = client.getTracer(name);
|
|
35
38
|
const meter = client.getMeter(name);
|
|
@@ -60,6 +63,10 @@ export class PublicProcessorMetrics {
|
|
|
60
63
|
this.gasRate = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE);
|
|
61
64
|
|
|
62
65
|
this.treeInsertionDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION);
|
|
66
|
+
|
|
67
|
+
this.silentlySkippedCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT);
|
|
68
|
+
|
|
69
|
+
this.silentlySkippedDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION);
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
recordPhaseDuration(phaseName: TxExecutionPhase, durationMs: number) {
|
|
@@ -123,4 +130,9 @@ export class PublicProcessorMetrics {
|
|
|
123
130
|
recordTreeInsertions(durationUs: number) {
|
|
124
131
|
this.treeInsertionDuration.record(Math.ceil(durationUs));
|
|
125
132
|
}
|
|
133
|
+
|
|
134
|
+
recordSilentlySkipped(durationMs: number) {
|
|
135
|
+
this.silentlySkippedCount.add(1);
|
|
136
|
+
this.silentlySkippedDuration.record(Math.ceil(durationMs));
|
|
137
|
+
}
|
|
126
138
|
}
|