@aztec/p2p 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0

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 (570) hide show
  1. package/README.md +130 -3
  2. package/dest/bootstrap/bootstrap.d.ts +4 -3
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +26 -10
  5. package/dest/client/factory.d.ts +13 -12
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +70 -20
  8. package/dest/client/interface.d.ts +90 -40
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +69 -64
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +247 -244
  13. package/dest/config.d.ts +169 -84
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +159 -45
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -2
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +164 -106
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +518 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +550 -125
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +7 -5
  40. package/dest/mem_pools/index.d.ts +3 -3
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +12 -5
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +40 -19
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +39 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +97 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  78. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  90. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  91. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  93. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  96. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
  97. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +122 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +368 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +68 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +178 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +91 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1013 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +11 -4
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +67 -13
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +9 -5
  118. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -11
  120. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +12 -5
  121. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
  123. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +12 -5
  124. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
  126. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +36 -9
  127. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/proposal_validator.js +156 -43
  129. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  130. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  132. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  133. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  135. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  136. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  137. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  138. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  139. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  141. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  143. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  144. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  146. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  147. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  149. package/dest/msg_validators/tx_validator/data_validator.d.ts +4 -1
  150. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  151. package/dest/msg_validators/tx_validator/data_validator.js +40 -3
  152. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  153. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  155. package/dest/msg_validators/tx_validator/factory.d.ts +136 -5
  156. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/factory.js +268 -58
  158. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  159. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  161. package/dest/msg_validators/tx_validator/gas_validator.d.ts +105 -3
  162. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/gas_validator.js +138 -53
  164. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  165. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/index.js +4 -0
  167. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  168. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  170. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  171. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  173. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  174. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
  176. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  177. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  179. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  180. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  181. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  182. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  183. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  184. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  185. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +4 -2
  186. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  187. package/dest/msg_validators/tx_validator/tx_proof_validator.js +4 -2
  188. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  189. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  190. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  191. package/dest/services/data_store.d.ts +1 -1
  192. package/dest/services/data_store.d.ts.map +1 -1
  193. package/dest/services/data_store.js +14 -10
  194. package/dest/services/discv5/discV5_service.d.ts +13 -2
  195. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  196. package/dest/services/discv5/discV5_service.js +120 -24
  197. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  198. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  199. package/dest/services/discv5/persisted_enr_store.js +145 -0
  200. package/dest/services/dummy_service.d.ts +37 -17
  201. package/dest/services/dummy_service.d.ts.map +1 -1
  202. package/dest/services/dummy_service.js +59 -15
  203. package/dest/services/encoding.d.ts +24 -7
  204. package/dest/services/encoding.d.ts.map +1 -1
  205. package/dest/services/encoding.js +43 -26
  206. package/dest/services/gossipsub/index.d.ts +3 -0
  207. package/dest/services/gossipsub/index.d.ts.map +1 -0
  208. package/dest/services/gossipsub/index.js +2 -0
  209. package/dest/services/gossipsub/scoring.d.ts +21 -3
  210. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  211. package/dest/services/gossipsub/scoring.js +24 -7
  212. package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
  213. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  214. package/dest/services/gossipsub/topic_score_params.js +336 -0
  215. package/dest/services/index.d.ts +2 -1
  216. package/dest/services/index.d.ts.map +1 -1
  217. package/dest/services/index.js +1 -0
  218. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  219. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  220. package/dest/services/libp2p/instrumentation.js +28 -3
  221. package/dest/services/libp2p/libp2p_service.d.ts +116 -60
  222. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  223. package/dest/services/libp2p/libp2p_service.js +800 -586
  224. package/dest/services/peer-manager/metrics.d.ts +4 -2
  225. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  226. package/dest/services/peer-manager/metrics.js +26 -5
  227. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  228. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  229. package/dest/services/peer-manager/peer_manager.js +83 -26
  230. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  231. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  232. package/dest/services/peer-manager/peer_scoring.js +135 -17
  233. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -0
  234. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  235. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +534 -0
  236. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  237. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  238. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  239. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  240. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  241. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  242. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  243. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  244. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  245. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  246. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  247. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  248. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  249. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  250. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  251. package/dest/services/reqresp/config.d.ts +15 -3
  252. package/dest/services/reqresp/config.d.ts.map +1 -1
  253. package/dest/services/reqresp/config.js +11 -0
  254. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  255. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  256. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  257. package/dest/services/reqresp/interface.d.ts +27 -18
  258. package/dest/services/reqresp/interface.d.ts.map +1 -1
  259. package/dest/services/reqresp/interface.js +23 -19
  260. package/dest/services/reqresp/metrics.d.ts +6 -5
  261. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  262. package/dest/services/reqresp/metrics.js +16 -5
  263. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +8 -3
  264. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  265. package/dest/services/reqresp/protocols/block_txs/bitvector.js +8 -2
  266. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  267. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  268. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +35 -14
  269. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +36 -8
  270. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  271. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +84 -20
  272. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  273. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  274. package/dest/services/reqresp/protocols/index.js +0 -1
  275. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  276. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  277. package/dest/services/reqresp/protocols/tx.js +21 -3
  278. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  279. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  280. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  281. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  282. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  283. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  284. package/dest/services/reqresp/reqresp.d.ts +12 -29
  285. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  286. package/dest/services/reqresp/reqresp.js +90 -188
  287. package/dest/services/service.d.ts +65 -13
  288. package/dest/services/service.d.ts.map +1 -1
  289. package/dest/services/tx_collection/config.d.ts +11 -11
  290. package/dest/services/tx_collection/config.d.ts.map +1 -1
  291. package/dest/services/tx_collection/config.js +27 -26
  292. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  293. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  294. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  295. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  296. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  297. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  298. package/dest/services/tx_collection/index.d.ts +3 -2
  299. package/dest/services/tx_collection/index.d.ts.map +1 -1
  300. package/dest/services/tx_collection/index.js +1 -0
  301. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  302. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  303. package/dest/services/tx_collection/instrumentation.js +8 -2
  304. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  305. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  306. package/dest/services/tx_collection/request_tracker.js +84 -0
  307. package/dest/services/tx_collection/tx_collection.d.ts +50 -56
  308. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  309. package/dest/services/tx_collection/tx_collection.js +298 -70
  310. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  311. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  312. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  313. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  314. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  315. package/dest/services/tx_collection/tx_source.js +29 -7
  316. package/dest/services/tx_file_store/config.d.ts +16 -0
  317. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  318. package/dest/services/tx_file_store/config.js +22 -0
  319. package/dest/services/tx_file_store/index.d.ts +4 -0
  320. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  321. package/dest/services/tx_file_store/index.js +3 -0
  322. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  323. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  324. package/dest/services/tx_file_store/instrumentation.js +29 -0
  325. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  326. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  327. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  328. package/dest/services/tx_provider.d.ts +8 -6
  329. package/dest/services/tx_provider.d.ts.map +1 -1
  330. package/dest/services/tx_provider.js +12 -8
  331. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  332. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  333. package/dest/services/tx_provider_instrumentation.js +5 -5
  334. package/dest/test-helpers/index.d.ts +3 -1
  335. package/dest/test-helpers/index.d.ts.map +1 -1
  336. package/dest/test-helpers/index.js +2 -0
  337. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  338. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  339. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  340. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  341. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  342. package/dest/test-helpers/mock-pubsub.js +115 -14
  343. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  344. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  345. package/dest/test-helpers/reqresp-nodes.js +19 -20
  346. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  347. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  348. package/dest/test-helpers/test_tx_provider.js +44 -0
  349. package/dest/test-helpers/testbench-utils.d.ts +164 -0
  350. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  351. package/dest/test-helpers/testbench-utils.js +400 -0
  352. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
  353. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  354. package/dest/testbench/p2p_client_testbench_worker.js +284 -139
  355. package/dest/testbench/worker_client_manager.d.ts +57 -6
  356. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  357. package/dest/testbench/worker_client_manager.js +277 -49
  358. package/dest/util.d.ts +13 -8
  359. package/dest/util.d.ts.map +1 -1
  360. package/dest/util.js +35 -14
  361. package/dest/versioning.d.ts +3 -6
  362. package/dest/versioning.d.ts.map +1 -1
  363. package/dest/versioning.js +3 -24
  364. package/package.json +16 -16
  365. package/src/bootstrap/bootstrap.ts +24 -7
  366. package/src/client/factory.ts +139 -39
  367. package/src/client/interface.ts +97 -48
  368. package/src/client/p2p_client.ts +291 -312
  369. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  370. package/src/config.ts +287 -49
  371. package/src/errors/p2p-service.error.ts +11 -0
  372. package/src/errors/reqresp.error.ts +13 -19
  373. package/src/errors/tx-pool.error.ts +12 -0
  374. package/src/index.ts +1 -1
  375. package/src/mem_pools/attestation_pool/attestation_pool.ts +585 -94
  376. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +656 -141
  377. package/src/mem_pools/attestation_pool/index.ts +9 -2
  378. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  379. package/src/mem_pools/index.ts +2 -2
  380. package/src/mem_pools/instrumentation.ts +29 -18
  381. package/src/mem_pools/interface.ts +4 -4
  382. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  383. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  384. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  385. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  386. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  387. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  388. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  389. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  390. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  391. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  392. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  393. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  394. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  395. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  396. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  397. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  398. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  399. package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
  400. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  401. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  402. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +465 -0
  403. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +252 -0
  404. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1215 -0
  405. package/src/msg_validators/attestation_validator/README.md +49 -0
  406. package/src/msg_validators/attestation_validator/attestation_validator.ts +60 -16
  407. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +30 -16
  408. package/src/msg_validators/proposal_validator/README.md +123 -0
  409. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
  410. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
  411. package/src/msg_validators/proposal_validator/proposal_validator.ts +163 -50
  412. package/src/msg_validators/tx_validator/README.md +129 -0
  413. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  414. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  415. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  416. package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
  417. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  418. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  419. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  420. package/src/msg_validators/tx_validator/data_validator.ts +50 -3
  421. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  422. package/src/msg_validators/tx_validator/factory.ts +430 -56
  423. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  424. package/src/msg_validators/tx_validator/gas_validator.ts +198 -51
  425. package/src/msg_validators/tx_validator/index.ts +4 -0
  426. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  427. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  428. package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
  429. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  430. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  431. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  432. package/src/msg_validators/tx_validator/tx_proof_validator.ts +10 -3
  433. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  434. package/src/services/data_store.ts +14 -19
  435. package/src/services/discv5/discV5_service.ts +127 -15
  436. package/src/services/discv5/persisted_enr_store.ts +158 -0
  437. package/src/services/dummy_service.ts +77 -39
  438. package/src/services/encoding.ts +42 -26
  439. package/src/services/gossipsub/README.md +663 -0
  440. package/src/services/gossipsub/index.ts +2 -0
  441. package/src/services/gossipsub/scoring.ts +29 -5
  442. package/src/services/gossipsub/topic_score_params.ts +478 -0
  443. package/src/services/index.ts +1 -0
  444. package/src/services/libp2p/instrumentation.ts +29 -2
  445. package/src/services/libp2p/libp2p_service.ts +893 -648
  446. package/src/services/peer-manager/metrics.ts +28 -4
  447. package/src/services/peer-manager/peer_manager.ts +91 -25
  448. package/src/services/peer-manager/peer_scoring.ts +131 -9
  449. package/src/services/reqresp/README.md +194 -0
  450. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  451. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +660 -0
  452. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  453. package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
  454. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  455. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  456. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  457. package/src/services/reqresp/config.ts +19 -2
  458. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  459. package/src/services/reqresp/interface.ts +48 -46
  460. package/src/services/reqresp/metrics.ts +33 -9
  461. package/src/services/reqresp/protocols/block_txs/bitvector.ts +10 -2
  462. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +44 -17
  463. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +108 -16
  464. package/src/services/reqresp/protocols/index.ts +0 -1
  465. package/src/services/reqresp/protocols/tx.ts +23 -3
  466. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  467. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  468. package/src/services/reqresp/reqresp.ts +107 -223
  469. package/src/services/service.ts +85 -29
  470. package/src/services/tx_collection/config.ts +41 -36
  471. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  472. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  473. package/src/services/tx_collection/index.ts +2 -1
  474. package/src/services/tx_collection/instrumentation.ts +11 -2
  475. package/src/services/tx_collection/request_tracker.ts +127 -0
  476. package/src/services/tx_collection/tx_collection.ts +367 -115
  477. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  478. package/src/services/tx_collection/tx_source.ts +29 -8
  479. package/src/services/tx_file_store/config.ts +37 -0
  480. package/src/services/tx_file_store/index.ts +3 -0
  481. package/src/services/tx_file_store/instrumentation.ts +36 -0
  482. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  483. package/src/services/tx_provider.ts +17 -11
  484. package/src/services/tx_provider_instrumentation.ts +11 -5
  485. package/src/test-helpers/index.ts +2 -0
  486. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  487. package/src/test-helpers/mock-pubsub.ts +137 -14
  488. package/src/test-helpers/reqresp-nodes.ts +17 -29
  489. package/src/test-helpers/test_tx_provider.ts +69 -0
  490. package/src/test-helpers/testbench-utils.ts +465 -0
  491. package/src/testbench/p2p_client_testbench_worker.ts +389 -133
  492. package/src/testbench/worker_client_manager.ts +355 -51
  493. package/src/util.ts +40 -19
  494. package/src/versioning.ts +3 -33
  495. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  496. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  497. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  498. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  499. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  500. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  501. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  502. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  503. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  504. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -31
  505. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  506. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  507. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -156
  508. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  509. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  510. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  511. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  512. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -115
  513. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  514. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  515. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  516. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  517. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -76
  518. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  519. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  520. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  521. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  522. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  523. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  524. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  525. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  526. package/dest/mem_pools/tx_pool/index.js +0 -2
  527. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  528. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  529. package/dest/mem_pools/tx_pool/priority.js +0 -15
  530. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  531. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  532. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  533. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  534. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  535. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  536. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  537. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  538. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -157
  539. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
  540. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  541. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
  542. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  543. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  544. package/dest/services/reqresp/protocols/block.js +0 -32
  545. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  546. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  547. package/dest/services/tx_collection/fast_tx_collection.js +0 -300
  548. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  549. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  550. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  551. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  552. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  553. package/src/mem_pools/tx_pool/README.md +0 -270
  554. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  555. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -131
  556. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -207
  557. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -159
  558. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  559. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -91
  560. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  561. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  562. package/src/mem_pools/tx_pool/index.ts +0 -2
  563. package/src/mem_pools/tx_pool/priority.ts +0 -20
  564. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  565. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  566. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -191
  567. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
  568. package/src/services/reqresp/protocols/block.ts +0 -37
  569. package/src/services/tx_collection/fast_tx_collection.ts +0 -341
  570. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -1,119 +1,58 @@
