@aztec/p2p 0.0.1-commit.f504929 → 0.0.1-commit.f5a9928

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.
Files changed (483) hide show
  1. package/README.md +130 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +22 -6
  5. package/dest/client/factory.d.ts +5 -4
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +39 -16
  8. package/dest/client/interface.d.ts +52 -12
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +36 -20
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +142 -81
  13. package/dest/config.d.ts +163 -98
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +130 -20
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +101 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +272 -199
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +224 -65
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +9 -4
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +28 -9
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +10 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +29 -20
  42. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +5 -4
  48. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  49. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +3 -1
  51. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  54. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  58. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +1 -1
  60. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -4
  62. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
  63. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  64. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +6 -7
  65. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
  66. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +6 -5
  68. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  69. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  70. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  71. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  72. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  74. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +11 -1
  75. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool_v2/instrumentation.js +24 -0
  77. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +41 -9
  78. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  79. package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
  80. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +29 -11
  81. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  82. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +46 -16
  83. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  84. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  85. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +55 -41
  86. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +19 -4
  87. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  88. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +86 -32
  89. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +50 -6
  90. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  91. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +262 -131
  92. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  93. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  94. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
  95. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  96. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  97. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  98. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +11 -5
  99. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  100. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
  101. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +11 -5
  102. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  103. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
  104. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +35 -10
  105. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  106. package/dest/msg_validators/proposal_validator/proposal_validator.js +128 -56
  107. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  108. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  109. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  110. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  111. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  112. package/dest/msg_validators/tx_validator/allowed_public_setup.js +21 -32
  113. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  114. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  115. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  116. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  117. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  118. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  119. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  120. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  121. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  122. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  123. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  124. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  126. package/dest/msg_validators/tx_validator/factory.d.ts +25 -7
  127. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/factory.js +55 -16
  129. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  130. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  132. package/dest/msg_validators/tx_validator/gas_validator.d.ts +53 -7
  133. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  135. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  136. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/index.js +3 -0
  138. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  139. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  141. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  142. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/phases_validator.js +49 -2
  144. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  145. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  147. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  148. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  149. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  150. package/dest/services/data_store.d.ts +1 -1
  151. package/dest/services/data_store.d.ts.map +1 -1
  152. package/dest/services/data_store.js +5 -5
  153. package/dest/services/discv5/discV5_service.d.ts +13 -2
  154. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  155. package/dest/services/discv5/discV5_service.js +119 -23
  156. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  157. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  158. package/dest/services/discv5/persisted_enr_store.js +145 -0
  159. package/dest/services/dummy_service.d.ts +18 -16
  160. package/dest/services/dummy_service.d.ts.map +1 -1
  161. package/dest/services/dummy_service.js +21 -16
  162. package/dest/services/encoding.d.ts +23 -6
  163. package/dest/services/encoding.d.ts.map +1 -1
  164. package/dest/services/encoding.js +32 -16
  165. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  166. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  167. package/dest/services/gossipsub/topic_score_params.js +4 -14
  168. package/dest/services/libp2p/instrumentation.d.ts +6 -1
  169. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  170. package/dest/services/libp2p/instrumentation.js +21 -0
  171. package/dest/services/libp2p/libp2p_service.d.ts +51 -51
  172. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  173. package/dest/services/libp2p/libp2p_service.js +499 -333
  174. package/dest/services/peer-manager/peer_manager.d.ts +31 -3
  175. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  176. package/dest/services/peer-manager/peer_manager.js +125 -25
  177. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  178. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  179. package/dest/services/peer-manager/peer_scoring.js +102 -13
  180. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
  181. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  182. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +81 -86
  183. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  184. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  185. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  186. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  187. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  188. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  189. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  190. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  191. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  192. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  193. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  194. package/dest/services/reqresp/config.d.ts +15 -3
  195. package/dest/services/reqresp/config.d.ts.map +1 -1
  196. package/dest/services/reqresp/config.js +11 -0
  197. package/dest/services/reqresp/interface.d.ts +16 -18
  198. package/dest/services/reqresp/interface.d.ts.map +1 -1
  199. package/dest/services/reqresp/interface.js +10 -20
  200. package/dest/services/reqresp/metrics.d.ts +1 -1
  201. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  202. package/dest/services/reqresp/metrics.js +0 -1
  203. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  204. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  205. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  206. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  207. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  208. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  209. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  210. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  211. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  212. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  213. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  214. package/dest/services/reqresp/protocols/index.js +0 -1
  215. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  216. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  217. package/dest/services/reqresp/protocols/tx.js +1 -3
  218. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  219. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  220. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  221. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  222. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  223. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  224. package/dest/services/reqresp/reqresp.d.ts +7 -29
  225. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  226. package/dest/services/reqresp/reqresp.js +73 -215
  227. package/dest/services/service.d.ts +43 -18
  228. package/dest/services/service.d.ts.map +1 -1
  229. package/dest/services/tx_collection/config.d.ts +2 -23
  230. package/dest/services/tx_collection/config.d.ts.map +1 -1
  231. package/dest/services/tx_collection/config.js +2 -55
  232. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  233. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  234. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  235. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  236. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  237. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  238. package/dest/services/tx_collection/index.d.ts +2 -3
  239. package/dest/services/tx_collection/index.d.ts.map +1 -1
  240. package/dest/services/tx_collection/index.js +0 -1
  241. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  242. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  243. package/dest/services/tx_collection/instrumentation.js +0 -2
  244. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  245. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  246. package/dest/services/tx_collection/request_tracker.js +84 -0
  247. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  248. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  249. package/dest/services/tx_collection/tx_collection.js +275 -119
  250. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  251. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  252. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  253. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  254. package/dest/services/tx_collection/tx_source.js +13 -8
  255. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  256. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  257. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  258. package/dest/services/tx_provider.d.ts +3 -1
  259. package/dest/services/tx_provider.d.ts.map +1 -1
  260. package/dest/services/tx_provider.js +3 -0
  261. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  262. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  263. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  264. package/dest/test-helpers/mock-pubsub.d.ts +33 -9
  265. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  266. package/dest/test-helpers/mock-pubsub.js +57 -44
  267. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  268. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  269. package/dest/test-helpers/reqresp-nodes.js +16 -18
  270. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  271. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  272. package/dest/test-helpers/test_tx_provider.js +3 -0
  273. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  274. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  275. package/dest/test-helpers/testbench-utils.js +49 -15
  276. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  277. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  278. package/dest/testbench/p2p_client_testbench_worker.js +104 -41
  279. package/dest/testbench/worker_client_manager.d.ts +12 -6
  280. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  281. package/dest/testbench/worker_client_manager.js +57 -11
  282. package/dest/util.d.ts +12 -7
  283. package/dest/util.d.ts.map +1 -1
  284. package/dest/util.js +35 -14
  285. package/dest/versioning.d.ts +3 -6
  286. package/dest/versioning.d.ts.map +1 -1
  287. package/dest/versioning.js +3 -24
  288. package/package.json +17 -17
  289. package/src/bootstrap/bootstrap.ts +17 -3
  290. package/src/client/factory.ts +62 -9
  291. package/src/client/interface.ts +48 -18
  292. package/src/client/p2p_client.ts +159 -113
  293. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  294. package/src/config.ts +233 -20
  295. package/src/errors/p2p-service.error.ts +11 -0
  296. package/src/errors/reqresp.error.ts +13 -19
  297. package/src/index.ts +0 -1
  298. package/src/mem_pools/attestation_pool/attestation_pool.ts +327 -242
  299. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
  300. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  301. package/src/mem_pools/index.ts +0 -3
  302. package/src/mem_pools/instrumentation.ts +18 -12
  303. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  304. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +30 -20
  305. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  306. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +4 -5
  307. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -2
  308. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  309. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
  310. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  311. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -3
  312. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -7
  313. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +5 -6
  314. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  315. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  316. package/src/mem_pools/tx_pool_v2/instrumentation.ts +27 -0
  317. package/src/mem_pools/tx_pool_v2/interfaces.ts +40 -8
  318. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +72 -20
  319. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
  320. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +107 -32
  321. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +291 -137
  322. package/src/msg_validators/attestation_validator/README.md +49 -0
  323. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
  324. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  325. package/src/msg_validators/proposal_validator/README.md +123 -0
  326. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
  327. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
  328. package/src/msg_validators/proposal_validator/proposal_validator.ts +150 -58
  329. package/src/msg_validators/tx_validator/README.md +17 -3
  330. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  331. package/src/msg_validators/tx_validator/allowed_public_setup.ts +16 -35
  332. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  333. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  334. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  335. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  336. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  337. package/src/msg_validators/tx_validator/factory.ts +66 -9
  338. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  339. package/src/msg_validators/tx_validator/gas_validator.ts +117 -39
  340. package/src/msg_validators/tx_validator/index.ts +3 -0
  341. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  342. package/src/msg_validators/tx_validator/phases_validator.ts +60 -1
  343. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  344. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  345. package/src/services/data_store.ts +5 -13
  346. package/src/services/discv5/discV5_service.ts +126 -14
  347. package/src/services/discv5/persisted_enr_store.ts +158 -0
  348. package/src/services/dummy_service.ts +26 -40
  349. package/src/services/encoding.ts +35 -19
  350. package/src/services/gossipsub/README.md +33 -11
  351. package/src/services/gossipsub/topic_score_params.ts +9 -18
  352. package/src/services/libp2p/instrumentation.ts +22 -0
  353. package/src/services/libp2p/libp2p_service.ts +560 -369
  354. package/src/services/peer-manager/peer_manager.ts +138 -24
  355. package/src/services/peer-manager/peer_scoring.ts +102 -8
  356. package/src/services/reqresp/README.md +194 -0
  357. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  358. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +77 -95
  359. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  360. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  361. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  362. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  363. package/src/services/reqresp/config.ts +19 -2
  364. package/src/services/reqresp/interface.ts +21 -47
  365. package/src/services/reqresp/metrics.ts +0 -1
  366. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  367. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  368. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  369. package/src/services/reqresp/protocols/index.ts +0 -1
  370. package/src/services/reqresp/protocols/tx.ts +1 -3
  371. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  372. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  373. package/src/services/reqresp/reqresp.ts +84 -259
  374. package/src/services/service.ts +51 -35
  375. package/src/services/tx_collection/config.ts +3 -80
  376. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  377. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  378. package/src/services/tx_collection/index.ts +1 -6
  379. package/src/services/tx_collection/instrumentation.ts +1 -7
  380. package/src/services/tx_collection/request_tracker.ts +127 -0
  381. package/src/services/tx_collection/tx_collection.ts +331 -176
  382. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  383. package/src/services/tx_collection/tx_source.ts +10 -8
  384. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  385. package/src/services/tx_provider.ts +5 -0
  386. package/src/test-helpers/make-test-p2p-clients.ts +4 -1
  387. package/src/test-helpers/mock-pubsub.ts +61 -60
  388. package/src/test-helpers/reqresp-nodes.ts +13 -23
  389. package/src/test-helpers/test_tx_provider.ts +5 -0
  390. package/src/test-helpers/testbench-utils.ts +63 -28
  391. package/src/testbench/p2p_client_testbench_worker.ts +111 -57
  392. package/src/testbench/worker_client_manager.ts +72 -25
  393. package/src/util.ts +33 -18
  394. package/src/versioning.ts +3 -33
  395. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  396. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  397. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  398. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  399. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  400. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  401. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  402. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  403. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  404. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  405. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  406. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  407. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  408. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  409. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  410. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  411. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  412. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  413. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  414. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  415. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  416. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  417. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  418. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  419. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  420. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  421. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  422. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  423. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  424. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  425. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  426. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  427. package/dest/mem_pools/tx_pool/index.js +0 -2
  428. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  429. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  430. package/dest/mem_pools/tx_pool/priority.js +0 -15
  431. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  432. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  433. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  434. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  435. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  436. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  437. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  438. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  439. package/dest/msg_validators/clock_tolerance.js +0 -37
  440. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
  441. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  442. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
  443. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  444. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  445. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  446. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  447. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  448. package/dest/services/reqresp/protocols/block.js +0 -32
  449. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  450. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  451. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  452. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  453. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  454. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  455. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  456. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  457. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  458. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  459. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  460. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  461. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  462. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  463. package/src/mem_pools/tx_pool/README.md +0 -270
  464. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  465. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  466. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  467. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  468. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  469. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  470. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  471. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  472. package/src/mem_pools/tx_pool/index.ts +0 -2
  473. package/src/mem_pools/tx_pool/priority.ts +0 -20
  474. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  475. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  476. package/src/msg_validators/clock_tolerance.ts +0 -51
  477. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
  478. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  479. package/src/services/reqresp/protocols/block.ts +0 -37
  480. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  481. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  482. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  483. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,14 +1,10 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
