@aztec/p2p 0.0.1-commit.b6e433891 → 0.0.1-commit.b9865e97

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 (385) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +9 -1
  4. package/dest/client/factory.d.ts +4 -3
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +28 -23
  7. package/dest/client/interface.d.ts +14 -5
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +13 -9
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +78 -22
  12. package/dest/config.d.ts +131 -101
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +53 -8
  15. package/dest/errors/p2p-service.error.d.ts +9 -0
  16. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  17. package/dest/errors/p2p-service.error.js +10 -0
  18. package/dest/errors/reqresp.error.d.ts +1 -20
  19. package/dest/errors/reqresp.error.d.ts.map +1 -1
  20. package/dest/errors/reqresp.error.js +0 -21
  21. package/dest/index.d.ts +1 -2
  22. package/dest/index.d.ts.map +1 -1
  23. package/dest/index.js +0 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +96 -56
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool.js +262 -196
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +175 -59
  30. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  33. package/dest/mem_pools/index.d.ts +1 -2
  34. package/dest/mem_pools/index.d.ts.map +1 -1
  35. package/dest/mem_pools/instrumentation.d.ts +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  37. package/dest/mem_pools/instrumentation.js +17 -1
  38. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  41. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  44. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  48. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +4 -1
  49. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
  53. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +75 -84
  56. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  57. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  58. package/dest/msg_validators/attestation_validator/attestation_validator.js +34 -10
  59. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  60. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  61. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  62. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  63. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  64. package/dest/msg_validators/clock_tolerance.js +52 -0
  65. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -2
  66. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  67. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -2
  68. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +10 -2
  70. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  71. package/dest/msg_validators/proposal_validator/proposal_validator.js +44 -10
  72. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  73. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  75. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  76. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  77. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  78. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  79. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  80. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  81. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  82. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  83. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  84. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  85. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  86. package/dest/msg_validators/tx_validator/factory.d.ts +6 -5
  87. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  88. package/dest/msg_validators/tx_validator/factory.js +21 -11
  89. package/dest/msg_validators/tx_validator/gas_validator.d.ts +36 -4
  90. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  91. package/dest/msg_validators/tx_validator/gas_validator.js +50 -33
  92. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  93. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  94. package/dest/msg_validators/tx_validator/index.js +2 -0
  95. package/dest/msg_validators/tx_validator/phases_validator.js +1 -1
  96. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  97. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  99. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  100. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  101. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  102. package/dest/services/data_store.d.ts +1 -1
  103. package/dest/services/data_store.d.ts.map +1 -1
  104. package/dest/services/data_store.js +5 -5
  105. package/dest/services/discv5/discV5_service.d.ts +2 -1
  106. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  107. package/dest/services/discv5/discV5_service.js +35 -8
  108. package/dest/services/dummy_service.d.ts +11 -15
  109. package/dest/services/dummy_service.d.ts.map +1 -1
  110. package/dest/services/dummy_service.js +12 -16
  111. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  112. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  113. package/dest/services/gossipsub/topic_score_params.js +21 -4
  114. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  115. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  116. package/dest/services/libp2p/instrumentation.js +14 -0
  117. package/dest/services/libp2p/libp2p_service.d.ts +36 -39
  118. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  119. package/dest/services/libp2p/libp2p_service.js +268 -241
  120. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  121. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  122. package/dest/services/peer-manager/peer_manager.js +36 -8
  123. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  124. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  125. package/dest/services/peer-manager/peer_scoring.js +32 -10
  126. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  127. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  128. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +38 -44
  129. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
  130. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  131. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  132. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  133. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  134. package/dest/services/reqresp/config.d.ts +3 -3
  135. package/dest/services/reqresp/config.d.ts.map +1 -1
  136. package/dest/services/reqresp/interface.d.ts +16 -18
  137. package/dest/services/reqresp/interface.d.ts.map +1 -1
  138. package/dest/services/reqresp/interface.js +10 -20
  139. package/dest/services/reqresp/metrics.d.ts +1 -1
  140. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  141. package/dest/services/reqresp/metrics.js +0 -1
  142. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  143. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  144. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  145. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  146. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  147. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  148. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  149. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  150. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  151. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  152. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  153. package/dest/services/reqresp/protocols/index.js +0 -1
  154. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  155. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  156. package/dest/services/reqresp/protocols/tx.js +1 -3
  157. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  158. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  159. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  160. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  161. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  162. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  163. package/dest/services/reqresp/reqresp.d.ts +7 -29
  164. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  165. package/dest/services/reqresp/reqresp.js +26 -207
  166. package/dest/services/service.d.ts +9 -12
  167. package/dest/services/service.d.ts.map +1 -1
  168. package/dest/services/tx_collection/config.d.ts +2 -23
  169. package/dest/services/tx_collection/config.d.ts.map +1 -1
  170. package/dest/services/tx_collection/config.js +2 -55
  171. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  172. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  173. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  174. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  175. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  176. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  177. package/dest/services/tx_collection/index.d.ts +2 -3
  178. package/dest/services/tx_collection/index.d.ts.map +1 -1
  179. package/dest/services/tx_collection/index.js +0 -1
  180. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  181. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  182. package/dest/services/tx_collection/instrumentation.js +0 -2
  183. package/dest/services/tx_collection/tx_collection.d.ts +35 -51
  184. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  185. package/dest/services/tx_collection/tx_collection.js +275 -119
  186. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  187. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  188. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  189. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  190. package/dest/services/tx_collection/tx_source.js +9 -7
  191. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  192. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  193. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  194. package/dest/services/tx_provider.d.ts +3 -1
  195. package/dest/services/tx_provider.d.ts.map +1 -1
  196. package/dest/services/tx_provider.js +3 -0
  197. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  198. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  199. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  200. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  201. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  202. package/dest/test-helpers/mock-pubsub.js +44 -44
  203. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  204. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  205. package/dest/test-helpers/reqresp-nodes.js +16 -18
  206. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  207. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  208. package/dest/test-helpers/test_tx_provider.js +3 -0
  209. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  210. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  211. package/dest/test-helpers/testbench-utils.js +19 -13
  212. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  213. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  214. package/dest/testbench/p2p_client_testbench_worker.js +84 -40
  215. package/dest/testbench/worker_client_manager.d.ts +10 -6
  216. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  217. package/dest/testbench/worker_client_manager.js +51 -9
  218. package/dest/util.d.ts +11 -6
  219. package/dest/util.d.ts.map +1 -1
  220. package/dest/util.js +35 -14
  221. package/dest/versioning.d.ts +3 -6
  222. package/dest/versioning.d.ts.map +1 -1
  223. package/dest/versioning.js +3 -24
  224. package/package.json +15 -14
  225. package/src/bootstrap/bootstrap.ts +9 -1
  226. package/src/client/factory.ts +48 -23
  227. package/src/client/interface.ts +15 -11
  228. package/src/client/p2p_client.ts +91 -43
  229. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  230. package/src/config.ts +107 -7
  231. package/src/errors/p2p-service.error.ts +11 -0
  232. package/src/errors/reqresp.error.ts +0 -25
  233. package/src/index.ts +0 -1
  234. package/src/mem_pools/attestation_pool/attestation_pool.ts +313 -238
  235. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +198 -62
  236. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  237. package/src/mem_pools/index.ts +0 -3
  238. package/src/mem_pools/instrumentation.ts +5 -1
  239. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  240. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  241. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  242. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  243. package/src/mem_pools/tx_pool_v2/interfaces.ts +3 -0
  244. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
  245. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +75 -90
  246. package/src/msg_validators/attestation_validator/attestation_validator.ts +38 -7
  247. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  248. package/src/msg_validators/clock_tolerance.ts +69 -0
  249. package/src/msg_validators/proposal_validator/README.md +1 -1
  250. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +12 -2
  251. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +17 -2
  252. package/src/msg_validators/proposal_validator/proposal_validator.ts +51 -8
  253. package/src/msg_validators/tx_validator/README.md +11 -3
  254. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  255. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  256. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  257. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  258. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  259. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  260. package/src/msg_validators/tx_validator/factory.ts +25 -7
  261. package/src/msg_validators/tx_validator/gas_validator.ts +82 -33
  262. package/src/msg_validators/tx_validator/index.ts +2 -0
  263. package/src/msg_validators/tx_validator/phases_validator.ts +1 -1
  264. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  265. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  266. package/src/services/data_store.ts +5 -13
  267. package/src/services/discv5/discV5_service.ts +38 -5
  268. package/src/services/dummy_service.ts +14 -39
  269. package/src/services/gossipsub/topic_score_params.ts +36 -4
  270. package/src/services/libp2p/instrumentation.ts +14 -0
  271. package/src/services/libp2p/libp2p_service.ts +297 -274
  272. package/src/services/peer-manager/peer_manager.ts +41 -8
  273. package/src/services/peer-manager/peer_scoring.ts +27 -5
  274. package/src/services/reqresp/README.md +0 -14
  275. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +42 -52
  276. package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
  277. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  278. package/src/services/reqresp/config.ts +2 -2
  279. package/src/services/reqresp/interface.ts +21 -47
  280. package/src/services/reqresp/metrics.ts +0 -1
  281. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  282. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  283. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  284. package/src/services/reqresp/protocols/index.ts +0 -1
  285. package/src/services/reqresp/protocols/tx.ts +1 -3
  286. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  287. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  288. package/src/services/reqresp/reqresp.ts +29 -252
  289. package/src/services/service.ts +12 -28
  290. package/src/services/tx_collection/config.ts +3 -80
  291. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  292. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  293. package/src/services/tx_collection/index.ts +1 -6
  294. package/src/services/tx_collection/instrumentation.ts +1 -7
  295. package/src/services/tx_collection/tx_collection.ts +330 -173
  296. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  297. package/src/services/tx_collection/tx_source.ts +8 -7
  298. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  299. package/src/services/tx_provider.ts +5 -0
  300. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  301. package/src/test-helpers/mock-pubsub.ts +46 -60
  302. package/src/test-helpers/reqresp-nodes.ts +12 -22
  303. package/src/test-helpers/test_tx_provider.ts +5 -0
  304. package/src/test-helpers/testbench-utils.ts +23 -26
  305. package/src/testbench/p2p_client_testbench_worker.ts +89 -54
  306. package/src/testbench/worker_client_manager.ts +59 -20
  307. package/src/util.ts +32 -17
  308. package/src/versioning.ts +3 -33
  309. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  310. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  311. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  312. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  313. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  314. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  315. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  316. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  317. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  318. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  319. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  320. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  321. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  322. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  323. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  324. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  325. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  326. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  327. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  328. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  329. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  330. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  331. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  332. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  333. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  334. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  335. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  336. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  337. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  338. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  339. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  340. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  341. package/dest/mem_pools/tx_pool/index.js +0 -2
  342. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  343. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  344. package/dest/mem_pools/tx_pool/priority.js +0 -15
  345. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  346. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  347. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  348. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  349. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  350. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  351. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  352. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  353. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  354. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  355. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  356. package/dest/services/reqresp/protocols/block.js +0 -32
  357. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  358. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  359. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  360. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  361. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  362. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  363. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  364. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  365. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  366. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -344
  367. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  368. package/src/mem_pools/tx_pool/README.md +0 -270
  369. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  370. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  371. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  372. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  373. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  374. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  375. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  376. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  377. package/src/mem_pools/tx_pool/index.ts +0 -2
  378. package/src/mem_pools/tx_pool/priority.ts +0 -20
  379. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  380. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  381. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  382. package/src/services/reqresp/protocols/block.ts +0 -37
  383. package/src/services/tx_collection/fast_tx_collection.ts +0 -361
  384. package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
  385. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -4,7 +4,7 @@