1
1
  /**
2
2
  * A testbench worker that creates a p2p client and listens for commands from the parent.
3
3
  *
4
- * Used when running testbench commands
4
+ * Used when running testbench commands.
5
5
  */ import { MockL2BlockSource } from '@aztec/archiver/test';
6
- import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
6
+ import { BlockNumber } from '@aztec/foundation/branded-types';
7
7
  import { SecretValue } from '@aztec/foundation/config';
8
+ import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
9
+ import { Fr } from '@aztec/foundation/curves/bn254';
8
10
  import { createLogger } from '@aztec/foundation/log';
9
11
  import { sleep } from '@aztec/foundation/sleep';
12
+ import { DateProvider, Timer } from '@aztec/foundation/timer';
10
13
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
11
- import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
12
- import { Tx, TxStatus } from '@aztec/stdlib/tx';
14
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
15
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
16
+ import { EmptyL1RollupConstants } from '@aztec/stdlib/epoch-helpers';
17
+ import { GasFees } from '@aztec/stdlib/gas';
18
+ import { P2PMessage } from '@aztec/stdlib/p2p';
19
+ import { ChonkProof } from '@aztec/stdlib/proofs';
20
+ import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
21
+ import { Tx } from '@aztec/stdlib/tx';
13
22
  import { getTelemetryClient } from '@aztec/telemetry-client';
