@aztec/simulator 0.0.1-commit.3100065 → 0.0.1-commit.321f6a9
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/public/avm/testing/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +1 -1
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/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 +0 -33
- 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/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 +29 -41
- package/dest/public/fixtures/simple_contract_data_source.js +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
- package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
- package/dest/public/index.d.ts +5 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +2 -1
- package/dest/public/public_db_sources.d.ts +2 -2
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +4 -3
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
- package/dest/public/public_processor/public_processor.d.ts +8 -4
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +19 -34
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
- package/dest/public/public_tx_simulator/factories.d.ts +8 -8
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +8 -8
- package/dest/public/public_tx_simulator/index.d.ts +4 -6
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +2 -4
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -75
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -323
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
- package/dest/public/test_executor_metrics.d.ts +1 -6
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +0 -22
- package/package.json +22 -19
- package/src/public/avm/{fixtures → testing}/utils.ts +0 -39
- 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/index.ts +1 -3
- package/src/public/fixtures/public_processor_test_env.ts +88 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +37 -50
- package/src/public/fixtures/simple_contract_data_source.ts +1 -1
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
- package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
- package/src/public/index.ts +7 -3
- package/src/public/public_db_sources.ts +1 -1
- package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
- package/src/public/public_processor/public_processor.ts +25 -39
- package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
- package/src/public/public_tx_simulator/factories.ts +27 -10
- package/src/public/public_tx_simulator/index.ts +6 -5
- package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -480
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
- package/src/public/test_executor_metrics.ts +0 -24
- package/dest/public/avm/avm_context.d.ts +0 -41
- package/dest/public/avm/avm_context.d.ts.map +0 -1
- package/dest/public/avm/avm_context.js +0 -44
- package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
- package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/public/avm/avm_contract_call_result.js +0 -54
- package/dest/public/avm/avm_execution_environment.d.ts +0 -24
- package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/public/avm/avm_execution_environment.js +0 -33
- package/dest/public/avm/avm_gas.d.ts +0 -44
- package/dest/public/avm/avm_gas.d.ts.map +0 -1
- package/dest/public/avm/avm_gas.js +0 -195
- package/dest/public/avm/avm_machine_state.d.ts +0 -98
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -110
- package/dest/public/avm/avm_memory_types.d.ts +0 -275
- package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/public/avm/avm_memory_types.js +0 -354
- package/dest/public/avm/avm_simulator.d.ts +0 -41
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -192
- package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
- package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator_interface.js +0 -3
- package/dest/public/avm/calldata.d.ts +0 -51
- package/dest/public/avm/calldata.d.ts.map +0 -1
- package/dest/public/avm/calldata.js +0 -64
- package/dest/public/avm/errors.d.ts +0 -104
- package/dest/public/avm/errors.d.ts.map +0 -1
- package/dest/public/avm/errors.js +0 -141
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +0 -2
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +0 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -84
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.d.ts +0 -42
- package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.js +0 -45
- package/dest/public/avm/fixtures/utils.d.ts +0 -39
- package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
- package/dest/public/avm/index.d.ts +0 -2
- package/dest/public/avm/index.d.ts.map +0 -1
- package/dest/public/avm/index.js +0 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -74
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -254
- package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/public/avm/opcodes/addressing_mode.js +0 -94
- package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -97
- package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
- package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/public/avm/opcodes/bitwise.js +0 -99
- package/dest/public/avm/opcodes/comparators.d.ts +0 -25
- package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/public/avm/opcodes/comparators.js +0 -43
- package/dest/public/avm/opcodes/contract.d.ts +0 -21
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -69
- package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/public/avm/opcodes/control_flow.js +0 -107
- package/dest/public/avm/opcodes/conversion.d.ts +0 -18
- package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/public/avm/opcodes/conversion.js +0 -333
- package/dest/public/avm/opcodes/ec_add.d.ts +0 -17
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -79
- package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/public/avm/opcodes/environment_getters.js +0 -77
- package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
- package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/public/avm/opcodes/external_calls.js +0 -210
- package/dest/public/avm/opcodes/hashing.d.ts +0 -36
- package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/public/avm/opcodes/hashing.js +0 -119
- package/dest/public/avm/opcodes/index.d.ts +0 -16
- package/dest/public/avm/opcodes/index.d.ts.map +0 -1
- package/dest/public/avm/opcodes/index.js +0 -15
- package/dest/public/avm/opcodes/instruction.d.ts +0 -74
- package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction.js +0 -95
- package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction_impl.js +0 -30
- package/dest/public/avm/opcodes/memory.d.ts +0 -74
- package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/public/avm/opcodes/memory.js +0 -257
- package/dest/public/avm/opcodes/misc.d.ts +0 -18
- package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/public/avm/opcodes/misc.js +0 -73
- package/dest/public/avm/opcodes/storage.d.ts +0 -25
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -78
- package/dest/public/avm/revert_reason.d.ts +0 -18
- package/dest/public/avm/revert_reason.d.ts.map +0 -1
- package/dest/public/avm/revert_reason.js +0 -39
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/public/avm/serialization/buffer_cursor.js +0 -99
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
- package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/instruction_serialization.js +0 -261
- package/dest/public/avm/test_utils.d.ts +0 -15
- package/dest/public/avm/test_utils.d.ts.map +0 -1
- package/dest/public/avm/test_utils.js +0 -44
- package/dest/public/debug_fn_name.d.ts +0 -18
- package/dest/public/debug_fn_name.d.ts.map +0 -1
- package/dest/public/debug_fn_name.js +0 -37
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -19
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -263
- package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
- package/dest/public/fixtures/minimal_public_tx.js +0 -19
- package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
- package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
- package/dest/public/fixtures/opcode_spammer.js +0 -1645
- package/dest/public/hinting_db_sources.d.ts +0 -80
- package/dest/public/hinting_db_sources.d.ts.map +0 -1
- package/dest/public/hinting_db_sources.js +0 -356
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -99
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -131
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -135
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +0 -298
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
- package/dest/public/side_effect_trace.d.ts +0 -87
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace.js +0 -199
- package/dest/public/side_effect_trace_interface.d.ts +0 -22
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.js +0 -1
- package/dest/public/state_manager/index.d.ts +0 -2
- package/dest/public/state_manager/index.d.ts.map +0 -1
- package/dest/public/state_manager/index.js +0 -1
- package/dest/public/state_manager/nullifiers.d.ts +0 -61
- package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
- package/dest/public/state_manager/nullifiers.js +0 -92
- package/dest/public/state_manager/public_storage.d.ts +0 -66
- package/dest/public/state_manager/public_storage.d.ts.map +0 -1
- package/dest/public/state_manager/public_storage.js +0 -145
- package/dest/public/state_manager/state_manager.d.ts +0 -170
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -402
- package/src/public/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -69
- package/src/public/avm/avm_execution_environment.ts +0 -51
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -170
- package/src/public/avm/avm_memory_types.ts +0 -440
- package/src/public/avm/avm_simulator.ts +0 -279
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/calldata.ts +0 -101
- package/src/public/avm/errors.ts +0 -177
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
- package/src/public/avm/fixtures/initializers.ts +0 -103
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -285
- package/src/public/avm/opcodes/addressing_mode.ts +0 -111
- package/src/public/avm/opcodes/arithmetic.ts +0 -129
- package/src/public/avm/opcodes/bitwise.ts +0 -113
- package/src/public/avm/opcodes/comparators.ts +0 -55
- package/src/public/avm/opcodes/contract.ts +0 -76
- package/src/public/avm/opcodes/control_flow.ts +0 -123
- package/src/public/avm/opcodes/conversion.ts +0 -104
- package/src/public/avm/opcodes/ec_add.ts +0 -86
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -262
- package/src/public/avm/opcodes/hashing.ts +0 -151
- package/src/public/avm/opcodes/index.ts +0 -15
- package/src/public/avm/opcodes/instruction.ts +0 -136
- package/src/public/avm/opcodes/instruction_impl.ts +0 -36
- package/src/public/avm/opcodes/memory.ts +0 -293
- package/src/public/avm/opcodes/misc.ts +0 -102
- package/src/public/avm/opcodes/storage.ts +0 -95
- package/src/public/avm/revert_reason.ts +0 -58
- package/src/public/avm/serialization/buffer_cursor.ts +0 -118
- package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
- package/src/public/avm/serialization/instruction_serialization.ts +0 -249
- package/src/public/avm/test_utils.ts +0 -64
- package/src/public/debug_fn_name.ts +0 -52
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -435
- package/src/public/fixtures/minimal_public_tx.ts +0 -26
- package/src/public/fixtures/opcode_spammer.ts +0 -1713
- package/src/public/hinting_db_sources.ts +0 -610
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -125
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -210
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -482
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -293
- package/src/public/side_effect_trace_interface.ts +0 -28
- package/src/public/state_manager/index.ts +0 -1
- package/src/public/state_manager/nullifiers.ts +0 -103
- package/src/public/state_manager/public_storage.ts +0 -174
- package/src/public/state_manager/state_manager.ts +0 -569
- /package/dest/public/avm/{fixtures → testing}/account_proof_fetcher.js +0 -0
- /package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.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
- /package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
|
|
2
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
3
|
+
import type { GlobalVariables, ProtocolContracts, Tx } from '@aztec/stdlib/tx';
|
|
4
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
5
|
+
import type { PublicContractsDB } from '../public_db_sources.js';
|
|
6
|
+
/**
|
|
7
|
+
* Shared base for public tx simulators: holds the common configuration, the {@link AvmSimulator} used
|
|
8
|
+
* to run the transaction's public calls, the contracts DB and fork id that scope the simulation's
|
|
9
|
+
* contract-data lookups, the logger, and the tx-hash helper. Concrete simulators extend this and
|
|
10
|
+
* implement `simulate`.
|
|
11
|
+
*/
|
|
12
|
+
export declare abstract class PublicTxSimulatorBase {
|
|
13
|
+
protected avmSimulator: AvmSimulator;
|
|
14
|
+
protected globalVariables: GlobalVariables;
|
|
15
|
+
protected contractsDB: PublicContractsDB;
|
|
16
|
+
protected forkId: number;
|
|
17
|
+
protected protocolContracts: ProtocolContracts;
|
|
18
|
+
protected log: Logger;
|
|
19
|
+
protected readonly config: PublicSimulatorConfig;
|
|
20
|
+
protected readonly bindings?: LoggerBindings;
|
|
21
|
+
constructor(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, config?: Partial<PublicSimulatorConfig>, protocolContracts?: ProtocolContracts, bindings?: LoggerBindings);
|
|
22
|
+
protected computeTxHash(tx: Tx): import("@aztec/stdlib/tx").TxHash;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvcl9iYXNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL3B1YmxpY190eF9zaW11bGF0b3IvcHVibGljX3R4X3NpbXVsYXRvcl9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0UsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRTs7Ozs7R0FLRztBQUNILDhCQUFzQixxQkFBcUI7SUFNdkMsU0FBUyxDQUFDLFlBQVksRUFBRSxZQUFZO0lBQ3BDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsZUFBZTtJQUMxQyxTQUFTLENBQUMsV0FBVyxFQUFFLGlCQUFpQjtJQUN4QyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU07SUFFeEIsU0FBUyxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQjtJQVZoRCxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUN0QixTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQztJQUNqRCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQztJQUU3QyxZQUNZLFlBQVksRUFBRSxZQUFZLEVBQzFCLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFdBQVcsRUFBRSxpQkFBaUIsRUFDOUIsTUFBTSxFQUFFLE1BQU0sRUFDeEIsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQzdCLGlCQUFpQixHQUFFLGlCQUF5QyxFQUN0RSxRQUFRLENBQUMsRUFBRSxjQUFjLEVBSzFCO0lBRUQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxxQ0FFN0I7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public_tx_simulator_base.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/public_tx_simulator_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;;;;GAKG;AACH,8BAAsB,qBAAqB;IAMvC,SAAS,CAAC,YAAY,EAAE,YAAY;IACpC,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,WAAW,EAAE,iBAAiB;IACxC,SAAS,CAAC,MAAM,EAAE,MAAM;IAExB,SAAS,CAAC,iBAAiB,EAAE,iBAAiB;IAVhD,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE7C,YACY,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,EAC7B,iBAAiB,GAAE,iBAAyC,EACtE,QAAQ,CAAC,EAAE,cAAc,EAK1B;IAED,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,qCAE7B;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { ProtocolContractsList } from '@aztec/protocol-contracts';
|
|
3
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
4
|
+
/**
|
|
5
|
+
* Shared base for public tx simulators: holds the common configuration, the {@link AvmSimulator} used
|
|
6
|
+
* to run the transaction's public calls, the contracts DB and fork id that scope the simulation's
|
|
7
|
+
* contract-data lookups, the logger, and the tx-hash helper. Concrete simulators extend this and
|
|
8
|
+
* implement `simulate`.
|
|
9
|
+
*/ export class PublicTxSimulatorBase {
|
|
10
|
+
avmSimulator;
|
|
11
|
+
globalVariables;
|
|
12
|
+
contractsDB;
|
|
13
|
+
forkId;
|
|
14
|
+
protocolContracts;
|
|
15
|
+
log;
|
|
16
|
+
config;
|
|
17
|
+
bindings;
|
|
18
|
+
constructor(avmSimulator, globalVariables, contractsDB, forkId, config, protocolContracts = ProtocolContractsList, bindings){
|
|
19
|
+
this.avmSimulator = avmSimulator;
|
|
20
|
+
this.globalVariables = globalVariables;
|
|
21
|
+
this.contractsDB = contractsDB;
|
|
22
|
+
this.forkId = forkId;
|
|
23
|
+
this.protocolContracts = protocolContracts;
|
|
24
|
+
this.config = PublicSimulatorConfig.from(config ?? {});
|
|
25
|
+
this.bindings = bindings;
|
|
26
|
+
this.log = createLogger(`simulator:public_tx_simulator`, bindings);
|
|
27
|
+
}
|
|
28
|
+
computeTxHash(tx) {
|
|
29
|
+
return tx.getTxHash();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -4,14 +4,14 @@ export interface PublicTxSimulatorInterface {
|
|
|
4
4
|
simulate(tx: Tx): Promise<PublicTxResult>;
|
|
5
5
|
/**
|
|
6
6
|
* Cancel the current simulation if one is in progress.
|
|
7
|
-
* This signals the underlying simulator
|
|
7
|
+
* This signals the underlying simulator to stop at the next safe point.
|
|
8
8
|
* Safe to call even if no simulation is in progress.
|
|
9
9
|
* Optional - not all implementations support cancellation.
|
|
10
10
|
*
|
|
11
11
|
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* Cancellation is cooperative: signaling it only sets a flag the simulator
|
|
13
|
+
* checks at certain points, so if it's mid slow-operation it won't stop until
|
|
14
|
+
* that completes.
|
|
15
15
|
* @returns Promise that resolves when cancellation is signaled (and optionally when simulation stops)
|
|
16
16
|
*/
|
|
17
17
|
cancel?(waitTimeoutMs?: number): Promise<void>;
|
|
@@ -20,7 +20,7 @@ export interface MeasuredPublicTxSimulatorInterface {
|
|
|
20
20
|
simulate(tx: Tx, txLabel: string): Promise<PublicTxResult>;
|
|
21
21
|
/**
|
|
22
22
|
* Cancel the current simulation if one is in progress.
|
|
23
|
-
* This signals the underlying simulator
|
|
23
|
+
* This signals the underlying simulator to stop at the next safe point.
|
|
24
24
|
* Safe to call even if no simulation is in progress.
|
|
25
25
|
* Optional - not all implementations support cancellation.
|
|
26
26
|
*
|
|
@@ -13,10 +13,6 @@ export interface PublicTxMetrics {
|
|
|
13
13
|
totalDurationMs: number;
|
|
14
14
|
manaUsed: number | undefined;
|
|
15
15
|
totalInstructionsExecuted: number;
|
|
16
|
-
bytecodeSizes: {
|
|
17
|
-
contractName: string;
|
|
18
|
-
sizeBytes: number;
|
|
19
|
-
}[];
|
|
20
16
|
nonRevertiblePrivateInsertionsUs: number | undefined;
|
|
21
17
|
revertiblePrivateInsertionsUs: number | undefined;
|
|
22
18
|
enqueuedCalls: PublicEnqueuedCallMetrics[];
|
|
@@ -51,11 +47,10 @@ export declare class TestExecutorMetrics implements ExecutorMetricsInterface {
|
|
|
51
47
|
recordEnqueuedCallSimulation(fnName: string, durationMs: number, manaUsed: number, totalInstructionsExecuted: number): void;
|
|
52
48
|
recordEnqueuedCallSimulationFailure(fnName: string, durationMs: number, manaUsed: number, totalInstructionsExecuted: number): void;
|
|
53
49
|
recordPrivateEffectsInsertion(durationUs: number, type: 'revertible' | 'non-revertible'): void;
|
|
54
|
-
recordBytecodeSize(txLabel: string, contractName: string, sizeBytes: number): void;
|
|
55
50
|
recordProverMetrics(txLabel: string, metrics: Partial<PublicTxMetrics>): void;
|
|
56
51
|
prettyPrint(filter?: PublicTxMetricsFilter): void;
|
|
57
52
|
toPrettyString(filter?: PublicTxMetricsFilter): string;
|
|
58
53
|
toJSON(indent?: number): string;
|
|
59
54
|
toGithubActionBenchmarkJSON(indent?: number): string;
|
|
60
55
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9leGVjdXRvcl9tZXRyaWNzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3Rlc3RfZXhlY3V0b3JfbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFdkYsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJakQsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVoRixNQUFNLFdBQVcseUJBQXlCO0lBQ3hDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIseUJBQXlCLEVBQUUsTUFBTSxDQUFDO0lBQ2xDLFFBQVEsRUFBRSxPQUFPLENBQUM7Q0FDbkI7QUFFRCxNQUFNLFdBQVcsZUFBZTtJQUU5QixlQUFlLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLFFBQVEsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzdCLHlCQUF5QixFQUFFLE1BQU0sQ0FBQztJQUNsQyxnQ0FBZ0MsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ3JELDZCQUE2QixFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbEQsYUFBYSxFQUFFLHlCQUF5QixFQUFFLENBQUM7SUFDM0MsWUFBWSxFQUFFLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFFckMsc0JBQXNCLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ3hDLDJCQUEyQixFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFFaEQsNkJBQTZCLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUNsRCx1QkFBdUIsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzVDLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDdEMsWUFBWSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDakMsNkJBQTZCLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUNsRCx3Q0FBd0MsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzdELHdCQUF3QixFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7Q0FDOUM7QUFXRCxvQkFBWSxxQkFBcUI7SUFDL0IsR0FBRyxJQUFBO0lBQ0gsTUFBTSxJQUFBO0lBQ04sU0FBUyxJQUFBO0lBQ1QsWUFBWSxJQUFBO0lBQ1osT0FBTyxJQUFBO0NBQ1I7QUEyQkQscUJBQWEsbUJBQW9CLFlBQVcsd0JBQXdCOztJQUNsRSxPQUFPLENBQUMsTUFBTSxDQUFTO0lBRXZCLE9BQU8sQ0FBQyxTQUFTLENBQTJDO0lBQzVELE9BQU8sQ0FBQyxjQUFjLENBQXFCO0lBQzNDLE9BQU8sQ0FBQyxPQUFPLENBQW9CO0lBRW5DLFlBQVksUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUVwQztJQUVELDBCQUEwQixDQUFDLE9BQU8sRUFBRSxNQUFNLFFBTXpDO0lBRUQseUJBQXlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsVUFBVSxRQWdCdEY7SUFFRCw0QkFBNEIsQ0FDMUIsTUFBTSxFQUFFLE1BQU0sRUFDZCxVQUFVLEVBQUUsTUFBTSxFQUNsQixRQUFRLEVBQUUsTUFBTSxFQUNoQix5QkFBeUIsRUFBRSxNQUFNLFFBR2xDO0lBRUQsbUNBQW1DLENBQ2pDLE1BQU0sRUFBRSxNQUFNLEVBQ2QsVUFBVSxFQUFFLE1BQU0sRUFDbEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIseUJBQXlCLEVBQUUsTUFBTSxRQUdsQztJQW9CRCw2QkFBNkIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEdBQUcsZ0JBQWdCLFFBZ0J0RjtJQUVELG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFVckU7SUFFRCxXQUFXLENBQUMsTUFBTSxHQUFFLHFCQUFpRCxRQUVwRTtJQUVELGNBQWMsQ0FBQyxNQUFNLEdBQUUscUJBQWlELFVBK0V2RTtJQTBCRCxNQUFNLENBQUMsTUFBTSxTQUFJLFVBRWhCO0lBRUQsMkJBQTJCLENBQUMsTUFBTSxTQUFJLFVBNEZyQztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_executor_metrics.d.ts","sourceRoot":"","sources":["../../src/public/test_executor_metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAIjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAE9B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;IAClC,
|
|
1
|
+
{"version":3,"file":"test_executor_metrics.d.ts","sourceRoot":"","sources":["../../src/public/test_executor_metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAIjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAE9B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;IAClC,gCAAgC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,6BAA6B,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAC3C,YAAY,EAAE,UAAU,GAAG,SAAS,CAAC;IAErC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,2BAA2B,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhD,6BAA6B,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,6BAA6B,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,wCAAwC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7D,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAWD,oBAAY,qBAAqB;IAC/B,GAAG,IAAA;IACH,MAAM,IAAA;IACN,SAAS,IAAA;IACT,YAAY,IAAA;IACZ,OAAO,IAAA;CACR;AA2BD,qBAAa,mBAAoB,YAAW,wBAAwB;;IAClE,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,OAAO,CAAoB;IAEnC,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAED,0BAA0B,CAAC,OAAO,EAAE,MAAM,QAMzC;IAED,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,UAAU,QAgBtF;IAED,4BAA4B,CAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,MAAM,QAGlC;IAED,mCAAmC,CACjC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,MAAM,QAGlC;IAoBD,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,gBAAgB,QAgBtF;IAED,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,QAUrE;IAED,WAAW,CAAC,MAAM,GAAE,qBAAiD,QAEpE;IAED,cAAc,CAAC,MAAM,GAAE,qBAAiD,UA+EvE;IA0BD,MAAM,CAAC,MAAM,SAAI,UAEhB;IAED,2BAA2B,CAAC,MAAM,SAAI,UA4FrC;CACF"}
|
|
@@ -24,7 +24,6 @@ function createEmptyTxMetrics() {
|
|
|
24
24
|
totalDurationMs: 0,
|
|
25
25
|
manaUsed: 0,
|
|
26
26
|
totalInstructionsExecuted: 0,
|
|
27
|
-
bytecodeSizes: [],
|
|
28
27
|
nonRevertiblePrivateInsertionsUs: undefined,
|
|
29
28
|
revertiblePrivateInsertionsUs: undefined,
|
|
30
29
|
enqueuedCalls: [],
|
|
@@ -100,14 +99,6 @@ export class TestExecutorMetrics {
|
|
|
100
99
|
txMetrics.nonRevertiblePrivateInsertionsUs = durationUs;
|
|
101
100
|
}
|
|
102
101
|
}
|
|
103
|
-
recordBytecodeSize(txLabel, contractName, sizeBytes) {
|
|
104
|
-
const txMetrics = this.txMetrics.get(txLabel);
|
|
105
|
-
assert(txMetrics, `Cannot record bytecode size for unknown tx label: ${txLabel}`);
|
|
106
|
-
txMetrics.bytecodeSizes.push({
|
|
107
|
-
contractName,
|
|
108
|
-
sizeBytes
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
102
|
recordProverMetrics(txLabel, metrics) {
|
|
112
103
|
if (!this.txMetrics.has(txLabel)) {
|
|
113
104
|
this.txMetrics.set(txLabel, createEmptyTxMetrics());
|
|
@@ -141,12 +132,6 @@ export class TestExecutorMetrics {
|
|
|
141
132
|
if (filter === 3 || filter === 1 || filter === 0) {
|
|
142
133
|
pretty += `${INDENT0}Total instructions executed: ${fmtNum(txMetrics.totalInstructionsExecuted)}\n`;
|
|
143
134
|
}
|
|
144
|
-
if ((filter === 1 || filter === 0) && txMetrics.bytecodeSizes.length > 0) {
|
|
145
|
-
pretty += `${INDENT0}Bytecode sizes:\n`;
|
|
146
|
-
for (const { contractName, sizeBytes } of txMetrics.bytecodeSizes){
|
|
147
|
-
pretty += `${INDENT1}${contractName}: ${fmtNum(sizeBytes, 'bytes')}\n`;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
135
|
if (filter === 2 || filter === 0) {
|
|
151
136
|
pretty += `${INDENT0}Private insertions:\n`;
|
|
152
137
|
pretty += `${INDENT1}Non-revertible: ${fmtNum(txMetrics.nonRevertiblePrivateInsertionsUs / 1_000, 'ms')}\n`;
|
|
@@ -313,13 +298,6 @@ export class TestExecutorMetrics {
|
|
|
313
298
|
});
|
|
314
299
|
}
|
|
315
300
|
}
|
|
316
|
-
for (const { contractName, sizeBytes } of txMetrics.bytecodeSizes){
|
|
317
|
-
data.push({
|
|
318
|
-
name: `${txLabel}/bytecodeSizeBytes/${contractName}`,
|
|
319
|
-
value: sizeBytes,
|
|
320
|
-
unit: 'bytes'
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
301
|
}
|
|
324
302
|
return JSON.stringify(data, null, indent);
|
|
325
303
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.321f6a9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./server": "./dest/server.js",
|
|
7
7
|
"./client": "./dest/client.js",
|
|
8
8
|
"./testing": "./dest/testing.js",
|
|
9
|
-
"./public/fixtures": "./dest/public/fixtures/index.js"
|
|
10
|
-
"./public/avm/opcodes": "./dest/public/avm/opcodes/index.js"
|
|
9
|
+
"./public/fixtures": "./dest/public/fixtures/index.js"
|
|
11
10
|
},
|
|
12
11
|
"typedocOptions": {
|
|
13
12
|
"entryPoints": [
|
|
@@ -20,8 +19,9 @@
|
|
|
20
19
|
"build": "yarn clean && ../scripts/tsc.sh",
|
|
21
20
|
"build:dev": "../scripts/tsc.sh --watch",
|
|
22
21
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
22
|
+
"generate": "node --experimental-strip-types --experimental-transform-types --no-warnings ../../ipc-codegen/src/generate.ts --schema ../../barretenberg/cpp/src/barretenberg/cdb/cdb_schema.json --lang ts --server --out src/public/cdb/generated",
|
|
23
23
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
24
|
-
"build:fuzzer": "yarn clean && ../scripts/tsc.sh"
|
|
24
|
+
"build:fuzzer": "yarn clean && yarn generate && ../scripts/tsc.sh"
|
|
25
25
|
},
|
|
26
26
|
"inherits": [
|
|
27
27
|
"../package.common.json"
|
|
@@ -64,26 +64,29 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/
|
|
68
|
-
"@aztec/
|
|
69
|
-
"@aztec/
|
|
70
|
-
"@aztec/
|
|
71
|
-
"@aztec/
|
|
72
|
-
"@aztec/noir-
|
|
73
|
-
"@aztec/noir-
|
|
74
|
-
"@aztec/protocol-
|
|
75
|
-
"@aztec/
|
|
76
|
-
"@aztec/
|
|
77
|
-
"@aztec/
|
|
78
|
-
"@aztec/
|
|
67
|
+
"@aztec/bb-avm-sim": "0.0.1-commit.321f6a9",
|
|
68
|
+
"@aztec/constants": "0.0.1-commit.321f6a9",
|
|
69
|
+
"@aztec/foundation": "0.0.1-commit.321f6a9",
|
|
70
|
+
"@aztec/ipc-runtime": "0.0.1-commit.321f6a9",
|
|
71
|
+
"@aztec/native": "0.0.1-commit.321f6a9",
|
|
72
|
+
"@aztec/noir-acvm_js": "0.0.1-commit.321f6a9",
|
|
73
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.321f6a9",
|
|
74
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.321f6a9",
|
|
75
|
+
"@aztec/noir-types": "0.0.1-commit.321f6a9",
|
|
76
|
+
"@aztec/protocol-contracts": "0.0.1-commit.321f6a9",
|
|
77
|
+
"@aztec/standard-contracts": "0.0.1-commit.321f6a9",
|
|
78
|
+
"@aztec/stdlib": "0.0.1-commit.321f6a9",
|
|
79
|
+
"@aztec/telemetry-client": "0.0.1-commit.321f6a9",
|
|
80
|
+
"@aztec/world-state": "0.0.1-commit.321f6a9",
|
|
79
81
|
"lodash.clonedeep": "^4.5.0",
|
|
80
82
|
"lodash.merge": "^4.6.2",
|
|
83
|
+
"msgpackr": "^1.11.2",
|
|
81
84
|
"tslib": "^2.4.0"
|
|
82
85
|
},
|
|
83
86
|
"devDependencies": {
|
|
84
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
85
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
86
|
-
"@aztec/noir-test-contracts.js": "0.0.1-commit.
|
|
87
|
+
"@aztec/kv-store": "0.0.1-commit.321f6a9",
|
|
88
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.321f6a9",
|
|
89
|
+
"@aztec/noir-test-contracts.js": "0.0.1-commit.321f6a9",
|
|
87
90
|
"@jest/globals": "^30.0.0",
|
|
88
91
|
"@types/jest": "^30.0.0",
|
|
89
92
|
"@types/lodash.clonedeep": "^4.5.7",
|
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
type ContractInstanceWithAddress,
|
|
15
15
|
computeInitializationHash,
|
|
16
16
|
} from '@aztec/stdlib/contract';
|
|
17
|
-
import { isNoirCallStackUnresolved } from '@aztec/stdlib/errors';
|
|
18
17
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
19
18
|
import { deriveKeys } from '@aztec/stdlib/keys';
|
|
20
19
|
import { makeContractClassPublic, makeContractInstanceFromClassId } from '@aztec/stdlib/testing';
|
|
@@ -23,10 +22,6 @@ import type { UInt64 } from '@aztec/stdlib/types';
|
|
|
23
22
|
import { strict as assert } from 'assert';
|
|
24
23
|
import merge from 'lodash.merge';
|
|
25
24
|
|
|
26
|
-
import { resolveAssertionMessageFromRevertData, traverseCauseChain } from '../../../common/index.js';
|
|
27
|
-
import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
28
|
-
import type { AvmRevertReason } from '../errors.js';
|
|
29
|
-
|
|
30
25
|
export const PUBLIC_DISPATCH_FN_NAME = 'public_dispatch';
|
|
31
26
|
export const DEFAULT_TIMESTAMP: UInt64 = 99833n;
|
|
32
27
|
export const DEFAULT_BLOCK_NUMBER = BlockNumber(42);
|
|
@@ -38,22 +33,6 @@ export function allSameExcept(original: any, overrides: any): any {
|
|
|
38
33
|
return merge({}, original, overrides);
|
|
39
34
|
}
|
|
40
35
|
|
|
41
|
-
export function randomMemoryBytes(length: number): Uint8[] {
|
|
42
|
-
return [...Array(length)].map(_ => new Uint8(Math.floor(Math.random() * 255)));
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function randomMemoryUint32s(length: number): Uint32[] {
|
|
46
|
-
return [...Array(length)].map(_ => new Uint32(Math.floor(Math.random() * 255)));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function randomMemoryUint64s(length: number): Uint64[] {
|
|
50
|
-
return [...Array(length)].map(_ => new Uint64(Math.floor(Math.random() * 255)));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export function randomMemoryFields(length: number): Field[] {
|
|
54
|
-
return [...Array(length)].map(_ => new Field(Fr.random()));
|
|
55
|
-
}
|
|
56
|
-
|
|
57
36
|
export function getFunctionSelector(
|
|
58
37
|
functionName: string,
|
|
59
38
|
contractArtifact: ContractArtifact,
|
|
@@ -81,24 +60,6 @@ export function getContractFunctionAbi(
|
|
|
81
60
|
);
|
|
82
61
|
}
|
|
83
62
|
|
|
84
|
-
export function resolveContractAssertionMessage(
|
|
85
|
-
functionName: string,
|
|
86
|
-
revertReason: AvmRevertReason,
|
|
87
|
-
output: Fr[],
|
|
88
|
-
contractArtifact: ContractArtifact,
|
|
89
|
-
): string | undefined {
|
|
90
|
-
traverseCauseChain(revertReason, cause => {
|
|
91
|
-
revertReason = cause as AvmRevertReason;
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
const functionArtifact = getAllFunctionAbis(contractArtifact).find(f => f.name === functionName);
|
|
95
|
-
if (!functionArtifact || !revertReason.noirCallStack || !isNoirCallStackUnresolved(revertReason.noirCallStack)) {
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return resolveAssertionMessageFromRevertData(output, functionArtifact);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
63
|
/**
|
|
103
64
|
* Create a contract class and instance given constructor args, artifact, etc.
|
|
104
65
|
* NOTE: This is useful for testing real-ish contract class registration and instance deployment TXs (via logs)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { PublicContractsDB } from './public_db_sources.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Identifies the contract data a single simulation reads. The AVM's contract-data lookups during a
|
|
5
|
+
* `simulate` call are answered from `contractsDB`; `forkId` and `timestamp` scope those lookups to the
|
|
6
|
+
* world-state fork being simulated against. How this reaches the AVM (in-process call, IPC callback
|
|
7
|
+
* server, ...) is the implementation's concern — callers only supply the context.
|
|
8
|
+
*/
|
|
9
|
+
export interface AvmContractsDBContext {
|
|
10
|
+
contractsDB: PublicContractsDB;
|
|
11
|
+
forkId: number;
|
|
12
|
+
timestamp: bigint;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Something that can run AVM simulations, independent of how the work is dispatched (a single external
|
|
17
|
+
* process, a pool of them, or an in-process stub). Callers hold this and never see the underlying transport.
|
|
18
|
+
*/
|
|
19
|
+
export interface AvmSimulator {
|
|
20
|
+
/**
|
|
21
|
+
* Run a fast simulation and return the msgpack-encoded result. `context` supplies the contracts DB whose
|
|
22
|
+
* data the simulation reads. If `signal` aborts, the simulation stops at the next cancellation checkpoint.
|
|
23
|
+
*/
|
|
24
|
+
simulate(inputBuffer: Uint8Array, context: AvmContractsDBContext, signal?: AbortSignal): Promise<Uint8Array>;
|
|
25
|
+
/** Run a simulation collecting proving hints and return the msgpack-encoded result. */
|
|
26
|
+
simulateWithHints(inputBuffer: Uint8Array): Promise<Uint8Array>;
|
|
27
|
+
/** Release any resources held by the underlying implementation. */
|
|
28
|
+
destroy?(): Promise<void>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { AvmService } from '@aztec/bb-avm-sim';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
|
|
4
|
+
import type { AvmContractsDBContext, AvmSimulator } from './avm_simulator.js';
|
|
5
|
+
import { CdbIpcServer } from './cdb_ipc_server.js';
|
|
6
|
+
|
|
7
|
+
export interface AvmSimulatorPoolOptions {
|
|
8
|
+
/** Maximum number of concurrent AVM processes. If not set, defaults to AVM_MAX_CONCURRENT_SIMULATIONS env var or 4. */
|
|
9
|
+
maxSize?: number;
|
|
10
|
+
/** Path to the bb-avm-sim binary. If omitted, the generated package resolves it. */
|
|
11
|
+
avmBinaryPath?: string;
|
|
12
|
+
/** IPC path for the shared WSDB server. */
|
|
13
|
+
wsdbIpcPath: string;
|
|
14
|
+
/** Optional logger function for AVM process output. */
|
|
15
|
+
logger?: (msg: string) => void;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A raw handle to a single bb-avm-sim process: it runs a serialized simulation and connects back to the
|
|
20
|
+
* shared CDB/WSDB servers for state, but is unaware of which fork's contract data it is reading — that is
|
|
21
|
+
* routed by the fork id baked into the input buffer.
|
|
22
|
+
*/
|
|
23
|
+
interface AvmProcessHandle {
|
|
24
|
+
simulate(inputBuffer: Uint8Array, signal?: AbortSignal): Promise<Uint8Array>;
|
|
25
|
+
simulateWithHints(inputBuffer: Uint8Array): Promise<Uint8Array>;
|
|
26
|
+
destroy(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The public-execution AVM backend: a lazily-grown pool of bb-avm-sim processes plus the CDB server that
|
|
31
|
+
* answers those processes' contract-data callbacks. Callers hold this as an {@link AvmSimulator}; the pool,
|
|
32
|
+
* the CDB server, its IPC path, and fork-id routing are all hidden behind that interface. Each `simulate`
|
|
33
|
+
* registers the call's contracts DB on the CDB server for the duration of the simulation (keyed by fork id
|
|
34
|
+
* so concurrent simulations on different forks don't collide) and unregisters it once the call returns.
|
|
35
|
+
*/
|
|
36
|
+
export class AvmSimulatorPool implements AvmSimulator {
|
|
37
|
+
private slots: Array<AvmProcessHandle | null> = [];
|
|
38
|
+
private available: number[] = [];
|
|
39
|
+
private waiters: Array<{ resolve: (simulator: AvmProcessHandle) => void; reject: (error: Error) => void }> = [];
|
|
40
|
+
private createdCount = 0;
|
|
41
|
+
private log: Logger;
|
|
42
|
+
private maxSize: number;
|
|
43
|
+
private cdbServer: CdbIpcServer;
|
|
44
|
+
|
|
45
|
+
constructor(private options: AvmSimulatorPoolOptions) {
|
|
46
|
+
this.log = createLogger('simulator:avm-pool');
|
|
47
|
+
this.maxSize = options.maxSize ?? parseInt(process.env.AVM_MAX_CONCURRENT_SIMULATIONS ?? '4', 10);
|
|
48
|
+
this.cdbServer = new CdbIpcServer();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static async spawn(options: AvmSimulatorPoolOptions): Promise<AvmSimulatorPool> {
|
|
52
|
+
const pool = new AvmSimulatorPool(options);
|
|
53
|
+
// Always start one process up front so the first simulate() doesn't pay process spawn/connect cost.
|
|
54
|
+
await pool.prewarm();
|
|
55
|
+
return pool;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async [Symbol.asyncDispose](): Promise<void> {
|
|
59
|
+
await this.destroy();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async simulate(inputBuffer: Uint8Array, context: AvmContractsDBContext, signal?: AbortSignal): Promise<Uint8Array> {
|
|
63
|
+
// Register the fork's contracts DB so the C++ AVM's callbacks (which carry this fork id) route to it,
|
|
64
|
+
// and unregister once the simulation returns — registration is only needed while the call is running.
|
|
65
|
+
this.cdbServer.registerFork(context.forkId, context.contractsDB, context.timestamp);
|
|
66
|
+
try {
|
|
67
|
+
const simulator = await this.checkout();
|
|
68
|
+
try {
|
|
69
|
+
return await simulator.simulate(inputBuffer, signal);
|
|
70
|
+
} finally {
|
|
71
|
+
this.return(simulator);
|
|
72
|
+
}
|
|
73
|
+
} finally {
|
|
74
|
+
this.cdbServer.unregisterFork(context.forkId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async simulateWithHints(inputBuffer: Uint8Array): Promise<Uint8Array> {
|
|
79
|
+
// The hinted path makes no contract-data callbacks, so no CDB registration is needed.
|
|
80
|
+
const simulator = await this.checkout();
|
|
81
|
+
try {
|
|
82
|
+
return await simulator.simulateWithHints(inputBuffer);
|
|
83
|
+
} finally {
|
|
84
|
+
this.return(simulator);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Destroy all AVM processes in the pool and close the CDB server. */
|
|
89
|
+
async destroy(): Promise<void> {
|
|
90
|
+
for (const waiter of this.waiters) {
|
|
91
|
+
waiter.reject(new Error('AVM simulator pool destroyed'));
|
|
92
|
+
}
|
|
93
|
+
this.waiters = [];
|
|
94
|
+
|
|
95
|
+
const destroyPromises: Promise<void>[] = [];
|
|
96
|
+
for (const slot of this.slots) {
|
|
97
|
+
if (slot) {
|
|
98
|
+
destroyPromises.push(slot.destroy());
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
await Promise.all(destroyPromises);
|
|
102
|
+
|
|
103
|
+
this.slots = [];
|
|
104
|
+
this.available = [];
|
|
105
|
+
this.createdCount = 0;
|
|
106
|
+
await this.cdbServer.close();
|
|
107
|
+
this.log.info('AVM simulator pool destroyed');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Eagerly spawn up to `count` AVM processes (capped at maxSize) and leave them available, so the
|
|
112
|
+
* first simulate() doesn't pay process spawn/connect cost. Idempotent.
|
|
113
|
+
*/
|
|
114
|
+
async prewarm(count = 1): Promise<void> {
|
|
115
|
+
const target = Math.min(count, this.maxSize);
|
|
116
|
+
const created: AvmProcessHandle[] = [];
|
|
117
|
+
while (this.createdCount < target) {
|
|
118
|
+
created.push(await this.createSlot());
|
|
119
|
+
}
|
|
120
|
+
// Hand the freshly-spawned processes back to the pool so checkout() reuses them.
|
|
121
|
+
for (const simulator of created) {
|
|
122
|
+
this.return(simulator);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Check out an AVM process from the pool, blocking until one is free. Caller must return() it when done. */
|
|
127
|
+
private async checkout(): Promise<AvmProcessHandle> {
|
|
128
|
+
const idx = this.available.pop();
|
|
129
|
+
if (idx !== undefined && this.slots[idx]) {
|
|
130
|
+
return this.slots[idx]!;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (this.createdCount < this.maxSize || (idx !== undefined && !this.slots[idx])) {
|
|
134
|
+
return await this.createSlot(idx);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return new Promise<AvmProcessHandle>((resolve, reject) => {
|
|
138
|
+
this.waiters.push({ resolve, reject });
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Return an AVM process to the pool after use. */
|
|
143
|
+
private return(simulator: AvmProcessHandle): void {
|
|
144
|
+
const waiter = this.waiters.shift();
|
|
145
|
+
if (waiter) {
|
|
146
|
+
waiter.resolve(simulator);
|
|
147
|
+
} else {
|
|
148
|
+
const idx = this.slots.indexOf(simulator);
|
|
149
|
+
if (idx >= 0) {
|
|
150
|
+
this.available.push(idx);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private async createSlot(reuseIdx?: number): Promise<AvmProcessHandle> {
|
|
156
|
+
const reuse = reuseIdx !== undefined && reuseIdx < this.slots.length;
|
|
157
|
+
// Reserve the slot count synchronously, before the async spawn, so concurrent checkouts can't all
|
|
158
|
+
// observe `createdCount < maxSize` and overshoot the pool (the count is only bumped once control has
|
|
159
|
+
// yielded on the await). Roll back the reservation if the spawn itself fails.
|
|
160
|
+
if (!reuse) {
|
|
161
|
+
this.createdCount++;
|
|
162
|
+
}
|
|
163
|
+
let simulator: AvmProcessHandle;
|
|
164
|
+
try {
|
|
165
|
+
simulator = await AvmSimulatorProcess.spawn({
|
|
166
|
+
binaryPath: this.options.avmBinaryPath,
|
|
167
|
+
wsdbIpcPath: this.options.wsdbIpcPath,
|
|
168
|
+
cdbIpcPath: this.cdbServer.ipcPath,
|
|
169
|
+
logger: this.options.logger,
|
|
170
|
+
});
|
|
171
|
+
} catch (err) {
|
|
172
|
+
if (!reuse) {
|
|
173
|
+
this.createdCount--;
|
|
174
|
+
}
|
|
175
|
+
throw err;
|
|
176
|
+
}
|
|
177
|
+
if (reuse) {
|
|
178
|
+
this.slots[reuseIdx!] = simulator;
|
|
179
|
+
} else {
|
|
180
|
+
this.slots.push(simulator);
|
|
181
|
+
}
|
|
182
|
+
this.log.debug(`Created AVM pool slot (${this.createdCount}/${this.maxSize})`);
|
|
183
|
+
return simulator;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
class AvmSimulatorProcess implements AvmProcessHandle {
|
|
188
|
+
private constructor(private service: AvmService) {}
|
|
189
|
+
|
|
190
|
+
static async spawn(options: {
|
|
191
|
+
binaryPath?: string;
|
|
192
|
+
wsdbIpcPath: string;
|
|
193
|
+
cdbIpcPath: string;
|
|
194
|
+
logger?: (msg: string) => void;
|
|
195
|
+
}): Promise<AvmSimulatorProcess> {
|
|
196
|
+
const service = await AvmService.spawn({
|
|
197
|
+
binaryPath: options.binaryPath,
|
|
198
|
+
transport: 'uds',
|
|
199
|
+
logger: options.logger,
|
|
200
|
+
extraArgs: ['--wsdb', options.wsdbIpcPath, '--cdb', options.cdbIpcPath],
|
|
201
|
+
});
|
|
202
|
+
return new AvmSimulatorProcess(service);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
public async simulate(inputBuffer: Uint8Array, signal?: AbortSignal): Promise<Uint8Array> {
|
|
206
|
+
// Signal the C++ process to stop at its next cancellation checkpoint when the caller aborts.
|
|
207
|
+
const onAbort = () => this.service.sendProcessSignal('SIGUSR1');
|
|
208
|
+
if (signal?.aborted) {
|
|
209
|
+
onAbort();
|
|
210
|
+
}
|
|
211
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
212
|
+
try {
|
|
213
|
+
return (await this.service.simulate({ inputs: inputBuffer })).result;
|
|
214
|
+
} finally {
|
|
215
|
+
signal?.removeEventListener('abort', onAbort);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
public async simulateWithHints(inputBuffer: Uint8Array): Promise<Uint8Array> {
|
|
220
|
+
return (await this.service.simulateWithHints({ inputs: inputBuffer })).result;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
public async destroy(): Promise<void> {
|
|
224
|
+
await this.service.destroy();
|
|
225
|
+
}
|
|
226
|
+
}
|