@aztec/p2p 0.0.1-commit.24de95ac → 0.0.1-commit.29c6b1a3

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 (430) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/client/factory.d.ts +2 -2
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +3 -4
  6. package/dest/client/index.d.ts +1 -1
  7. package/dest/client/interface.d.ts +18 -3
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +16 -37
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +464 -126
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  18. package/dest/config.d.ts +69 -60
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +23 -14
  21. package/dest/enr/generate-enr.d.ts +1 -1
  22. package/dest/enr/index.d.ts +1 -1
  23. package/dest/errors/attestation-pool.error.d.ts +7 -0
  24. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  25. package/dest/errors/attestation-pool.error.js +12 -0
  26. package/dest/errors/reqresp.error.d.ts +1 -1
  27. package/dest/errors/reqresp.error.d.ts.map +1 -1
  28. package/dest/index.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
  30. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  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 +241 -266
  34. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  35. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
  36. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
  38. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
  39. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  40. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
  41. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  42. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  43. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  44. package/dest/mem_pools/index.d.ts +1 -1
  45. package/dest/mem_pools/instrumentation.d.ts +9 -1
  46. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  47. package/dest/mem_pools/instrumentation.js +36 -9
  48. package/dest/mem_pools/interface.d.ts +3 -4
  49. package/dest/mem_pools/interface.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
  51. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  53. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  54. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  56. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  57. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  59. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  60. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  62. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  65. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  66. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  68. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  69. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  71. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  72. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  73. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  74. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  75. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool/index.js +0 -1
  77. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  78. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  79. package/dest/mem_pools/tx_pool/priority.js +6 -1
  80. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  81. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  82. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  83. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  84. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  85. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
  86. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
  88. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  89. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  90. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +71 -0
  91. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  92. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  93. package/dest/msg_validators/attestation_validator/index.js +1 -0
  94. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  95. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  96. package/dest/msg_validators/clock_tolerance.js +37 -0
  97. package/dest/msg_validators/index.d.ts +2 -2
  98. package/dest/msg_validators/index.d.ts.map +1 -1
  99. package/dest/msg_validators/index.js +1 -1
  100. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  101. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  102. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  103. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  104. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  105. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  106. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  107. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  108. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  109. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  110. package/dest/msg_validators/proposal_validator/index.js +3 -0
  111. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  112. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  113. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  114. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  115. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  116. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  117. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  118. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  120. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  121. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  123. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  124. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  125. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  126. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  127. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
  128. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/factory.d.ts +9 -4
  130. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/factory.js +12 -2
  132. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  133. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  134. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  135. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  136. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
  138. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  139. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/index.js +1 -0
  141. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  142. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
  144. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/phases_validator.js +3 -1
  146. package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
  147. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/size_validator.js +20 -0
  149. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  150. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  151. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  152. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +1 -1
  154. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  155. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  156. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  157. package/dest/services/data_store.d.ts +1 -1
  158. package/dest/services/data_store.d.ts.map +1 -1
  159. package/dest/services/discv5/discV5_service.d.ts +1 -1
  160. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  161. package/dest/services/dummy_service.d.ts +18 -2
  162. package/dest/services/dummy_service.d.ts.map +1 -1
  163. package/dest/services/dummy_service.js +42 -0
  164. package/dest/services/encoding.d.ts +1 -1
  165. package/dest/services/encoding.d.ts.map +1 -1
  166. package/dest/services/encoding.js +7 -6
  167. package/dest/services/gossipsub/scoring.d.ts +1 -1
  168. package/dest/services/index.d.ts +1 -1
  169. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  170. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  171. package/dest/services/libp2p/instrumentation.js +26 -72
  172. package/dest/services/libp2p/libp2p_service.d.ts +48 -81
  173. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  174. package/dest/services/libp2p/libp2p_service.js +921 -188
  175. package/dest/services/peer-manager/interface.d.ts +1 -1
  176. package/dest/services/peer-manager/metrics.d.ts +8 -1
  177. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  178. package/dest/services/peer-manager/metrics.js +24 -16
  179. package/dest/services/peer-manager/peer_manager.d.ts +2 -33
  180. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  181. package/dest/services/peer-manager/peer_manager.js +6 -12
  182. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  183. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  184. package/dest/services/peer-manager/peer_scoring.js +37 -2
  185. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  186. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  187. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  188. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  189. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  190. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  191. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  192. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  193. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  194. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  195. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  196. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  197. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  198. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  199. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  200. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  201. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  202. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  203. package/dest/services/reqresp/config.d.ts +1 -1
  204. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  205. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  206. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  207. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -4
  208. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  209. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  210. package/dest/services/reqresp/constants.d.ts +12 -0
  211. package/dest/services/reqresp/constants.d.ts.map +1 -0
  212. package/dest/services/reqresp/constants.js +7 -0
  213. package/dest/services/reqresp/index.d.ts +1 -1
  214. package/dest/services/reqresp/interface.d.ts +4 -2
  215. package/dest/services/reqresp/interface.d.ts.map +1 -1
  216. package/dest/services/reqresp/interface.js +1 -1
  217. package/dest/services/reqresp/metrics.d.ts +1 -1
  218. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  219. package/dest/services/reqresp/metrics.js +5 -21
  220. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  221. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  222. package/dest/services/reqresp/protocols/auth.js +2 -2
  223. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  224. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  225. package/dest/services/reqresp/protocols/block.js +3 -2
  226. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  227. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  228. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  229. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  230. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  231. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +14 -1
  232. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +17 -7
  233. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  234. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +34 -4
  235. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  236. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  237. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  238. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  239. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  240. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  241. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  242. package/dest/services/reqresp/protocols/status.js +7 -3
  243. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  244. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  245. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  246. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  247. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  248. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  249. package/dest/services/reqresp/reqresp.d.ts +6 -41
  250. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  251. package/dest/services/reqresp/reqresp.js +460 -46
  252. package/dest/services/reqresp/status.d.ts +2 -2
  253. package/dest/services/reqresp/status.d.ts.map +1 -1
  254. package/dest/services/service.d.ts +19 -3
  255. package/dest/services/service.d.ts.map +1 -1
  256. package/dest/services/tx_collection/config.d.ts +4 -1
  257. package/dest/services/tx_collection/config.d.ts.map +1 -1
  258. package/dest/services/tx_collection/config.js +10 -2
  259. package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -12
  260. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  261. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  262. package/dest/services/tx_collection/index.d.ts +2 -1
  263. package/dest/services/tx_collection/index.d.ts.map +1 -1
  264. package/dest/services/tx_collection/index.js +1 -0
  265. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  266. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  267. package/dest/services/tx_collection/instrumentation.js +4 -14
  268. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  269. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  270. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  271. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
  272. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  273. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  274. package/dest/services/tx_collection/tx_collection.d.ts +10 -10
  275. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  276. package/dest/services/tx_collection/tx_collection.js +5 -5
  277. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  278. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  279. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  280. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  281. package/dest/services/tx_provider.d.ts +4 -2
  282. package/dest/services/tx_provider.d.ts.map +1 -1
  283. package/dest/services/tx_provider.js +11 -2
  284. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  285. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  286. package/dest/services/tx_provider_instrumentation.js +13 -13
  287. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  288. package/dest/test-helpers/get-ports.d.ts +1 -1
  289. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  290. package/dest/test-helpers/index.d.ts +3 -1
  291. package/dest/test-helpers/index.d.ts.map +1 -1
  292. package/dest/test-helpers/index.js +2 -0
  293. package/dest/test-helpers/make-enrs.d.ts +1 -1
  294. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  295. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  296. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  297. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  298. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  299. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  300. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  301. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  302. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  303. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  304. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  305. package/dest/test-helpers/test_tx_provider.js +41 -0
  306. package/dest/test-helpers/testbench-utils.d.ts +156 -0
  307. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  308. package/dest/test-helpers/testbench-utils.js +296 -0
  309. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  310. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  311. package/dest/testbench/p2p_client_testbench_worker.js +218 -120
  312. package/dest/testbench/parse_log_file.d.ts +1 -1
  313. package/dest/testbench/testbench.d.ts +1 -1
  314. package/dest/testbench/worker_client_manager.d.ts +51 -6
  315. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  316. package/dest/testbench/worker_client_manager.js +226 -39
  317. package/dest/types/index.d.ts +1 -1
  318. package/dest/util.d.ts +2 -1
  319. package/dest/util.d.ts.map +1 -1
  320. package/dest/util.js +11 -2
  321. package/dest/versioning.d.ts +1 -1
  322. package/package.json +19 -18
  323. package/src/client/factory.ts +6 -11
  324. package/src/client/interface.ts +20 -2
  325. package/src/client/p2p_client.ts +108 -155
  326. package/src/client/test/tx_proposal_collector/README.md +227 -0
  327. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  328. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  329. package/src/config.ts +36 -20
  330. package/src/errors/attestation-pool.error.ts +13 -0
  331. package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
  332. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
  333. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
  334. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
  335. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  336. package/src/mem_pools/instrumentation.ts +47 -10
  337. package/src/mem_pools/interface.ts +2 -4
  338. package/src/mem_pools/tx_pool/README.md +270 -0
  339. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  340. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  341. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  342. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  343. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  344. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  345. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  346. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  347. package/src/mem_pools/tx_pool/index.ts +0 -1
  348. package/src/mem_pools/tx_pool/priority.ts +8 -1
  349. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  350. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  351. package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
  352. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +88 -0
  353. package/src/msg_validators/attestation_validator/index.ts +1 -0
  354. package/src/msg_validators/clock_tolerance.ts +51 -0
  355. package/src/msg_validators/index.ts +1 -1
  356. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  357. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  358. package/src/msg_validators/proposal_validator/index.ts +3 -0
  359. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  360. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  361. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  362. package/src/msg_validators/tx_validator/block_header_validator.ts +4 -2
  363. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  364. package/src/msg_validators/tx_validator/factory.ts +30 -4
  365. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  366. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  367. package/src/msg_validators/tx_validator/index.ts +1 -0
  368. package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
  369. package/src/msg_validators/tx_validator/phases_validator.ts +3 -1
  370. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  371. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  372. package/src/msg_validators/tx_validator/timestamp_validator.ts +5 -2
  373. package/src/services/dummy_service.ts +51 -0
  374. package/src/services/encoding.ts +6 -5
  375. package/src/services/libp2p/instrumentation.ts +26 -71
  376. package/src/services/libp2p/libp2p_service.ts +614 -184
  377. package/src/services/peer-manager/metrics.ts +27 -16
  378. package/src/services/peer-manager/peer_manager.ts +7 -4
  379. package/src/services/peer-manager/peer_scoring.ts +42 -3
  380. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  381. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  382. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  383. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  384. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  385. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  386. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  387. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  388. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  389. package/src/services/reqresp/constants.ts +14 -0
  390. package/src/services/reqresp/interface.ts +4 -1
  391. package/src/services/reqresp/metrics.ts +7 -23
  392. package/src/services/reqresp/protocols/auth.ts +2 -2
  393. package/src/services/reqresp/protocols/block.ts +3 -2
  394. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  395. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +16 -2
  396. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -5
  397. package/src/services/reqresp/protocols/status.ts +16 -12
  398. package/src/services/reqresp/protocols/tx.ts +1 -2
  399. package/src/services/reqresp/reqresp.ts +66 -19
  400. package/src/services/service.ts +23 -4
  401. package/src/services/tx_collection/config.ts +16 -2
  402. package/src/services/tx_collection/fast_tx_collection.ts +39 -15
  403. package/src/services/tx_collection/index.ts +5 -0
  404. package/src/services/tx_collection/instrumentation.ts +4 -21
  405. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  406. package/src/services/tx_collection/slow_tx_collection.ts +5 -4
  407. package/src/services/tx_collection/tx_collection.ts +10 -9
  408. package/src/services/tx_provider.ts +19 -3
  409. package/src/services/tx_provider_instrumentation.ts +18 -14
  410. package/src/test-helpers/index.ts +2 -0
  411. package/src/test-helpers/mock-pubsub.ts +1 -1
  412. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  413. package/src/test-helpers/reqresp-nodes.ts +1 -1
  414. package/src/test-helpers/test_tx_provider.ts +64 -0
  415. package/src/test-helpers/testbench-utils.ts +372 -0
  416. package/src/testbench/p2p_client_testbench_worker.ts +338 -116
  417. package/src/testbench/worker_client_manager.ts +304 -42
  418. package/src/util.ts +12 -2
  419. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  420. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  421. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  422. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  423. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  424. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  425. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  426. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  427. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  428. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  429. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  430. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,120 +1,97 @@
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
  */
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
7
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
- import { EthAddress } from '@aztec/foundation/eth-address';
9
- import { createLogger } from '@aztec/foundation/log';
8
+ import { BlockNumber } from '@aztec/foundation/branded-types';
9
+ import { SecretValue } from '@aztec/foundation/config';
10
+ import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
11
+ import { Fr } from '@aztec/foundation/curves/bn254';
12
+ import { type Logger, createLogger } from '@aztec/foundation/log';
10
13
  import { sleep } from '@aztec/foundation/sleep';
