@aztec/simulator 0.0.1-commit.a072138 → 0.0.1-commit.a4600f49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dest/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- package/dest/private/acvm_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/testing/account_proof_fetcher.js +152 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +2 -1
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +18 -3
- package/dest/public/avm/testing/utils.d.ts +32 -0
- package/dest/public/avm/testing/utils.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/utils.js +4 -34
- package/dest/public/avm_simulator.d.ts +28 -0
- package/dest/public/avm_simulator.d.ts.map +1 -0
- package/dest/public/avm_simulator.js +4 -0
- package/dest/public/avm_simulator_pool.d.ts +45 -0
- package/dest/public/avm_simulator_pool.d.ts.map +1 -0
- package/dest/public/avm_simulator_pool.js +197 -0
- package/dest/public/cdb/generated/api_types.d.ts +171 -0
- package/dest/public/cdb/generated/api_types.d.ts.map +1 -0
- package/dest/public/cdb/generated/api_types.js +314 -0
- package/dest/public/cdb/generated/server.d.ts +26 -0
- package/dest/public/cdb/generated/server.d.ts.map +1 -0
- package/dest/public/cdb/generated/server.js +135 -0
- package/dest/public/cdb_ipc_server.d.ts +33 -0
- package/dest/public/cdb_ipc_server.d.ts.map +1 -0
- package/dest/public/cdb_ipc_server.js +153 -0
- package/dest/public/contracts_db_checkpoint.d.ts +2 -2
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
- package/dest/public/contracts_db_checkpoint.js +1 -1
- package/dest/public/fixtures/amm_test.js +4 -4
- package/dest/public/fixtures/bulk_test.d.ts +1 -1
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/bulk_test.js +33 -6
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
- package/dest/public/fixtures/index.d.ts +2 -4
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +1 -3
- package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
- package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
- package/dest/public/fixtures/public_processor_test_env.js +73 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +12 -7
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +32 -15
- package/dest/public/fixtures/simple_contract_data_source.js +1 -1
- package/dest/public/fixtures/token_test.js +3 -3
- package/dest/public/fixtures/utils.d.ts +2 -2
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +21 -20
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
- package/dest/public/fuzzing/avm_simulator_bin.js +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 +8 -7
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +8 -5
- package/dest/public/public_processor/public_processor.d.ts +15 -8
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +117 -78
- 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 +9 -9
- package/dest/public/public_tx_simulator/index.d.ts +4 -6
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +2 -4
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +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 +22 -19
- 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/testing/account_proof.json +553 -0
- package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
- package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
- package/src/public/avm/{fixtures → testing}/utils.ts +4 -40
- package/src/public/avm_simulator.ts +29 -0
- package/src/public/avm_simulator_pool.ts +226 -0
- package/src/public/cdb/generated/api_types.ts +457 -0
- package/src/public/cdb/generated/server.ts +109 -0
- package/src/public/cdb_ipc_server.ts +197 -0
- package/src/public/contracts_db_checkpoint.ts +1 -1
- package/src/public/fixtures/amm_test.ts +4 -4
- package/src/public/fixtures/bulk_test.ts +31 -6
- package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
- package/src/public/fixtures/index.ts +1 -3
- package/src/public/fixtures/public_processor_test_env.ts +88 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +45 -18
- package/src/public/fixtures/simple_contract_data_source.ts +1 -1
- package/src/public/fixtures/token_test.ts +3 -3
- package/src/public/fixtures/utils.ts +23 -24
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +26 -11
- package/src/public/fuzzing/avm_simulator_bin.ts +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 +11 -8
- package/src/public/public_processor/public_processor.ts +154 -98
- 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 +29 -11
- 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/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 -255
- package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/public/avm/opcodes/addressing_mode.js +0 -94
- package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -97
- package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
- package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/public/avm/opcodes/bitwise.js +0 -99
- package/dest/public/avm/opcodes/comparators.d.ts +0 -25
- package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/public/avm/opcodes/comparators.js +0 -43
- package/dest/public/avm/opcodes/contract.d.ts +0 -20
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -65
- package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/public/avm/opcodes/control_flow.js +0 -107
- package/dest/public/avm/opcodes/conversion.d.ts +0 -18
- package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/public/avm/opcodes/conversion.js +0 -333
- package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -93
- package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/public/avm/opcodes/environment_getters.js +0 -77
- package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
- package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/public/avm/opcodes/external_calls.js +0 -210
- package/dest/public/avm/opcodes/hashing.d.ts +0 -36
- package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/public/avm/opcodes/hashing.js +0 -119
- package/dest/public/avm/opcodes/index.d.ts +0 -16
- package/dest/public/avm/opcodes/index.d.ts.map +0 -1
- package/dest/public/avm/opcodes/index.js +0 -15
- package/dest/public/avm/opcodes/instruction.d.ts +0 -74
- package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction.js +0 -95
- package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction_impl.js +0 -30
- package/dest/public/avm/opcodes/memory.d.ts +0 -74
- package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/public/avm/opcodes/memory.js +0 -257
- package/dest/public/avm/opcodes/misc.d.ts +0 -18
- package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/public/avm/opcodes/misc.js +0 -73
- package/dest/public/avm/opcodes/storage.d.ts +0 -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 -132
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -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 -286
- 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 -1721
- 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 -211
- 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
|
@@ -376,13 +376,14 @@ import { padArrayEnd } from '@aztec/foundation/collection';
|
|
|
376
376
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
377
377
|
import { createLogger } from '@aztec/foundation/log';
|
|
378
378
|
import { sleep } from '@aztec/foundation/sleep';
|
|
379
|
-
import { DateProvider, Timer, elapsed,
|
|
379
|
+
import { DateProvider, Timer, elapsed, execWithSignal } from '@aztec/foundation/timer';
|
|
380
380
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
381
381
|
import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
382
382
|
import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
383
383
|
import { AvmCircuitInputs, AvmExecutionHints, PublicDataWrite } from '@aztec/stdlib/avm';
|
|
384
384
|
import { computeTransactionFee } from '@aztec/stdlib/fees';
|
|
385
385
|
import { Gas } from '@aztec/stdlib/gas';
|
|
386
|
+
import { NullDebugLogStore } from '@aztec/stdlib/logs';
|
|
386
387
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
387
388
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
388
389
|
import { NestedProcessReturnValues, makeProcessedTxFromPrivateOnlyTx, makeProcessedTxFromTxWithPublicCalls } from '@aztec/stdlib/tx';
|
|
@@ -390,36 +391,39 @@ import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-clie
|
|
|
390
391
|
import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
391
392
|
import { AssertionError } from 'assert';
|
|
392
393
|
import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
393
|
-
import {
|
|
394
|
+
import { TelemetryPublicTxSimulator } from '../public_tx_simulator/index.js';
|
|
394
395
|
import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
|
|
395
396
|
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
396
397
|
/**
|
|
397
398
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
398
399
|
*/ export class PublicProcessorFactory {
|
|
399
400
|
contractDataSource;
|
|
401
|
+
avmSimulator;
|
|
400
402
|
dateProvider;
|
|
401
403
|
telemetryClient;
|
|
402
404
|
log;
|
|
403
|
-
constructor(contractDataSource, dateProvider = new DateProvider(), telemetryClient = getTelemetryClient(), bindings){
|
|
405
|
+
constructor(contractDataSource, avmSimulator, dateProvider = new DateProvider(), telemetryClient = getTelemetryClient(), bindings){
|
|
404
406
|
this.contractDataSource = contractDataSource;
|
|
407
|
+
this.avmSimulator = avmSimulator;
|
|
405
408
|
this.dateProvider = dateProvider;
|
|
406
409
|
this.telemetryClient = telemetryClient;
|
|
407
410
|
this.log = createLogger('simulator:public-processor-factory', bindings);
|
|
408
411
|
}
|
|
409
412
|
/**
|
|
410
|
-
* Creates a new instance of a PublicProcessor.
|
|
413
|
+
* Creates a new instance of a PublicProcessor. The simulator it drives reads contract data from the fork's
|
|
414
|
+
* contracts DB, scoped by the fork id so AVM requests route to the right state.
|
|
415
|
+
*
|
|
411
416
|
* @param globalVariables - The global variables for the block being processed.
|
|
412
|
-
* @param
|
|
417
|
+
* @param contractsDB - Optional pre-populated contracts DB; a fresh one is constructed if omitted.
|
|
413
418
|
* @returns A new instance of a PublicProcessor.
|
|
414
|
-
*/ create(merkleTree, globalVariables, config) {
|
|
415
|
-
const
|
|
416
|
-
const contractsDB = new PublicContractsDB(this.contractDataSource, bindings);
|
|
419
|
+
*/ create(merkleTree, globalVariables, config, contractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings())) {
|
|
420
|
+
const forkId = merkleTree.getRevision().forkId;
|
|
417
421
|
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
418
|
-
const publicTxSimulator = this.createPublicTxSimulator(
|
|
419
|
-
return new PublicProcessor(globalVariables, guardedFork, contractsDB, publicTxSimulator, this.dateProvider, this.telemetryClient, createLogger('simulator:public-processor',
|
|
422
|
+
const publicTxSimulator = this.createPublicTxSimulator(forkId, globalVariables, contractsDB, config);
|
|
423
|
+
return new PublicProcessor(globalVariables, guardedFork, contractsDB, publicTxSimulator, this.dateProvider, this.telemetryClient, createLogger('simulator:public-processor', this.log.getBindings()));
|
|
420
424
|
}
|
|
421
|
-
createPublicTxSimulator(
|
|
422
|
-
return new
|
|
425
|
+
createPublicTxSimulator(forkId, globalVariables, contractsDB, config) {
|
|
426
|
+
return new TelemetryPublicTxSimulator(this.avmSimulator, globalVariables, contractsDB, forkId, this.telemetryClient, config, this.log.getBindings());
|
|
423
427
|
}
|
|
424
428
|
}
|
|
425
429
|
class PublicProcessorTimeoutError extends Error {
|
|
@@ -428,6 +432,12 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
428
432
|
this.name = 'PublicProcessorTimeoutError';
|
|
429
433
|
}
|
|
430
434
|
}
|
|
435
|
+
class PublicProcessorAbortError extends Error {
|
|
436
|
+
constructor(message = 'Aborted while processing tx'){
|
|
437
|
+
super(message);
|
|
438
|
+
this.name = 'PublicProcessorAbortError';
|
|
439
|
+
}
|
|
440
|
+
}
|
|
431
441
|
_dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
432
442
|
[Attributes.TX_HASH]: tx.getTxHash().toString()
|
|
433
443
|
})), _dec1 = trackSpan('PublicProcessor.processPrivateOnlyTx', (tx)=>({
|
|
@@ -446,6 +456,7 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
446
456
|
dateProvider;
|
|
447
457
|
log;
|
|
448
458
|
opts;
|
|
459
|
+
debugLogStore;
|
|
449
460
|
static{
|
|
450
461
|
({ e: [_initProto] } = _apply_decs_2203_r(this, [
|
|
451
462
|
[
|
|
@@ -466,7 +477,7 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
466
477
|
], []));
|
|
467
478
|
}
|
|
468
479
|
metrics;
|
|
469
|
-
constructor(globalVariables, guardedMerkleTree, contractsDB, publicTxSimulator, dateProvider, telemetryClient = getTelemetryClient(), log, opts = {}){
|
|
480
|
+
constructor(globalVariables, guardedMerkleTree, contractsDB, publicTxSimulator, dateProvider, telemetryClient = getTelemetryClient(), log, opts = {}, debugLogStore = new NullDebugLogStore()){
|
|
470
481
|
this.globalVariables = globalVariables;
|
|
471
482
|
this.guardedMerkleTree = guardedMerkleTree;
|
|
472
483
|
this.contractsDB = contractsDB;
|
|
@@ -474,6 +485,7 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
474
485
|
this.dateProvider = dateProvider;
|
|
475
486
|
this.log = log;
|
|
476
487
|
this.opts = opts;
|
|
488
|
+
this.debugLogStore = debugLogStore;
|
|
477
489
|
_initProto(this);
|
|
478
490
|
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
479
491
|
}
|
|
@@ -487,43 +499,52 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
487
499
|
* @param validator - Pre-process validator and nullifier cache to use for processing the txs.
|
|
488
500
|
* @returns The list of processed txs with their circuit simulation outputs.
|
|
489
501
|
*/ async process(txs, limits = {}, validator = {}) {
|
|
490
|
-
const { maxTransactions,
|
|
502
|
+
const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal, signal } = limits;
|
|
491
503
|
const { preprocessValidator, nullifierCache } = validator;
|
|
492
504
|
const result = [];
|
|
493
505
|
const usedTxs = [];
|
|
494
506
|
const failed = [];
|
|
507
|
+
const debugLogs = [];
|
|
495
508
|
const timer = new Timer();
|
|
496
509
|
let totalSizeInBytes = 0;
|
|
497
510
|
let returns = [];
|
|
498
511
|
let totalPublicGas = new Gas(0, 0);
|
|
499
512
|
let totalBlockGas = new Gas(0, 0);
|
|
500
513
|
let totalBlobFields = 0;
|
|
514
|
+
let silentlySkippedCount = 0;
|
|
515
|
+
let totalSilentlySkippedDurationMs = 0;
|
|
501
516
|
for await (const tx of txs){
|
|
502
517
|
// Only process up to the max tx limit
|
|
503
518
|
if (maxTransactions !== undefined && result.length >= maxTransactions) {
|
|
504
519
|
this.log.debug(`Stopping tx processing due to reaching the max tx limit.`);
|
|
505
520
|
break;
|
|
506
521
|
}
|
|
507
|
-
// Bail if we've hit the deadline
|
|
522
|
+
// Bail if we've hit the deadline or have been interrupted.
|
|
508
523
|
if (deadline && this.dateProvider.now() > +deadline) {
|
|
509
524
|
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
510
525
|
break;
|
|
511
526
|
}
|
|
512
|
-
|
|
527
|
+
if (signal?.aborted) {
|
|
528
|
+
this.log.warn(`Stopping tx processing due to abort signal.`);
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
513
531
|
const txHash = tx.getTxHash().toString();
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
532
|
+
// Skip this tx if its estimated blob fields would exceed the limit.
|
|
533
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
534
|
+
const txBlobFields = tx.getPrivateTxEffectsSizeInFields();
|
|
535
|
+
if (isBuildingProposal && maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
536
|
+
this.log.warn(`Skipping tx ${txHash} with ${txBlobFields} fields from private side effects due to blob fields limit`, {
|
|
517
537
|
txHash,
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
538
|
+
txBlobFields,
|
|
539
|
+
totalBlobFields,
|
|
540
|
+
maxBlobFields
|
|
521
541
|
});
|
|
522
542
|
continue;
|
|
523
543
|
}
|
|
524
|
-
// Skip this tx if its gas limit would exceed the block gas limit
|
|
544
|
+
// Skip this tx if its gas limit would exceed the block gas limit (either da or l2).
|
|
545
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
525
546
|
const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
|
|
526
|
-
if (maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
547
|
+
if (isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
527
548
|
this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
|
|
528
549
|
txHash,
|
|
529
550
|
txGasLimit,
|
|
@@ -545,11 +566,6 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
545
566
|
});
|
|
546
567
|
returns.push(new NestedProcessReturnValues([]));
|
|
547
568
|
continue;
|
|
548
|
-
} else if (result.result === 'skipped') {
|
|
549
|
-
const reason = result.reason.join(', ');
|
|
550
|
-
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
551
|
-
returns.push(new NestedProcessReturnValues([]));
|
|
552
|
-
continue;
|
|
553
569
|
} else {
|
|
554
570
|
this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
|
|
555
571
|
}
|
|
@@ -563,83 +579,87 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
563
579
|
const startStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
|
|
564
580
|
this.contractsDB.createCheckpoint();
|
|
565
581
|
try {
|
|
566
|
-
const [processedTx, returnValues] = await this.processTx(tx, deadline);
|
|
582
|
+
const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(()=>this.processTx(tx, deadline, signal));
|
|
567
583
|
// Inject a fake processing failure after N txs if requested
|
|
568
584
|
const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
|
|
569
585
|
if (fakeThrowAfter !== undefined && result.length + failed.length + 1 >= fakeThrowAfter) {
|
|
570
586
|
throw new Error(`Fake error after processing ${fakeThrowAfter} txs`);
|
|
571
587
|
}
|
|
572
588
|
const txBlobFields = processedTx.txEffect.getNumBlobFields();
|
|
573
|
-
// If the actual size of this tx would exceed block size, skip it
|
|
574
589
|
const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
|
|
575
|
-
|
|
576
|
-
this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
|
|
577
|
-
txHash,
|
|
578
|
-
sizeInBytes: txSize,
|
|
579
|
-
totalSizeInBytes,
|
|
580
|
-
maxBlockSize
|
|
581
|
-
});
|
|
582
|
-
// Need to revert the checkpoint here and don't go any further
|
|
583
|
-
await checkpoint.revert();
|
|
584
|
-
this.contractsDB.revertCheckpoint();
|
|
585
|
-
continue;
|
|
586
|
-
}
|
|
587
|
-
// If the actual blob fields of this tx would exceed the limit, skip it
|
|
590
|
+
// If the actual blob fields of this tx would exceed the limit, skip it.
|
|
588
591
|
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
589
592
|
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
590
593
|
this.log.debug(`Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`, {
|
|
591
594
|
txHash,
|
|
592
595
|
txBlobFields,
|
|
593
596
|
totalBlobFields,
|
|
594
|
-
maxBlobFields
|
|
597
|
+
maxBlobFields,
|
|
598
|
+
txProcessingTimeMs
|
|
595
599
|
});
|
|
600
|
+
silentlySkippedCount += 1;
|
|
601
|
+
totalSilentlySkippedDurationMs += txProcessingTimeMs;
|
|
602
|
+
this.metrics.recordSilentlySkipped(txProcessingTimeMs);
|
|
596
603
|
// Need to revert the checkpoint here and don't go any further
|
|
597
604
|
await checkpoint.revert();
|
|
598
605
|
this.contractsDB.revertCheckpoint();
|
|
599
606
|
continue;
|
|
600
607
|
}
|
|
608
|
+
// During re-execution, check if the actual gas used by this tx would push the block over the gas limit.
|
|
609
|
+
// Unlike the proposal-building check (which uses declared gas limits pessimistically before processing),
|
|
610
|
+
// this uses actual gas and stops processing when the limit is exceeded.
|
|
611
|
+
if (!isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(processedTx.gasUsed.totalGas).gtAny(maxBlockGas)) {
|
|
612
|
+
this.log.warn(`Stopping re-execution since tx ${txHash} would push block gas over limit`, {
|
|
613
|
+
txHash,
|
|
614
|
+
txGas: processedTx.gasUsed.totalGas,
|
|
615
|
+
totalBlockGas,
|
|
616
|
+
maxBlockGas
|
|
617
|
+
});
|
|
618
|
+
await checkpoint.revert();
|
|
619
|
+
this.contractsDB.revertCheckpoint();
|
|
620
|
+
break;
|
|
621
|
+
}
|
|
601
622
|
// FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
|
|
602
623
|
// I'd rather pass the validators the processedTx as well and let them deal with it.
|
|
603
624
|
nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map((n)=>n.toBuffer()));
|
|
604
625
|
result.push(processedTx);
|
|
605
626
|
usedTxs.push(tx);
|
|
606
627
|
returns = returns.concat(returnValues);
|
|
628
|
+
debugLogs.push(...txDebugLogs);
|
|
629
|
+
this.debugLogStore.storeLogs(processedTx.hash.toString(), txDebugLogs);
|
|
607
630
|
totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
|
|
608
631
|
totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
|
|
609
632
|
totalSizeInBytes += txSize;
|
|
610
633
|
totalBlobFields += txBlobFields;
|
|
634
|
+
// Commit the tx-level contracts checkpoint on success
|
|
635
|
+
this.contractsDB.commitCheckpoint();
|
|
611
636
|
} catch (err) {
|
|
612
|
-
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
613
|
-
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
614
|
-
// We hit the transaction execution deadline.
|
|
615
|
-
// There may still be a
|
|
616
|
-
// Signal cancellation AND WAIT for the simulation to actually stop.
|
|
617
|
-
//
|
|
618
|
-
// and
|
|
619
|
-
// Without waiting, we'd proceed to revert checkpoints while C++ is still writing to state.
|
|
620
|
-
// Wait for C++ to stop gracefully.
|
|
637
|
+
if (err?.name === 'PublicProcessorTimeoutError' || err?.name === 'PublicProcessorAbortError') {
|
|
638
|
+
this.log.warn(`Stopping tx processing due to ${err.name === 'PublicProcessorTimeoutError' ? 'timeout' : 'abort'}.`);
|
|
639
|
+
// We hit the transaction execution deadline or an external abort signal.
|
|
640
|
+
// There may still be a simulation in progress.
|
|
641
|
+
// Signal cancellation AND WAIT for the simulation to actually stop. Cancellation is
|
|
642
|
+
// cooperative: the simulator may be mid slow-operation and won't observe the flag until it
|
|
643
|
+
// completes, and without waiting we'd revert checkpoints while it's still writing to state.
|
|
621
644
|
await this.publicTxSimulator.cancel?.();
|
|
622
645
|
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|
|
623
646
|
await this.guardedMerkleTree.stop();
|
|
624
647
|
// We now know there can't be any further access to world state. The fork is in a state where there is:
|
|
625
648
|
// 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
|
|
626
649
|
// 2. Possible state updates on that checkpoint or any others created during execution.
|
|
627
|
-
//
|
|
628
|
-
//
|
|
629
|
-
//
|
|
630
|
-
await checkpoint.
|
|
631
|
-
// Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
|
|
632
|
-
// This needs to be done directly on the underlying fork as the guarded fork has been stopped.
|
|
633
|
-
await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
|
|
650
|
+
// Revert all checkpoints at or above this checkpoint's depth (inclusive), destroying any outstanding state
|
|
651
|
+
// updates from this tx and any nested checkpoints created during execution. This preserves any checkpoints
|
|
652
|
+
// created by callers below our depth.
|
|
653
|
+
await checkpoint.revertToCheckpoint();
|
|
634
654
|
// Revert any contracts added to the DB for the tx.
|
|
635
655
|
this.contractsDB.revertCheckpoint();
|
|
636
656
|
// Ensure we're at the same state as when we started processing this tx.
|
|
637
657
|
await this.checkWorldStateUnchanged(startStateReference, txHash, err);
|
|
638
658
|
break;
|
|
639
659
|
}
|
|
640
|
-
// Roll back state to start of TX before proceeding to next TX
|
|
641
|
-
|
|
642
|
-
await
|
|
660
|
+
// Roll back state to start of TX before proceeding to next TX.
|
|
661
|
+
// Reverts all checkpoints at or above this checkpoint's depth, preserving any caller checkpoints below.
|
|
662
|
+
await checkpoint.revertToCheckpoint();
|
|
643
663
|
this.contractsDB.revertCheckpoint();
|
|
644
664
|
const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
|
|
645
665
|
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
@@ -653,25 +673,30 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
653
673
|
} finally{
|
|
654
674
|
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
|
|
655
675
|
await checkpoint.commit();
|
|
656
|
-
this.contractsDB.commitCheckpointOkIfNone();
|
|
657
676
|
}
|
|
658
677
|
}
|
|
659
678
|
const duration = timer.s();
|
|
660
679
|
const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
|
|
661
680
|
this.metrics.recordAllTxs(totalPublicGas, rate);
|
|
662
|
-
|
|
681
|
+
const silentlySkippedDurationMs = Math.round(totalSilentlySkippedDurationMs);
|
|
682
|
+
this.log.info(`Processed ${result.length} successful txs and ${failed.length} failed txs ` + `(${silentlySkippedCount} silently skipped, ${silentlySkippedDurationMs}ms wasted) ` + `in ${duration}s`, {
|
|
683
|
+
blockNumber: this.globalVariables.blockNumber,
|
|
684
|
+
successfulCount: result.length,
|
|
685
|
+
failedCount: failed.length,
|
|
663
686
|
duration,
|
|
664
687
|
rate,
|
|
665
688
|
totalPublicGas,
|
|
666
689
|
totalBlockGas,
|
|
667
|
-
totalSizeInBytes
|
|
690
|
+
totalSizeInBytes,
|
|
691
|
+
silentlySkippedCount,
|
|
692
|
+
silentlySkippedDurationMs
|
|
668
693
|
});
|
|
669
694
|
return [
|
|
670
695
|
result,
|
|
671
696
|
failed,
|
|
672
697
|
usedTxs,
|
|
673
698
|
returns,
|
|
674
|
-
|
|
699
|
+
debugLogs
|
|
675
700
|
];
|
|
676
701
|
}
|
|
677
702
|
async checkWorldStateUnchanged(startStateReference, txHash, cause) {
|
|
@@ -687,8 +712,8 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
687
712
|
});
|
|
688
713
|
}
|
|
689
714
|
}
|
|
690
|
-
async processTx(tx, deadline) {
|
|
691
|
-
const [time, [processedTx, returnValues]] = await elapsed(()=>this.processTxWithinDeadline(tx, deadline));
|
|
715
|
+
async processTx(tx, deadline, signal) {
|
|
716
|
+
const [time, [processedTx, returnValues, debugLogs]] = await elapsed(()=>this.processTxWithinDeadline(tx, deadline, signal));
|
|
692
717
|
this.log.verbose(!tx.hasPublicCalls() ? `Processed tx ${processedTx.hash} with no public calls in ${time}ms` : `Processed tx ${processedTx.hash} with ${tx.numberOfPublicCalls()} public calls in ${time}ms`, {
|
|
693
718
|
txHash: processedTx.hash,
|
|
694
719
|
txFee: processedTx.txEffect.transactionFee.toBigInt(),
|
|
@@ -706,7 +731,8 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
706
731
|
});
|
|
707
732
|
return [
|
|
708
733
|
processedTx,
|
|
709
|
-
returnValues ?? []
|
|
734
|
+
returnValues ?? [],
|
|
735
|
+
debugLogs
|
|
710
736
|
];
|
|
711
737
|
}
|
|
712
738
|
async doTreeInsertionsForPrivateOnlyTx(processedTx) {
|
|
@@ -728,7 +754,7 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
728
754
|
const treeInsertionEnd = process.hrtime.bigint();
|
|
729
755
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
730
756
|
}
|
|
731
|
-
/** Processes the given tx within deadline
|
|
757
|
+
/** Processes the given tx within deadline or until the signal is aborted. */ async processTxWithinDeadline(tx, deadline, signal) {
|
|
732
758
|
const innerProcessFn = tx.hasPublicCalls() ? ()=>this.processTxWithPublicCalls(tx) : ()=>this.processPrivateOnlyTx(tx);
|
|
733
759
|
// Fake a delay per tx if instructed (used for tests)
|
|
734
760
|
const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
|
|
@@ -738,20 +764,31 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
738
764
|
await sleep(fakeDelayPerTxMs);
|
|
739
765
|
return result;
|
|
740
766
|
} : innerProcessFn;
|
|
741
|
-
|
|
767
|
+
const processingSignal = this.getProcessingSignal(tx, deadline, signal);
|
|
768
|
+
if (!processingSignal) {
|
|
742
769
|
return await processFn();
|
|
743
770
|
}
|
|
744
|
-
|
|
771
|
+
return await execWithSignal(()=>processFn(), processingSignal, (signal)=>signal.reason?.name === 'TimeoutError' ? new PublicProcessorTimeoutError() : new PublicProcessorAbortError());
|
|
772
|
+
}
|
|
773
|
+
getProcessingSignal(tx, deadline, signal) {
|
|
774
|
+
if (!deadline) {
|
|
775
|
+
return signal;
|
|
776
|
+
}
|
|
745
777
|
const timeout = +deadline - this.dateProvider.now();
|
|
746
778
|
if (timeout <= 0) {
|
|
747
779
|
throw new PublicProcessorTimeoutError();
|
|
748
780
|
}
|
|
781
|
+
const txHash = tx.getTxHash();
|
|
749
782
|
this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
|
|
750
783
|
deadline: deadline.toISOString(),
|
|
751
784
|
now: new Date(this.dateProvider.now()).toISOString(),
|
|
752
785
|
txHash
|
|
753
786
|
});
|
|
754
|
-
|
|
787
|
+
const timeoutSignal = AbortSignal.timeout(timeout);
|
|
788
|
+
return signal ? AbortSignal.any([
|
|
789
|
+
signal,
|
|
790
|
+
timeoutSignal
|
|
791
|
+
]) : timeoutSignal;
|
|
755
792
|
}
|
|
756
793
|
/**
|
|
757
794
|
* Creates the public data write for paying the tx fee.
|
|
@@ -780,10 +817,11 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
780
817
|
this.metrics.recordClassPublication(...tx.getContractClassLogs().filter((log)=>ContractClassPublishedEvent.isContractClassPublishedEvent(log)).map((log)=>ContractClassPublishedEvent.fromLog(log)));
|
|
781
818
|
// Fee payment insertion has already been done. Do the rest.
|
|
782
819
|
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
783
|
-
|
|
820
|
+
this.contractsDB.addNewContracts(tx);
|
|
784
821
|
return [
|
|
785
822
|
processedTx,
|
|
786
|
-
undefined
|
|
823
|
+
undefined,
|
|
824
|
+
[]
|
|
787
825
|
];
|
|
788
826
|
}
|
|
789
827
|
async processTxWithPublicCalls(tx) {
|
|
@@ -805,7 +843,8 @@ _dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
|
805
843
|
const processedTx = makeProcessedTxFromTxWithPublicCalls(tx, this.globalVariables, avmProvingRequest, publicTxEffect, gasUsed, revertCode, revertReason);
|
|
806
844
|
return [
|
|
807
845
|
processedTx,
|
|
808
|
-
appLogicReturnValues
|
|
846
|
+
appLogicReturnValues,
|
|
847
|
+
result.logs ?? []
|
|
809
848
|
];
|
|
810
849
|
}
|
|
811
850
|
/**
|
|
@@ -15,6 +15,8 @@ export declare class PublicProcessorMetrics {
|
|
|
15
15
|
private gasRate;
|
|
16
16
|
private txGas;
|
|
17
17
|
private treeInsertionDuration;
|
|
18
|
+
private silentlySkippedCount;
|
|
19
|
+
private silentlySkippedDuration;
|
|
18
20
|
constructor(client: TelemetryClient, name?: string);
|
|
19
21
|
recordPhaseDuration(phaseName: TxExecutionPhase, durationMs: number): void;
|
|
20
22
|
recordTx(phaseCount: number, durationMs: number, gasUsed: Gas): void;
|
|
@@ -23,5 +25,6 @@ export declare class PublicProcessorMetrics {
|
|
|
23
25
|
recordRevertedPhase(phaseName: TxExecutionPhase): void;
|
|
24
26
|
recordClassPublication(...events: ContractClassPublishedEvent[]): void;
|
|
25
27
|
recordTreeInsertions(durationUs: number): void;
|
|
28
|
+
recordSilentlySkipped(durationMs: number): void;
|
|
26
29
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvcl9tZXRyaWNzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL3B1YmxpY19wcm9jZXNzb3IvcHVibGljX3Byb2Nlc3Nvcl9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUYsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUtMLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFHWixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLHFCQUFhLHNCQUFzQjtJQUNqQyxTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLE9BQU8sQ0FBQyxVQUFVLENBQVk7SUFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBZ0I7SUFDL0IsT0FBTyxDQUFDLFlBQVksQ0FBZ0I7SUFFcEMsT0FBTyxDQUFDLGFBQWEsQ0FBWTtJQUNqQyxPQUFPLENBQUMsVUFBVSxDQUFnQjtJQUVsQyxPQUFPLENBQUMsZ0JBQWdCLENBQVk7SUFDcEMsT0FBTyxDQUFDLFFBQVEsQ0FBUTtJQUN4QixPQUFPLENBQUMsaUJBQWlCLENBQVk7SUFDckMsT0FBTyxDQUFDLE9BQU8sQ0FBWTtJQUMzQixPQUFPLENBQUMsS0FBSyxDQUFZO0lBRXpCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBWTtJQUV6QyxPQUFPLENBQUMsb0JBQW9CLENBQWdCO0lBQzVDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBWTtJQUUzQyxZQUFZLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxTQUFvQixFQWtDNUQ7SUFFRCxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFHbEU7SUFFRCxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFFBWTVEO0lBRUQsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFnQjFDO0lBRUQsY0FBYyxTQUliO0lBRUQsbUJBQW1CLENBQUMsU0FBUyxFQUFFLGdCQUFnQixRQUU5QztJQUVELHNCQUFzQixDQUFDLEdBQUcsTUFBTSxFQUFFLDJCQUEyQixFQUFFLFFBUzlEO0lBRUQsb0JBQW9CLENBQUMsVUFBVSxFQUFFLE1BQU0sUUFFdEM7SUFFRCxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQUd2QztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_processor_metrics.d.ts","sourceRoot":"","sources":["../../../src/public/public_processor/public_processor_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,sBAAsB;IACjC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,KAAK,CAAY;IAEzB,OAAO,CAAC,qBAAqB,CAAY;IAEzC,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,SAAoB,
|
|
1
|
+
{"version":3,"file":"public_processor_metrics.d.ts","sourceRoot":"","sources":["../../../src/public/public_processor/public_processor_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,sBAAsB;IACjC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,KAAK,CAAY;IAEzB,OAAO,CAAC,qBAAqB,CAAY;IAEzC,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,uBAAuB,CAAY;IAE3C,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,SAAoB,EAkC5D;IAED,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,QAGlE;IAED,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAY5D;IAED,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,QAgB1C;IAED,cAAc,SAIb;IAED,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,QAE9C;IAED,sBAAsB,CAAC,GAAG,MAAM,EAAE,2BAA2B,EAAE,QAS9D;IAED,oBAAoB,CAAC,UAAU,EAAE,MAAM,QAEtC;IAED,qBAAqB,CAAC,UAAU,EAAE,MAAM,QAGvC;CACF"}
|
|
@@ -13,6 +13,8 @@ export class PublicProcessorMetrics {
|
|
|
13
13
|
gasRate;
|
|
14
14
|
txGas;
|
|
15
15
|
treeInsertionDuration;
|
|
16
|
+
silentlySkippedCount;
|
|
17
|
+
silentlySkippedDuration;
|
|
16
18
|
constructor(client, name = 'PublicProcessor'){
|
|
17
19
|
this.tracer = client.getTracer(name);
|
|
18
20
|
const meter = client.getMeter(name);
|
|
@@ -42,6 +44,8 @@ export class PublicProcessorMetrics {
|
|
|
42
44
|
this.txGas = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_GAS);
|
|
43
45
|
this.gasRate = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE);
|
|
44
46
|
this.treeInsertionDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION);
|
|
47
|
+
this.silentlySkippedCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT);
|
|
48
|
+
this.silentlySkippedDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION);
|
|
45
49
|
}
|
|
46
50
|
recordPhaseDuration(phaseName, durationMs) {
|
|
47
51
|
this.phaseCount.add(1, {
|
|
@@ -105,4 +109,8 @@ export class PublicProcessorMetrics {
|
|
|
105
109
|
recordTreeInsertions(durationUs) {
|
|
106
110
|
this.treeInsertionDuration.record(Math.ceil(durationUs));
|
|
107
111
|
}
|
|
112
|
+
recordSilentlySkipped(durationMs) {
|
|
113
|
+
this.silentlySkippedCount.add(1);
|
|
114
|
+
this.silentlySkippedDuration.record(Math.ceil(durationMs));
|
|
115
|
+
}
|
|
108
116
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
2
|
+
import { type PublicSimulatorConfig, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
3
|
+
import type { GlobalVariables, Tx } from '@aztec/stdlib/tx';
|
|
4
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
5
|
+
import type { PublicContractsDB } from '../public_db_sources.js';
|
|
6
|
+
import { PublicTxSimulator } from './public_tx_simulator.js';
|
|
7
|
+
/**
|
|
8
|
+
* A {@link PublicTxSimulator} that dumps AVM circuit inputs to disk after simulation.
|
|
9
|
+
* Used during nightly CI runs to collect circuit inputs for AVM proving benchmarks.
|
|
10
|
+
*/
|
|
11
|
+
export declare class DumpingPublicTxSimulator extends PublicTxSimulator {
|
|
12
|
+
private readonly outputDir;
|
|
13
|
+
constructor(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, config: Partial<PublicSimulatorConfig>, outputDir: string, bindings?: LoggerBindings);
|
|
14
|
+
simulate(tx: Tx): Promise<PublicTxResult>;
|
|
15
|
+
private dumpAvmCircuitInputs;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtcGluZ19wdWJsaWNfdHhfc2ltdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL3B1YmxpY190eF9zaW11bGF0b3IvZHVtcGluZ19wdWJsaWNfdHhfc2ltdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFJTCxLQUFLLHFCQUFxQixFQUMxQixLQUFLLGNBQWMsRUFFcEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFNNUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RDs7O0dBR0c7QUFDSCxxQkFBYSx3QkFBeUIsU0FBUSxpQkFBaUI7SUFDN0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQVM7SUFFbkMsWUFDRSxZQUFZLEVBQUUsWUFBWSxFQUMxQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxXQUFXLEVBQUUsaUJBQWlCLEVBQzlCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUN0QyxTQUFTLEVBQUUsTUFBTSxFQUNqQixRQUFRLENBQUMsRUFBRSxjQUFjLEVBTTFCO0lBRXFCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FJOUQ7SUFFRCxPQUFPLENBQUMsb0JBQW9CO0NBbUI3QiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dumping_public_tx_simulator.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/dumping_public_tx_simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAM5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,YACE,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,cAAc,EAM1B;IAEqB,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAI9D;IAED,OAAO,CAAC,oBAAoB;CAmB7B"}
|
|
@@ -2,51 +2,38 @@ import { AvmCircuitInputs, AvmCircuitPublicInputs, AvmExecutionHints, serializeW
|
|
|
2
2
|
import { strict as assert } from 'assert';
|
|
3
3
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
4
4
|
import { join } from 'path';
|
|
5
|
-
import {
|
|
5
|
+
import { PublicTxSimulator } from './public_tx_simulator.js';
|
|
6
6
|
/**
|
|
7
|
-
* A
|
|
8
|
-
* Used during nightly CI runs to collect circuit inputs for
|
|
9
|
-
*/ export class
|
|
7
|
+
* A {@link PublicTxSimulator} that dumps AVM circuit inputs to disk after simulation.
|
|
8
|
+
* Used during nightly CI runs to collect circuit inputs for AVM proving benchmarks.
|
|
9
|
+
*/ export class DumpingPublicTxSimulator extends PublicTxSimulator {
|
|
10
10
|
outputDir;
|
|
11
|
-
constructor(
|
|
12
|
-
super(
|
|
11
|
+
constructor(avmSimulator, globalVariables, contractsDB, forkId, config, outputDir, bindings){
|
|
12
|
+
super(avmSimulator, globalVariables, contractsDB, forkId, config, bindings);
|
|
13
13
|
assert(config.collectHints === true, 'collectHints must be enabled to dump AVM circuit inputs');
|
|
14
14
|
assert(config.collectPublicInputs === true, 'collectPublicInputs must be enabled to dump AVM circuit inputs');
|
|
15
15
|
this.outputDir = outputDir;
|
|
16
16
|
}
|
|
17
17
|
async simulate(tx) {
|
|
18
18
|
const result = await super.simulate(tx);
|
|
19
|
-
|
|
20
|
-
const txHash = this.computeTxHash(tx);
|
|
21
|
-
this.dumpAvmCircuitInputs(result, txHash);
|
|
19
|
+
this.dumpAvmCircuitInputs(result, tx.getTxHash().toString());
|
|
22
20
|
return result;
|
|
23
21
|
}
|
|
24
|
-
|
|
25
|
-
* Dumps AVM circuit inputs to disk.
|
|
26
|
-
*
|
|
27
|
-
* @param result - The simulation result containing hints and public inputs
|
|
28
|
-
* @param txHash - The transaction hash to use in the filename
|
|
29
|
-
*/ dumpAvmCircuitInputs(result, txHash) {
|
|
22
|
+
dumpAvmCircuitInputs(result, txHash) {
|
|
30
23
|
try {
|
|
31
|
-
// Ensure the output directory exists
|
|
32
24
|
mkdirSync(this.outputDir, {
|
|
33
25
|
recursive: true
|
|
34
26
|
});
|
|
35
|
-
|
|
36
|
-
const filename = `avm-circuit-inputs-tx-${txHash.toString()}.bin`;
|
|
27
|
+
const filename = `avm-circuit-inputs-tx-${txHash}.bin`;
|
|
37
28
|
const filepath = join(this.outputDir, filename);
|
|
38
|
-
// Create circuit inputs from the result
|
|
39
29
|
const hints = result.hints ?? AvmExecutionHints.empty();
|
|
40
30
|
const publicInputs = result.publicInputs ?? AvmCircuitPublicInputs.empty();
|
|
41
31
|
const avmCircuitInputs = new AvmCircuitInputs(hints, publicInputs);
|
|
42
|
-
// Serialize the circuit inputs using MessagePack
|
|
43
32
|
const serialized = serializeWithMessagePack(avmCircuitInputs);
|
|
44
|
-
// Write to disk
|
|
45
33
|
writeFileSync(filepath, serialized);
|
|
46
34
|
this.log.debug(`Dumped AVM circuit inputs to ${filepath}`);
|
|
47
35
|
} catch (error) {
|
|
48
|
-
|
|
49
|
-
this.log.warn(`Failed to dump AVM circuit inputs for tx ${txHash.toString()}: ${error}`);
|
|
36
|
+
this.log.warn(`Failed to dump AVM circuit inputs for tx ${txHash}: ${error}`);
|
|
50
37
|
}
|
|
51
38
|
}
|
|
52
39
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
2
|
-
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
3
2
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
4
3
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
4
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
5
5
|
import type { PublicContractsDB } from '../public_db_sources.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
|
|
7
|
+
import { TelemetryPublicTxSimulator } from './public_tx_simulator.js';
|
|
8
8
|
/**
|
|
9
|
-
* Creates
|
|
10
|
-
* Uses
|
|
11
|
-
* otherwise uses
|
|
9
|
+
* Creates an IPC-based public tx simulator for block building.
|
|
10
|
+
* Uses DumpingPublicTxSimulator if DUMP_AVM_INPUTS_TO_DIR env var is set (for CI/testing the AVM circuit),
|
|
11
|
+
* otherwise uses TelemetryPublicTxSimulator (for production).
|
|
12
12
|
*/
|
|
13
|
-
export declare function createPublicTxSimulatorForBlockBuilding(
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
export declare function createPublicTxSimulatorForBlockBuilding(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, telemetryClient: TelemetryClient, bindings?: LoggerBindings, collectDebugLogs?: boolean): DumpingPublicTxSimulator | TelemetryPublicTxSimulator;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yaWVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL3B1YmxpY190eF9zaW11bGF0b3IvZmFjdG9yaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEU7Ozs7R0FJRztBQUNILHdCQUFnQix1Q0FBdUMsQ0FDckQsWUFBWSxFQUFFLFlBQVksRUFDMUIsZUFBZSxFQUFFLGVBQWUsRUFDaEMsV0FBVyxFQUFFLGlCQUFpQixFQUM5QixNQUFNLEVBQUUsTUFBTSxFQUNkLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFDekIsZ0JBQWdCLFVBQVEseURBc0N6QiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,QAAQ,CAAC,EAAE,cAAc,EACzB,gBAAgB,UAAQ,yDAsCzB"}
|