@aztec/p2p 0.0.1-commit.b33fc05d0 → 0.0.1-commit.b3d3157a

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 (418) hide show
  1. package/README.md +129 -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 +9 -1
  5. package/dest/client/factory.d.ts +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +26 -14
  8. package/dest/client/interface.d.ts +14 -5
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +13 -9
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +88 -26
  13. package/dest/config.d.ts +135 -99
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +62 -7
  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 +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  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 +99 -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 +265 -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 +181 -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 +1 -1
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +17 -1
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -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 +1 -7
  42. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  45. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  52. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +10 -5
  53. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +13 -3
  55. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +20 -7
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +84 -86
  63. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  64. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  66. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  67. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  69. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  70. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  71. package/dest/msg_validators/clock_tolerance.js +56 -3
  72. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -2
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -2
  75. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +10 -2
  77. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -12
  79. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  80. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  82. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  83. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  84. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  85. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  86. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  87. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  88. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  90. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  91. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  93. package/dest/msg_validators/tx_validator/factory.d.ts +14 -5
  94. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/factory.js +36 -13
  96. package/dest/msg_validators/tx_validator/gas_validator.d.ts +36 -4
  97. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/gas_validator.js +50 -33
  99. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  100. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/index.js +2 -0
  102. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  103. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/phases_validator.js +28 -1
  105. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  106. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  108. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  109. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  110. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  111. package/dest/services/data_store.d.ts +1 -1
  112. package/dest/services/data_store.d.ts.map +1 -1
  113. package/dest/services/data_store.js +5 -5
  114. package/dest/services/discv5/discV5_service.d.ts +2 -1
  115. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  116. package/dest/services/discv5/discV5_service.js +35 -8
  117. package/dest/services/dummy_service.d.ts +11 -15
  118. package/dest/services/dummy_service.d.ts.map +1 -1
  119. package/dest/services/dummy_service.js +12 -16
  120. package/dest/services/encoding.d.ts +5 -1
  121. package/dest/services/encoding.d.ts.map +1 -1
  122. package/dest/services/encoding.js +7 -1
  123. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  124. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  125. package/dest/services/gossipsub/topic_score_params.js +21 -4
  126. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  127. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  128. package/dest/services/libp2p/instrumentation.js +14 -0
  129. package/dest/services/libp2p/libp2p_service.d.ts +36 -46
  130. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  131. package/dest/services/libp2p/libp2p_service.js +272 -262
  132. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  133. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_manager.js +38 -10
  135. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  136. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  137. package/dest/services/peer-manager/peer_scoring.js +32 -10
  138. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
  139. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +81 -86
  141. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  142. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  143. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  144. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  146. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  147. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  149. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  150. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  151. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  152. package/dest/services/reqresp/config.d.ts +3 -3
  153. package/dest/services/reqresp/config.d.ts.map +1 -1
  154. package/dest/services/reqresp/interface.d.ts +16 -18
  155. package/dest/services/reqresp/interface.d.ts.map +1 -1
  156. package/dest/services/reqresp/interface.js +10 -20
  157. package/dest/services/reqresp/metrics.d.ts +1 -1
  158. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  159. package/dest/services/reqresp/metrics.js +0 -1
  160. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  161. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  163. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  166. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  167. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  168. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  169. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  170. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  171. package/dest/services/reqresp/protocols/index.js +0 -1
  172. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  173. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  174. package/dest/services/reqresp/protocols/tx.js +1 -3
  175. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  176. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  177. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  178. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  179. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  180. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  181. package/dest/services/reqresp/reqresp.d.ts +7 -29
  182. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  183. package/dest/services/reqresp/reqresp.js +41 -214
  184. package/dest/services/service.d.ts +9 -12
  185. package/dest/services/service.d.ts.map +1 -1
  186. package/dest/services/tx_collection/config.d.ts +2 -23
  187. package/dest/services/tx_collection/config.d.ts.map +1 -1
  188. package/dest/services/tx_collection/config.js +2 -55
  189. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  190. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  191. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  192. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  193. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  194. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  195. package/dest/services/tx_collection/index.d.ts +2 -3
  196. package/dest/services/tx_collection/index.d.ts.map +1 -1
  197. package/dest/services/tx_collection/index.js +0 -1
  198. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  199. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  200. package/dest/services/tx_collection/instrumentation.js +0 -2
  201. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  202. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  203. package/dest/services/tx_collection/request_tracker.js +84 -0
  204. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  205. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  206. package/dest/services/tx_collection/tx_collection.js +275 -119
  207. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  208. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  209. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  210. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  211. package/dest/services/tx_collection/tx_source.js +9 -7
  212. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  213. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  214. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  215. package/dest/services/tx_provider.d.ts +3 -1
  216. package/dest/services/tx_provider.d.ts.map +1 -1
  217. package/dest/services/tx_provider.js +3 -0
  218. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  219. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  220. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  221. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  222. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  223. package/dest/test-helpers/mock-pubsub.js +44 -44
  224. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  225. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  226. package/dest/test-helpers/reqresp-nodes.js +16 -18
  227. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  228. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  229. package/dest/test-helpers/test_tx_provider.js +3 -0
  230. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  231. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  232. package/dest/test-helpers/testbench-utils.js +38 -14
  233. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  234. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  235. package/dest/testbench/p2p_client_testbench_worker.js +83 -38
  236. package/dest/testbench/worker_client_manager.d.ts +10 -6
  237. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  238. package/dest/testbench/worker_client_manager.js +51 -9
  239. package/dest/util.d.ts +11 -6
  240. package/dest/util.d.ts.map +1 -1
  241. package/dest/util.js +35 -14
  242. package/dest/versioning.d.ts +3 -6
  243. package/dest/versioning.d.ts.map +1 -1
  244. package/dest/versioning.js +3 -24
  245. package/package.json +15 -14
  246. package/src/bootstrap/bootstrap.ts +9 -1
  247. package/src/client/factory.ts +49 -7
  248. package/src/client/interface.ts +15 -11
  249. package/src/client/p2p_client.ts +104 -47
  250. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  251. package/src/config.ts +123 -6
  252. package/src/errors/p2p-service.error.ts +11 -0
  253. package/src/errors/reqresp.error.ts +0 -25
  254. package/src/index.ts +0 -1
  255. package/src/mem_pools/attestation_pool/attestation_pool.ts +316 -241
  256. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  257. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  258. package/src/mem_pools/index.ts +0 -3
  259. package/src/mem_pools/instrumentation.ts +5 -1
  260. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  261. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  262. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  263. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  264. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  265. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  266. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +31 -9
  267. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  268. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +85 -92
  269. package/src/msg_validators/attestation_validator/README.md +49 -0
  270. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  271. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  272. package/src/msg_validators/clock_tolerance.ts +73 -3
  273. package/src/msg_validators/proposal_validator/README.md +123 -0
  274. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +12 -2
  275. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +17 -2
  276. package/src/msg_validators/proposal_validator/proposal_validator.ts +54 -10
  277. package/src/msg_validators/tx_validator/README.md +15 -3
  278. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  279. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  280. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  281. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  282. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  283. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  284. package/src/msg_validators/tx_validator/factory.ts +46 -8
  285. package/src/msg_validators/tx_validator/gas_validator.ts +82 -33
  286. package/src/msg_validators/tx_validator/index.ts +2 -0
  287. package/src/msg_validators/tx_validator/phases_validator.ts +31 -1
  288. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  289. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  290. package/src/services/data_store.ts +5 -13
  291. package/src/services/discv5/discV5_service.ts +38 -5
  292. package/src/services/dummy_service.ts +14 -39
  293. package/src/services/encoding.ts +9 -1
  294. package/src/services/gossipsub/topic_score_params.ts +36 -4
  295. package/src/services/libp2p/instrumentation.ts +14 -0
  296. package/src/services/libp2p/libp2p_service.ts +302 -300
  297. package/src/services/peer-manager/peer_manager.ts +44 -10
  298. package/src/services/peer-manager/peer_scoring.ts +27 -5
  299. package/src/services/reqresp/README.md +215 -0
  300. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  301. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +77 -95
  302. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  303. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  304. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  305. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  306. package/src/services/reqresp/config.ts +2 -2
  307. package/src/services/reqresp/interface.ts +21 -47
  308. package/src/services/reqresp/metrics.ts +0 -1
  309. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  310. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  311. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  312. package/src/services/reqresp/protocols/index.ts +0 -1
  313. package/src/services/reqresp/protocols/tx.ts +1 -3
  314. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  315. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  316. package/src/services/reqresp/reqresp.ts +45 -260
  317. package/src/services/service.ts +12 -28
  318. package/src/services/tx_collection/config.ts +3 -80
  319. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  320. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  321. package/src/services/tx_collection/index.ts +1 -6
  322. package/src/services/tx_collection/instrumentation.ts +1 -7
  323. package/src/services/tx_collection/request_tracker.ts +127 -0
  324. package/src/services/tx_collection/tx_collection.ts +331 -176
  325. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  326. package/src/services/tx_collection/tx_source.ts +8 -7
  327. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  328. package/src/services/tx_provider.ts +5 -0
  329. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  330. package/src/test-helpers/mock-pubsub.ts +46 -60
  331. package/src/test-helpers/reqresp-nodes.ts +12 -22
  332. package/src/test-helpers/test_tx_provider.ts +5 -0
  333. package/src/test-helpers/testbench-utils.ts +50 -28
  334. package/src/testbench/p2p_client_testbench_worker.ts +87 -54
  335. package/src/testbench/worker_client_manager.ts +59 -20
  336. package/src/util.ts +32 -17
  337. package/src/versioning.ts +3 -33
  338. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  339. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  340. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  341. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  342. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  343. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  344. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  345. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  346. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  347. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  348. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  349. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  350. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  351. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  352. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  353. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  354. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  355. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  356. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  357. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  358. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  359. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  360. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  361. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  362. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  363. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  364. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  365. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  366. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  367. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  368. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  369. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  370. package/dest/mem_pools/tx_pool/index.js +0 -2
  371. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  372. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  373. package/dest/mem_pools/tx_pool/priority.js +0 -16
  374. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  375. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  376. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  377. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  378. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  379. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  380. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  381. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  382. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  383. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  384. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  385. package/dest/services/reqresp/protocols/block.js +0 -32
  386. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  387. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  388. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  389. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  390. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  391. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  392. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  393. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  394. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  395. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  396. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  397. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  398. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  399. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  400. package/src/mem_pools/tx_pool/README.md +0 -270
  401. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  402. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  403. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  404. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  405. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  406. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  407. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  408. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  409. package/src/mem_pools/tx_pool/index.ts +0 -2
  410. package/src/mem_pools/tx_pool/priority.ts +0 -23
  411. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  412. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  413. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  414. package/src/services/reqresp/protocols/block.ts +0 -37
  415. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  416. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  417. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  418. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -17,12 +17,13 @@ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