14
23
  import { TopicValidatorResult } from '@libp2p/interface';
15
- import EventEmitter from 'events';
24
+ import { peerIdFromString } from '@libp2p/peer-id';
16
25
  import { createP2PClient } from '../index.js';
17
- import { LibP2PService } from '../services/libp2p/libp2p_service.js';
18
- import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
19
- // Simple mock implementation
20
- function mockTxPool() {
21
- // Mock all methods
22
- const pool = {
23
- isEmpty: ()=>Promise.resolve(false),
24
- addTxs: ()=>Promise.resolve(1),
25
- getTxByHash: ()=>Promise.resolve(undefined),
26
- getArchivedTxByHash: ()=>Promise.resolve(undefined),
27
- markAsMined: ()=>Promise.resolve(),
28
- markMinedAsPending: ()=>Promise.resolve(),
29
- deleteTxs: ()=>Promise.resolve(),
30
- getAllTxs: ()=>Promise.resolve([]),
31
- getAllTxHashes: ()=>Promise.resolve([]),
32
- getPendingTxHashes: ()=>Promise.resolve([]),
33
- getPendingTxCount: ()=>Promise.resolve(0),
34
- getMinedTxHashes: ()=>Promise.resolve([]),
35
- getTxStatus: ()=>Promise.resolve(TxStatus.PENDING),
36
- getTxsByHash: ()=>Promise.resolve([]),
37
- hasTxs: ()=>Promise.resolve([]),
38
- hasTx: ()=>Promise.resolve(false),
39
- updateConfig: ()=>{},
40
- markTxsAsNonEvictable: ()=>Promise.resolve(),
41
- clearNonEvictableTxs: ()=>Promise.resolve(),
42
- cleanupDeletedMinedTxs: ()=>Promise.resolve(0)
43
- };
44
- return Object.assign(new EventEmitter(), pool);
45
- }
46
- function mockAttestationPool() {
47
- return {
48
- isEmpty: ()=>Promise.resolve(false),
49
- addBlockProposal: ()=>Promise.resolve(),
50
- getBlockProposal: ()=>Promise.resolve(undefined),
51
- hasBlockProposal: ()=>Promise.resolve(false),
52
- canAddProposal: ()=>Promise.resolve(true),
53
- // Checkpoint attestation methods
54
- addCheckpointProposal: ()=>Promise.resolve(),
55
- getCheckpointProposal: ()=>Promise.resolve(undefined),
56
- hasCheckpointProposal: ()=>Promise.resolve(false),
57
- addCheckpointAttestations: ()=>Promise.resolve(),
58
- getCheckpointAttestationsForSlot: ()=>Promise.resolve([]),
59
- getCheckpointAttestationsForSlotAndProposal: ()=>Promise.resolve([]),
60
- deleteCheckpointAttestationsOlderThan: ()=>Promise.resolve(),
61
- hasReachedCheckpointProposalCap: ()=>Promise.resolve(false),
62
- hasReachedCheckpointAttestationCap: ()=>Promise.resolve(false),
63
- canAddCheckpointProposal: ()=>Promise.resolve(true),
64
- canAddCheckpointAttestation: ()=>Promise.resolve(true),
65
- hasCheckpointAttestation: ()=>Promise.resolve(false)
66
- };
67
- }
68
- function mockEpochCache() {
69
- return {
70
- getCommittee: ()=>Promise.resolve({
71
- committee: [],
72
- seed: 1n,
73
- epoch: EpochNumber.ZERO,
74
- isEscapeHatchOpen: false
75
- }),
76
- getProposerIndexEncoding: ()=>'0x',
77
- getEpochAndSlotNow: ()=>({
78
- epoch: EpochNumber.ZERO,
79
- slot: SlotNumber.ZERO,
80
- ts: 0n
81
- }),
82
- computeProposerIndex: ()=>0n,
83
- getCurrentAndNextSlot: ()=>({
84
- currentSlot: SlotNumber.ZERO,
85
- nextSlot: SlotNumber.ZERO
86
- }),
87
- getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
88
- getEpochAndSlotInNextL1Slot: ()=>({
89
- epoch: EpochNumber.ZERO,
90
- slot: SlotNumber.ZERO,
91
- ts: 0n,
92
- now: 0n
93
- }),
94
- isInCommittee: ()=>Promise.resolve(false),
95
- getRegisteredValidators: ()=>Promise.resolve([]),
96
- filterInCommittee: ()=>Promise.resolve([])
97
- };
26
+ import { LibP2PService } from '../services/index.js';
27
+ import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
28
+ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
29
+ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
30
+ import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
31
+ import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, createMockEpochCache, createMockWorldStateSynchronizer, filterTxsByDistribution } from '../test-helpers/index.js';
32
+ const txCache = new Map();
33
+ const BENCH_L1_CONSTANTS = {
34
+ ...EmptyL1RollupConstants,
35
+ slotDuration: 12,
36
+ ethereumSlotDuration: 4
37
+ };
38
+ class TestbenchL2BlockSource extends MockL2BlockSource {
39
+ getL1Constants() {
40
+ return Promise.resolve(BENCH_L1_CONSTANTS);
41
+ }
98
42
  }
