@aztec/p2p 0.0.0-test.0 → 0.0.1-commit.023c3e5

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 (512) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +26 -13
  4. package/dest/client/factory.d.ts +15 -5
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +61 -25
  7. package/dest/client/index.d.ts +2 -1
  8. package/dest/client/index.d.ts.map +1 -1
  9. package/dest/client/index.js +1 -0
  10. package/dest/client/interface.d.ts +170 -0
  11. package/dest/client/interface.d.ts.map +1 -0
  12. package/dest/client/interface.js +9 -0
  13. package/dest/client/p2p_client.d.ts +75 -193
  14. package/dest/client/p2p_client.d.ts.map +1 -1
  15. package/dest/client/p2p_client.js +765 -229
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  19. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  20. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  21. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  22. package/dest/config.d.ts +154 -125
  23. package/dest/config.d.ts.map +1 -1
  24. package/dest/config.js +182 -34
  25. package/dest/enr/generate-enr.d.ts +11 -3
  26. package/dest/enr/generate-enr.d.ts.map +1 -1
  27. package/dest/enr/generate-enr.js +27 -5
  28. package/dest/enr/index.d.ts +1 -1
  29. package/dest/errors/attestation-pool.error.d.ts +7 -0
  30. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  31. package/dest/errors/attestation-pool.error.js +12 -0
  32. package/dest/errors/reqresp.error.d.ts +1 -1
  33. package/dest/errors/reqresp.error.d.ts.map +1 -1
  34. package/dest/index.d.ts +4 -1
  35. package/dest/index.d.ts.map +1 -1
  36. package/dest/index.js +2 -0
  37. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -25
  38. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  40. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  41. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +299 -174
  42. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  43. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -11
  44. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  45. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +168 -62
  46. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +24 -10
  47. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  48. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +133 -82
  49. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -11
  50. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  51. package/dest/mem_pools/attestation_pool/mocks.js +19 -21
  52. package/dest/mem_pools/index.d.ts +1 -1
  53. package/dest/mem_pools/instrumentation.d.ts +16 -12
  54. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  55. package/dest/mem_pools/instrumentation.js +56 -41
  56. package/dest/mem_pools/interface.d.ts +3 -4
  57. package/dest/mem_pools/interface.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +75 -16
  59. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +493 -142
  61. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  62. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  64. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  65. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  67. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  68. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  70. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  71. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  73. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  74. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  76. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  77. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  79. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  80. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  82. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  83. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  84. package/dest/mem_pools/tx_pool/index.js +0 -1
  85. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  86. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  87. package/dest/mem_pools/tx_pool/priority.js +7 -2
  88. package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
  89. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  90. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  91. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  92. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +276 -45
  93. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
  94. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/attestation_validator/attestation_validator.js +79 -10
  96. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  97. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
  99. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  100. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  101. package/dest/msg_validators/attestation_validator/index.js +1 -0
  102. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  103. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  104. package/dest/msg_validators/clock_tolerance.js +37 -0
  105. package/dest/msg_validators/index.d.ts +2 -2
  106. package/dest/msg_validators/index.d.ts.map +1 -1
  107. package/dest/msg_validators/index.js +1 -1
  108. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  109. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  110. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  111. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  112. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  113. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  114. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  115. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  116. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  117. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  118. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  119. package/dest/msg_validators/proposal_validator/index.js +3 -0
  120. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  121. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  122. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  123. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  124. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  125. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  126. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  127. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
  129. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  130. package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
  131. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  132. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  133. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  134. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  135. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/block_header_validator.js +7 -6
  137. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  138. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  139. package/dest/msg_validators/tx_validator/data_validator.js +60 -87
  140. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -4
  141. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/double_spend_validator.js +24 -29
  143. package/dest/msg_validators/tx_validator/factory.d.ts +21 -0
  144. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  145. package/dest/msg_validators/tx_validator/factory.js +84 -0
  146. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  147. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  149. package/dest/msg_validators/tx_validator/gas_validator.d.ts +12 -0
  150. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  151. package/dest/msg_validators/tx_validator/gas_validator.js +110 -0
  152. package/dest/msg_validators/tx_validator/index.d.ts +9 -1
  153. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/index.js +8 -0
  155. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -5
  156. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/metadata_validator.js +40 -21
  158. package/dest/msg_validators/tx_validator/phases_validator.d.ts +15 -0
  159. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  160. package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
  161. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  162. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  164. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  165. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  166. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  167. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +14 -0
  168. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  169. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  170. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
  171. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  173. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  174. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/tx_proof_validator.js +8 -7
  176. package/dest/services/data_store.d.ts +1 -1
  177. package/dest/services/data_store.d.ts.map +1 -1
  178. package/dest/services/data_store.js +10 -6
  179. package/dest/services/discv5/discV5_service.d.ts +10 -9
  180. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  181. package/dest/services/discv5/discV5_service.js +64 -37
  182. package/dest/services/dummy_service.d.ts +66 -11
  183. package/dest/services/dummy_service.d.ts.map +1 -1
  184. package/dest/services/dummy_service.js +130 -5
  185. package/dest/services/encoding.d.ts +26 -7
  186. package/dest/services/encoding.d.ts.map +1 -1
  187. package/dest/services/encoding.js +75 -6
  188. package/dest/services/gossipsub/scoring.d.ts +1 -1
  189. package/dest/services/index.d.ts +5 -1
  190. package/dest/services/index.d.ts.map +1 -1
  191. package/dest/services/index.js +4 -0
  192. package/dest/services/libp2p/instrumentation.d.ts +20 -0
  193. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  194. package/dest/services/libp2p/instrumentation.js +122 -0
  195. package/dest/services/libp2p/libp2p_service.d.ts +107 -95
  196. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  197. package/dest/services/libp2p/libp2p_service.js +1328 -313
  198. package/dest/services/peer-manager/interface.d.ts +23 -0
  199. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  200. package/dest/services/peer-manager/interface.js +1 -0
  201. package/dest/services/peer-manager/metrics.d.ts +12 -3
  202. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  203. package/dest/services/peer-manager/metrics.js +44 -12
  204. package/dest/services/peer-manager/peer_manager.d.ts +103 -23
  205. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  206. package/dest/services/peer-manager/peer_manager.js +551 -82
  207. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  208. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  209. package/dest/services/peer-manager/peer_scoring.js +43 -2
  210. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  211. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  212. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  213. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  214. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  215. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  216. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  217. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  218. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  219. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  220. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  221. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  222. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  223. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  224. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  225. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  226. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  227. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  228. package/dest/services/reqresp/config.d.ts +11 -9
  229. package/dest/services/reqresp/config.d.ts.map +1 -1
  230. package/dest/services/reqresp/config.js +18 -4
  231. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +23 -4
  232. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  233. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +73 -10
  234. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +32 -17
  235. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  236. package/dest/services/reqresp/connection-sampler/connection_sampler.js +154 -84
  237. package/dest/services/reqresp/constants.d.ts +12 -0
  238. package/dest/services/reqresp/constants.d.ts.map +1 -0
  239. package/dest/services/reqresp/constants.js +7 -0
  240. package/dest/services/reqresp/index.d.ts +3 -2
  241. package/dest/services/reqresp/index.d.ts.map +1 -1
  242. package/dest/services/reqresp/index.js +2 -1
  243. package/dest/services/reqresp/interface.d.ts +75 -24
  244. package/dest/services/reqresp/interface.d.ts.map +1 -1
  245. package/dest/services/reqresp/interface.js +46 -27
  246. package/dest/services/reqresp/metrics.d.ts +6 -5
  247. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  248. package/dest/services/reqresp/metrics.js +17 -21
  249. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  250. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  251. package/dest/services/reqresp/protocols/auth.js +71 -0
  252. package/dest/services/reqresp/protocols/block.d.ts +6 -1
  253. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  254. package/dest/services/reqresp/protocols/block.js +30 -6
  255. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +34 -0
  256. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  257. package/dest/services/reqresp/protocols/block_txs/bitvector.js +87 -0
  258. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
  259. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  260. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +52 -0
  261. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +59 -0
  262. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  263. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +105 -0
  264. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  265. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  266. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  267. package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
  268. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  269. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  270. package/dest/services/reqresp/protocols/index.d.ts +3 -1
  271. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  272. package/dest/services/reqresp/protocols/index.js +2 -0
  273. package/dest/services/reqresp/protocols/ping.d.ts +1 -3
  274. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  275. package/dest/services/reqresp/protocols/status.d.ts +40 -7
  276. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  277. package/dest/services/reqresp/protocols/status.js +76 -5
  278. package/dest/services/reqresp/protocols/tx.d.ts +14 -4
  279. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  280. package/dest/services/reqresp/protocols/tx.js +34 -6
  281. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  282. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
  283. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  284. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  285. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  286. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  287. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  288. package/dest/services/reqresp/reqresp.d.ts +29 -66
  289. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  290. package/dest/services/reqresp/reqresp.js +753 -248
  291. package/dest/services/reqresp/status.d.ts +10 -4
  292. package/dest/services/reqresp/status.d.ts.map +1 -1
  293. package/dest/services/reqresp/status.js +9 -2
  294. package/dest/services/service.d.ts +40 -20
  295. package/dest/services/service.d.ts.map +1 -1
  296. package/dest/services/tx_collection/config.d.ts +28 -0
  297. package/dest/services/tx_collection/config.d.ts.map +1 -0
  298. package/dest/services/tx_collection/config.js +66 -0
  299. package/dest/services/tx_collection/fast_tx_collection.d.ts +53 -0
  300. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  301. package/dest/services/tx_collection/fast_tx_collection.js +311 -0
  302. package/dest/services/tx_collection/index.d.ts +4 -0
  303. package/dest/services/tx_collection/index.d.ts.map +1 -0
  304. package/dest/services/tx_collection/index.js +3 -0
  305. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  306. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  307. package/dest/services/tx_collection/instrumentation.js +31 -0
  308. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  309. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  310. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  311. package/dest/services/tx_collection/slow_tx_collection.d.ts +53 -0
  312. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  313. package/dest/services/tx_collection/slow_tx_collection.js +177 -0
  314. package/dest/services/tx_collection/tx_collection.d.ts +110 -0
  315. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  316. package/dest/services/tx_collection/tx_collection.js +128 -0
  317. package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
  318. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  319. package/dest/services/tx_collection/tx_collection_sink.js +111 -0
  320. package/dest/services/tx_collection/tx_source.d.ts +18 -0
  321. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  322. package/dest/services/tx_collection/tx_source.js +31 -0
  323. package/dest/services/tx_provider.d.ts +51 -0
  324. package/dest/services/tx_provider.d.ts.map +1 -0
  325. package/dest/services/tx_provider.js +219 -0
  326. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  327. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  328. package/dest/services/tx_provider_instrumentation.js +34 -0
  329. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  330. package/dest/test-helpers/get-ports.d.ts +1 -1
  331. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  332. package/dest/test-helpers/index.d.ts +4 -1
  333. package/dest/test-helpers/index.d.ts.map +1 -1
  334. package/dest/test-helpers/index.js +3 -0
  335. package/dest/test-helpers/make-enrs.d.ts +1 -1
  336. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  337. package/dest/test-helpers/make-enrs.js +4 -5
  338. package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
  339. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  340. package/dest/test-helpers/make-test-p2p-clients.js +86 -16
  341. package/dest/test-helpers/mock-pubsub.d.ts +59 -0
  342. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  343. package/dest/test-helpers/mock-pubsub.js +130 -0
  344. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  345. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  346. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  347. package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
  348. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  349. package/dest/test-helpers/reqresp-nodes.js +62 -28
  350. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  351. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  352. package/dest/test-helpers/test_tx_provider.js +41 -0
  353. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  354. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  355. package/dest/test-helpers/testbench-utils.js +297 -0
  356. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  357. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  358. package/dest/testbench/p2p_client_testbench_worker.js +259 -90
  359. package/dest/testbench/parse_log_file.d.ts +1 -1
  360. package/dest/testbench/parse_log_file.js +4 -4
  361. package/dest/testbench/testbench.d.ts +1 -1
  362. package/dest/testbench/testbench.js +4 -4
  363. package/dest/testbench/worker_client_manager.d.ts +51 -11
  364. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  365. package/dest/testbench/worker_client_manager.js +232 -53
  366. package/dest/types/index.d.ts +4 -2
  367. package/dest/types/index.d.ts.map +1 -1
  368. package/dest/types/index.js +2 -0
  369. package/dest/util.d.ts +24 -16
  370. package/dest/util.d.ts.map +1 -1
  371. package/dest/util.js +75 -69
  372. package/dest/versioning.d.ts +4 -4
  373. package/dest/versioning.d.ts.map +1 -1
  374. package/dest/versioning.js +8 -3
  375. package/package.json +32 -27
  376. package/src/bootstrap/bootstrap.ts +34 -15
  377. package/src/client/factory.ts +135 -53
  378. package/src/client/index.ts +1 -0
  379. package/src/client/interface.ts +213 -0
  380. package/src/client/p2p_client.ts +476 -383
  381. package/src/client/test/tx_proposal_collector/README.md +227 -0
  382. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  383. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  384. package/src/config.ts +304 -134
  385. package/src/enr/generate-enr.ts +39 -6
  386. package/src/errors/attestation-pool.error.ts +13 -0
  387. package/src/index.ts +4 -0
  388. package/src/mem_pools/attestation_pool/attestation_pool.ts +119 -24
  389. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +352 -201
  390. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +233 -72
  391. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +199 -96
  392. package/src/mem_pools/attestation_pool/mocks.ts +24 -17
  393. package/src/mem_pools/instrumentation.ts +72 -48
  394. package/src/mem_pools/interface.ts +2 -4
  395. package/src/mem_pools/tx_pool/README.md +270 -0
  396. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +580 -143
  397. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  398. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  399. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  400. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  401. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  402. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  403. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  404. package/src/mem_pools/tx_pool/index.ts +0 -1
  405. package/src/mem_pools/tx_pool/priority.ts +9 -2
  406. package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
  407. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +225 -36
  408. package/src/msg_validators/attestation_validator/attestation_validator.ts +72 -14
  409. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
  410. package/src/msg_validators/attestation_validator/index.ts +1 -0
  411. package/src/msg_validators/clock_tolerance.ts +51 -0
  412. package/src/msg_validators/index.ts +1 -1
  413. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  414. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  415. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  416. package/src/msg_validators/proposal_validator/index.ts +3 -0
  417. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  418. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  419. package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
  420. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  421. package/src/msg_validators/tx_validator/block_header_validator.ts +10 -9
  422. package/src/msg_validators/tx_validator/data_validator.ts +95 -71
  423. package/src/msg_validators/tx_validator/double_spend_validator.ts +23 -20
  424. package/src/msg_validators/tx_validator/factory.ts +151 -0
  425. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  426. package/src/msg_validators/tx_validator/gas_validator.ts +123 -0
  427. package/src/msg_validators/tx_validator/index.ts +8 -0
  428. package/src/msg_validators/tx_validator/metadata_validator.ts +72 -24
  429. package/src/msg_validators/tx_validator/phases_validator.ts +118 -0
  430. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  431. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  432. package/src/msg_validators/tx_validator/timestamp_validator.ts +52 -0
  433. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
  434. package/src/msg_validators/tx_validator/tx_proof_validator.ts +14 -8
  435. package/src/services/data_store.ts +10 -7
  436. package/src/services/discv5/discV5_service.ts +85 -39
  437. package/src/services/dummy_service.ts +198 -9
  438. package/src/services/encoding.ts +82 -6
  439. package/src/services/index.ts +4 -0
  440. package/src/services/libp2p/instrumentation.ts +126 -0
  441. package/src/services/libp2p/libp2p_service.ts +1170 -353
  442. package/src/services/peer-manager/interface.ts +29 -0
  443. package/src/services/peer-manager/metrics.ts +55 -12
  444. package/src/services/peer-manager/peer_manager.ts +657 -80
  445. package/src/services/peer-manager/peer_scoring.ts +45 -3
  446. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  447. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  448. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  449. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  450. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  451. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  452. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  453. package/src/services/reqresp/config.ts +26 -9
  454. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +77 -10
  455. package/src/services/reqresp/connection-sampler/connection_sampler.ts +166 -95
  456. package/src/services/reqresp/constants.ts +14 -0
  457. package/src/services/reqresp/index.ts +2 -0
  458. package/src/services/reqresp/interface.ts +95 -37
  459. package/src/services/reqresp/metrics.ts +40 -28
  460. package/src/services/reqresp/protocols/auth.ts +83 -0
  461. package/src/services/reqresp/protocols/block.ts +26 -4
  462. package/src/services/reqresp/protocols/block_txs/bitvector.ts +106 -0
  463. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +67 -0
  464. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +121 -0
  465. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  466. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  467. package/src/services/reqresp/protocols/index.ts +2 -0
  468. package/src/services/reqresp/protocols/status.ts +121 -5
  469. package/src/services/reqresp/protocols/tx.ts +36 -8
  470. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  471. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  472. package/src/services/reqresp/reqresp.ts +449 -271
  473. package/src/services/reqresp/status.ts +12 -3
  474. package/src/services/service.ts +65 -22
  475. package/src/services/tx_collection/config.ts +98 -0
  476. package/src/services/tx_collection/fast_tx_collection.ts +364 -0
  477. package/src/services/tx_collection/index.ts +7 -0
  478. package/src/services/tx_collection/instrumentation.ts +35 -0
  479. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  480. package/src/services/tx_collection/slow_tx_collection.ts +233 -0
  481. package/src/services/tx_collection/tx_collection.ts +216 -0
  482. package/src/services/tx_collection/tx_collection_sink.ts +129 -0
  483. package/src/services/tx_collection/tx_source.ts +37 -0
  484. package/src/services/tx_provider.ts +232 -0
  485. package/src/services/tx_provider_instrumentation.ts +54 -0
  486. package/src/test-helpers/index.ts +3 -0
  487. package/src/test-helpers/make-enrs.ts +4 -5
  488. package/src/test-helpers/make-test-p2p-clients.ts +111 -21
  489. package/src/test-helpers/mock-pubsub.ts +188 -0
  490. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  491. package/src/test-helpers/reqresp-nodes.ts +87 -36
  492. package/src/test-helpers/test_tx_provider.ts +64 -0
  493. package/src/test-helpers/testbench-utils.ts +374 -0
  494. package/src/testbench/p2p_client_testbench_worker.ts +434 -89
  495. package/src/testbench/parse_log_file.ts +4 -4
  496. package/src/testbench/testbench.ts +4 -4
  497. package/src/testbench/worker_client_manager.ts +315 -59
  498. package/src/types/index.ts +2 -0
  499. package/src/util.ts +105 -91
  500. package/src/versioning.ts +11 -4
  501. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
  502. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  503. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
  504. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
  505. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  506. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
  507. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  508. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  509. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  510. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
  511. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
  512. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -4,6 +4,7 @@ import { sleep } from '@aztec/foundation/sleep';