+ import type { CheckpointProposalHash } from '@aztec/foundation/branded-types';
2
3
  import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
4
  import type { Logger } from '@aztec/foundation/log';
4
5
  import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
5
6
  import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
6
- import type {
7
- BlockProposal,
8
- CheckpointAttestation,
9
- CheckpointProposal,
10
- CheckpointProposalCore,
11
- } from '@aztec/stdlib/p2p';
7
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore } from '@aztec/stdlib/p2p';
12
8
  import { type BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
13
9
 
14
10
  import EventEmitter from 'events';
@@ -123,6 +119,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
123
119
  return Promise.resolve();
124
120
  }
125
121
 
122
+ unprotectTxs(_txHashes: TxHash[], _slotNumber: SlotNumber): Promise<void> {
123
+ return Promise.resolve();
124
+ }
125
+
126
126
  handlePrunedBlocks(_latestBlock: L2BlockId, _options?: { deleteAllTxs?: boolean }): Promise<void> {
127
127
  return Promise.resolve();
128
128
  }
@@ -171,6 +171,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
171
171
  return Promise.resolve(this.txsByHash.size);
172
172
  }
173
173
 
174
+ async hasEligiblePendingTxs(minCount: number): Promise<boolean> {
175
+ return (await this.getPendingTxCount()) >= minCount;
176
+ }
177
+
174
178
  getMinedTxHashes(): Promise<[TxHash, L2BlockId][]> {
175
179
  return Promise.resolve([]);
176
180
  }