99
- function mockWorldStateSynchronizer() {
43
+ function createBenchmarkEpochCache() {
100
44
  return {
101
- status: ()=>Promise.resolve({
102
- syncSummary: {
103
- latestBlockNumber: 0,
104
- latestBlockHash: '',
105
- finalizedBlockNumber: 0,
106
- treesAreSynched: false,
107
- oldestHistoricBlockNumber: 0
108
- }
109
- })
45
+ ...createMockEpochCache(),
46
+ getL1Constants: ()=>BENCH_L1_CONSTANTS
110
47
  };
111
48
  }
112
49
  class TestLibP2PService extends LibP2PService {
113
50
  disableTxValidation;
114
51
  gossipMessageCount = 0;
115
- constructor(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:test:libp2p_service'), disableTxValidation = true){
116
- super(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger);
52
+ constructor(config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:test:libp2p_service'), disableTxValidation = true){
53
+ super(config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, {
54
+ getCurrentMinFees: ()=>Promise.resolve(GasFees.empty())
55
+ }, telemetry, logger);
117
56
  this.disableTxValidation = disableTxValidation;
118
57
  }
119
58
  getGossipMessageCount() {
@@ -130,7 +69,7 @@ class TestLibP2PService extends LibP2PService {
130
69
  const txHash = tx.getTxHash();
131
70
  const txHashString = txHash.toString();
132
71
  this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
133
- await this.mempools.txPool.addTxs([
72
+ await this.mempools.txPool.addPendingTxs([
134
73
  tx
135
74
  ]);
136
75
  } else {
@@ -146,74 +85,280 @@ class TestLibP2PService extends LibP2PService {
146
85
  await super.handleNewGossipMessage(msg, msgId, source);
147
86
  }
148
87
  }
88
+ async function generateDeterministicTxs(txCount, seed, config) {
89
+ const cached = txCache.get(seed) ?? [];
90
+ if (cached.length >= txCount) {
91
+ return cached.slice(0, txCount);
92
+ }
93
+ const expirationTimestampBase = BigInt(seed);
94
+ for(let i = cached.length; i < txCount; i++){
95
+ const txSeed = seed * 10000 + i;
96
+ const tx = await mockTx(txSeed, {
97
+ chainId: new Fr(config.l1ChainId),
98
+ version: new Fr(config.rollupVersion),
99
+ vkTreeRoot: getVKTreeRoot(),
100
+ protocolContractsHash,
101
+ feePayer: makeAztecAddress(txSeed + 1),
102
+ chonkProof: ChonkProof.empty(),
103
+ numberOfNonRevertiblePublicCallRequests: 0,
104
+ numberOfRevertiblePublicCallRequests: 0,
105
+ numberOfRevertibleNullifiers: 0,
106
+ hasPublicTeardownCallRequest: false,
107
+ publicCalldataSize: 0
108
+ });
109
+ tx.data.expirationTimestamp = expirationTimestampBase + BigInt(i);
110
+ await tx.recomputeHash();
111
+ cached.push(tx);
112
+ }
113
+ txCache.set(seed, cached);
114
+ return cached.slice(0, txCount);
115
+ }
116
+ async function createBlockProposal(blockNumber, txHashes, seed) {
117
+ const archiveRoot = new Fr(BigInt(seed) * 1000000n + BigInt(blockNumber));
118
+ return await makeBlockProposal({
119
+ signer: Secp256k1Signer.random(),
120
+ blockHeader: makeBlockHeader(1, {
121
+ blockNumber: BlockNumber(blockNumber)
122
+ }),
123
+ archiveRoot,
124
+ txHashes
125
+ });
126
+ }
127
+ function installUnlimitedRateLimits(client) {
128
+ const reqResp = client.p2pService.reqresp;
129
+ const rateLimiter = reqResp.rateLimiter;
130
+ rateLimiter.getRateLimits = ()=>UNLIMITED_RATE_LIMIT_QUOTA;
131
+ rateLimiter.allow = ()=>RateLimitStatus.Allowed;
132
+ }
133
+ /** Resets peer scores to prevent cross-case contamination in benchmarks. */ function resetPeerScores(client) {
134
+ const peerManager = client.p2pService.peerManager;
135
+ const peerScoring = peerManager?.peerScoring;
136
+ if (peerScoring?.resetAllScores) {
137
+ peerScoring.resetAllScores();
138
+ }
139
+ }
140
+ /** Returns the number of connected peers for connectivity checks. */ function getConnectedPeerCount(client) {
141
+ const p2pService = client.p2pService;
142
+ const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
143
+ if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
144
+ return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
145
+ }
146
+ return 0;
147
+ }
148
+ async function runAggregatorBenchmark(client, blockProposal, timeoutMs, pinnedPeerId, pinnedPeerIndex, logger, expectedPeerCount) {
149
+ let timer = new Timer();
150
+ try {
151
+ installUnlimitedRateLimits(client);
152
+ const txHashes = blockProposal.txHashes;
153
+ logger.info(`[BENCH] Using block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
154
+ const p2pService = client.p2pService;
155
+ const batchTxRequesterService = p2pService.getBatchTxRequesterService();
156
+ const minPeersRequired = Math.max(1, expectedPeerCount - 1);
157
+ const maxWaitMs = BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS;
158
+ const waitInterval = BENCHMARK_CONSTANTS.PEER_CHECK_INTERVAL_MS;
159
+ let waited = 0;
160
+ while(waited < maxWaitMs){
161
+ const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
162
+ if (connectedPeers.length >= minPeersRequired) {
163
+ logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers, starting benchmark`);
164
+ break;
165
+ }
166
+ logger.debug(`[BENCH] Waiting for peers: ${connectedPeers.length}/${minPeersRequired} (waited ${waited}ms)`);
167
+ await sleep(waitInterval);
168
+ waited += waitInterval;
169
+ }
170
+ const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
171
+ logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers`);
172
+ logger.info(`[BENCH] Requesting ${txHashes.length} tx hashes: ${txHashes.slice(0, 3).map((h)=>h.toString()).join(', ')}...`);
173
+ let pinnedPeer;
174
+ if (pinnedPeerId) {
175
+ pinnedPeer = peerIdFromString(pinnedPeerId);
176
+ } else if (pinnedPeerIndex !== undefined) {
177
+ if (pinnedPeerIndex > 0 && pinnedPeerIndex <= connectedPeers.length) {
178
+ pinnedPeer = connectedPeers[pinnedPeerIndex - 1];
179
+ }
180
+ }
181
+ const noopTxValidator = {
182
+ validateTx: (_tx)=>Promise.resolve({
183
+ result: 'valid'
184
+ })
185
+ };
186
+ timer = new Timer();
187
+ const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
188
+ const batchRequester = new BatchTxRequester(tracker, blockProposal, pinnedPeer, batchTxRequesterService, logger, new DateProvider(), {
189
+ txValidator: noopTxValidator
190
+ });
191
+ const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
192
+ const durationMs = timer.ms();
193
+ return {
194
+ type: 'BENCH_RESULT',
195
+ durationMs,
196
+ fetchedCount: fetchedTxs.length,
197
+ success: fetchedTxs.length === txHashes.length
198
+ };
199
+ } catch (err) {
200
+ return {
201
+ type: 'BENCH_RESULT',
202
+ durationMs: timer.ms(),
203
+ fetchedCount: 0,
204
+ success: false,
205
+ error: err?.message ?? String(err)
206
+ };
207
+ }
208
+ }
209
+ let workerClient = null;
210
+ let workerTxPool = null;
211
+ let workerAttestationPool = null;
212
+ let workerConfig = null;
213
+ let workerLogger = null;
214
+ let kvStore = null;
215
+ async function stopWorker() {
216
+ try {
217
+ if (workerClient) {
218
+ await workerClient.stop();
219
+ workerClient = null;
220
+ }
221
+ } catch (e) {
222
+ workerLogger?.error('Error stopping worker client', e);
223
+ }
224
+ try {
225
+ if (kvStore?.close) {
226
+ await kvStore.close();
227
+ kvStore = null;
228
+ }
229
+ } catch (e) {
230
+ workerLogger?.error('Error closing kv store', e);
231
+ }
232
+ }
233
+ function gracefulExit(code = 0) {
234
+ try {
235
+ if (process.connected) {
236
+ process.disconnect();
237
+ }
238
+ } catch {
239
+ // IPC channel already closed
240
+ }
241
+ // Safety fallback if lingering handles prevent the event loop from draining
242
+ setTimeout(()=>process.exit(code), 5000).unref();
243
+ }
149
244
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
150
245
  process.on('message', async (msg)=>{
151
- // Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
152
- // SecretValue's private fields can't be serialized via IPC
153
246
  const { type, config: rawConfig, clientIndex } = msg;
154
247
  try {
155
248
  if (type === 'START') {
156
- // Re-wrap the peerIdPrivateKey with SecretValue
157
249
  const config = {
158
250
  ...rawConfig,
159
- peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined
251
+ peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
252
+ priceBumpPercentage: 10n
160
253
  };
161
- const txPool = mockTxPool();
162
- const attestationPool = mockAttestationPool();
163
- const epochCache = mockEpochCache();
164
- const worldState = mockWorldStateSynchronizer();
165
- const l2BlockSource = new MockL2BlockSource();
254
+ workerConfig = config;
255
+ workerTxPool = new InMemoryTxPool();
256
+ workerAttestationPool = new InMemoryAttestationPool();
257
+ const epochCache = createBenchmarkEpochCache();
258
+ const worldState = createMockWorldStateSynchronizer();
259
+ const l2BlockSource = new TestbenchL2BlockSource();
166
260
  const proofVerifier = new AlwaysTrueCircuitVerifier();
167
- const kvStore = await openTmpStore(`test-${clientIndex}`);
168
- const logger = createLogger(`p2p:${clientIndex}`);
261
+ kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
262
+ workerLogger = createLogger(`p2p:${clientIndex}`);
263
+ workerTxPool.setLogger(workerLogger);
169
264
  const telemetry = getTelemetryClient();
170
265
  const deps = {
171
- txPool,
172
- attestationPool,
266
+ txPool: workerTxPool,
267
+ attestationPool: workerAttestationPool,
173
268
  store: kvStore,
174
- logger
269
+ logger: workerLogger
175
270
  };
176
- const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
177
- // Create test service with validation disabled
178
- // Note: Parameter order must match LibP2PService constructor
179
- const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, logger, true);
180
- // Replace the existing p2pService with our test version
271
+ const client = await createP2PClient(config, l2BlockSource, proofVerifier, worldState, epochCache, {
272
+ getCurrentMinFees: ()=>Promise.resolve(GasFees.empty())
273
+ }, 'test-p2p-bench-worker', undefined, telemetry, deps, await l2BlockSource.getInitialHeader().hash());
274
+ const testService = new TestLibP2PService(config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, workerLogger, true);
181
275
  client.p2pService = testService;
182
276
  await client.start();
183
- // Wait until the client is ready
184
277
  for(let i = 0; i < 100; i++){
185
278
  const isReady = client.isReady();
186
- logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
279
+ workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
187
280
  if (isReady) {
188
281
  break;
189
282
  }
190
283
  await sleep(1000);
191
284
  }
192
- // Listen for commands from parent
193
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
194
- process.on('message', async (cmd)=>{
195
- switch(cmd.type){
196
- case 'STOP':
197
- await client.stop();
198
- process.exit(0);
199
- break;
200
- case 'SEND_TX':
201
- await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
285
+ workerClient = client;
286
+ const peerId = client.p2pService.node.peerId.toString();
287
+ process.send({
288
+ type: 'READY',
289
+ peerId
290
+ });
291
+ return;
292
+ }
293
+ const cmd = msg;
294
+ switch(cmd.type){
295
+ case 'STOP':
296
+ await stopWorker();
297
+ gracefulExit(0);
298
+ break;
299
+ case 'SEND_TX':
300
+ if (workerClient) {
301
+ await workerClient.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
302
+ process.send({
303
+ type: 'TX_SENT'
304
+ });
305
+ }
306
+ break;
307
+ case 'GET_PEER_COUNT':
308
+ process.send({
309
+ type: 'PEER_COUNT',
310
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0
311
+ });
312
+ break;
313
+ case 'BENCH_REQRESP':
314
+ {
315
+ const benchCmd = cmd;
316
+ if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
202
317
  process.send({
203
- type: 'TX_SENT'
318
+ type: 'BENCH_RESULT',
319
+ durationMs: 0,
320
+ fetchedCount: 0,
321
+ success: false,
322
+ error: 'Worker not initialized'
204
323
  });
205
324
  break;
325
+ }
326
+ // Reset state before each benchmark run to avoid cross-run contamination
327
+ workerTxPool.resetState();
328
+ workerAttestationPool.resetState();
329
+ resetPeerScores(workerClient);
330
+ installUnlimitedRateLimits(workerClient);
331
+ const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
332
+ const txHashes = allTxs.map((tx)=>tx.getTxHash());
333
+ const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
334
+ await workerAttestationPool.tryAddBlockProposal(blockProposal);
335
+ workerLogger.debug(`[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
336
+ if (benchCmd.isAggregator) {
337
+ workerTxPool.clearTxs();
338
+ workerLogger.info(`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`);
339
+ const result = await runAggregatorBenchmark(workerClient, blockProposal, benchCmd.timeoutMs, benchCmd.pinnedPeerId, benchCmd.pinnedPeerIndex, workerLogger, benchCmd.peerCount);
340
+ process.send(result);
341
+ } else {
342
+ const myTxs = filterTxsByDistribution(allTxs, benchCmd.peerIndex, benchCmd.peerCount, benchCmd.distribution, benchCmd.pinnedPeerIndex);
343
+ workerTxPool.setTxs(myTxs);
344
+ workerLogger.info(`[BENCH] Peer ${benchCmd.peerIndex} populated tx pool with ${myTxs.length}/${benchCmd.txCount} txs (${benchCmd.distribution})`);
345
+ process.send({
346
+ type: 'BENCH_READY'
347
+ });
348
+ }
349
+ break;
206
350
  }
207
- });
351
+ }
352
+ } catch (err) {
353
+ try {
208
354
  process.send({
209
- type: 'READY'
355
+ type: 'ERROR',
356
+ error: err.message
210
357
  });
358
+ } catch {
359
+ // IPC channel may be closed
211
360
  }
212
- } catch (err) {
213
- process.send({
214
- type: 'ERROR',
215
- error: err.message
216
- });
217
- process.exit(1);
361
+ await stopWorker();
362
+ gracefulExit(1);
218
363
  }
219
364
  });