4
4
  import type { ChainConfig } from '@aztec/stdlib/config';
5
5
 
6
6
  import { type ChildProcess, fork } from 'child_process';
7
+ import { existsSync } from 'fs';
7
8
  import path from 'path';
8
9
  import { fileURLToPath } from 'url';
9
10
 
@@ -11,23 +12,54 @@ import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
11
12
  import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
12
13
  import { getPorts } from '../test-helpers/get-ports.js';
13
14
  import { makeEnr, makeEnrs } from '../test-helpers/make-enrs.js';
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';
14
22
 
15
23
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
16
- const workerPath = path.join(__dirname, '../../dest/testbench/p2p_client_testbench_worker.js');
24
+ const p2pRoot = path.resolve(__dirname, '../..');
25
+ const workerTsPath = path.join(__dirname, 'p2p_client_testbench_worker.ts');
26
+ const workerJsPath = path.join(p2pRoot, 'dest/testbench/p2p_client_testbench_worker.js');
27
+ const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
17
28
 
18
29
  const testChainConfig: ChainConfig = {
19
30
  l1ChainId: 31337,
20
- version: 1,
31
+ rollupVersion: 1,
21
32
  l1Contracts: {
22
33
  rollupAddress: EthAddress.random(),
23
34
  },
24
35
  };