4
4
  * Used when running testbench commands.
5
5
  */
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
- import type { EpochCache, EpochCacheInterface } from '@aztec/epoch-cache';
7
+ import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
8
  import { BlockNumber } from '@aztec/foundation/branded-types';
9
9
  import { SecretValue } from '@aztec/foundation/config';
10
10
  import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
@@ -17,27 +17,27 @@ 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';
29
30
  import { TopicValidatorResult } from '@libp2p/interface';
30
31
  import { peerIdFromString } from '@libp2p/peer-id';
31
- import { mock } from 'jest-mock-extended';
32
32
 
33
33
  import type { P2PClient } from '../client/index.js';
34
34
  import type { P2PConfig } from '../config.js';
35
35
  import { createP2PClient } from '../index.js';
36
36
  import type { MemPools } from '../mem_pools/index.js';
37
- import { BatchTxRequesterCollector, LibP2PService, SendBatchRequestCollector } from '../services/index.js';
37
+ import { LibP2PService } from '../services/index.js';
38
38
  import type { PeerManager } from '../services/peer-manager/peer_manager.js';
39
+ import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
39
40
  import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
40
- import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requester/tx_validator.js';
41
41
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
42
42
  import type { ReqResp } from '../services/reqresp/reqresp.js';
43
43
  import type { PeerDiscoveryService } from '../services/service.js';