@@ -2,33 +2,63 @@ import type { Logger } from '@aztec/foundation/log';
2
2
  import type { ChainConfig } from '@aztec/stdlib/config';
3
3
  import { type ChildProcess } from 'child_process';
4
4
  import { type P2PConfig } from '../config.js';
5
+ import type { DistributionPattern } from './p2p_client_testbench_worker.js';
5
6
  declare const testChainConfig: ChainConfig;
7
+ export interface ReqRespBenchmarkConfig {
8
+ txCount: number;
9
+ distribution: DistributionPattern;
10
+ timeoutMs: number;
11
+ pinnedPeerIndex?: number;
12
+ blockNumber?: number;
13
+ seed?: number;
14
+ }
15
+ export interface ReqRespBenchmarkResult {
16
+ txCount: number;
17
+ distribution: DistributionPattern;
18
+ durationMs: number;
19
+ fetchedCount: number;
20
+ success: boolean;
21
+ error?: string;
22
+ }
6
23
  declare class WorkerClientManager {
7
24
  processes: ChildProcess[];
8
25
  peerIdPrivateKeys: string[];
9
26
  peerEnrs: string[];
10
27
  ports: number[];
28
+ peerIds: string[];
11
29
  private p2pConfig;
12
30
  private logger;
13
31
  private messageReceivedByClient;
14
32
  constructor(logger: Logger, p2pConfig: Partial<P2PConfig>);
15
33
  destroy(): void;
16
34
  /**
17
- * Creates a client configuration object
35
+ * Creates a client configuration object for IPC.
36
+ * Note: We send the raw peerIdPrivateKey string instead of SecretValue
37
+ * because SecretValue.toJSON() returns '[Redacted]', losing the value.
38
+ * The worker must re-wrap it in SecretValue.
39
+ * We also omit priceBumpPercentage since it's a bigint and can't be
40
+ * serialized over IPC (which uses JSON under the hood).
18
41
  */
19
42
  private createClientConfig;
20
43
  /**
21
- * Spawns a worker process and returns a promise that resolves when the worker is ready
44
+ * Spawns a worker process and returns a promise that resolves when the worker is ready.
45
+ * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
22
46
  */
23
47
  private spawnWorkerProcess;
24
48
  /**
25
- * Creates a number of worker clients in separate processes
26
- * All are configured to connect to each other and overrided with the test specific config
49
+ * Creates a number of worker clients in separate processes.
50
+ * All are configured to connect to each other and overridden with the test-specific config.
27
51
  *
28
52
  * @param numberOfClients - The number of clients to create
53
+ * @param options - Optional overrides for seeding/bootstrapping strategy
29
54
  * @returns The ENRs of the created clients
30
55
  */
31
- makeWorkerClients(numberOfClients: number): Promise<string[]>;
56
+ makeWorkerClients(numberOfClients: number, options?: {
57
+ bootstrapMode?: 'subset' | 'all';
58
+ seedPeerLimit?: number;
59
+ batchSize?: number;
60
+ batchDelayMs?: number;
61
+ }): Promise<string[]>;
32
62
  purgeMessageReceivedByClient(): void;
33
63
  numberOfClientsThatReceivedMessage(): number;
34
64
  /**
@@ -46,6 +76,27 @@ declare class WorkerClientManager {
46
76
  * Cleans up all worker processes with timeout and force kill if needed
47
77
  */
48
78
  cleanup(): Promise<void>;
79
+ /**
80
+ * Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
81
+ * This prevents benchmark cases from starting with degraded connectivity after a previous case
82
+ * caused connection failures.
83
+ */
84
+ waitForConnectivity(minPeers: number, timeoutMs?: number): Promise<number>;
85
+ private getPeerCount;
86
+ /**
87
+ * Run a req/resp benchmark across all worker clients.
88
+ *
89
+ * This sends a BENCH_REQRESP command to all workers:
90
+ * - Aggregator (client 0) runs the collector and returns timing results
91
+ * - Responders (clients 1..N) populate their tx pools based on distribution
92
+ *
93
+ * All workers generate the same txs deterministically from a shared seed,
94
+ * then filter based on their peerIndex and distribution pattern.
95
+ */
96
+ runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult>;
97
+ private waitForBenchReady;
98
+ private waitForBenchResult;
49
99
  }