25
36
 
37
+ export interface ReqRespBenchmarkConfig {
38
+ txCount: number;
39
+ distribution: DistributionPattern;
40
+ collectorType: CollectorType;
41
+ timeoutMs: number;
42
+ pinnedPeerIndex?: number;
43
+ blockNumber?: number;
44
+ seed?: number;
45
+ }
46
+
47
+ export interface ReqRespBenchmarkResult {
48
+ txCount: number;
49
+ distribution: DistributionPattern;
50
+ collector: CollectorType;
51
+ durationMs: number;
52
+ fetchedCount: number;
53
+ success: boolean;
54
+ error?: string;
55
+ }
56
+
26
57
  class WorkerClientManager {
27
58
  public processes: ChildProcess[] = [];
28
59
  public peerIdPrivateKeys: string[] = [];
29
60
  public peerEnrs: string[] = [];
30
61
  public ports: number[] = [];
62
+ public peerIds: string[] = [];
31
63
  private p2pConfig: Partial<P2PConfig>;
32
64
  private logger: Logger;
33
65
  private messageReceivedByClient: number[] = [];
@@ -45,42 +77,54 @@ class WorkerClientManager {
45
77
  }
46
78
 
47
79
  /**
48
- * Creates address strings from a port
49
- */
50
- private getAddresses(port: number) {
51
- return {
52
- addr: `127.0.0.1:${port}`,
53
- listenAddr: `0.0.0.0:${port}`,
54
- };
55
- }
56
-
57
- /**
58
- * Creates a client configuration object
80
+ * Creates a client configuration object for IPC.
81
+ * Note: We send the raw peerIdPrivateKey string instead of SecretValue
82
+ * because SecretValue.toJSON() returns '[Redacted]', losing the value.
83
+ * The worker must re-wrap it in SecretValue.
59
84
  */
60
- private createClientConfig(clientIndex: number, port: number, otherNodes: string[]) {
61
- const { addr, listenAddr } = this.getAddresses(port);
62
-
85
+ private createClientConfig(
86
+ clientIndex: number,
87
+ port: number,
88
+ otherNodes: string[],
89
+ ): Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
63
90
  return {
64
91
  ...getP2PDefaultConfig(),
65
92
  p2pEnabled: true,
66
93
  peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
67
- tcpListenAddress: listenAddr,
68
- udpListenAddress: listenAddr,
69
- tcpAnnounceAddress: addr,
70
- udpAnnounceAddress: addr,
94
+ listenAddress: '127.0.0.1',
95
+ p2pIp: '127.0.0.1',
96
+ p2pPort: port,
71
97
  bootstrapNodes: [...otherNodes],
72
98
  ...this.p2pConfig,
73
- };
99
+ } as Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>;
74
100
  }
