@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
|
@@ -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';
|
|
@@ -25,6 +25,7 @@ import type {
|
|
|
25
25
|
PublicProcessorValidator,
|
|
26
26
|
SequencerConfig,
|
|
27
27
|
} from '@aztec/stdlib/interfaces/server';
|
|
28
|
+
import { type DebugLog, type DebugLogStore, NullDebugLogStore } from '@aztec/stdlib/logs';
|
|
28
29
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
29
30
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
30
31
|
import {
|
|
@@ -49,11 +50,12 @@ import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
|
49
50
|
|
|
50
51
|
import { AssertionError } from 'assert';
|
|
51
52
|
|
|
53
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
52
54
|
import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
53
55
|
import {
|
|
54
56
|
type PublicTxSimulatorConfig,
|
|
55
57
|
type PublicTxSimulatorInterface,
|
|
56
|
-
|
|
58
|
+
TelemetryPublicTxSimulator,
|
|
57
59
|
} from '../public_tx_simulator/index.js';
|
|
58
60
|
import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
|
|
59
61
|
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
@@ -65,6 +67,7 @@ export class PublicProcessorFactory {
|
|
|
65
67
|
private log: Logger;
|
|
66
68
|
constructor(
|
|
67
69
|
private contractDataSource: ContractDataSource,
|
|
70
|
+
private avmSimulator: AvmSimulator,
|
|
68
71
|
private dateProvider: DateProvider = new DateProvider(),
|
|
69
72
|
protected telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
70
73
|
bindings?: LoggerBindings,
|
|
@@ -73,21 +76,23 @@ export class PublicProcessorFactory {
|
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
/**
|
|
76
|
-
* 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
|
+
*
|
|
77
82
|
* @param globalVariables - The global variables for the block being processed.
|
|
78
|
-
* @param
|
|
83
|
+
* @param contractsDB - Optional pre-populated contracts DB; a fresh one is constructed if omitted.
|
|
79
84
|
* @returns A new instance of a PublicProcessor.
|
|
80
85
|
*/
|
|
81
86
|
public create(
|
|
82
87
|
merkleTree: MerkleTreeWriteOperations,
|
|
83
88
|
globalVariables: GlobalVariables,
|
|
84
89
|
config: PublicSimulatorConfig,
|
|
90
|
+
contractsDB: PublicContractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings()),
|
|
85
91
|
): PublicProcessor {
|
|
86
|
-
const
|
|
87
|
-
const contractsDB = new PublicContractsDB(this.contractDataSource, bindings);
|
|
92
|
+
const forkId = merkleTree.getRevision().forkId;
|
|
88
93
|
|
|
89
94
|
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
90
|
-
const publicTxSimulator = this.createPublicTxSimulator(
|
|
95
|
+
const publicTxSimulator = this.createPublicTxSimulator(forkId, globalVariables, contractsDB, config);
|
|
91
96
|
|
|
92
97
|
return new PublicProcessor(
|
|
93
98
|
globalVariables,
|
|
@@ -96,20 +101,21 @@ export class PublicProcessorFactory {
|
|
|
96
101
|
publicTxSimulator,
|
|
97
102
|
this.dateProvider,
|
|
98
103
|
this.telemetryClient,
|
|
99
|
-
createLogger('simulator:public-processor',
|
|
104
|
+
createLogger('simulator:public-processor', this.log.getBindings()),
|
|
100
105
|
);
|
|
101
106
|
}
|
|
102
107
|
|
|
103
108
|
protected createPublicTxSimulator(
|
|
104
|
-
|
|
105
|
-
contractsDB: PublicContractsDB,
|
|
109
|
+
forkId: number,
|
|
106
110
|
globalVariables: GlobalVariables,
|
|
111
|
+
contractsDB: PublicContractsDB,
|
|
107
112
|
config?: Partial<PublicTxSimulatorConfig>,
|
|
108
113
|
): PublicTxSimulatorInterface {
|
|
109
|
-
return new
|
|
110
|
-
|
|
111
|
-
contractsDB,
|
|
114
|
+
return new TelemetryPublicTxSimulator(
|
|
115
|
+
this.avmSimulator,
|
|
112
116
|
globalVariables,
|
|
117
|
+
contractsDB,
|
|
118
|
+
forkId,
|
|
113
119
|
this.telemetryClient,
|
|
114
120
|
config,
|
|
115
121
|
this.log.getBindings(),
|
|
@@ -124,13 +130,19 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
124
130
|
}
|
|
125
131
|
}
|
|
126
132
|
|
|
133
|
+
class PublicProcessorAbortError extends Error {
|
|
134
|
+
constructor(message: string = 'Aborted while processing tx') {
|
|
135
|
+
super(message);
|
|
136
|
+
this.name = 'PublicProcessorAbortError';
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
127
140
|
/**
|
|
128
141
|
* Converts Txs lifted from the P2P module into ProcessedTx objects by executing
|
|
129
142
|
* any public function calls in them. Txs with private calls only are unaffected.
|
|
130
143
|
*/
|
|
131
144
|
export class PublicProcessor implements Traceable {
|
|
132
145
|
private metrics: PublicProcessorMetrics;
|
|
133
|
-
|
|
134
146
|
constructor(
|
|
135
147
|
protected globalVariables: GlobalVariables,
|
|
136
148
|
private guardedMerkleTree: GuardedMerkleTreeOperations,
|
|
@@ -140,6 +152,7 @@ export class PublicProcessor implements Traceable {
|
|
|
140
152
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
141
153
|
private log: Logger,
|
|
142
154
|
private opts: Pick<SequencerConfig, 'fakeProcessingDelayPerTxMs' | 'fakeThrowAfterProcessingTxCount'> = {},
|
|
155
|
+
private debugLogStore: DebugLogStore = new NullDebugLogStore(),
|
|
143
156
|
) {
|
|
144
157
|
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
145
158
|
}
|
|
@@ -159,12 +172,13 @@ export class PublicProcessor implements Traceable {
|
|
|
159
172
|
txs: Iterable<Tx> | AsyncIterable<Tx>,
|
|
160
173
|
limits: PublicProcessorLimits = {},
|
|
161
174
|
validator: PublicProcessorValidator = {},
|
|
162
|
-
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[],
|
|
163
|
-
const { maxTransactions,
|
|
175
|
+
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], DebugLog[]]> {
|
|
176
|
+
const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal, signal } = limits;
|
|
164
177
|
const { preprocessValidator, nullifierCache } = validator;
|
|
165
178
|
const result: ProcessedTx[] = [];
|
|
166
179
|
const usedTxs: Tx[] = [];
|
|
167
180
|
const failed: FailedTx[] = [];
|
|
181
|
+
const debugLogs: DebugLog[] = [];
|
|
168
182
|
const timer = new Timer();
|
|
169
183
|
|
|
170
184
|
let totalSizeInBytes = 0;
|
|
@@ -172,6 +186,8 @@ export class PublicProcessor implements Traceable {
|
|
|
172
186
|
let totalPublicGas = new Gas(0, 0);
|
|
173
187
|
let totalBlockGas = new Gas(0, 0);
|
|
174
188
|
let totalBlobFields = 0;
|
|
189
|
+
let silentlySkippedCount = 0;
|
|
190
|
+
let totalSilentlySkippedDurationMs = 0;
|
|
175
191
|
|
|
176
192
|
for await (const tx of txs) {
|
|
177
193
|
// Only process up to the max tx limit
|
|
@@ -180,28 +196,33 @@ export class PublicProcessor implements Traceable {
|
|
|
180
196
|
break;
|
|
181
197
|
}
|
|
182
198
|
|
|
183
|
-
// Bail if we've hit the deadline
|
|
199
|
+
// Bail if we've hit the deadline or have been interrupted.
|
|
184
200
|
if (deadline && this.dateProvider.now() > +deadline) {
|
|
185
201
|
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
186
202
|
break;
|
|
187
203
|
}
|
|
204
|
+
if (signal?.aborted) {
|
|
205
|
+
this.log.warn(`Stopping tx processing due to abort signal.`);
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
188
208
|
|
|
189
|
-
// Skip this tx if it'd exceed max block size
|
|
190
209
|
const txHash = tx.getTxHash().toString();
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
+
);
|
|
199
219
|
continue;
|
|
200
220
|
}
|
|
201
221
|
|
|
202
|
-
// 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.
|
|
203
224
|
const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
|
|
204
|
-
if (maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
225
|
+
if (isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
205
226
|
this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
|
|
206
227
|
txHash,
|
|
207
228
|
txGasLimit,
|
|
@@ -221,11 +242,6 @@ export class PublicProcessor implements Traceable {
|
|
|
221
242
|
failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
|
|
222
243
|
returns.push(new NestedProcessReturnValues([]));
|
|
223
244
|
continue;
|
|
224
|
-
} else if (result.result === 'skipped') {
|
|
225
|
-
const reason = result.reason.join(', ');
|
|
226
|
-
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
227
|
-
returns.push(new NestedProcessReturnValues([]));
|
|
228
|
-
continue;
|
|
229
245
|
} else {
|
|
230
246
|
this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
|
|
231
247
|
}
|
|
@@ -241,7 +257,9 @@ export class PublicProcessor implements Traceable {
|
|
|
241
257
|
this.contractsDB.createCheckpoint();
|
|
242
258
|
|
|
243
259
|
try {
|
|
244
|
-
const [processedTx, returnValues] = await
|
|
260
|
+
const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(() =>
|
|
261
|
+
this.processTx(tx, deadline, signal),
|
|
262
|
+
);
|
|
245
263
|
|
|
246
264
|
// Inject a fake processing failure after N txs if requested
|
|
247
265
|
const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
|
|
@@ -250,23 +268,9 @@ export class PublicProcessor implements Traceable {
|
|
|
250
268
|
}
|
|
251
269
|
|
|
252
270
|
const txBlobFields = processedTx.txEffect.getNumBlobFields();
|
|
253
|
-
|
|
254
|
-
// If the actual size of this tx would exceed block size, skip it
|
|
255
271
|
const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
|
|
256
|
-
if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
|
|
257
|
-
this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
|
|
258
|
-
txHash,
|
|
259
|
-
sizeInBytes: txSize,
|
|
260
|
-
totalSizeInBytes,
|
|
261
|
-
maxBlockSize,
|
|
262
|
-
});
|
|
263
|
-
// Need to revert the checkpoint here and don't go any further
|
|
264
|
-
await checkpoint.revert();
|
|
265
|
-
this.contractsDB.revertCheckpoint();
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
272
|
|
|
269
|
-
// 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.
|
|
270
274
|
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
271
275
|
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
272
276
|
this.log.debug(
|
|
@@ -276,35 +280,64 @@ export class PublicProcessor implements Traceable {
|
|
|
276
280
|
txBlobFields,
|
|
277
281
|
totalBlobFields,
|
|
278
282
|
maxBlobFields,
|
|
283
|
+
txProcessingTimeMs,
|
|
279
284
|
},
|
|
280
285
|
);
|
|
286
|
+
silentlySkippedCount += 1;
|
|
287
|
+
totalSilentlySkippedDurationMs += txProcessingTimeMs;
|
|
288
|
+
this.metrics.recordSilentlySkipped(txProcessingTimeMs);
|
|
281
289
|
// Need to revert the checkpoint here and don't go any further
|
|
282
290
|
await checkpoint.revert();
|
|
283
291
|
this.contractsDB.revertCheckpoint();
|
|
284
292
|
continue;
|
|
285
293
|
}
|
|
286
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
|
+
|
|
287
314
|
// FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
|
|
288
315
|
// I'd rather pass the validators the processedTx as well and let them deal with it.
|
|
289
316
|
nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
|
|
290
317
|
result.push(processedTx);
|
|
291
318
|
usedTxs.push(tx);
|
|
292
319
|
returns = returns.concat(returnValues);
|
|
320
|
+
debugLogs.push(...txDebugLogs);
|
|
321
|
+
|
|
322
|
+
this.debugLogStore.storeLogs(processedTx.hash.toString(), txDebugLogs);
|
|
293
323
|
|
|
294
324
|
totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
|
|
295
325
|
totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
|
|
296
326
|
totalSizeInBytes += txSize;
|
|
297
327
|
totalBlobFields += txBlobFields;
|
|
328
|
+
|
|
329
|
+
// Commit the tx-level contracts checkpoint on success
|
|
330
|
+
this.contractsDB.commitCheckpoint();
|
|
298
331
|
} catch (err: any) {
|
|
299
|
-
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
300
|
-
this.log.warn(
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
//
|
|
304
|
-
//
|
|
305
|
-
//
|
|
306
|
-
//
|
|
307
|
-
//
|
|
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.
|
|
308
341
|
await this.publicTxSimulator.cancel?.();
|
|
309
342
|
|
|
310
343
|
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|
|
@@ -314,14 +347,10 @@ export class PublicProcessor implements Traceable {
|
|
|
314
347
|
// 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
|
|
315
348
|
// 2. Possible state updates on that checkpoint or any others created during execution.
|
|
316
349
|
|
|
317
|
-
//
|
|
318
|
-
//
|
|
319
|
-
//
|
|
320
|
-
await checkpoint.
|
|
321
|
-
|
|
322
|
-
// Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
|
|
323
|
-
// This needs to be done directly on the underlying fork as the guarded fork has been stopped.
|
|
324
|
-
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();
|
|
325
354
|
|
|
326
355
|
// Revert any contracts added to the DB for the tx.
|
|
327
356
|
this.contractsDB.revertCheckpoint();
|
|
@@ -333,9 +362,9 @@ export class PublicProcessor implements Traceable {
|
|
|
333
362
|
break;
|
|
334
363
|
}
|
|
335
364
|
|
|
336
|
-
// Roll back state to start of TX before proceeding to next TX
|
|
337
|
-
|
|
338
|
-
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();
|
|
339
368
|
this.contractsDB.revertCheckpoint();
|
|
340
369
|
const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
|
|
341
370
|
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
@@ -347,7 +376,6 @@ export class PublicProcessor implements Traceable {
|
|
|
347
376
|
} finally {
|
|
348
377
|
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
|
|
349
378
|
await checkpoint.commit();
|
|
350
|
-
this.contractsDB.commitCheckpointOkIfNone();
|
|
351
379
|
}
|
|
352
380
|
}
|
|
353
381
|
|
|
@@ -355,15 +383,26 @@ export class PublicProcessor implements Traceable {
|
|
|
355
383
|
const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
|
|
356
384
|
this.metrics.recordAllTxs(totalPublicGas, rate);
|
|
357
385
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
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
|
+
);
|
|
365
404
|
|
|
366
|
-
return [result, failed, usedTxs, returns,
|
|
405
|
+
return [result, failed, usedTxs, returns, debugLogs];
|
|
367
406
|
}
|
|
368
407
|
|
|
369
408
|
private async checkWorldStateUnchanged(
|
|
@@ -383,8 +422,14 @@ export class PublicProcessor implements Traceable {
|
|
|
383
422
|
}
|
|
384
423
|
|
|
385
424
|
@trackSpan('PublicProcessor.processTx', tx => ({ [Attributes.TX_HASH]: tx.getTxHash().toString() }))
|
|
386
|
-
private async processTx(
|
|
387
|
-
|
|
425
|
+
private async processTx(
|
|
426
|
+
tx: Tx,
|
|
427
|
+
deadline: Date | undefined,
|
|
428
|
+
signal: AbortSignal | undefined,
|
|
429
|
+
): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
|
|
430
|
+
const [time, [processedTx, returnValues, debugLogs]] = await elapsed(() =>
|
|
431
|
+
this.processTxWithinDeadline(tx, deadline, signal),
|
|
432
|
+
);
|
|
388
433
|
|
|
389
434
|
this.log.verbose(
|
|
390
435
|
!tx.hasPublicCalls()
|
|
@@ -407,7 +452,7 @@ export class PublicProcessor implements Traceable {
|
|
|
407
452
|
},
|
|
408
453
|
);
|
|
409
454
|
|
|
410
|
-
return [processedTx, returnValues ?? []];
|
|
455
|
+
return [processedTx, returnValues ?? [], debugLogs];
|
|
411
456
|
}
|
|
412
457
|
|
|
413
458
|
private async doTreeInsertionsForPrivateOnlyTx(processedTx: ProcessedTx): Promise<void> {
|
|
@@ -437,14 +482,14 @@ export class PublicProcessor implements Traceable {
|
|
|
437
482
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
438
483
|
}
|
|
439
484
|
|
|
440
|
-
/** Processes the given tx within deadline
|
|
485
|
+
/** Processes the given tx within deadline or until the signal is aborted. */
|
|
441
486
|
private async processTxWithinDeadline(
|
|
442
487
|
tx: Tx,
|
|
443
488
|
deadline: Date | undefined,
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
: () => this.processPrivateOnlyTx(tx);
|
|
489
|
+
signal: AbortSignal | undefined,
|
|
490
|
+
): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> {
|
|
491
|
+
const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> =
|
|
492
|
+
tx.hasPublicCalls() ? () => this.processTxWithPublicCalls(tx) : () => this.processPrivateOnlyTx(tx);
|
|
448
493
|
|
|
449
494
|
// Fake a delay per tx if instructed (used for tests)
|
|
450
495
|
const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
|
|
@@ -458,27 +503,38 @@ export class PublicProcessor implements Traceable {
|
|
|
458
503
|
}
|
|
459
504
|
: innerProcessFn;
|
|
460
505
|
|
|
461
|
-
|
|
506
|
+
const processingSignal = this.getProcessingSignal(tx, deadline, signal);
|
|
507
|
+
if (!processingSignal) {
|
|
462
508
|
return await processFn();
|
|
463
509
|
}
|
|
464
510
|
|
|
465
|
-
|
|
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
|
+
|
|
466
524
|
const timeout = +deadline - this.dateProvider.now();
|
|
467
525
|
if (timeout <= 0) {
|
|
468
526
|
throw new PublicProcessorTimeoutError();
|
|
469
527
|
}
|
|
470
528
|
|
|
529
|
+
const txHash = tx.getTxHash();
|
|
471
530
|
this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
|
|
472
531
|
deadline: deadline.toISOString(),
|
|
473
532
|
now: new Date(this.dateProvider.now()).toISOString(),
|
|
474
533
|
txHash,
|
|
475
534
|
});
|
|
476
535
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
timeout,
|
|
480
|
-
() => new PublicProcessorTimeoutError(),
|
|
481
|
-
);
|
|
536
|
+
const timeoutSignal = AbortSignal.timeout(timeout);
|
|
537
|
+
return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
|
|
482
538
|
}
|
|
483
539
|
|
|
484
540
|
/**
|
|
@@ -512,7 +568,7 @@ export class PublicProcessor implements Traceable {
|
|
|
512
568
|
@trackSpan('PublicProcessor.processPrivateOnlyTx', (tx: Tx) => ({
|
|
513
569
|
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
514
570
|
}))
|
|
515
|
-
private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined]> {
|
|
571
|
+
private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined, DebugLog[]]> {
|
|
516
572
|
const gasFees = this.globalVariables.gasFees;
|
|
517
573
|
const transactionFee = computeTransactionFee(gasFees, tx.data.constants.txContext.gasSettings, tx.data.gasUsed);
|
|
518
574
|
|
|
@@ -535,15 +591,15 @@ export class PublicProcessor implements Traceable {
|
|
|
535
591
|
// Fee payment insertion has already been done. Do the rest.
|
|
536
592
|
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
537
593
|
|
|
538
|
-
|
|
594
|
+
this.contractsDB.addNewContracts(tx);
|
|
539
595
|
|
|
540
|
-
return [processedTx, undefined];
|
|
596
|
+
return [processedTx, undefined, []];
|
|
541
597
|
}
|
|
542
598
|
|
|
543
599
|
@trackSpan('PublicProcessor.processTxWithPublicCalls', tx => ({
|
|
544
600
|
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
545
601
|
}))
|
|
546
|
-
private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
|
|
602
|
+
private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
|
|
547
603
|
const timer = new Timer();
|
|
548
604
|
|
|
549
605
|
const result = await this.publicTxSimulator.simulate(tx);
|
|
@@ -581,7 +637,7 @@ export class PublicProcessor implements Traceable {
|
|
|
581
637
|
revertReason,
|
|
582
638
|
);
|
|
583
639
|
|
|
584
|
-
return [processedTx, appLogicReturnValues];
|
|
640
|
+
return [processedTx, appLogicReturnValues, result.logs ?? []];
|
|
585
641
|
}
|
|
586
642
|
|
|
587
643
|
/**
|
|
@@ -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
|
}
|