@aztec/p2p 0.0.1-commit.1bea0213 → 0.0.1-commit.1de2a32

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