75
101
 
76
102
  /**
77
- * Spawns a worker process and returns a promise that resolves when the worker is ready
103
+ * Spawns a worker process and returns a promise that resolves when the worker is ready.
104
+ * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
78
105
  */
79
106
  private spawnWorkerProcess(
80
- config: P2PConfig & Partial<ChainConfig>,
107
+ config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>,
81
108
  clientIndex: number,
82
109
  ): [ChildProcess, Promise<void>] {
83
- const childProcess = fork(workerPath);
110
+ const useCompiled = existsSync(workerJsPath);
111
+ const workerPath = useCompiled ? workerJsPath : workerTsPath;
112
+
113
+ const execArgv = [...process.execArgv];
114
+ if (!useCompiled && !execArgv.includes('ts-node/esm')) {
115
+ execArgv.push('--loader', 'ts-node/esm');
116
+ }
117
+
118
+ const env = {
119
+ ...process.env,
120
+ TS_NODE_PROJECT: tsconfigPath,
121
+ };
122
+
123
+ const childProcess = fork(workerPath, {
124
+ cwd: p2pRoot,
125
+ execArgv,
126
+ env,
127
+ });
84
128
  childProcess.send({ type: 'START', config, clientIndex });
85
129
 
86
130
  // Handle unexpected child process exit
@@ -98,74 +142,131 @@ class WorkerClientManager {
98
142
 
99
143
  // Create ready signal promise
100
144
  const readySignal = new Promise<void>((resolve, reject) => {
101
- // Set a timeout to avoid hanging indefinitely
145
+ let resolved = false;
146
+
102
147
  const timeout = setTimeout(() => {
148
+ if (resolved) {
149
+ return;
150
+ }
151
+ resolved = true;
152
+ childProcess.off('message', messageHandler);
153
+ childProcess.off('exit', exitHandler);
103
154
  reject(new Error(`Timeout waiting for worker ${clientIndex} to be ready`));
104
- }, 30000); // 30 second timeout
155
+ }, BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS);
105
156
 
106
- childProcess.once('message', (msg: any) => {
107
- clearTimeout(timeout);
157
+ const messageHandler = (msg: any) => {
158
+ if (resolved) {
159
+ return;
160
+ }
161
+ // Only handle READY or ERROR messages; ignore others (e.g., GOSSIP_RECEIVED)
108
162
  if (msg.type === 'READY') {
163
+ resolved = true;
164
+ clearTimeout(timeout);
165
+ childProcess.off('message', messageHandler);
166
+ childProcess.off('exit', exitHandler);
167
+ if (typeof msg.peerId === 'string') {
168
+ this.peerIds[clientIndex] = msg.peerId;
169
+ }
109
170
  resolve();
110
- }
111
- // For future use
112
- if (msg.type === 'ERROR') {
171
+ } else if (msg.type === 'ERROR') {
172
+ resolved = true;
173
+ clearTimeout(timeout);
174
+ childProcess.off('message', messageHandler);
175
+ childProcess.off('exit', exitHandler);
113
176
  reject(new Error(msg.error));
114
177
  }
115
- });
178
+ // Ignore other message types and keep waiting for READY/ERROR
179
+ };
116
180
 
117
- // Also resolve/reject if process exits before sending message
118
- childProcess.once('exit', code => {
181
+ const exitHandler = (code: number | null) => {
182
+ if (resolved) {
183
+ return;
184
+ }
185
+ resolved = true;
119
186
  clearTimeout(timeout);
187
+ childProcess.off('message', messageHandler);
120
188
  if (code === 0) {
121
189
  resolve();
122
190
  } else {
123
191
  reject(new Error(`Worker ${clientIndex} exited with code ${code} before becoming ready`));
124
192
  }
125
- });
193
+ };
194
+
195
+ childProcess.on('message', messageHandler);
196
+ childProcess.once('exit', exitHandler);
126
197
  });