14
+ import { DateProvider, Timer } from '@aztec/foundation/timer';
11
15
  import type { DataStoreConfig } from '@aztec/kv-store/config';
12
16
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
17
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
18
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
13
19
  import type { L2BlockSource } from '@aztec/stdlib/block';
14
20
  import type { ContractDataSource } from '@aztec/stdlib/contract';
15
21
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
16
- import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
17
- import { Tx, TxStatus } from '@aztec/stdlib/tx';
22
+ import { type BlockProposal, P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
23
+ import { ChonkProof } from '@aztec/stdlib/proofs';
24
+ import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
25
+ import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
18
26
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
19
27
 
20
28
  import type { Message, PeerId } from '@libp2p/interface';
21
29
  import { TopicValidatorResult } from '@libp2p/interface';
22
- import EventEmitter from 'events';
30
+ import { peerIdFromString } from '@libp2p/peer-id';
23
31
 
32
+ import type { P2PClient } from '../client/p2p_client.js';
24
33
  import type { P2PConfig } from '../config.js';
25
34
  import { createP2PClient } from '../index.js';
26
- import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
27
35
  import type { MemPools } from '../mem_pools/interface.js';
28
- import type { TxPool } from '../mem_pools/tx_pool/index.js';
29
36
  import { LibP2PService } from '../services/libp2p/libp2p_service.js';
30
37
  import type { PeerManager } from '../services/peer-manager/peer_manager.js';
38
+ import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
39
+ import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requester/tx_validator.js';
40
+ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
31
41
  import type { ReqResp } from '../services/reqresp/reqresp.js';
32
42
  import type { PeerDiscoveryService } from '../services/service.js';
43
+ import {
44
+ BatchTxRequesterCollector,
45
+ SendBatchRequestCollector,
46
+ } from '../services/tx_collection/proposal_tx_collector.js';
33
47
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
48
+ import {
49
+ BENCHMARK_CONSTANTS,
50
+ type CollectorType,
51
+ type DistributionPattern,
52
+ InMemoryAttestationPool,
53
+ InMemoryTxPool,
54
+ UNLIMITED_RATE_LIMIT_QUOTA,
55
+ createMockEpochCache,
56
+ createMockWorldStateSynchronizer,
57
+ filterTxsByDistribution,
58
+ } from '../test-helpers/testbench-utils.js';
34
59
  import type { PubSubLibp2p } from '../util.js';
35
60
 
36
- // Simple mock implementation
37
- function mockTxPool(): TxPool {
38
- // Mock all methods
39
- const pool: Omit<TxPool, keyof EventEmitter> = {
40
- isEmpty: () => Promise.resolve(false),
41
- addTxs: () => Promise.resolve(1),
42
- getTxByHash: () => Promise.resolve(undefined),
43
- getArchivedTxByHash: () => Promise.resolve(undefined),
44
- markAsMined: () => Promise.resolve(),
45
- markMinedAsPending: () => Promise.resolve(),
46
- deleteTxs: () => Promise.resolve(),
47
- getAllTxs: () => Promise.resolve([]),
48
- getAllTxHashes: () => Promise.resolve([]),
49
- getPendingTxHashes: () => Promise.resolve([]),
50
- getPendingTxCount: () => Promise.resolve(0),
51
- getMinedTxHashes: () => Promise.resolve([]),
52
- getTxStatus: () => Promise.resolve(TxStatus.PENDING),
53
- getTxsByHash: () => Promise.resolve([]),
54
- hasTxs: () => Promise.resolve([]),
55
- hasTx: () => Promise.resolve(false),
56
- updateConfig: () => {},
57
- markTxsAsNonEvictable: () => Promise.resolve(),
58
- cleanupDeletedMinedTxs: () => Promise.resolve(0),
59
- };
60
- return Object.assign(new EventEmitter(), pool);
61
- }
61
+ export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
62
+ export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
62
63
 
63
- function mockAttestationPool(): AttestationPool {
64
- return {
65
- isEmpty: () => Promise.resolve(false),
66
- addAttestations: () => Promise.resolve(),
67
- deleteAttestations: () => Promise.resolve(),
68
- deleteAttestationsOlderThan: () => Promise.resolve(),
69
- deleteAttestationsForSlot: () => Promise.resolve(),
70
- deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
71
- getAttestationsForSlot: () => Promise.resolve([]),
72
- getAttestationsForSlotAndProposal: () => Promise.resolve([]),
73
- addBlockProposal: () => Promise.resolve(),
74
- getBlockProposal: () => Promise.resolve(undefined),
75
- hasBlockProposal: () => Promise.resolve(false),
76
- hasAttestation: () => Promise.resolve(false),
77
- };
64
+ export interface BenchReqRespCommand {
65
+ type: 'BENCH_REQRESP';
66
+ txCount: number;
67
+ peerCount: number;
68
+ distribution: DistributionPattern;
69
+ collectorType: CollectorType;
70
+ timeoutMs: number;
71
+ isAggregator: boolean;
72
+ peerIndex: number;
73
+ pinnedPeerIndex?: number;
74
+ pinnedPeerId?: string;
75
+ blockNumber: number;
76
+ seed: number;
78
77
  }
79
78
 
80
- function mockEpochCache(): EpochCacheInterface {
81
- return {
82
- getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: 0n }),
83
- getProposerIndexEncoding: () => '0x' as `0x${string}`,
84
- getEpochAndSlotNow: () => ({ epoch: 0n, slot: 0n, ts: 0n }),
85
- computeProposerIndex: () => 0n,
86
- getProposerAttesterAddressInCurrentOrNextSlot: () =>
87
- Promise.resolve({
88
- currentProposer: EthAddress.ZERO,
89
- nextProposer: EthAddress.ZERO,
90
- currentSlot: 0n,
91
- nextSlot: 0n,
92
- }),
93
- getEpochAndSlotInNextL1Slot: () => ({ epoch: 0n, slot: 0n, ts: 0n, now: 0n }),
94
- isInCommittee: () => Promise.resolve(false),
95
- getRegisteredValidators: () => Promise.resolve([]),
96
- filterInCommittee: () => Promise.resolve([]),
97
- };
79
+ export interface BenchResultMessage {
80
+ type: 'BENCH_RESULT';
81
+ durationMs: number;
82
+ fetchedCount: number;
83
+ success: boolean;
84
+ error?: string;
98
85
  }
99
86
 
100
- function mockWorldStateSynchronizer(): WorldStateSynchronizer {
101
- return {
102
- status: () =>
103
- Promise.resolve({
104
- syncSummary: {
105
- latestBlockNumber: 0,
106
- latestBlockHash: '',
107
- finalizedBlockNumber: 0,
108
- treesAreSynched: false,
109
- oldestHistoricBlockNumber: 0,
110
- },
111
- }),
112
- } as WorldStateSynchronizer;
87
+ export interface BenchReadyMessage {
88
+ type: 'BENCH_READY';
113
89
  }
90
+ const txCache = new Map<number, Tx[]>();
114
91
 
115
92
  class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends LibP2PService<T> {
116
93
  private disableTxValidation: boolean;
117
- private gossipMessageCount: number = 0;
94
+ private gossipMessageCount = 0;
118
95
 
119
96
  constructor(
120
97
  clientType: T,
@@ -123,7 +100,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
123
100
  peerDiscoveryService: PeerDiscoveryService,
124
101
  reqresp: ReqResp,
125
102
  peerManager: PeerManager,
126
- mempools: MemPools<T>,
103
+ mempools: MemPools,
127
104
  archiver: L2BlockSource & ContractDataSource,
128
105
  epochCache: EpochCacheInterface,
129
106
  proofVerifier: ClientProtocolCircuitVerifier,
@@ -183,90 +160,335 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
183
160
  }
184
161
  }
185
162
 
163
+ async function generateDeterministicTxs(txCount: number, seed: number, config: P2PConfig): Promise<Tx[]> {
164
+ const cached = txCache.get(seed) ?? [];
165
+ if (cached.length >= txCount) {
166
+ return cached.slice(0, txCount);
167
+ }
168
+
169
+ const includeByTimestampBase = BigInt(seed);
170
+ for (let i = cached.length; i < txCount; i++) {
171
+ const txSeed = seed * 10000 + i;
172
+ const tx = await mockTx(txSeed, {
173
+ chainId: new Fr(config.l1ChainId),
174
+ version: new Fr(config.rollupVersion),
175
+ vkTreeRoot: getVKTreeRoot(),
176
+ protocolContractsHash,
177
+ feePayer: makeAztecAddress(txSeed + 1),
178
+ chonkProof: ChonkProof.empty(),
179
+ numberOfNonRevertiblePublicCallRequests: 0,
180
+ numberOfRevertiblePublicCallRequests: 0,
181
+ numberOfRevertibleNullifiers: 0,
182
+ hasPublicTeardownCallRequest: false,
183
+ publicCalldataSize: 0,
184
+ });
185
+ tx.data.includeByTimestamp = includeByTimestampBase + BigInt(i);
186
+ await tx.recomputeHash();
187
+ cached.push(tx);
188
+ }
189
+
190
+ txCache.set(seed, cached);
191
+ return cached.slice(0, txCount);
192
+ }
193
+
194
+ async function createBlockProposal(blockNumber: number, txHashes: TxHash[], seed: number): Promise<BlockProposal> {
195
+ const archiveRoot = new Fr(BigInt(seed) * 1000000n + BigInt(blockNumber));
196
+ return await makeBlockProposal({
197
+ signer: Secp256k1Signer.random(),
198
+ blockHeader: makeBlockHeader(1, { blockNumber: BlockNumber(blockNumber) }),
199
+ archiveRoot,
200
+ txHashes,
201
+ });
202
+ }
203
+
204
+ function installUnlimitedRateLimits(client: P2PClient): void {
205
+ const reqResp = (client as any).p2pService.reqresp as any;
206
+ const rateLimiter = reqResp.rateLimiter as any;
207
+
208
+ rateLimiter.getRateLimits = () => UNLIMITED_RATE_LIMIT_QUOTA;
209
+ rateLimiter.allow = () => RateLimitStatus.Allowed;
210
+ }
211
+
212
+ async function runAggregatorBenchmark(
213
+ client: P2PClient,
214
+ blockProposal: BlockProposal,
215
+ collectorType: CollectorType,
216
+ timeoutMs: number,
217
+ pinnedPeerId: string | undefined,
218
+ pinnedPeerIndex: number | undefined,
219
+ logger: Logger,
220
+ expectedPeerCount: number,
221
+ ): Promise<BenchResultMessage> {
222
+ let timer = new Timer();
223
+ try {
224
+ installUnlimitedRateLimits(client);
225
+
226
+ const txHashes = blockProposal.txHashes;
227
+ logger.info(`[BENCH] Using block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
228
+
229
+ const p2pService = (client as any).p2pService;
230
+ const batchTxRequesterService: BatchTxRequesterLibP2PService = p2pService.getBatchTxRequesterService();
231
+
232
+ const minPeersRequired = Math.max(1, expectedPeerCount - 1);
233
+ const maxWaitMs = BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS;
234
+ const waitInterval = BENCHMARK_CONSTANTS.PEER_CHECK_INTERVAL_MS;
235
+ let waited = 0;
236
+
237
+ while (waited < maxWaitMs) {
238
+ const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
239
+ if (connectedPeers.length >= minPeersRequired) {
240
+ logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers, starting benchmark`);
241
+ break;
242
+ }
243
+ logger.debug(`[BENCH] Waiting for peers: ${connectedPeers.length}/${minPeersRequired} (waited ${waited}ms)`);
244
+ await sleep(waitInterval);
245
+ waited += waitInterval;
246
+ }
247
+
248
+ const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
249
+ logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers`);
250
+ logger.info(
251
+ `[BENCH] Requesting ${txHashes.length} tx hashes: ${txHashes
252
+ .slice(0, 3)
253
+ .map(h => h.toString())
254
+ .join(', ')}...`,
255
+ );
256
+
257
+ let pinnedPeer: PeerId | undefined;
258
+ if (pinnedPeerId) {
259
+ pinnedPeer = peerIdFromString(pinnedPeerId);
260
+ } else if (pinnedPeerIndex !== undefined) {
261
+ if (pinnedPeerIndex > 0 && pinnedPeerIndex <= connectedPeers.length) {
262
+ pinnedPeer = connectedPeers[pinnedPeerIndex - 1];
263
+ }
264
+ }
265
+
266
+ const noopTxValidator: IBatchRequestTxValidator = {
267
+ validateRequestedTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
268
+ validateRequestedTxs: (txs: Tx[]): Promise<TxValidationResult[]> =>
269
+ Promise.resolve(txs.map(() => ({ result: 'valid' }))),
270
+ };
271
+
272
+ timer = new Timer();
273
+ if (collectorType === 'batch-requester') {
274
+ const collector = new BatchTxRequesterCollector(
275
+ batchTxRequesterService,
276
+ logger,
277
+ new DateProvider(),
278
+ noopTxValidator,
279
+ );
280
+ const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
281
+ const durationMs = timer.ms();
282
+ return {
283
+ type: 'BENCH_RESULT',
284
+ durationMs,
285
+ fetchedCount: fetchedTxs.length,
286
+ success: fetchedTxs.length === txHashes.length,
287
+ };
288
+ }
289
+
290
+ const collector = new SendBatchRequestCollector(
291
+ batchTxRequesterService,
292
+ BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
293
+ BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
294
+ );
295
+ const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
296
+ const durationMs = timer.ms();
297
+ return {
298
+ type: 'BENCH_RESULT',
299
+ durationMs,
300
+ fetchedCount: fetchedTxs.length,
301
+ success: fetchedTxs.length === txHashes.length,
302
+ };
303
+ } catch (err: any) {
304
+ return {
305
+ type: 'BENCH_RESULT',
306
+ durationMs: timer.ms(),
307
+ fetchedCount: 0,
308
+ success: false,
309
+ error: err?.message ?? String(err),
310
+ };
311
+ }
312
+ }
313
+
314
+ let workerClient: P2PClient | null = null;
315
+ let workerTxPool: InMemoryTxPool | null = null;
316
+ let workerAttestationPool: InMemoryAttestationPool | null = null;
317
+ let workerConfig: P2PConfig | null = null;
318
+ let workerLogger: Logger | null = null;
319
+ let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
320
+
186
321
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
187
322
  process.on('message', async msg => {
188
- const { type, config, clientIndex } = msg as { type: string; config: P2PConfig; clientIndex: number };
323
+ const {
324
+ type,
325
+ config: rawConfig,
326
+ clientIndex,
327
+ } = msg as {
328
+ type: string;
329
+ config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey?: string };
330
+ clientIndex: number;
331
+ };
332
+
189
333
  try {
190
334
  if (type === 'START') {
191
- const txPool = mockTxPool();
192
- const attestationPool = mockAttestationPool();
193
- const epochCache = mockEpochCache();
194
- const worldState = mockWorldStateSynchronizer();
335
+ const config: P2PConfig = {
336
+ ...rawConfig,
337
+ peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
338
+ } as P2PConfig;
339
+
340
+ workerConfig = config;
341
+ workerTxPool = new InMemoryTxPool();
342
+ workerAttestationPool = new InMemoryAttestationPool();
343
+ const epochCache = createMockEpochCache();
344
+ const worldState = createMockWorldStateSynchronizer();
195
345
  const l2BlockSource = new MockL2BlockSource();
196
346
 
197
347
  const proofVerifier = new AlwaysTrueCircuitVerifier();
198
- const kvStore = await openTmpStore(`test-${clientIndex}`);
199
- const logger = createLogger(`p2p:${clientIndex}`);
348
+ kvStore = await openTmpStore(`test-${clientIndex}`);
349
+ workerLogger = createLogger(`p2p:${clientIndex}`);
350
+ workerTxPool.setLogger(workerLogger);
200
351
  const telemetry = getTelemetryClient();
201
352
 
202
353
  const deps = {
203
- txPool,
204
- attestationPool,
354
+ txPool: workerTxPool,
355
+ attestationPool: workerAttestationPool,
205
356
  store: kvStore,
206
- logger,
357
+ logger: workerLogger,
207
358
  };
208
359
 
209
360
  const client = await createP2PClient(
210
361
  P2PClientType.Full,
211
362
  config as P2PConfig & DataStoreConfig,
212
363
  l2BlockSource,
213
- proofVerifier,
364
+ proofVerifier as ClientProtocolCircuitVerifier,
214
365
  worldState,
215
366
  epochCache,
216
367
  'test-p2p-bench-worker',
217
368
  undefined,
218
- telemetry,
369
+ telemetry as TelemetryClient,
219
370
  deps,
220
371
  );
221
372
 
222
- // Create test service with validation disabled
223
373
  const testService = new TestLibP2PService(
224
374
  P2PClientType.Full,
225
375
  config,
226
376
  (client as any).p2pService.node,
227
377
  (client as any).p2pService.peerDiscoveryService,
228
- (client as any).p2pService.mempools,
229
378
  (client as any).p2pService.reqresp,
230
379
  (client as any).p2pService.peerManager,
380
+ (client as any).p2pService.mempools,
231
381
  (client as any).p2pService.archiver,
232
382
  epochCache,
233
383
  proofVerifier,
234
384
  worldState,
235
- telemetry,
236
- logger,
237
- true, // disable validation
385
+ telemetry as TelemetryClient,
386
+ workerLogger,
387
+ true,
238
388
  );
239
389
 
240
- // Replace the existing p2pService with our test version
241
390
  (client as any).p2pService = testService;
242
391
 
243
392
  await client.start();
244
- // Wait until the client is ready
245
393
  for (let i = 0; i < 100; i++) {
246
394
  const isReady = client.isReady();
247
- logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
395
+ workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
248
396
  if (isReady) {
249
397
  break;
250
398
  }
251
399
  await sleep(1000);
252
400
  }
253
401
 
254
- // Listen for commands from parent
255
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
256
- process.on('message', async (cmd: any) => {
257
- switch (cmd.type) {
258
- case 'STOP':
259
- await client.stop();
260
- process.exit(0);
261
- break;
262
- case 'SEND_TX':
263
- await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
264
- process.send!({ type: 'TX_SENT' });
265
- break;
402
+ workerClient = client;
403
+ const peerId = (client as any).p2pService.node.peerId.toString();
404
+ process.send!({ type: 'READY', peerId });
405
+ return;
406
+ }
407
+
408
+ const cmd = msg as any;
409
+ switch (cmd.type) {
410
+ case 'STOP':
411
+ if (workerClient) {
412
+ await workerClient.stop();
266
413
  }
267
- });
414
+ if (kvStore?.close) {
415
+ await kvStore.close();
416
+ }
417
+ process.exit(0);
418
+ break;
419
+
420
+ case 'SEND_TX':
421
+ if (workerClient) {
422
+ await workerClient.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
423
+ process.send!({ type: 'TX_SENT' });
424
+ }
425
+ break;
426
+
427
+ case 'BENCH_REQRESP': {
428
+ const benchCmd = cmd as BenchReqRespCommand;
429
+ if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
430
+ process.send!({
431
+ type: 'BENCH_RESULT',
432
+ durationMs: 0,
433
+ fetchedCount: 0,
434
+ success: false,
435
+ error: 'Worker not initialized',
436
+ } as BenchResultMessage);
437
+ break;
438
+ }
439
+
440
+ // Reset state before each benchmark run to avoid cross-run contamination
441
+ workerTxPool.resetState();
442
+ workerAttestationPool.resetState();
443
+
444
+ installUnlimitedRateLimits(workerClient);
445
+
446
+ const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
447
+ const txHashes = allTxs.map(tx => tx.getTxHash());
448
+ const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
268
449
 
269
- process.send!({ type: 'READY' });
450
+ await workerAttestationPool.addBlockProposal(blockProposal);
451
+ workerLogger.debug(
452
+ `[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`,
453
+ );
454
+
455
+ if (benchCmd.isAggregator) {
456
+ workerTxPool.clearTxs();
457
+
458
+ workerLogger.info(
459
+ `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`,
460
+ );
461
+
462
+ const result = await runAggregatorBenchmark(
463
+ workerClient,
464
+ blockProposal,
465
+ benchCmd.collectorType,
466
+ benchCmd.timeoutMs,
467
+ benchCmd.pinnedPeerId,
468
+ benchCmd.pinnedPeerIndex,
469
+ workerLogger,
470
+ benchCmd.peerCount,
471
+ );
472
+
473
+ process.send!(result);
474
+ } else {
475
+ const myTxs = filterTxsByDistribution(
476
+ allTxs,
477
+ benchCmd.peerIndex,
478
+ benchCmd.peerCount,
479
+ benchCmd.distribution,
480
+ benchCmd.pinnedPeerIndex,
481
+ );
482
+ workerTxPool.setTxs(myTxs);
483
+
484
+ workerLogger.info(
485
+ `[BENCH] Peer ${benchCmd.peerIndex} populated tx pool with ${myTxs.length}/${benchCmd.txCount} txs (${benchCmd.distribution})`,
486
+ );
487
+
488
+ process.send!({ type: 'BENCH_READY' } as BenchReadyMessage);
489
+ }
490
+ break;
491
+ }
270
492
  }
271
493
  } catch (err: any) {
272
494
  process.send!({ type: 'ERROR', error: err.message });