17
17
  import { protocolContractsHash } from '@aztec/protocol-contracts';
18
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
19
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
20
+ import { GasFees } from '@aztec/stdlib/gas';
20
21
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
21
22
  import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
22
23
  import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
23
24
  import { ChonkProof } from '@aztec/stdlib/proofs';
24
25
  import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
25
- import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
26
+ import { Tx, TxHash, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
26
27
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
27
28
 
28
29
  import type { Message, PeerId } from '@libp2p/interface';
@@ -33,18 +34,17 @@ import type { P2PClient } from '../client/index.js';
33
34
  import type { P2PConfig } from '../config.js';
34
35
  import { createP2PClient } from '../index.js';
35
36
  import type { MemPools } from '../mem_pools/index.js';
36
- import { BatchTxRequesterCollector, LibP2PService, SendBatchRequestCollector } from '../services/index.js';
37
+ import { LibP2PService } from '../services/index.js';
37
38
  import type { PeerManager } from '../services/peer-manager/peer_manager.js';
39
+ import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
38
40
  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
41
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
41
42
  import type { ReqResp } from '../services/reqresp/reqresp.js';
42
43
  import type { PeerDiscoveryService } from '../services/service.js';
43
- import { MissingTxsTracker } from '../services/tx_collection/missing_txs_tracker.js';
44
+ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
44
45
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
45
46
  import {
46
47
  BENCHMARK_CONSTANTS,
47
- type CollectorType,
48
48
  type DistributionPattern,
49
49
  InMemoryAttestationPool,
50
50
  InMemoryTxPool,
@@ -55,15 +55,13 @@ import {
55
55
  } from '../test-helpers/index.js';
56
56
  import type { PubSubLibp2p } from '../util.js';
57
57
 
58
- export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
59
- export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
58
+ export type { DistributionPattern } from '../test-helpers/testbench-utils.js';
60
59
 
61
60
  export interface BenchReqRespCommand {
62
61
  type: 'BENCH_REQRESP';
63
62
  txCount: number;
64
63
  peerCount: number;
65
64
  distribution: DistributionPattern;
66
- collectorType: CollectorType;
67
65
  timeoutMs: number;
68
66
  isAggregator: boolean;
69
67
  peerIndex: number;
@@ -116,6 +114,7 @@ class TestLibP2PService extends LibP2PService {
116
114
  epochCache,
117
115
  proofVerifier,
118
116
  worldStateSynchronizer,
117
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
119
118
  telemetry,
120
119
  logger,
121
120
  );
@@ -204,10 +203,28 @@ function installUnlimitedRateLimits(client: P2PClient): void {
204
203
  rateLimiter.allow = () => RateLimitStatus.Allowed;
205
204
  }
206
205
 
206
+ /** Resets peer scores to prevent cross-case contamination in benchmarks. */
207
+ function resetPeerScores(client: P2PClient): void {
208
+ const peerManager = (client as any).p2pService.peerManager;
209
+ const peerScoring = peerManager?.peerScoring;
210
+ if (peerScoring?.resetAllScores) {
211
+ peerScoring.resetAllScores();
212
+ }
213
+ }
214
+
215
+ /** Returns the number of connected peers for connectivity checks. */
216
+ function getConnectedPeerCount(client: P2PClient): number {
217
+ const p2pService = (client as any).p2pService;
218
+ const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
219
+ if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
220
+ return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
221
+ }
222
+ return 0;
223
+ }
224
+
207
225
  async function runAggregatorBenchmark(
208
226
  client: P2PClient,
209
227
  blockProposal: BlockProposal,
210
- collectorType: CollectorType,
211
228
  timeoutMs: number,
212
229
  pinnedPeerId: string | undefined,
213
230
  pinnedPeerIndex: number | undefined,
@@ -258,46 +275,22 @@ async function runAggregatorBenchmark(
258
275
  }
259
276
  }
260
277
 
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' }))),
278
+ const noopTxValidator: TxValidator = {
279
+ validateTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
265
280
  };
266
281
 
267
282
  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),
283
+ const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
284
+ const batchRequester = new BatchTxRequester(
285
+ tracker,
297
286
  blockProposal,
298
287
  pinnedPeer,
299
- timeoutMs,
288
+ batchTxRequesterService,
289
+ logger,
290
+ new DateProvider(),
291
+ { txValidator: noopTxValidator },
300
292
  );
293
+ const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
301
294
  const durationMs = timer.ms();
302
295
  return {
303
296
  type: 'BENCH_RESULT',
@@ -323,6 +316,37 @@ let workerConfig: P2PConfig | null = null;
323
316
  let workerLogger: Logger | null = null;
324
317
  let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
325
318
 
319
+ async function stopWorker() {
320
+ try {
321
+ if (workerClient) {
322
+ await workerClient.stop();
323
+ workerClient = null;
324
+ }
325
+ } catch (e) {
326
+ workerLogger?.error('Error stopping worker client', e);
327
+ }
328
+ try {
329
+ if (kvStore?.close) {
330
+ await kvStore.close();
331
+ kvStore = null;
332
+ }
333
+ } catch (e) {
334
+ workerLogger?.error('Error closing kv store', e);
335
+ }
336
+ }
337
+
338
+ function gracefulExit(code: number = 0) {
339
+ try {
340
+ if (process.connected) {
341
+ process.disconnect();
342
+ }
343
+ } catch {
344
+ // IPC channel already closed
345
+ }
346
+ // Safety fallback if lingering handles prevent the event loop from draining
347
+ setTimeout(() => process.exit(code), 5000).unref();
348
+ }
349
+
326
350
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
327
351
  process.on('message', async msg => {
328
352
  const {
@@ -369,10 +393,12 @@ process.on('message', async msg => {
369
393
  proofVerifier as ClientProtocolCircuitVerifier,
370
394
  worldState,
371
395
  epochCache,
396
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
372
397
  'test-p2p-bench-worker',
373
398
  undefined,
374
399
  telemetry as TelemetryClient,
375
400
  deps,
401
+ await l2BlockSource.getInitialHeader().hash(),
376
402
  );
377
403
 
378
404
  const testService = new TestLibP2PService(
@@ -412,13 +438,8 @@ process.on('message', async msg => {
412
438
  const cmd = msg as any;
413
439
  switch (cmd.type) {
414
440
  case 'STOP':
415
- if (workerClient) {
416
- await workerClient.stop();
417
- }
418
- if (kvStore?.close) {
419
- await kvStore.close();
420
- }
421
- process.exit(0);
441
+ await stopWorker();
442
+ gracefulExit(0);
422
443
  break;
423
444
 
424
445
  case 'SEND_TX':
@@ -428,6 +449,13 @@ process.on('message', async msg => {
428
449
  }
429
450
  break;
430
451
 
452
+ case 'GET_PEER_COUNT':
453
+ process.send!({
454
+ type: 'PEER_COUNT',
455
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0,
456
+ });
457
+ break;
458
+
431
459
  case 'BENCH_REQRESP': {
432
460
  const benchCmd = cmd as BenchReqRespCommand;
433
461
  if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
@@ -444,6 +472,7 @@ process.on('message', async msg => {
444
472
  // Reset state before each benchmark run to avoid cross-run contamination
445
473
  workerTxPool.resetState();
446
474
  workerAttestationPool.resetState();
475
+ resetPeerScores(workerClient);
447
476
 
448
477
  installUnlimitedRateLimits(workerClient);
449
478
 
@@ -460,13 +489,12 @@ process.on('message', async msg => {
460
489
  workerTxPool.clearTxs();
461
490
 
462
491
  workerLogger.info(
463
- `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`,
492
+ `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`,
464
493
  );
465
494
 
466
495
  const result = await runAggregatorBenchmark(
467
496
  workerClient,
468
497
  blockProposal,
469
- benchCmd.collectorType,
470
498
  benchCmd.timeoutMs,
471
499
  benchCmd.pinnedPeerId,
472
500
  benchCmd.pinnedPeerIndex,
@@ -495,7 +523,12 @@ process.on('message', async msg => {
495
523
  }
496
524
  }
497
525
  } catch (err: any) {
498
- process.send!({ type: 'ERROR', error: err.message });
499
- process.exit(1);
526
+ try {
527
+ process.send!({ type: 'ERROR', error: err.message });
528
+ } catch {
529
+ // IPC channel may be closed
530
+ }
531
+ await stopWorker();
532
+ gracefulExit(1);
500
533
  }
501
534
  });
@@ -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
 
@@ -425,6 +415,61 @@ class WorkerClientManager {
425
415
  this.logger.info('All worker processes cleaned up');
426
416
  }
427
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
+
428
473
  /**
429
474
  * Run a req/resp benchmark across all worker clients.
430
475
  *
@@ -445,9 +490,7 @@ class WorkerClientManager {
445
490
  const blockNumber = config.blockNumber ?? 1;
446
491
  const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
447
492
 
448
- this.logger.info(
449
- `Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`,
450
- );
493
+ this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}`);
451
494
 
452
495
  const readyPromises: Promise<void>[] = [];
453
496
 
@@ -457,7 +500,6 @@ class WorkerClientManager {
457
500
  txCount: config.txCount,
458
501
  peerCount,
459
502
  distribution: config.distribution,
460
- collectorType: config.collectorType,
461
503
  timeoutMs: config.timeoutMs,
462
504
  isAggregator: false,
463
505
  peerIndex: i,
@@ -479,7 +521,6 @@ class WorkerClientManager {
479
521
  txCount: config.txCount,
480
522
  peerCount,
481
523
  distribution: config.distribution,
482
- collectorType: config.collectorType,
483
524
  timeoutMs: config.timeoutMs,
484
525
  isAggregator: true,
485
526
  peerIndex: 0,
@@ -500,7 +541,6 @@ class WorkerClientManager {
500
541
  return {
501
542
  txCount: config.txCount,
502
543
  distribution: config.distribution,
503
- collector: config.collectorType,
504
544
  durationMs: result.durationMs,
505
545
  fetchedCount: result.fetchedCount,
506
546
  success: result.success,
@@ -578,5 +618,4 @@ class WorkerClientManager {
578
618
  }
579
619
 
580
620
  export { WorkerClientManager, testChainConfig };
581
- export type { DistributionPattern, CollectorType } from './p2p_client_testbench_worker.js';
582
- export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
621
+ export type { DistributionPattern } from './p2p_client_testbench_worker.js';
package/src/util.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SecretValue } from '@aztec/foundation/config';
2
- import type { Logger } from '@aztec/foundation/log';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
3
3
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
4
4
  import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
5
5
 
@@ -7,7 +7,7 @@ import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
7
7
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
8
8
  import type { Identify } from '@libp2p/identify';
9
9
  import type { PeerId, PrivateKey } from '@libp2p/interface';
10
- import type { ConnectionManager } from '@libp2p/interface-internal';
10
+ import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
11
11
  import { createFromPrivKey } from '@libp2p/peer-id-factory';
12
12
  import { resolve } from 'dns/promises';
13
13
  import { promises as fs } from 'fs';
@@ -15,7 +15,7 @@ import type { Libp2p } from 'libp2p';
15
15
  import net from 'net';
16
16
  import path from 'path';
17
17
 
18
- import type { P2PConfig } from './config.js';
18
+ import { DEFAULT_PUBLIC_IP_SERVICES, type P2PConfig } from './config.js';
19
19
 
20
20
  const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
21
21
 
@@ -31,6 +31,9 @@ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' |
31
31
  | 'direct'
32
32
  | 'getMeshPeers'
33
33
  > & { score: Pick<GossipSub['score'], 'score'> };
34
+ components: {
35
+ addressManager: Pick<AddressManager, 'addObservedAddr' | 'confirmObservedAddr' | 'removeObservedAddr'>;
36
+ };
34
37
  };
35
38
  }
36
39
 
@@ -39,6 +42,7 @@ export type FullLibp2p = Libp2p<{
39
42
  pubsub: GossipSub;
40
43
  components: {
41
44
  connectionManager: ConnectionManager;
45
+ addressManager: AddressManager;
42
46
  };
43
47
  }>;
44
48
 
@@ -60,16 +64,25 @@ export function convertToMultiaddr(address: string, port: number, protocol: 'tcp
60
64
  }
61
65
 
62
66
  /**
63
- * Queries the public IP address of the machine.
67
+ * Queries the public IP address of the machine, trying multiple services in order.
68
+ * @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
64
69
  */
65
- export async function getPublicIp(): Promise<string> {
66
- const resp = await fetch('https://checkip.amazonaws.com/');
67
- const text = await resp.text();
68
- const address = text.trim();
69
- if (!isValidIpAddress(address)) {
70
- throw new Error(`Received invalid IP address from checkip service: ${address}`);
70
+ export async function getPublicIp(services: string[] = DEFAULT_PUBLIC_IP_SERVICES): Promise<string> {
71
+ const errors: string[] = [];
72
+ for (const url of services) {
73
+ try {
74
+ const resp = await fetch(url, { signal: AbortSignal.timeout(5000) });
75
+ const text = await resp.text();
76
+ const address = text.trim();
77
+ if (isValidIpAddress(address)) {
78
+ return address;
79
+ }
80
+ errors.push(`${url}: invalid IP "${address}"`);
81
+ } catch (err: any) {
82
+ errors.push(`${url}: ${err.message ?? err}`);
83
+ }
71
84
  }
72
- return address;
85
+ throw new Error(`Failed to determine public IP from all services:\n${errors.join('\n')}`);
73
86
  }
74
87
 
75
88
  export function isValidIpAddress(address: string): boolean {
@@ -107,18 +120,20 @@ export async function configureP2PClientAddresses(
107
120
  ): Promise<P2PConfig & DataStoreConfig> {
108
121
  const config = { ..._config };
109
122
  const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
123
+ const logger = createLogger('p2p:config');
110
124
 
111
125
  // If no broadcast port is provided, use the given p2p port as the broadcast port
112
126
  if (!p2pBroadcastPort) {
113
127
  config.p2pBroadcastPort = p2pPort;
114
128
  }
115
129
 
116
- // check if no announce IP was provided
117
- if (!p2pIp) {
118
- if (queryForIp) {
119
- const publicIp = await getPublicIp();
120
- config.p2pIp = publicIp;
121
- }
130
+ // Resolve the initial public IP so the ENR and announce address are set at startup.
131
+ // If queryForIp is enabled, discv5 will also track IP changes at runtime via enrUpdate.
132
+ if (!p2pIp && queryForIp) {
133
+ config.p2pIp = await getPublicIp(config.publicIpServices);
134
+ logger.info('Resolved initial public IP for P2P', { ip: config.p2pIp, queryForIp });
135
+ } else if (p2pIp) {
136
+ logger.info('Using configured static P2P IP', { ip: p2pIp, queryForIp });
122
137
  }
123
138
  // TODO(md): guard against setting a local ip address as the announce ip
124
139
 
package/src/versioning.ts CHANGED
@@ -1,33 +1,21 @@
1
- import { toBufferBE } from '@aztec/foundation/bigint-buffer';
2
1
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
2
  import { protocolContractsHash } from '@aztec/protocol-contracts';
4
3
  import type { ChainConfig } from '@aztec/stdlib/config';
5
- import {
6
- type ComponentsVersions,
7
- checkCompressedComponentVersion,
8
- compressComponentVersions,
9
- getComponentsVersionsFromConfig,
10
- } from '@aztec/stdlib/versioning';
4
+ import { compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
11
5
 
12
6
  import type { SignableENR } from '@nethermindeth/enr';
13
- import xxhashFactory from 'xxhash-wasm';
14
7
 
15
8
  import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
16
9
 
17
- const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
18
- const XX_HASH_LEN = 8;
19
- const xxhash = await xxhashFactory();
20
-
21
10
  /** Returns the component versions based on config and this build. */
22
11
  export function getVersions(config: ChainConfig) {
23
12
  return getComponentsVersionsFromConfig(config, protocolContractsHash, getVKTreeRoot());
24
13
  }
25
14
 
26
15
  /** Sets the aztec key on the ENR record with versioning info. */
27
- export function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash = USE_XX_HASH) {
16
+ export function setAztecEnrKey(enr: SignableENR, config: ChainConfig) {
28
17
  const versions = getVersions(config);
29
- const value = versionsToEnrValue(versions, useXxHash);
30
- enr.set(AZTEC_ENR_KEY, value);
18
+ enr.set(AZTEC_ENR_KEY, Buffer.from(compressComponentVersions(versions)));
31
19
  return versions;
32
20
  }
33
21
 
@@ -37,21 +25,3 @@ export function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: str
37
25
  enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
38
26
  }
39
27
  }
40
-
41
- /** Checks the given value from an ENR record against the expected versions. */
42
- export function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions) {
43
- if (enrValue.length === XX_HASH_LEN) {
44
- const expected = versionsToEnrValue(expectedVersions, true);
45
- if (!Buffer.from(enrValue).equals(expected)) {
46
- throw new Error(`Expected ENR version ${expected.toString('hex')} but received ${enrValue.toString('hex')}`);
47
- }
48
- } else {
49
- const actual = Buffer.from(enrValue).toString();
50
- checkCompressedComponentVersion(actual, expectedVersions);
51
- }
52
- }
53
-
54
- function versionsToEnrValue(versions: ComponentsVersions, useXxHash: boolean) {
55
- const compressed = compressComponentVersions(versions);
56
- return useXxHash ? toBufferBE(xxhash.h64(compressed), XX_HASH_LEN) : Buffer.from(compressed);
57
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdHhfY29sbGVjdG9yX3dvcmtlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC90ZXN0L3R4X3Byb3Bvc2FsX2NvbGxlY3Rvci9wcm9wb3NhbF90eF9jb2xsZWN0b3Jfd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposal_tx_collector_worker.d.ts","sourceRoot":"","sources":["../../../../src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts"],"names":[],"mappings":""}