127
198
 
128
199
  return [childProcess, readySignal];
129
200
  }
130
201
 
131
202
  /**
132
- * Creates a number of worker clients in separate processes
133
- * All are configured to connect to each other and overrided with the test specific config
203
+ * Creates a number of worker clients in separate processes.
204
+ * All are configured to connect to each other and overridden with the test-specific config.
134
205
  *
135
206
  * @param numberOfClients - The number of clients to create
207
+ * @param options - Optional overrides for seeding/bootstrapping strategy
136
208
  * @returns The ENRs of the created clients
137
209
  */
138
- async makeWorkerClients(numberOfClients: number) {
210
+ async makeWorkerClients(
211
+ numberOfClients: number,
212
+ options: {
213
+ bootstrapMode?: 'subset' | 'all';
214
+ seedPeerLimit?: number;
215
+ batchSize?: number;
216
+ batchDelayMs?: number;
217
+ } = {},
218
+ ) {
139
219
  try {
220
+ const bootstrapMode = options.bootstrapMode ?? (this.p2pConfig.bootstrapNodesAsFullPeers ? 'all' : 'subset');
221
+ const seedPeerLimit = options.seedPeerLimit ?? 10;
222
+ const batchSize = options.batchSize ?? (bootstrapMode === 'all' ? Math.min(5, numberOfClients) : numberOfClients);
223
+ const batchDelayMs = options.batchDelayMs ?? (bootstrapMode === 'all' ? 500 : 0);
224
+
140
225
  this.messageReceivedByClient = new Array(numberOfClients).fill(0);
141
226
  this.peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfClients);
142
227
  this.ports = await getPorts(numberOfClients);
143
228
  this.peerEnrs = await makeEnrs(this.peerIdPrivateKeys, this.ports, testChainConfig);
229
+ this.peerIds = new Array(numberOfClients);
144
230
 
145
231
  this.processes = [];
146
232
  const readySignals: Promise<void>[] = [];
147
233
 
148
- for (let i = 0; i < numberOfClients; i++) {
149
- this.logger.info(`Creating client ${i}`);
234
+ for (let batchStart = 0; batchStart < numberOfClients; batchStart += batchSize) {
235
+ const batchEnd = Math.min(batchStart + batchSize, numberOfClients);
236
+ const batchPromises: Promise<void>[] = [];
150
237
 
151
- // Maximum seed with 10 other peers to allow peer discovery to connect them at a smoother rate
152
- const otherNodes = this.peerEnrs.filter((_, ind) => ind < Math.min(i, 10));
238
+ for (let i = batchStart; i < batchEnd; i++) {
239
+ this.logger.info(`Creating client ${i}`);
153
240
 
154
- const config = this.createClientConfig(i, this.ports[i], otherNodes);
155
- const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
241
+ const otherNodes =
242
+ bootstrapMode === 'all'
243
+ ? this.peerEnrs.filter((_, ind) => ind !== i)
244
+ : this.peerEnrs.filter((_, ind) => ind < Math.min(i, seedPeerLimit));
156
245
 
157
- readySignals.push(readySignal);
158
- this.processes.push(childProcess);
246
+ const config = this.createClientConfig(i, this.ports[i], otherNodes);
247
+ const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
248
+
249
+ readySignals.push(readySignal);
250
+ batchPromises.push(readySignal);
251
+ this.processes.push(childProcess);
252
+ }
253
+
254
+ await Promise.all(batchPromises);
255
+
256
+ if (batchEnd < numberOfClients && batchDelayMs > 0) {
257
+ await sleep(batchDelayMs);
258
+ }
159
259
  }
160
260
 
161
- // Wait for peers to all connect with each other
162
- await sleep(10000);
261
+ await sleep(BENCHMARK_CONSTANTS.PEER_DISCOVERY_WAIT_MS);
163
262
 
164
- // Wait for all peers to be booted up with timeout
165
263
  await Promise.race([
166
264
  Promise.all(readySignals),
167
265
  new Promise((_, reject) =>
168
- setTimeout(() => reject(new Error('Timeout waiting for all workers to be ready')), 30000),
266
+ setTimeout(
267
+ () => reject(new Error('Timeout waiting for all workers to be ready')),
268
+ BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS,
269
+ ),
169
270
  ),
170
271
  ]);
171
272
 
@@ -216,16 +317,20 @@ class WorkerClientManager {
216
317
  (_, ind) => ind !== clientIndex && ind < Math.min(this.peerEnrs.length, 10),
217
318
  );
218
319
 
320
+ this.logger.info(`Changing port for client ${clientIndex} to ${newPort} with other nodes `, otherNodes);
321
+
219
322
  const config = this.createClientConfig(clientIndex, newPort, otherNodes);
220
323
  const [childProcess, readySignal] = this.spawnWorkerProcess(config, clientIndex);
221
324
 
222
325
  this.processes[clientIndex] = childProcess;
223
326
 
224
- // Wait for the process to be ready with a timeout
225
327
  await Promise.race([
226
328
  readySignal,
227
329
  new Promise((_, reject) =>
228
- setTimeout(() => reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)), 30000),
330
+ setTimeout(
331
+ () => reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)),
332
+ BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS,
333
+ ),
229
334
  ),
230
335
  ]);