@@ -214,6 +218,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
214
218
  */
215
219
  export class InMemoryAttestationPool {
216
220
  private proposals = new Map<string, BlockProposal>();
221
+ private checkpoints = new Map<SlotNumber, CheckpointProposalCore[]>();
217
222
 
218
223
  tryAddBlockProposal(blockProposal: BlockProposal): Promise<TryAddResult> {
219
224
  const id = blockProposal.archive.toString();
@@ -225,16 +230,33 @@ export class InMemoryAttestationPool {
225
230
  return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
226
231
  }
227
232
 
228
- getBlockProposal(id: string): Promise<BlockProposal | undefined> {
233
+ getBlockProposalByArchive(id: string): Promise<BlockProposal | undefined> {
229
234
  return Promise.resolve(this.proposals.get(id));
230
235
  }
231
236
 
232
- tryAddCheckpointProposal(_proposal: CheckpointProposal): Promise<TryAddResult> {
237
+ tryAddCheckpointProposal(proposal: CheckpointProposalCore): Promise<TryAddResult> {
238
+ const proposals = this.checkpoints.get(proposal.slotNumber) ?? [];
239
+ proposals.push(proposal);
240
+ this.checkpoints.set(proposal.slotNumber, proposals);
233
241
  return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
234
242
  }
235
243
 
236
- getCheckpointProposal(_id: string): Promise<CheckpointProposalCore | undefined> {
237
- return Promise.resolve(undefined);
244
+ getCheckpointProposal(slot: SlotNumber): Promise<CheckpointProposalCore | undefined> {
245
+ return Promise.resolve(this.checkpoints.get(slot)?.[0]);
246
+ }
247
+
248
+ hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
249
+ return Promise.resolve(this.checkpoints.has(slot));
250
+ }
251
+
252
+ getProposalsForSlot(slot: SlotNumber): Promise<{
253
+ blockProposals: BlockProposal[];
254
+ checkpointProposals: CheckpointProposalCore[];
255
+ }> {
256
+ return Promise.resolve({
257
+ blockProposals: [...this.proposals.values()].filter(proposal => proposal.slotNumber === slot),
258
+ checkpointProposals: this.checkpoints.get(slot) ?? [],
259
+ });
238
260
  }
239
261
 
240
262
  async addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {}
@@ -247,7 +269,7 @@ export class InMemoryAttestationPool {
247
269
 
248
270
  getCheckpointAttestationsForSlotAndProposal(
249
271
  _slot: SlotNumber,
250
- _proposalId: string,
272
+ _proposalPayloadHash: CheckpointProposalHash,
251
273
  ): Promise<CheckpointAttestation[]> {
252
274
  return Promise.resolve([]);
253
275
  }
@@ -261,11 +283,12 @@ export class InMemoryAttestationPool {
261
283
  }
262
284
 
263
285
  isEmpty(): Promise<boolean> {
264
- return Promise.resolve(this.proposals.size === 0);
286
+ return Promise.resolve(this.proposals.size === 0 && this.checkpoints.size === 0);
265
287
  }
266
288
 
267
289
  resetState(): void {
268
290
  this.proposals.clear();
291
+ this.checkpoints.clear();
269
292
  }
270
293
  }
271
294
 
@@ -273,17 +296,40 @@ export class InMemoryAttestationPool {
273
296
  * Creates a mock EpochCache for testing.
274
297
  */
275
298
  export function createMockEpochCache(): EpochCacheInterface {
276
- return {
299
+ const cache: EpochCacheInterface = {
277
300
  getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
278
301
  getProposerIndexEncoding: () => '0x' as `0x${string}`,
279
- getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, nowMs: 0n }),
302
+ getSlotNow: () => SlotNumber.ZERO,
303
+ getTargetSlot: () => SlotNumber.ZERO,
304
+ getEpochNow: () => EpochNumber.ZERO,
305
+ getTargetEpoch: () => EpochNumber.ZERO,
306
+ getEpochAndSlotNow: () => ({
307
+ epoch: EpochNumber.ZERO,
308
+ slot: SlotNumber.ZERO,
309
+ ts: 0n,
310
+ nowMs: 0n,
311
+ }),
280
312
  computeProposerIndex: () => 0n,
281
313
  getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
314
+ getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
282
315
  getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
283
- getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
316
+ getEpochAndSlotInNextL1Slot: () => ({
317
+ epoch: EpochNumber.ZERO,
318
+ slot: SlotNumber.ZERO,
319
+ ts: 0n,
320
+ nowSeconds: 0n,
321
+ }),
322
+ getTargetEpochAndSlotInNextL1Slot: () => ({
323
+ epoch: EpochNumber.ZERO,
324
+ slot: SlotNumber.ZERO,
325
+ ts: 0n,
326
+ nowSeconds: 0n,
327
+ }),
284
328
  isInCommittee: () => Promise.resolve(false),
285
329
  getRegisteredValidators: () => Promise.resolve([]),
286
330
  filterInCommittee: () => Promise.resolve([]),
331
+ isEscapeHatchOpen: () => Promise.resolve(false),
332
+ isEscapeHatchOpenAtSlot: () => Promise.resolve(false),
287
333
  getL1Constants: () => ({
288
334
  l1StartBlock: 0n,
289
335
  l1GenesisTime: 0n,
@@ -292,8 +338,10 @@ export function createMockEpochCache(): EpochCacheInterface {
292
338
  ethereumSlotDuration: 1,
293
339
  proofSubmissionEpochs: 1,
294
340
  targetCommitteeSize: 48,
341
+ rollupManaLimit: Number.MAX_SAFE_INTEGER,
295
342
  }),
296
343
  };
344
+ return cache;
297
345
  }
298
346
 
299
347
  /**
@@ -340,19 +388,6 @@ export function installUnlimitedRateLimitsOnReqResp(reqResp: any): void {
340
388
  */
341
389
  export type DistributionPattern = 'uniform' | 'sparse' | 'pinned-only';
342
390
 
343
- /**
344
- * Collector implementation types for benchmarking.
345
- */
346
- export type CollectorType = 'batch-requester' | 'send-batch-request';
347
-
348
- /**
349
- * Display names for collector types (for output/logging only).
350
- */
351
- export const COLLECTOR_DISPLAY_NAMES: Record<CollectorType, string> = {
352
- 'batch-requester': 'batch-requester (new)',
353
- 'send-batch-request': 'send-batch-request (old)',
354
- };
355
-
356
391
  /**
357
392
  * Benchmark timing constants.
358
393
  */
@@ -12,17 +12,19 @@ import { Fr } from '@aztec/foundation/curves/bn254';
12
12
  import { type Logger, createLogger } from '@aztec/foundation/log';
13
13
  import { sleep } from '@aztec/foundation/sleep';
14
14
  import { DateProvider, Timer } from '@aztec/foundation/timer';
15
- import type { DataStoreConfig } from '@aztec/kv-store/config';
16
15
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
17
16
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
18
17
  import { protocolContractsHash } from '@aztec/protocol-contracts';
19
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
20
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
20
+ import { EmptyL1RollupConstants, type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
21
+ import { GasFees } from '@aztec/stdlib/gas';
21
22
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
23
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
22
24
  import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
23
25
  import { ChonkProof } from '@aztec/stdlib/proofs';
24
26
  import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
25
- import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
27
+ import { Tx, TxHash, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
26
28
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
27
29
 
28
30
  import type { Message, PeerId } from '@libp2p/interface';
@@ -33,18 +35,17 @@ import type { P2PClient } from '../client/index.js';
33
35
  import type { P2PConfig } from '../config.js';
34
36
  import { createP2PClient } from '../index.js';
35
37
  import type { MemPools } from '../mem_pools/index.js';
36
- import { BatchTxRequesterCollector, LibP2PService, SendBatchRequestCollector } from '../services/index.js';
38
+ import { LibP2PService } from '../services/index.js';
37
39
  import type { PeerManager } from '../services/peer-manager/peer_manager.js';
40
+ import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
38
41
  import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
39
- import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requester/tx_validator.js';
40
42
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
41
43
  import type { ReqResp } from '../services/reqresp/reqresp.js';
42
44
  import type { PeerDiscoveryService } from '../services/service.js';
43
- import { MissingTxsTracker } from '../services/tx_collection/missing_txs_tracker.js';
45
+ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
44
46
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
45
47
  import {
46
48
  BENCHMARK_CONSTANTS,
47
- type CollectorType,
48
49
  type DistributionPattern,
49
50
  InMemoryAttestationPool,
50
51
  InMemoryTxPool,
@@ -55,15 +56,13 @@ import {
55
56
  } from '../test-helpers/index.js';
56
57
  import type { PubSubLibp2p } from '../util.js';
57
58
 
58
- export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
59
- export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
59
+ export type { DistributionPattern } from '../test-helpers/testbench-utils.js';
60
60
 
61
61
  export interface BenchReqRespCommand {
62
62
  type: 'BENCH_REQRESP';
63
63
  txCount: number;
64
64
  peerCount: number;
65
65
  distribution: DistributionPattern;
66
- collectorType: CollectorType;
67
66
  timeoutMs: number;
68
67
  isAggregator: boolean;
69
68
  peerIndex: number;
@@ -86,6 +85,25 @@ export interface BenchReadyMessage {
86
85
  }
87
86
  const txCache = new Map<number, Tx[]>();
88
87
 
88
+ const BENCH_L1_CONSTANTS: L1RollupConstants = {
89
+ ...EmptyL1RollupConstants,
90
+ slotDuration: 12,
91
+ ethereumSlotDuration: 4,
92
+ };
93
+
94
+ class TestbenchL2BlockSource extends MockL2BlockSource {
95
+ public override getL1Constants(): Promise<L1RollupConstants> {
96
+ return Promise.resolve(BENCH_L1_CONSTANTS);
97
+ }
98
+ }
99
+
100
+ function createBenchmarkEpochCache(): EpochCacheInterface {
101
+ return {
102
+ ...createMockEpochCache(),
103
+ getL1Constants: () => BENCH_L1_CONSTANTS,
104
+ };
105
+ }
106
+
89
107
  class TestLibP2PService extends LibP2PService {
90
108
  private disableTxValidation: boolean;
91
109
  private gossipMessageCount = 0;
@@ -116,6 +134,7 @@ class TestLibP2PService extends LibP2PService {
116
134
  epochCache,
117
135
  proofVerifier,
118
136
  worldStateSynchronizer,
137
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
119
138
  telemetry,
120
139
  logger,
121
140
  );
@@ -204,10 +223,28 @@ function installUnlimitedRateLimits(client: P2PClient): void {
204
223
  rateLimiter.allow = () => RateLimitStatus.Allowed;
205
224
  }
206
225
 
226
+ /** Resets peer scores to prevent cross-case contamination in benchmarks. */
227
+ function resetPeerScores(client: P2PClient): void {
228
+ const peerManager = (client as any).p2pService.peerManager;
229
+ const peerScoring = peerManager?.peerScoring;
230
+ if (peerScoring?.resetAllScores) {
231
+ peerScoring.resetAllScores();
232
+ }
233
+ }
234
+
235
+ /** Returns the number of connected peers for connectivity checks. */
236
+ function getConnectedPeerCount(client: P2PClient): number {
237
+ const p2pService = (client as any).p2pService;
238
+ const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
239
+ if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
240
+ return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
241
+ }
242
+ return 0;
243
+ }
244
+
207
245
  async function runAggregatorBenchmark(
208
246
  client: P2PClient,
209
247
  blockProposal: BlockProposal,
210
- collectorType: CollectorType,
211
248
  timeoutMs: number,
212
249
  pinnedPeerId: string | undefined,
213
250
  pinnedPeerIndex: number | undefined,
@@ -258,46 +295,22 @@ async function runAggregatorBenchmark(
258
295
  }
259
296
  }
260
297
 
261
- const noopTxValidator: IBatchRequestTxValidator = {
262
- validateRequestedTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
263
- validateRequestedTxs: (txs: Tx[]): Promise<TxValidationResult[]> =>
264
- Promise.resolve(txs.map(() => ({ result: 'valid' }))),
298
+ const noopTxValidator: TxValidator = {
299
+ validateTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
265
300
  };
266
301
 
267
302
  timer = new Timer();
268
- if (collectorType === 'batch-requester') {
269
- const collector = new BatchTxRequesterCollector(
270
- batchTxRequesterService,
271
- logger,
272
- new DateProvider(),
273
- noopTxValidator,
274
- );
275
- const fetchedTxs = await collector.collectTxs(
276
- MissingTxsTracker.fromArray(txHashes),
277
- blockProposal,
278
- pinnedPeer,
279
- timeoutMs,
280
- );
281
- const durationMs = timer.ms();
282
- return {
283
- type: 'BENCH_RESULT',
284
- durationMs,
285
- fetchedCount: fetchedTxs.length,
286
- success: fetchedTxs.length === txHashes.length,
287
- };
288
- }
289
-
290
- const collector = new SendBatchRequestCollector(
291
- batchTxRequesterService,
292
- BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
293
- BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
294
- );
295
- const fetchedTxs = await collector.collectTxs(
296
- MissingTxsTracker.fromArray(txHashes),
303
+ const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
304
+ const batchRequester = new BatchTxRequester(
305
+ tracker,
297
306
  blockProposal,
298
307
  pinnedPeer,
299
- timeoutMs,
308
+ batchTxRequesterService,
309
+ logger,
310
+ new DateProvider(),
311
+ { txValidator: noopTxValidator },
300
312
  );
313
+ const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
301
314
  const durationMs = timer.ms();
302
315
  return {
303
316
  type: 'BENCH_RESULT',
@@ -323,6 +336,37 @@ let workerConfig: P2PConfig | null = null;
323
336
  let workerLogger: Logger | null = null;
324
337
  let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
325
338
 
339
+ async function stopWorker() {
340
+ try {
341
+ if (workerClient) {
342
+ await workerClient.stop();
343
+ workerClient = null;
344
+ }
345
+ } catch (e) {
346
+ workerLogger?.error('Error stopping worker client', e);
347
+ }
348
+ try {
349
+ if (kvStore?.close) {
350
+ await kvStore.close();
351
+ kvStore = null;
352
+ }
353
+ } catch (e) {
354
+ workerLogger?.error('Error closing kv store', e);
355
+ }
356
+ }
357
+
358
+ function gracefulExit(code: number = 0) {
359
+ try {
360
+ if (process.connected) {
361
+ process.disconnect();
362
+ }
363
+ } catch {
364
+ // IPC channel already closed
365
+ }
366
+ // Safety fallback if lingering handles prevent the event loop from draining
367
+ setTimeout(() => process.exit(code), 5000).unref();
368
+ }
369
+
326
370
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
327
371
  process.on('message', async msg => {
328
372
  const {
@@ -340,14 +384,15 @@ process.on('message', async msg => {
340
384
  const config: P2PConfig = {
341
385
  ...rawConfig,
342
386
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
387
+ priceBumpPercentage: 10n,
343
388
  } as P2PConfig;
344
389
 
345
390
  workerConfig = config;
346
391
  workerTxPool = new InMemoryTxPool();
347
392
  workerAttestationPool = new InMemoryAttestationPool();
348
- const epochCache = createMockEpochCache();
393
+ const epochCache = createBenchmarkEpochCache();
349
394
  const worldState = createMockWorldStateSynchronizer();
350
- const l2BlockSource = new MockL2BlockSource();
395
+ const l2BlockSource = new TestbenchL2BlockSource();
351
396
 
352
397
  const proofVerifier = new AlwaysTrueCircuitVerifier();
353
398
  kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
@@ -368,10 +413,12 @@ process.on('message', async msg => {
368
413
  proofVerifier as ClientProtocolCircuitVerifier,
369
414
  worldState,
370
415
  epochCache,
416
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
371
417
  'test-p2p-bench-worker',
372
418
  undefined,
373
419
  telemetry as TelemetryClient,
374
420
  deps,
421
+ await l2BlockSource.getInitialHeader().hash(),
375
422
  );
376
423
 
377
424
  const testService = new TestLibP2PService(
@@ -411,13 +458,8 @@ process.on('message', async msg => {
411
458
  const cmd = msg as any;
412
459
  switch (cmd.type) {
413
460
  case 'STOP':
414
- if (workerClient) {
415
- await workerClient.stop();
416
- }
417
- if (kvStore?.close) {
418
- await kvStore.close();
419
- }
420
- process.exit(0);
461
+ await stopWorker();
462
+ gracefulExit(0);
421
463
  break;
422
464
 
423
465
  case 'SEND_TX':
@@ -427,6 +469,13 @@ process.on('message', async msg => {
427
469
  }
428
470
  break;
429
471
 
472
+ case 'GET_PEER_COUNT':
473
+ process.send!({
474
+ type: 'PEER_COUNT',
475
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0,
476
+ });
477
+ break;
478
+
430
479
  case 'BENCH_REQRESP': {
431
480
  const benchCmd = cmd as BenchReqRespCommand;
432
481
  if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
@@ -443,6 +492,7 @@ process.on('message', async msg => {
443
492
  // Reset state before each benchmark run to avoid cross-run contamination
444
493
  workerTxPool.resetState();
445
494
  workerAttestationPool.resetState();
495
+ resetPeerScores(workerClient);
446
496
 
447
497
  installUnlimitedRateLimits(workerClient);
448
498
 
@@ -459,13 +509,12 @@ process.on('message', async msg => {
459
509
  workerTxPool.clearTxs();
460
510
 
461
511
  workerLogger.info(
462
- `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`,
512
+ `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`,
463
513
  );
464
514
 
465
515
  const result = await runAggregatorBenchmark(
466
516
  workerClient,
467
517
  blockProposal,
468
- benchCmd.collectorType,
469
518
  benchCmd.timeoutMs,
470
519
  benchCmd.pinnedPeerId,
471
520
  benchCmd.pinnedPeerIndex,
@@ -494,7 +543,12 @@ process.on('message', async msg => {
494
543
  }
495
544
  }
496
545
  } catch (err: any) {
497
- process.send!({ type: 'ERROR', error: err.message });
498
- process.exit(1);
546
+ try {
547
+ process.send!({ type: 'ERROR', error: err.message });
548
+ } catch {
549
+ // IPC channel may be closed
550
+ }
551
+ await stopWorker();
552
+ gracefulExit(1);
499
553
  }
500
554
  });
@@ -13,12 +13,7 @@ import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-priv
13
13
  import { getPorts } from '../test-helpers/get-ports.js';
14
14
  import { makeEnr, makeEnrs } from '../test-helpers/make-enrs.js';
15
15
  import { BENCHMARK_CONSTANTS } from '../test-helpers/testbench-utils.js';
16
- import type {
17
- BenchReqRespCommand,
18
- BenchResultMessage,
19
- CollectorType,
20
- DistributionPattern,
21
- } from './p2p_client_testbench_worker.js';
16
+ import type { BenchReqRespCommand, BenchResultMessage, DistributionPattern } from './p2p_client_testbench_worker.js';
22
17
 
23
18
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
24
19
  const p2pRoot = path.resolve(__dirname, '../..');
@@ -29,15 +24,12 @@ const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
29
24
  const testChainConfig: ChainConfig = {
30
25
  l1ChainId: 31337,
31
26
  rollupVersion: 1,
32
- l1Contracts: {
33
- rollupAddress: EthAddress.random(),
34
- },
27
+ rollupAddress: EthAddress.random(),
35
28
  };
36
29
 
37
30
  export interface ReqRespBenchmarkConfig {
38
31
  txCount: number;
39
32
  distribution: DistributionPattern;
40
- collectorType: CollectorType;
41
33
  timeoutMs: number;
42
34
  pinnedPeerIndex?: number;
43
35
  blockNumber?: number;
@@ -47,7 +39,6 @@ export interface ReqRespBenchmarkConfig {
47
39
  export interface ReqRespBenchmarkResult {
48
40
  txCount: number;
49
41
  distribution: DistributionPattern;
50
- collector: CollectorType;
51
42
  durationMs: number;
52
43
  fetchedCount: number;
53
44
  success: boolean;
@@ -72,7 +63,6 @@ class WorkerClientManager {
72
63
  destroy() {
73
64
  this.cleanup().catch((error: Error) => {
74
65
  this.logger.error('Failed to cleanup worker client manager', error);
75
- process.exit(1);
76
66
  });
77
67
  }
78
68
 
@@ -81,13 +71,15 @@ class WorkerClientManager {
81
71
  * Note: We send the raw peerIdPrivateKey string instead of SecretValue
82
72
  * because SecretValue.toJSON() returns '[Redacted]', losing the value.
83
73
  * The worker must re-wrap it in SecretValue.
74
+ * We also omit priceBumpPercentage since it's a bigint and can't be
75
+ * serialized over IPC (which uses JSON under the hood).
84
76
  */
85
77
  private createClientConfig(
86
78
  clientIndex: number,
87
79
  port: number,
88
80
  otherNodes: string[],
89
- ): Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
90
- return {
81
+ ): Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
82
+ const { priceBumpPercentage: _, ...config } = {
91
83
  ...getP2PDefaultConfig(),
92
84
  p2pEnabled: true,
93
85
  peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
@@ -96,7 +88,10 @@ class WorkerClientManager {
96
88
  p2pPort: port,
97
89
  bootstrapNodes: [...otherNodes],
98
90
  ...this.p2pConfig,
99
- } as Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>;
91
+ };
92
+ return config as Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
93
+ peerIdPrivateKey: string;
94
+ } & Partial<ChainConfig>;
100
95
  }
101
96
 
102
97
  /**
@@ -104,7 +99,9 @@ class WorkerClientManager {
104
99
  * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
105
100
  */
106
101
  private spawnWorkerProcess(
107
- config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>,
102
+ config: Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
103
+ peerIdPrivateKey: string;
104
+ } & Partial<ChainConfig>,
108
105
  clientIndex: number,
109
106
  ): [ChildProcess, Promise<void>] {
110
107
  const useCompiled = existsSync(workerJsPath);
@@ -418,6 +415,61 @@ class WorkerClientManager {
418
415
  this.logger.info('All worker processes cleaned up');
419
416
  }
420
417
 
418
+ /**
419
+ * Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
420
+ * This prevents benchmark cases from starting with degraded connectivity after a previous case
421
+ * caused connection failures.
422
+ */
423
+ async waitForConnectivity(minPeers: number, timeoutMs: number = 15_000): Promise<number> {
424
+ const waitInterval = 1000;
425
+ let waited = 0;
426
+
427
+ while (waited < timeoutMs) {
428
+ const count = await this.getPeerCount(0, 5000);
429
+ if (count >= minPeers) {
430
+ this.logger.info(`Connectivity check passed: ${count}/${minPeers} peers connected`);
431
+ return count;
432
+ }
433
+ this.logger.debug(`Waiting for connectivity: ${count}/${minPeers} (waited ${waited}ms)`);
434
+ await sleep(waitInterval);
435
+ waited += waitInterval;
436
+ }
437
+
438
+ const finalCount = await this.getPeerCount(0, 5000);
439
+ this.logger.warn(`Connectivity check: only ${finalCount}/${minPeers} peers after ${timeoutMs}ms`);
440
+ return finalCount;
441
+ }
442
+
443
+ private getPeerCount(clientIndex: number, timeoutMs: number): Promise<number> {
444
+ return new Promise<number>(resolve => {
445
+ let resolved = false;
446
+
447
+ const handler = (msg: any) => {
448
+ if (resolved) {
449
+ return;
450
+ }
451
+ if (msg.type === 'PEER_COUNT') {
452
+ resolved = true;
453
+ clearTimeout(timeout);
454
+ this.processes[clientIndex].off('message', handler);
455
+ resolve(msg.count as number);
456
+ }
457
+ };
458
+
459
+ const timeout = setTimeout(() => {
460
+ if (resolved) {
461
+ return;
462
+ }
463
+ resolved = true;
464
+ this.processes[clientIndex].off('message', handler);
465
+ resolve(0);
466
+ }, timeoutMs);
467
+
468
+ this.processes[clientIndex].on('message', handler);
469
+ this.processes[clientIndex].send({ type: 'GET_PEER_COUNT' });
470
+ });
471
+ }
472
+
421
473
  /**
422
474
  * Run a req/resp benchmark across all worker clients.
423
475
  *
@@ -438,9 +490,7 @@ class WorkerClientManager {
438
490
  const blockNumber = config.blockNumber ?? 1;
439
491
  const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
440
492
 
441
- this.logger.info(
442
- `Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`,
443
- );
493
+ this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}`);
444
494
 
445
495
  const readyPromises: Promise<void>[] = [];
446
496
 
@@ -450,7 +500,6 @@ class WorkerClientManager {
450
500
  txCount: config.txCount,
451
501
  peerCount,
452
502
  distribution: config.distribution,
453
- collectorType: config.collectorType,
454
503
  timeoutMs: config.timeoutMs,
455
504
  isAggregator: false,
456
505
  peerIndex: i,
@@ -472,7 +521,6 @@ class WorkerClientManager {
472
521
  txCount: config.txCount,
473
522
  peerCount,
474
523
  distribution: config.distribution,
475
- collectorType: config.collectorType,
476
524
  timeoutMs: config.timeoutMs,
477
525
  isAggregator: true,
478
526
  peerIndex: 0,
@@ -483,7 +531,8 @@ class WorkerClientManager {
483
531
  };
484
532
 
485
533
  this.processes[0].send(aggregatorCmd);
486
- const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
534
+ const aggregatorBudgetMs = config.timeoutMs + BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS + 30000;
535
+ const result = await this.waitForBenchResult(0, aggregatorBudgetMs);
487
536
 
488
537
  this.logger.info(
489
538
  `Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
@@ -492,7 +541,6 @@ class WorkerClientManager {
492
541
  return {
493
542
  txCount: config.txCount,
494
543
  distribution: config.distribution,
495
- collector: config.collectorType,
496
544
  durationMs: result.durationMs,
497
545
  fetchedCount: result.fetchedCount,
498
546
  success: result.success,
@@ -570,5 +618,4 @@ class WorkerClientManager {
570
618
  }
571
619
 
572
620
  export { WorkerClientManager, testChainConfig };
573
- export type { DistributionPattern, CollectorType } from './p2p_client_testbench_worker.js';
574
- export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
621
+ export type { DistributionPattern } from './p2p_client_testbench_worker.js';