50
100
  export { WorkerClientManager, testChainConfig };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2NsaWVudF9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3dvcmtlcl9jbGllbnRfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFJeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF1QixNQUFNLGNBQWMsQ0FBQztBQVFuRSxRQUFBLE1BQU0sZUFBZSxFQUFFLFdBTXRCLENBQUM7QUFFRixjQUFNLG1CQUFtQjtJQUNoQixTQUFTLEVBQUUsWUFBWSxFQUFFLENBQU07SUFDL0IsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDakMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQ3hCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBTTtJQUM1QixPQUFPLENBQUMsU0FBUyxDQUFxQjtJQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFTO0lBQ3ZCLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBZ0I7SUFFL0MsWUFBWSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBR3hEO0lBRUQsT0FBTyxTQUtOO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsa0JBQWtCO0lBaUIxQjs7T0FFRztJQUNILE9BQU8sQ0FBQyxrQkFBa0I7SUF5RDFCOzs7Ozs7T0FNRztJQUNHLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxNQUFNLHFCQXlDOUM7SUFFRCw0QkFBNEIsU0FFM0I7SUFFRCxrQ0FBa0MsV0FFakM7SUFFRDs7Ozs7T0FLRztJQUNHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQTRDcEQ7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxnQkFBZ0I7SUFzQ3hCOztPQUVHO0lBQ0csT0FBTyxrQkFnQ1o7Q0FDRjtBQUVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsQ0FBQyJ9