231
336
  } catch (error) {
@@ -245,15 +350,14 @@ class WorkerClientManager {
245
350
  }
246
351
 
247
352
  return new Promise<void>(resolve => {
248
- // Set a timeout for the graceful exit
249
353
  const forceKillTimeout = setTimeout(() => {
250
354
  this.logger.warn(`Process ${index} didn't exit gracefully, force killing...`);
251
355
  try {
252
- process.kill('SIGKILL'); // Force kill
356
+ process.kill('SIGKILL');
253
357
  } catch (e) {
254
358
  this.logger.error(`Error force killing process ${index}:`, e);
255
359
  }
256
- }, 10000); // 10 second timeout for graceful exit
360
+ }, BENCHMARK_CONSTANTS.GRACEFUL_SHUTDOWN_TIMEOUT_MS);
257
361
 
258
362
  // Listen for process exit
259
363
  process.once('exit', () => {
@@ -264,7 +368,7 @@ class WorkerClientManager {
264
368
  // Try to gracefully stop the process
265
369
  try {
266
370
  process.send({ type: 'STOP' });
267
- } catch (e) {
371
+ } catch {
268
372
  // If sending the message fails, force kill immediately
269
373
  clearTimeout(forceKillTimeout);
270
374
  try {
@@ -286,7 +390,6 @@ class WorkerClientManager {
286
390
  // Create array of promises for each process termination
287
391
  const terminationPromises = this.processes.map((process, index) => this.terminateProcess(process, index));
288
392
 
289
- // Wait for all processes to terminate with a timeout
290
393
  try {
291
394
  await Promise.race([
292
395
  Promise.all(terminationPromises),
@@ -298,12 +401,12 @@ class WorkerClientManager {
298
401
  if (!p.killed) {
299
402
  p.kill('SIGKILL');
300
403
  }
301
- } catch (e) {
404
+ } catch {
302
405
  // Ignore errors when force killing
303
406
  }
304
407
  });
305
408
  resolve();
306
- }, 30000); // 30 second timeout for all processes
409
+ }, BENCHMARK_CONSTANTS.CLEANUP_TIMEOUT_MS);
307
410
  }),
308
411
  ]);