@@ -45,25 +45,23 @@ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
45
45
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
46
46
  import {
47
47
  BENCHMARK_CONSTANTS,
48
- type CollectorType,
49
48
  type DistributionPattern,
50
49
  InMemoryAttestationPool,
51
50
  InMemoryTxPool,
52
51
  UNLIMITED_RATE_LIMIT_QUOTA,
52
+ createMockEpochCache,
53
53
  createMockWorldStateSynchronizer,
54
54
  filterTxsByDistribution,
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,44 +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
- RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs)),
277
- blockProposal,
278
- pinnedPeer,
279
- );
280
- const durationMs = timer.ms();
281
- return {
282
- type: 'BENCH_RESULT',
283
- durationMs,
284
- fetchedCount: fetchedTxs.length,
285
- success: fetchedTxs.length === txHashes.length,
286
- };
287
- }
288
-
289
- const collector = new SendBatchRequestCollector(
290
- batchTxRequesterService,
291
- BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
292
- BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
293
- );
294
- const fetchedTxs = await collector.collectTxs(
295
- RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs)),
283
+ const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
284
+ const batchRequester = new BatchTxRequester(
285
+ tracker,
296
286
  blockProposal,
297
287
  pinnedPeer,
288
+ batchTxRequesterService,
289
+ logger,
290
+ new DateProvider(),
291
+ { txValidator: noopTxValidator },
298
292
  );