101
+ export type { DistributionPattern } from './p2p_client_testbench_worker.js';
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2NsaWVudF9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3dvcmtlcl9jbGllbnRfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFLeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF1QixNQUFNLGNBQWMsQ0FBQztBQUtuRSxPQUFPLEtBQUssRUFBMkMsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQVFySCxRQUFBLE1BQU0sZUFBZSxFQUFFLFdBSXRCLENBQUM7QUFFRixNQUFNLFdBQVcsc0JBQXNCO0lBQ3JDLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsWUFBWSxFQUFFLG1CQUFtQixDQUFDO0lBQ2xDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDZjtBQUVELE1BQU0sV0FBVyxzQkFBc0I7SUFDckMsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixZQUFZLEVBQUUsbUJBQW1CLENBQUM7SUFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFDakIsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2hCO0FBRUQsY0FBTSxtQkFBbUI7SUFDaEIsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFNO0lBQy9CLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQ2pDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBTTtJQUN4QixLQUFLLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDckIsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQzlCLE9BQU8sQ0FBQyxTQUFTLENBQXFCO0lBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLHVCQUF1QixDQUFnQjtJQUUvQyxZQUFZLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFHeEQ7SUFFRCxPQUFPLFNBSU47SUFFRDs7Ozs7OztPQU9HO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQW9CMUI7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQWtHMUI7Ozs7Ozs7T0FPRztJQUNHLGlCQUFpQixDQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixPQUFPLEdBQUU7UUFDUCxhQUFhLENBQUMsRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN2QixTQUFTLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDbkIsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ2xCLHFCQStEUDtJQUVELDRCQUE0QixTQUUzQjtJQUVELGtDQUFrQyxXQUVqQztJQUVEOzs7OztPQUtHO0lBQ0csVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBOENwRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLGdCQUFnQjtJQXFDeEI7O09BRUc7SUFDRyxPQUFPLGtCQWdDWjtJQUVEOzs7O09BSUc7SUFDRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRSxNQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWtCdkY7SUFFRCxPQUFPLENBQUMsWUFBWTtJQThCcEI7Ozs7Ozs7OztPQVNHO0lBQ0csbUJBQW1CLENBQUMsTUFBTSxFQUFFLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQWtFekY7SUFFRCxPQUFPLENBQUMsaUJBQWlCO0lBa0N6QixPQUFPLENBQUMsa0JBQWtCO0NBaUMzQjtBQUVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsQ0FBQztBQUNoRCxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAQnE,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,YAAY,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAGxD;IAED,OAAO,SAKN;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyD1B;;;;;;OAMG;IACG,iBAAiB,CAAC,eAAe,EAAE,MAAM,qBAyC9C;IAED,4BAA4B,SAE3B;IAED,kCAAkC,WAEjC;IAED;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBA4CpD;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACG,OAAO,kBAgCZ;CACF;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAKxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAKnE,OAAO,KAAK,EAA2C,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAQrH,QAAA,MAAM,eAAe,EAAE,WAItB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,OAAO,EAAE,MAAM,EAAE,CAAM;IAC9B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,YAAY,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAGxD;IAED,OAAO,SAIN;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAkG1B;;;;;;;OAOG;IACG,iBAAiB,CACrB,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;QACjC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB,qBA+DP;IAED,4BAA4B,SAE3B;IAED,kCAAkC,WAEjC;IAED;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBA8CpD;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqCxB;;OAEG;IACG,OAAO,kBAgCZ;IAED;;;;OAIG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBvF;IAED,OAAO,CAAC,YAAY;IA8BpB;;;;;;;;;OASG;IACG,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAkEzF;IAED,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,kBAAkB;CAiC3B;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC"}