309
412
  } catch (error) {
@@ -311,8 +414,161 @@ class WorkerClientManager {
311
414
  }
312
415
 
313
416
  this.processes = [];
417
+ this.peerIds = [];
314
418
  this.logger.info('All worker processes cleaned up');
315
419
  }
420
+
421
+ /**
422
+ * Run a req/resp benchmark across all worker clients.
423
+ *
424
+ * This sends a BENCH_REQRESP command to all workers:
425
+ * - Aggregator (client 0) runs the collector and returns timing results
426
+ * - Responders (clients 1..N) populate their tx pools based on distribution
427
+ *
428
+ * All workers generate the same txs deterministically from a shared seed,
429
+ * then filter based on their peerIndex and distribution pattern.
430
+ */
431
+ async runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult> {
432
+ const peerCount = this.processes.length;
433
+ if (peerCount < 2) {
434
+ throw new Error('Need at least 2 peers to run req/resp benchmark');
435
+ }
436
+
437
+ const seed = config.seed ?? Date.now();
438
+ const blockNumber = config.blockNumber ?? 1;
439
+ const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
440
+
441
+ this.logger.info(
442
+ `Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`,
443
+ );
444
+
445
+ const readyPromises: Promise<void>[] = [];
446
+
447
+ for (let i = 1; i < peerCount; i++) {
448
+ const cmd: BenchReqRespCommand = {
449
+ type: 'BENCH_REQRESP',
450
+ txCount: config.txCount,
451
+ peerCount,
452
+ distribution: config.distribution,
453
+ collectorType: config.collectorType,
454
+ timeoutMs: config.timeoutMs,
455
+ isAggregator: false,
456
+ peerIndex: i,
457
+ pinnedPeerIndex: config.pinnedPeerIndex,
458
+ pinnedPeerId,
459
+ blockNumber,
460
+ seed,
461
+ };
462
+
463
+ this.processes[i].send(cmd);
464
+ readyPromises.push(this.waitForBenchReady(i, 30000));
465
+ }
466
+
467
+ await Promise.all(readyPromises);
468
+ this.logger.info('All responder peers ready, starting aggregator benchmark...');
469
+
470
+ const aggregatorCmd: BenchReqRespCommand = {
471
+ type: 'BENCH_REQRESP',
472
+ txCount: config.txCount,
473
+ peerCount,
474
+ distribution: config.distribution,
475
+ collectorType: config.collectorType,
476
+ timeoutMs: config.timeoutMs,
477
+ isAggregator: true,
478
+ peerIndex: 0,
479
+ pinnedPeerIndex: config.pinnedPeerIndex,
480
+ pinnedPeerId,
481
+ blockNumber,
482
+ seed,
483
+ };
484
+
485
+ this.processes[0].send(aggregatorCmd);
486
+ const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
487
+
488
+ this.logger.info(
489
+ `Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
490
+ );
491
+
492
+ return {
493
+ txCount: config.txCount,
494
+ distribution: config.distribution,
495
+ collector: config.collectorType,
496
+ durationMs: result.durationMs,
497
+ fetchedCount: result.fetchedCount,
498
+ success: result.success,
499
+ error: result.error,
500
+ };
501
+ }
502
+
503
+ private waitForBenchReady(clientIndex: number, timeoutMs: number): Promise<void> {
504
+ return new Promise((resolve, reject) => {
505
+ let resolved = false;
506
+
507
+ const handler = (msg: any) => {
508
+ if (resolved) {
509
+ return;
510
+ }
511
+ if (msg.type === 'BENCH_READY') {
512
+ resolved = true;
513
+ clearTimeout(timeout);
514
+ this.processes[clientIndex].off('message', handler);
515
+ resolve();
516
+ } else if (msg.type === 'ERROR') {
517
+ resolved = true;
518
+ clearTimeout(timeout);
519
+ this.processes[clientIndex].off('message', handler);
520
+ reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
521
+ }
522
+ };
523
+
524
+ const timeout = setTimeout(() => {
525
+ if (resolved) {
526
+ return;
527
+ }
528
+ resolved = true;
529
+ this.processes[clientIndex].off('message', handler);
530
+ reject(new Error(`Timeout waiting for BENCH_READY from client ${clientIndex}`));
531
+ }, timeoutMs);
532
+
533
+ this.processes[clientIndex].on('message', handler);
534
+ });
535
+ }
536
+
537
+ private waitForBenchResult(clientIndex: number, timeoutMs: number): Promise<BenchResultMessage> {
538
+ return new Promise((resolve, reject) => {
539
+ let resolved = false;
540
+
541
+ const handler = (msg: any) => {
542
+ if (resolved) {
543
+ return;
544
+ }
545
+ if (msg.type === 'BENCH_RESULT') {
546
+ resolved = true;
547
+ clearTimeout(timeout);
548
+ this.processes[clientIndex].off('message', handler);
549
+ resolve(msg as BenchResultMessage);
550
+ } else if (msg.type === 'ERROR') {
551
+ resolved = true;
552
+ clearTimeout(timeout);
553
+ this.processes[clientIndex].off('message', handler);
554
+ reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
555
+ }
556
+ };
557
+
558
+ const timeout = setTimeout(() => {
559
+ if (resolved) {
560
+ return;
561
+ }
562
+ resolved = true;
563
+ this.processes[clientIndex].off('message', handler);
564
+ reject(new Error(`Timeout waiting for BENCH_RESULT from client ${clientIndex}`));
565
+ }, timeoutMs);
566
+
567
+ this.processes[clientIndex].on('message', handler);
568
+ });
569
+ }
316
570
  }
317
571
 
318
572
  export { WorkerClientManager, testChainConfig };
573
+ export type { DistributionPattern, CollectorType } from './p2p_client_testbench_worker.js';
574
+ export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
@@ -17,6 +17,7 @@ export enum PeerEvent {
17
17
  export enum Discv5Event {
18
18
  DISCOVERED = 'discovered',
19
19
  ENR_ADDED = 'enrAdded',
20
+ MULTIADDR_UPDATED = 'multiaddrUpdated',
20
21
  }
21
22
 
22
23
  /**
@@ -34,3 +35,4 @@ export enum GossipSubEvent {
34
35
  * Aztec network specific types
35
36
  */
36
37
  export const AZTEC_ENR_KEY = 'aztec';
38
+ export const AZTEC_ENR_CLIENT_VERSION_KEY = 'ver';