@aztec/p2p 0.0.1-commit.2ed92850 → 0.0.1-commit.358457c

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