@aztec/simulator 0.0.1-commit.993d52e → 0.0.1-commit.9a89641
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_ipc_server.d.ts +40 -0
- package/dest/public/cdb_ipc_server.d.ts.map +1 -0
- package/dest/public/cdb_ipc_server.js +153 -0
- package/dest/public/contracts_db_checkpoint.d.ts +2 -2
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
- package/dest/public/contracts_db_checkpoint.js +1 -1
- package/dest/public/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 +12 -7
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +32 -15
- package/dest/public/fixtures/simple_contract_data_source.js +1 -1
- package/dest/public/fixtures/token_test.js +3 -3
- package/dest/public/fixtures/utils.d.ts +2 -2
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +17 -16
- 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 +6 -3
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +16 -10
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +7 -6
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +7 -4
- package/dest/public/public_processor/public_processor.d.ts +12 -7
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +103 -74
- 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/package.json +20 -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_ipc_server.ts +198 -0
- package/src/public/contracts_db_checkpoint.ts +1 -1
- 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 +44 -25
- 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 +19 -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 +21 -14
- package/src/public/public_processor/guarded_merkle_tree.ts +10 -7
- package/src/public/public_processor/public_processor.ts +134 -87
- 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/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 -63
- 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 -355
- 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 -98
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -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 -131
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +0 -300
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
- package/dest/public/side_effect_trace.d.ts +0 -87
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace.js +0 -199
- package/dest/public/side_effect_trace_interface.d.ts +0 -22
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.js +0 -1
- package/dest/public/state_manager/index.d.ts +0 -2
- package/dest/public/state_manager/index.d.ts.map +0 -1
- package/dest/public/state_manager/index.js +0 -1
- package/dest/public/state_manager/nullifiers.d.ts +0 -61
- package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
- package/dest/public/state_manager/nullifiers.js +0 -92
- package/dest/public/state_manager/public_storage.d.ts +0 -66
- package/dest/public/state_manager/public_storage.d.ts.map +0 -1
- package/dest/public/state_manager/public_storage.js +0 -145
- package/dest/public/state_manager/state_manager.d.ts +0 -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 -100
- 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 -607
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -124
- 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 -484
- 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
|
@@ -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.
|
|
@@ -160,8 +172,8 @@ export class PublicProcessor implements Traceable {
|
|
|
160
172
|
txs: Iterable<Tx> | AsyncIterable<Tx>,
|
|
161
173
|
limits: PublicProcessorLimits = {},
|
|
162
174
|
validator: PublicProcessorValidator = {},
|
|
163
|
-
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[],
|
|
164
|
-
const { maxTransactions,
|
|
175
|
+
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], DebugLog[]]> {
|
|
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,28 +196,33 @@ 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
|
-
// Skip this tx if it'd exceed max block size
|
|
192
209
|
const txHash = tx.getTxHash().toString();
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
210
|
+
|
|
211
|
+
// Skip this tx if its estimated blob fields would exceed the limit.
|
|
212
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
213
|
+
const txBlobFields = tx.getPrivateTxEffectsSizeInFields();
|
|
214
|
+
if (isBuildingProposal && maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
215
|
+
this.log.warn(
|
|
216
|
+
`Skipping tx ${txHash} with ${txBlobFields} fields from private side effects due to blob fields limit`,
|
|
217
|
+
{ txHash, txBlobFields, totalBlobFields, maxBlobFields },
|
|
218
|
+
);
|
|
201
219
|
continue;
|
|
202
220
|
}
|
|
203
221
|
|
|
204
|
-
// Skip this tx if its gas limit would exceed the block gas limit
|
|
222
|
+
// Skip this tx if its gas limit would exceed the block gas limit (either da or l2).
|
|
223
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
205
224
|
const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
|
|
206
|
-
if (maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
225
|
+
if (isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
207
226
|
this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
|
|
208
227
|
txHash,
|
|
209
228
|
txGasLimit,
|
|
@@ -223,11 +242,6 @@ export class PublicProcessor implements Traceable {
|
|
|
223
242
|
failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
|
|
224
243
|
returns.push(new NestedProcessReturnValues([]));
|
|
225
244
|
continue;
|
|
226
|
-
} else if (result.result === 'skipped') {
|
|
227
|
-
const reason = result.reason.join(', ');
|
|
228
|
-
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
229
|
-
returns.push(new NestedProcessReturnValues([]));
|
|
230
|
-
continue;
|
|
231
245
|
} else {
|
|
232
246
|
this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
|
|
233
247
|
}
|
|
@@ -243,7 +257,9 @@ export class PublicProcessor implements Traceable {
|
|
|
243
257
|
this.contractsDB.createCheckpoint();
|
|
244
258
|
|
|
245
259
|
try {
|
|
246
|
-
const [processedTx, returnValues, txDebugLogs] = await
|
|
260
|
+
const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(() =>
|
|
261
|
+
this.processTx(tx, deadline, signal),
|
|
262
|
+
);
|
|
247
263
|
|
|
248
264
|
// Inject a fake processing failure after N txs if requested
|
|
249
265
|
const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
|
|
@@ -252,23 +268,9 @@ export class PublicProcessor implements Traceable {
|
|
|
252
268
|
}
|
|
253
269
|
|
|
254
270
|
const txBlobFields = processedTx.txEffect.getNumBlobFields();
|
|
255
|
-
|
|
256
|
-
// If the actual size of this tx would exceed block size, skip it
|
|
257
271
|
const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
|
|
258
|
-
if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
|
|
259
|
-
this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
|
|
260
|
-
txHash,
|
|
261
|
-
sizeInBytes: txSize,
|
|
262
|
-
totalSizeInBytes,
|
|
263
|
-
maxBlockSize,
|
|
264
|
-
});
|
|
265
|
-
// Need to revert the checkpoint here and don't go any further
|
|
266
|
-
await checkpoint.revert();
|
|
267
|
-
this.contractsDB.revertCheckpoint();
|
|
268
|
-
continue;
|
|
269
|
-
}
|
|
270
272
|
|
|
271
|
-
// If the actual blob fields of this tx would exceed the limit, skip it
|
|
273
|
+
// If the actual blob fields of this tx would exceed the limit, skip it.
|
|
272
274
|
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
273
275
|
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
274
276
|
this.log.debug(
|
|
@@ -278,14 +280,37 @@ export class PublicProcessor implements Traceable {
|
|
|
278
280
|
txBlobFields,
|
|
279
281
|
totalBlobFields,
|
|
280
282
|
maxBlobFields,
|
|
283
|
+
txProcessingTimeMs,
|
|
281
284
|
},
|
|
282
285
|
);
|
|
286
|
+
silentlySkippedCount += 1;
|
|
287
|
+
totalSilentlySkippedDurationMs += txProcessingTimeMs;
|
|
288
|
+
this.metrics.recordSilentlySkipped(txProcessingTimeMs);
|
|
283
289
|
// Need to revert the checkpoint here and don't go any further
|
|
284
290
|
await checkpoint.revert();
|
|
285
291
|
this.contractsDB.revertCheckpoint();
|
|
286
292
|
continue;
|
|
287
293
|
}
|
|
288
294
|
|
|
295
|
+
// During re-execution, check if the actual gas used by this tx would push the block over the gas limit.
|
|
296
|
+
// Unlike the proposal-building check (which uses declared gas limits pessimistically before processing),
|
|
297
|
+
// this uses actual gas and stops processing when the limit is exceeded.
|
|
298
|
+
if (
|
|
299
|
+
!isBuildingProposal &&
|
|
300
|
+
maxBlockGas !== undefined &&
|
|
301
|
+
totalBlockGas.add(processedTx.gasUsed.totalGas).gtAny(maxBlockGas)
|
|
302
|
+
) {
|
|
303
|
+
this.log.warn(`Stopping re-execution since tx ${txHash} would push block gas over limit`, {
|
|
304
|
+
txHash,
|
|
305
|
+
txGas: processedTx.gasUsed.totalGas,
|
|
306
|
+
totalBlockGas,
|
|
307
|
+
maxBlockGas,
|
|
308
|
+
});
|
|
309
|
+
await checkpoint.revert();
|
|
310
|
+
this.contractsDB.revertCheckpoint();
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
|
|
289
314
|
// FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
|
|
290
315
|
// I'd rather pass the validators the processedTx as well and let them deal with it.
|
|
291
316
|
nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
|
|
@@ -300,16 +325,19 @@ export class PublicProcessor implements Traceable {
|
|
|
300
325
|
totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
|
|
301
326
|
totalSizeInBytes += txSize;
|
|
302
327
|
totalBlobFields += txBlobFields;
|
|
328
|
+
|
|
329
|
+
// Commit the tx-level contracts checkpoint on success
|
|
330
|
+
this.contractsDB.commitCheckpoint();
|
|
303
331
|
} catch (err: any) {
|
|
304
|
-
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
305
|
-
this.log.warn(
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
//
|
|
309
|
-
//
|
|
310
|
-
//
|
|
311
|
-
//
|
|
312
|
-
//
|
|
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.
|
|
313
341
|
await this.publicTxSimulator.cancel?.();
|
|
314
342
|
|
|
315
343
|
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|
|
@@ -319,14 +347,10 @@ export class PublicProcessor implements Traceable {
|
|
|
319
347
|
// 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
|
|
320
348
|
// 2. Possible state updates on that checkpoint or any others created during execution.
|
|
321
349
|
|
|
322
|
-
//
|
|
323
|
-
//
|
|
324
|
-
//
|
|
325
|
-
await checkpoint.
|
|
326
|
-
|
|
327
|
-
// Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
|
|
328
|
-
// This needs to be done directly on the underlying fork as the guarded fork has been stopped.
|
|
329
|
-
await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
|
|
350
|
+
// Revert all checkpoints at or above this checkpoint's depth (inclusive), destroying any outstanding state
|
|
351
|
+
// updates from this tx and any nested checkpoints created during execution. This preserves any checkpoints
|
|
352
|
+
// created by callers below our depth.
|
|
353
|
+
await checkpoint.revertToCheckpoint();
|
|
330
354
|
|
|
331
355
|
// Revert any contracts added to the DB for the tx.
|
|
332
356
|
this.contractsDB.revertCheckpoint();
|
|
@@ -338,9 +362,9 @@ export class PublicProcessor implements Traceable {
|
|
|
338
362
|
break;
|
|
339
363
|
}
|
|
340
364
|
|
|
341
|
-
// Roll back state to start of TX before proceeding to next TX
|
|
342
|
-
|
|
343
|
-
await
|
|
365
|
+
// Roll back state to start of TX before proceeding to next TX.
|
|
366
|
+
// Reverts all checkpoints at or above this checkpoint's depth, preserving any caller checkpoints below.
|
|
367
|
+
await checkpoint.revertToCheckpoint();
|
|
344
368
|
this.contractsDB.revertCheckpoint();
|
|
345
369
|
const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
|
|
346
370
|
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
@@ -352,7 +376,6 @@ export class PublicProcessor implements Traceable {
|
|
|
352
376
|
} finally {
|
|
353
377
|
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
|
|
354
378
|
await checkpoint.commit();
|
|
355
|
-
this.contractsDB.commitCheckpointOkIfNone();
|
|
356
379
|
}
|
|
357
380
|
}
|
|
358
381
|
|
|
@@ -360,15 +383,26 @@ export class PublicProcessor implements Traceable {
|
|
|
360
383
|
const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
|
|
361
384
|
this.metrics.recordAllTxs(totalPublicGas, rate);
|
|
362
385
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
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
|
+
);
|
|
370
404
|
|
|
371
|
-
return [result, failed, usedTxs, returns,
|
|
405
|
+
return [result, failed, usedTxs, returns, debugLogs];
|
|
372
406
|
}
|
|
373
407
|
|
|
374
408
|
private async checkWorldStateUnchanged(
|
|
@@ -391,9 +425,10 @@ export class PublicProcessor implements Traceable {
|
|
|
391
425
|
private async processTx(
|
|
392
426
|
tx: Tx,
|
|
393
427
|
deadline: Date | undefined,
|
|
428
|
+
signal: AbortSignal | undefined,
|
|
394
429
|
): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
|
|
395
430
|
const [time, [processedTx, returnValues, debugLogs]] = await elapsed(() =>
|
|
396
|
-
this.processTxWithinDeadline(tx, deadline),
|
|
431
|
+
this.processTxWithinDeadline(tx, deadline, signal),
|
|
397
432
|
);
|
|
398
433
|
|
|
399
434
|
this.log.verbose(
|
|
@@ -447,10 +482,11 @@ export class PublicProcessor implements Traceable {
|
|
|
447
482
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
448
483
|
}
|
|
449
484
|
|
|
450
|
-
/** Processes the given tx within deadline
|
|
485
|
+
/** Processes the given tx within deadline or until the signal is aborted. */
|
|
451
486
|
private async processTxWithinDeadline(
|
|
452
487
|
tx: Tx,
|
|
453
488
|
deadline: Date | undefined,
|
|
489
|
+
signal: AbortSignal | undefined,
|
|
454
490
|
): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> {
|
|
455
491
|
const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> =
|
|
456
492
|
tx.hasPublicCalls() ? () => this.processTxWithPublicCalls(tx) : () => this.processPrivateOnlyTx(tx);
|
|
@@ -467,27 +503,38 @@ export class PublicProcessor implements Traceable {
|
|
|
467
503
|
}
|
|
468
504
|
: innerProcessFn;
|
|
469
505
|
|
|
470
|
-
|
|
506
|
+
const processingSignal = this.getProcessingSignal(tx, deadline, signal);
|
|
507
|
+
if (!processingSignal) {
|
|
471
508
|
return await processFn();
|
|
472
509
|
}
|
|
473
510
|
|
|
474
|
-
|
|
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
|
+
|
|
475
524
|
const timeout = +deadline - this.dateProvider.now();
|
|
476
525
|
if (timeout <= 0) {
|
|
477
526
|
throw new PublicProcessorTimeoutError();
|
|
478
527
|
}
|
|
479
528
|
|
|
529
|
+
const txHash = tx.getTxHash();
|
|
480
530
|
this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
|
|
481
531
|
deadline: deadline.toISOString(),
|
|
482
532
|
now: new Date(this.dateProvider.now()).toISOString(),
|
|
483
533
|
txHash,
|
|
484
534
|
});
|
|
485
535
|
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
timeout,
|
|
489
|
-
() => new PublicProcessorTimeoutError(),
|
|
490
|
-
);
|
|
536
|
+
const timeoutSignal = AbortSignal.timeout(timeout);
|
|
537
|
+
return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
|
|
491
538
|
}
|
|
492
539
|
|
|
493
540
|
/**
|
|
@@ -544,7 +591,7 @@ export class PublicProcessor implements Traceable {
|
|
|
544
591
|
// Fee payment insertion has already been done. Do the rest.
|
|
545
592
|
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
546
593
|
|
|
547
|
-
|
|
594
|
+
this.contractsDB.addNewContracts(tx);
|
|
548
595
|
|
|
549
596
|
return [processedTx, undefined, []];
|
|
550
597
|
}
|
|
@@ -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
|
}
|
|
@@ -4,35 +4,36 @@ import {
|
|
|
4
4
|
AvmCircuitPublicInputs,
|
|
5
5
|
AvmExecutionHints,
|
|
6
6
|
type PublicSimulatorConfig,
|
|
7
|
-
PublicTxResult,
|
|
7
|
+
type PublicTxResult,
|
|
8
8
|
serializeWithMessagePack,
|
|
9
9
|
} from '@aztec/stdlib/avm';
|
|
10
|
-
import type {
|
|
11
|
-
import type { GlobalVariables, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
10
|
+
import type { GlobalVariables, Tx } from '@aztec/stdlib/tx';
|
|
12
11
|
|
|
13
12
|
import { strict as assert } from 'assert';
|
|
14
13
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
15
14
|
import { join } from 'path';
|
|
16
15
|
|
|
16
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
17
17
|
import type { PublicContractsDB } from '../public_db_sources.js';
|
|
18
|
-
import {
|
|
18
|
+
import { PublicTxSimulator } from './public_tx_simulator.js';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* A
|
|
22
|
-
* Used during nightly CI runs to collect circuit inputs for
|
|
21
|
+
* A {@link PublicTxSimulator} that dumps AVM circuit inputs to disk after simulation.
|
|
22
|
+
* Used during nightly CI runs to collect circuit inputs for AVM proving benchmarks.
|
|
23
23
|
*/
|
|
24
|
-
export class
|
|
24
|
+
export class DumpingPublicTxSimulator extends PublicTxSimulator {
|
|
25
25
|
private readonly outputDir: string;
|
|
26
26
|
|
|
27
27
|
constructor(
|
|
28
|
-
|
|
29
|
-
contractsDB: PublicContractsDB,
|
|
28
|
+
avmSimulator: AvmSimulator,
|
|
30
29
|
globalVariables: GlobalVariables,
|
|
30
|
+
contractsDB: PublicContractsDB,
|
|
31
|
+
forkId: number,
|
|
31
32
|
config: Partial<PublicSimulatorConfig>,
|
|
32
33
|
outputDir: string,
|
|
33
34
|
bindings?: LoggerBindings,
|
|
34
35
|
) {
|
|
35
|
-
super(
|
|
36
|
+
super(avmSimulator, globalVariables, contractsDB, forkId, config, bindings);
|
|
36
37
|
assert(config.collectHints === true, 'collectHints must be enabled to dump AVM circuit inputs');
|
|
37
38
|
assert(config.collectPublicInputs === true, 'collectPublicInputs must be enabled to dump AVM circuit inputs');
|
|
38
39
|
this.outputDir = outputDir;
|
|
@@ -40,44 +41,27 @@ export class DumpingCppPublicTxSimulator extends CppPublicTxSimulator {
|
|
|
40
41
|
|
|
41
42
|
public override async simulate(tx: Tx): Promise<PublicTxResult> {
|
|
42
43
|
const result = await super.simulate(tx);
|
|
43
|
-
|
|
44
|
-
// Dump the circuit inputs after successful simulation
|
|
45
|
-
const txHash = this.computeTxHash(tx);
|
|
46
|
-
this.dumpAvmCircuitInputs(result, txHash);
|
|
47
|
-
|
|
44
|
+
this.dumpAvmCircuitInputs(result, tx.getTxHash().toString());
|
|
48
45
|
return result;
|
|
49
46
|
}
|
|
50
47
|
|
|
51
|
-
|
|
52
|
-
* Dumps AVM circuit inputs to disk.
|
|
53
|
-
*
|
|
54
|
-
* @param result - The simulation result containing hints and public inputs
|
|
55
|
-
* @param txHash - The transaction hash to use in the filename
|
|
56
|
-
*/
|
|
57
|
-
private dumpAvmCircuitInputs(result: PublicTxResult, txHash: TxHash): void {
|
|
48
|
+
private dumpAvmCircuitInputs(result: PublicTxResult, txHash: string): void {
|
|
58
49
|
try {
|
|
59
|
-
// Ensure the output directory exists
|
|
60
50
|
mkdirSync(this.outputDir, { recursive: true });
|
|
61
51
|
|
|
62
|
-
|
|
63
|
-
const filename = `avm-circuit-inputs-tx-${txHash.toString()}.bin`;
|
|
52
|
+
const filename = `avm-circuit-inputs-tx-${txHash}.bin`;
|
|
64
53
|
const filepath = join(this.outputDir, filename);
|
|
65
54
|
|
|
66
|
-
// Create circuit inputs from the result
|
|
67
55
|
const hints = result.hints ?? AvmExecutionHints.empty();
|
|
68
56
|
const publicInputs = result.publicInputs ?? AvmCircuitPublicInputs.empty();
|
|
69
57
|
const avmCircuitInputs = new AvmCircuitInputs(hints, publicInputs);
|
|
70
58
|
|
|
71
|
-
// Serialize the circuit inputs using MessagePack
|
|
72
59
|
const serialized = serializeWithMessagePack(avmCircuitInputs);
|
|
73
|
-
|
|
74
|
-
// Write to disk
|
|
75
60
|
writeFileSync(filepath, serialized);
|
|
76
61
|
|
|
77
62
|
this.log.debug(`Dumped AVM circuit inputs to ${filepath}`);
|
|
78
63
|
} catch (error) {
|
|
79
|
-
|
|
80
|
-
this.log.warn(`Failed to dump AVM circuit inputs for tx ${txHash.toString()}: ${error}`);
|
|
64
|
+
this.log.warn(`Failed to dump AVM circuit inputs for tx ${txHash}: ${error}`);
|
|
81
65
|
}
|
|
82
66
|
}
|
|
83
67
|
}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
2
2
|
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
3
|
-
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
4
3
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
5
4
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
6
5
|
|
|
6
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
7
7
|
import type { PublicContractsDB } from '../public_db_sources.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
|
|
9
|
+
import { TelemetryPublicTxSimulator } from './public_tx_simulator.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Creates
|
|
13
|
-
* Uses
|
|
14
|
-
* otherwise uses
|
|
12
|
+
* Creates an IPC-based public tx simulator for block building.
|
|
13
|
+
* Uses DumpingPublicTxSimulator if DUMP_AVM_INPUTS_TO_DIR env var is set (for CI/testing the AVM circuit),
|
|
14
|
+
* otherwise uses TelemetryPublicTxSimulator (for production).
|
|
15
15
|
*/
|
|
16
16
|
export function createPublicTxSimulatorForBlockBuilding(
|
|
17
|
-
|
|
18
|
-
contractsDB: PublicContractsDB,
|
|
17
|
+
avmSimulator: AvmSimulator,
|
|
19
18
|
globalVariables: GlobalVariables,
|
|
19
|
+
contractsDB: PublicContractsDB,
|
|
20
|
+
forkId: number,
|
|
20
21
|
telemetryClient: TelemetryClient,
|
|
21
22
|
bindings?: LoggerBindings,
|
|
22
23
|
collectDebugLogs = false,
|
|
@@ -38,7 +39,23 @@ export function createPublicTxSimulatorForBlockBuilding(
|
|
|
38
39
|
collectHints: true,
|
|
39
40
|
collectPublicInputs: true,
|
|
40
41
|
};
|
|
41
|
-
return new
|
|
42
|
+
return new DumpingPublicTxSimulator(
|
|
43
|
+
avmSimulator,
|
|
44
|
+
globalVariables,
|
|
45
|
+
contractsDB,
|
|
46
|
+
forkId,
|
|
47
|
+
dumpingConfig,
|
|
48
|
+
dumpDir,
|
|
49
|
+
bindings,
|
|
50
|
+
);
|
|
42
51
|
}
|
|
43
|
-
return new
|
|
52
|
+
return new TelemetryPublicTxSimulator(
|
|
53
|
+
avmSimulator,
|
|
54
|
+
globalVariables,
|
|
55
|
+
contractsDB,
|
|
56
|
+
forkId,
|
|
57
|
+
telemetryClient,
|
|
58
|
+
config,
|
|
59
|
+
bindings,
|
|
60
|
+
);
|
|
44
61
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {
|
|
3
|
-
export { DumpingCppPublicTxSimulator } from './dumping_cpp_public_tx_simulator.js';
|
|
1
|
+
export { PublicTxSimulator, MeasuredPublicTxSimulator, TelemetryPublicTxSimulator } from './public_tx_simulator.js';
|
|
2
|
+
export { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
|
|
4
3
|
export { createPublicTxSimulatorForBlockBuilding } from './factories.js';
|
|
5
|
-
export type {
|
|
6
|
-
|
|
4
|
+
export type {
|
|
5
|
+
PublicTxSimulatorInterface,
|
|
6
|
+
MeasuredPublicTxSimulatorInterface,
|
|
7
|
+
} from './public_tx_simulator_interface.js';
|
|
7
8
|
export type { PublicTxResult, PublicSimulatorConfig as PublicTxSimulatorConfig } from '@aztec/stdlib/avm';
|