293
+ const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
299
294
  const durationMs = timer.ms();
300
295
  return {
301
296
  type: 'BENCH_RESULT',
@@ -321,6 +316,37 @@ let workerConfig: P2PConfig | null = null;
321
316
  let workerLogger: Logger | null = null;
322
317
  let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
323
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
+
324
350
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
325
351
  process.on('message', async msg => {
326
352
  const {
@@ -344,7 +370,7 @@ process.on('message', async msg => {
344
370
  workerConfig = config;
345
371
  workerTxPool = new InMemoryTxPool();
346
372
  workerAttestationPool = new InMemoryAttestationPool();
347
- const epochCache = mock<EpochCache>();
373
+ const epochCache = createMockEpochCache();
348
374
  const worldState = createMockWorldStateSynchronizer();
349
375
  const l2BlockSource = new MockL2BlockSource();
350
376
 
@@ -367,10 +393,12 @@ process.on('message', async msg => {
367
393
  proofVerifier as ClientProtocolCircuitVerifier,
368
394
  worldState,
369
395
  epochCache,
396
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
370
397
  'test-p2p-bench-worker',
371
398
  undefined,
372
399
  telemetry as TelemetryClient,
373
400
  deps,
401
+ await l2BlockSource.getInitialHeader().hash(),
374
402
  );
375
403
 
376
404
  const testService = new TestLibP2PService(
@@ -410,13 +438,8 @@ process.on('message', async msg => {
410
438
  const cmd = msg as any;
411
439
  switch (cmd.type) {
412
440
  case 'STOP':
413
- if (workerClient) {
414
- await workerClient.stop();
415
- }
416
- if (kvStore?.close) {
417
- await kvStore.close();
418
- }
419
- process.exit(0);
441
+ await stopWorker();
442
+ gracefulExit(0);
420
443
  break;
421
444
 
422
445
  case 'SEND_TX':
@@ -426,6 +449,13 @@ process.on('message', async msg => {
426
449
  }
427
450
  break;
428
451
 
452
+ case 'GET_PEER_COUNT':
453
+ process.send!({
454
+ type: 'PEER_COUNT',
455
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0,
456
+ });
457
+ break;
458
+
429
459
  case 'BENCH_REQRESP': {
430
460
  const benchCmd = cmd as BenchReqRespCommand;
431
461
  if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
@@ -442,6 +472,7 @@ process.on('message', async msg => {
442
472
  // Reset state before each benchmark run to avoid cross-run contamination
443
473
  workerTxPool.resetState();
444
474
  workerAttestationPool.resetState();
475
+ resetPeerScores(workerClient);
445
476
 
446
477
  installUnlimitedRateLimits(workerClient);
447
478
 
@@ -458,13 +489,12 @@ process.on('message', async msg => {
458
489
  workerTxPool.clearTxs();
459
490
 
460
491
  workerLogger.info(
461
- `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`,
492
+ `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`,
462
493
  );
463
494
 
464
495
  const result = await runAggregatorBenchmark(
465
496
  workerClient,
466
497
  blockProposal,
467
- benchCmd.collectorType,
468
498
  benchCmd.timeoutMs,
469
499
  benchCmd.pinnedPeerId,
470
500
  benchCmd.pinnedPeerIndex,
@@ -493,7 +523,12 @@ process.on('message', async msg => {
493
523
  }
494
524
  }
495
525
  } catch (err: any) {
496
- process.send!({ type: 'ERROR', error: err.message });
497
- 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);
498
533
  }
499
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":""}