@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.b8a057fa

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 (606) hide show
  1. package/README.md +130 -3
  2. package/dest/bootstrap/bootstrap.d.ts +4 -3
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +26 -10
  5. package/dest/client/factory.d.ts +13 -12
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +70 -21
  8. package/dest/client/index.d.ts +1 -1
  9. package/dest/client/interface.d.ts +104 -39
  10. package/dest/client/interface.d.ts.map +1 -1
  11. package/dest/client/p2p_client.d.ts +76 -92
  12. package/dest/client/p2p_client.d.ts.map +1 -1
  13. package/dest/client/p2p_client.js +685 -344
  14. package/dest/config.d.ts +175 -87
  15. package/dest/config.d.ts.map +1 -1
  16. package/dest/config.js +180 -59
  17. package/dest/enr/generate-enr.d.ts +1 -1
  18. package/dest/enr/index.d.ts +1 -1
  19. package/dest/errors/attestation-pool.error.d.ts +7 -0
  20. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  21. package/dest/errors/attestation-pool.error.js +12 -0
  22. package/dest/errors/p2p-service.error.d.ts +9 -0
  23. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  24. package/dest/errors/p2p-service.error.js +10 -0
  25. package/dest/errors/reqresp.error.d.ts +9 -16
  26. package/dest/errors/reqresp.error.d.ts.map +1 -1
  27. package/dest/errors/reqresp.error.js +10 -17
  28. package/dest/errors/tx-pool.error.d.ts +8 -0
  29. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  30. package/dest/errors/tx-pool.error.js +9 -0
  31. package/dest/index.d.ts +2 -2
  32. package/dest/index.d.ts.map +1 -1
  33. package/dest/index.js +1 -1
  34. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +156 -57
  35. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/attestation_pool.js +518 -3
  37. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +694 -294
  40. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  41. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  42. package/dest/mem_pools/attestation_pool/index.js +1 -2
  43. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  44. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  45. package/dest/mem_pools/attestation_pool/mocks.js +19 -13
  46. package/dest/mem_pools/index.d.ts +3 -3
  47. package/dest/mem_pools/index.d.ts.map +1 -1
  48. package/dest/mem_pools/index.js +1 -1
  49. package/dest/mem_pools/instrumentation.d.ts +16 -1
  50. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  51. package/dest/mem_pools/instrumentation.js +58 -10
  52. package/dest/mem_pools/interface.d.ts +6 -7
  53. package/dest/mem_pools/interface.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  55. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  57. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +39 -0
  58. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +97 -0
  60. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  61. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  96. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  97. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  99. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  100. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  102. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
  103. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +122 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +368 -0
  114. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +68 -0
  115. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  116. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +178 -0
  117. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +91 -0
  118. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  119. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1013 -0
  120. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +15 -7
  121. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/attestation_validator/attestation_validator.js +82 -26
  123. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +24 -0
  124. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  125. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +75 -0
  126. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  127. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  128. package/dest/msg_validators/attestation_validator/index.js +1 -0
  129. package/dest/msg_validators/index.d.ts +2 -2
  130. package/dest/msg_validators/index.d.ts.map +1 -1
  131. package/dest/msg_validators/index.js +1 -1
  132. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  133. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  134. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +16 -0
  135. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  136. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +14 -0
  137. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +16 -0
  138. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  139. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +26 -0
  140. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  141. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  142. package/dest/msg_validators/proposal_validator/index.js +3 -0
  143. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +40 -0
  144. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/proposal_validator/proposal_validator.js +186 -0
  146. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  147. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  148. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  149. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  150. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  151. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  152. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  153. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  154. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  155. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  156. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  158. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  160. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  161. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  162. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  163. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  164. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  165. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  166. package/dest/msg_validators/tx_validator/data_validator.d.ts +4 -1
  167. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  168. package/dest/msg_validators/tx_validator/data_validator.js +40 -3
  169. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  170. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  172. package/dest/msg_validators/tx_validator/factory.d.ts +138 -6
  173. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  174. package/dest/msg_validators/tx_validator/factory.js +268 -58
  175. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  176. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  177. package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
  178. package/dest/msg_validators/tx_validator/gas_validator.d.ts +105 -3
  179. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/gas_validator.js +146 -67
  181. package/dest/msg_validators/tx_validator/index.d.ts +6 -1
  182. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/index.js +5 -0
  184. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
  185. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  186. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  187. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  188. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  189. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  190. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  191. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  192. package/dest/msg_validators/tx_validator/phases_validator.js +78 -28
  193. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  194. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  195. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  196. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  197. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  198. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +23 -5
  199. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  200. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  201. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  202. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  203. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  204. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +4 -2
  205. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  206. package/dest/msg_validators/tx_validator/tx_proof_validator.js +4 -2
  207. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  208. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  209. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  210. package/dest/services/data_store.d.ts +1 -1
  211. package/dest/services/data_store.d.ts.map +1 -1
  212. package/dest/services/data_store.js +14 -10
  213. package/dest/services/discv5/discV5_service.d.ts +13 -2
  214. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  215. package/dest/services/discv5/discV5_service.js +120 -24
  216. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  217. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  218. package/dest/services/discv5/persisted_enr_store.js +145 -0
  219. package/dest/services/dummy_service.d.ts +40 -16
  220. package/dest/services/dummy_service.d.ts.map +1 -1
  221. package/dest/services/dummy_service.js +61 -14
  222. package/dest/services/encoding.d.ts +24 -7
  223. package/dest/services/encoding.d.ts.map +1 -1
  224. package/dest/services/encoding.js +48 -30
  225. package/dest/services/gossipsub/index.d.ts +3 -0
  226. package/dest/services/gossipsub/index.d.ts.map +1 -0
  227. package/dest/services/gossipsub/index.js +2 -0
  228. package/dest/services/gossipsub/scoring.d.ts +21 -3
  229. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  230. package/dest/services/gossipsub/scoring.js +24 -7
  231. package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
  232. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  233. package/dest/services/gossipsub/topic_score_params.js +336 -0
  234. package/dest/services/index.d.ts +2 -1
  235. package/dest/services/index.d.ts.map +1 -1
  236. package/dest/services/index.js +1 -0
  237. package/dest/services/libp2p/instrumentation.d.ts +5 -1
  238. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  239. package/dest/services/libp2p/instrumentation.js +49 -70
  240. package/dest/services/libp2p/libp2p_service.d.ts +127 -110
  241. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  242. package/dest/services/libp2p/libp2p_service.js +1385 -447
  243. package/dest/services/peer-manager/interface.d.ts +1 -1
  244. package/dest/services/peer-manager/metrics.d.ts +11 -2
  245. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  246. package/dest/services/peer-manager/metrics.js +45 -16
  247. package/dest/services/peer-manager/peer_manager.d.ts +21 -35
  248. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  249. package/dest/services/peer-manager/peer_manager.js +89 -38
  250. package/dest/services/peer-manager/peer_scoring.d.ts +39 -2
  251. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  252. package/dest/services/peer-manager/peer_scoring.js +168 -15
  253. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -0
  254. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  255. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +534 -0
  256. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  257. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  258. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  259. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  260. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  261. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  262. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  263. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  264. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  265. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  266. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  267. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  268. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  269. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  270. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  271. package/dest/services/reqresp/config.d.ts +15 -3
  272. package/dest/services/reqresp/config.d.ts.map +1 -1
  273. package/dest/services/reqresp/config.js +11 -0
  274. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -4
  275. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  276. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  277. package/dest/services/reqresp/constants.d.ts +12 -0
  278. package/dest/services/reqresp/constants.d.ts.map +1 -0
  279. package/dest/services/reqresp/constants.js +7 -0
  280. package/dest/services/reqresp/index.d.ts +1 -1
  281. package/dest/services/reqresp/interface.d.ts +27 -18
  282. package/dest/services/reqresp/interface.d.ts.map +1 -1
  283. package/dest/services/reqresp/interface.js +23 -19
  284. package/dest/services/reqresp/metrics.d.ts +6 -5
  285. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  286. package/dest/services/reqresp/metrics.js +16 -21
  287. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  288. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  289. package/dest/services/reqresp/protocols/auth.js +2 -2
  290. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +8 -3
  291. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  292. package/dest/services/reqresp/protocols/block_txs/bitvector.js +15 -2
  293. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  294. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  295. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +35 -14
  296. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +37 -11
  297. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  298. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +85 -21
  299. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  300. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  301. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  302. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  303. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  304. package/dest/services/reqresp/protocols/index.js +0 -1
  305. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  306. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  307. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  308. package/dest/services/reqresp/protocols/status.js +7 -3
  309. package/dest/services/reqresp/protocols/tx.d.ts +8 -3
  310. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  311. package/dest/services/reqresp/protocols/tx.js +21 -3
  312. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  313. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -5
  314. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  315. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  316. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  317. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  318. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  319. package/dest/services/reqresp/reqresp.d.ts +12 -69
  320. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  321. package/dest/services/reqresp/reqresp.js +480 -200
  322. package/dest/services/reqresp/status.d.ts +2 -2
  323. package/dest/services/reqresp/status.d.ts.map +1 -1
  324. package/dest/services/service.d.ts +78 -13
  325. package/dest/services/service.d.ts.map +1 -1
  326. package/dest/services/tx_collection/config.d.ts +11 -11
  327. package/dest/services/tx_collection/config.d.ts.map +1 -1
  328. package/dest/services/tx_collection/config.js +28 -27
  329. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  330. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  331. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  332. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  333. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  334. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  335. package/dest/services/tx_collection/index.d.ts +3 -2
  336. package/dest/services/tx_collection/index.d.ts.map +1 -1
  337. package/dest/services/tx_collection/index.js +1 -0
  338. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  339. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  340. package/dest/services/tx_collection/instrumentation.js +9 -13
  341. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  342. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  343. package/dest/services/tx_collection/request_tracker.js +84 -0
  344. package/dest/services/tx_collection/tx_collection.d.ts +51 -57
  345. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  346. package/dest/services/tx_collection/tx_collection.js +298 -70
  347. package/dest/services/tx_collection/tx_collection_sink.d.ts +20 -10
  348. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  349. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  350. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  351. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  352. package/dest/services/tx_collection/tx_source.js +29 -7
  353. package/dest/services/tx_file_store/config.d.ts +16 -0
  354. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  355. package/dest/services/tx_file_store/config.js +22 -0
  356. package/dest/services/tx_file_store/index.d.ts +4 -0
  357. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  358. package/dest/services/tx_file_store/index.js +3 -0
  359. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  360. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  361. package/dest/services/tx_file_store/instrumentation.js +29 -0
  362. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  363. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  364. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  365. package/dest/services/tx_provider.d.ts +9 -5
  366. package/dest/services/tx_provider.d.ts.map +1 -1
  367. package/dest/services/tx_provider.js +23 -10
  368. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  369. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  370. package/dest/services/tx_provider_instrumentation.js +14 -14
  371. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  372. package/dest/test-helpers/get-ports.d.ts +1 -1
  373. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  374. package/dest/test-helpers/index.d.ts +3 -1
  375. package/dest/test-helpers/index.d.ts.map +1 -1
  376. package/dest/test-helpers/index.js +2 -0
  377. package/dest/test-helpers/make-enrs.d.ts +1 -1
  378. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  379. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  380. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  381. package/dest/test-helpers/mock-pubsub.d.ts +48 -8
  382. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  383. package/dest/test-helpers/mock-pubsub.js +115 -14
  384. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  385. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  386. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  387. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  388. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  389. package/dest/test-helpers/reqresp-nodes.js +19 -20
  390. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  391. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  392. package/dest/test-helpers/test_tx_provider.js +44 -0
  393. package/dest/test-helpers/testbench-utils.d.ts +164 -0
  394. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  395. package/dest/test-helpers/testbench-utils.js +400 -0
  396. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
  397. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  398. package/dest/testbench/p2p_client_testbench_worker.js +289 -128
  399. package/dest/testbench/parse_log_file.d.ts +1 -1
  400. package/dest/testbench/testbench.d.ts +1 -1
  401. package/dest/testbench/worker_client_manager.d.ts +57 -6
  402. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  403. package/dest/testbench/worker_client_manager.js +277 -44
  404. package/dest/types/index.d.ts +1 -1
  405. package/dest/util.d.ts +14 -8
  406. package/dest/util.d.ts.map +1 -1
  407. package/dest/util.js +41 -11
  408. package/dest/versioning.d.ts +3 -6
  409. package/dest/versioning.d.ts.map +1 -1
  410. package/dest/versioning.js +3 -24
  411. package/package.json +21 -20
  412. package/src/bootstrap/bootstrap.ts +24 -7
  413. package/src/client/factory.ts +141 -46
  414. package/src/client/interface.ts +114 -47
  415. package/src/client/p2p_client.ts +356 -424
  416. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  417. package/src/config.ts +316 -67
  418. package/src/errors/attestation-pool.error.ts +13 -0
  419. package/src/errors/p2p-service.error.ts +11 -0
  420. package/src/errors/reqresp.error.ts +13 -19
  421. package/src/errors/tx-pool.error.ts +12 -0
  422. package/src/index.ts +1 -1
  423. package/src/mem_pools/attestation_pool/attestation_pool.ts +598 -56
  424. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +796 -316
  425. package/src/mem_pools/attestation_pool/index.ts +9 -2
  426. package/src/mem_pools/attestation_pool/mocks.ts +29 -17
  427. package/src/mem_pools/index.ts +2 -2
  428. package/src/mem_pools/instrumentation.ts +58 -10
  429. package/src/mem_pools/interface.ts +5 -7
  430. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  431. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  432. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  433. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  434. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  435. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  436. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  437. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  438. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  439. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  440. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  441. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  442. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  443. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  444. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  445. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  446. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  447. package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
  448. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  449. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  450. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +465 -0
  451. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +252 -0
  452. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1215 -0
  453. package/src/msg_validators/attestation_validator/README.md +49 -0
  454. package/src/msg_validators/attestation_validator/attestation_validator.ts +78 -33
  455. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +102 -0
  456. package/src/msg_validators/attestation_validator/index.ts +1 -0
  457. package/src/msg_validators/index.ts +1 -1
  458. package/src/msg_validators/proposal_validator/README.md +123 -0
  459. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +32 -0
  460. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +49 -0
  461. package/src/msg_validators/proposal_validator/index.ts +3 -0
  462. package/src/msg_validators/proposal_validator/proposal_validator.ts +198 -0
  463. package/src/msg_validators/tx_validator/README.md +129 -0
  464. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  465. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  466. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  467. package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
  468. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  469. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  470. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  471. package/src/msg_validators/tx_validator/data_validator.ts +62 -7
  472. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  473. package/src/msg_validators/tx_validator/factory.ts +433 -58
  474. package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
  475. package/src/msg_validators/tx_validator/gas_validator.ts +206 -76
  476. package/src/msg_validators/tx_validator/index.ts +5 -0
  477. package/src/msg_validators/tx_validator/metadata_validator.ts +31 -12
  478. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  479. package/src/msg_validators/tx_validator/phases_validator.ts +90 -31
  480. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  481. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  482. package/src/msg_validators/tx_validator/timestamp_validator.ts +30 -19
  483. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  484. package/src/msg_validators/tx_validator/tx_proof_validator.ts +10 -3
  485. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  486. package/src/services/data_store.ts +14 -19
  487. package/src/services/discv5/discV5_service.ts +127 -15
  488. package/src/services/discv5/persisted_enr_store.ts +158 -0
  489. package/src/services/dummy_service.ts +82 -38
  490. package/src/services/encoding.ts +46 -29
  491. package/src/services/gossipsub/README.md +663 -0
  492. package/src/services/gossipsub/index.ts +2 -0
  493. package/src/services/gossipsub/scoring.ts +29 -5
  494. package/src/services/gossipsub/topic_score_params.ts +478 -0
  495. package/src/services/index.ts +1 -0
  496. package/src/services/libp2p/instrumentation.ts +54 -72
  497. package/src/services/libp2p/libp2p_service.ts +1152 -497
  498. package/src/services/peer-manager/metrics.ts +51 -16
  499. package/src/services/peer-manager/peer_manager.ts +98 -29
  500. package/src/services/peer-manager/peer_scoring.ts +170 -9
  501. package/src/services/reqresp/README.md +194 -0
  502. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  503. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +660 -0
  504. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  505. package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
  506. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  507. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  508. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  509. package/src/services/reqresp/config.ts +19 -2
  510. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  511. package/src/services/reqresp/constants.ts +14 -0
  512. package/src/services/reqresp/interface.ts +48 -46
  513. package/src/services/reqresp/metrics.ts +35 -27
  514. package/src/services/reqresp/protocols/auth.ts +2 -2
  515. package/src/services/reqresp/protocols/block_txs/bitvector.ts +19 -2
  516. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +44 -17
  517. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +109 -17
  518. package/src/services/reqresp/protocols/index.ts +0 -1
  519. package/src/services/reqresp/protocols/status.ts +16 -12
  520. package/src/services/reqresp/protocols/tx.ts +24 -5
  521. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  522. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  523. package/src/services/reqresp/reqresp.ts +107 -223
  524. package/src/services/service.ts +102 -31
  525. package/src/services/tx_collection/config.ts +42 -37
  526. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  527. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  528. package/src/services/tx_collection/index.ts +2 -1
  529. package/src/services/tx_collection/instrumentation.ts +5 -13
  530. package/src/services/tx_collection/request_tracker.ts +127 -0
  531. package/src/services/tx_collection/tx_collection.ts +368 -115
  532. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  533. package/src/services/tx_collection/tx_source.ts +29 -8
  534. package/src/services/tx_file_store/config.ts +37 -0
  535. package/src/services/tx_file_store/index.ts +3 -0
  536. package/src/services/tx_file_store/instrumentation.ts +36 -0
  537. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  538. package/src/services/tx_provider.ts +34 -12
  539. package/src/services/tx_provider_instrumentation.ts +24 -14
  540. package/src/test-helpers/index.ts +2 -0
  541. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  542. package/src/test-helpers/mock-pubsub.ts +138 -15
  543. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  544. package/src/test-helpers/reqresp-nodes.ts +18 -30
  545. package/src/test-helpers/test_tx_provider.ts +69 -0
  546. package/src/test-helpers/testbench-utils.ts +465 -0
  547. package/src/testbench/p2p_client_testbench_worker.ts +406 -127
  548. package/src/testbench/worker_client_manager.ts +355 -46
  549. package/src/util.ts +47 -16
  550. package/src/versioning.ts +3 -33
  551. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -30
  552. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  553. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -190
  554. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -25
  555. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  556. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -197
  557. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -150
  558. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  559. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -617
  560. package/dest/mem_pools/tx_pool/index.d.ts +0 -4
  561. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  562. package/dest/mem_pools/tx_pool/index.js +0 -3
  563. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  564. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  565. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  566. package/dest/mem_pools/tx_pool/priority.d.ts +0 -8
  567. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  568. package/dest/mem_pools/tx_pool/priority.js +0 -10
  569. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -122
  570. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  571. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  572. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  573. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  574. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -394
  575. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  576. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  577. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  578. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  579. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  580. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  581. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
  582. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  583. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
  584. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  585. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  586. package/dest/services/reqresp/protocols/block.js +0 -31
  587. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -56
  588. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  589. package/dest/services/tx_collection/fast_tx_collection.js +0 -300
  590. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -54
  591. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  592. package/dest/services/tx_collection/slow_tx_collection.js +0 -176
  593. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -256
  594. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -253
  595. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -750
  596. package/src/mem_pools/tx_pool/index.ts +0 -3
  597. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  598. package/src/mem_pools/tx_pool/priority.ts +0 -13
  599. package/src/mem_pools/tx_pool/tx_pool.ts +0 -135
  600. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -313
  601. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  602. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
  603. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
  604. package/src/services/reqresp/protocols/block.ts +0 -36
  605. package/src/services/tx_collection/fast_tx_collection.ts +0 -340
  606. package/src/services/tx_collection/slow_tx_collection.ts +0 -232
@@ -1,114 +1,123 @@
1
- import { compactArray } from '@aztec/foundation/collection';
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { times } from '@aztec/foundation/collection';
2
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
- import { type PromiseWithResolvers, RunningPromise } from '@aztec/foundation/promise';
4
- import { DateProvider } from '@aztec/foundation/timer';
4
+ import { sleep } from '@aztec/foundation/sleep';
5
+ import { DateProvider, elapsed } from '@aztec/foundation/timer';
5
6
  import type { L2Block, L2BlockInfo } from '@aztec/stdlib/block';
6
7
  import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
7
8
  import type { BlockProposal } from '@aztec/stdlib/p2p';
8
- import { Tx, TxHash } from '@aztec/stdlib/tx';
9
+ import type { Tx } from '@aztec/stdlib/tx';
10
+ import { TxHash } from '@aztec/stdlib/tx';
9
11
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
10
12
 
11
13
  import type { PeerId } from '@libp2p/interface';
12
14
 
13
- import type { TxPool } from '../../mem_pools/index.js';
14
- import type { TxPoolEvents } from '../../mem_pools/tx_pool/tx_pool.js';
15
- import type { ReqRespInterface } from '../reqresp/interface.js';
15
+ import type { TxPoolV2, TxPoolV2Events } from '../../mem_pools/tx_pool_v2/interfaces.js';
16
+ import { BatchTxRequester } from '../reqresp/batch-tx-requester/batch_tx_requester.js';
17
+ import type { BatchTxRequesterLibP2PService } from '../reqresp/batch-tx-requester/interface.js';
18
+ import type { BlockTxsSource } from '../reqresp/index.js';
16
19
  import type { TxCollectionConfig } from './config.js';
17
- import { FastTxCollection } from './fast_tx_collection.js';
18
- import { SlowTxCollection } from './slow_tx_collection.js';
19
- import { TxCollectionSink } from './tx_collection_sink.js';
20
+ import { FileStoreTxCollection } from './file_store_tx_collection.js';
21
+ import type { FileStoreTxSource } from './file_store_tx_source.js';
22
+ import { type IRequestTracker, RequestTracker } from './request_tracker.js';
23
+ import { type TxAddContext, TxCollectionSink } from './tx_collection_sink.js';
20
24
  import type { TxSource } from './tx_source.js';
21
25
 
22
- export type CollectionMethod = 'fast-req-resp' | 'fast-node-rpc' | 'slow-req-resp' | 'slow-node-rpc';
23
-
24
- export type MissingTxInfo = { blockNumber: number; deadline: Date; readyForReqResp: boolean };
26
+ export type CollectionMethod = 'fast-req-resp' | 'fast-node-rpc' | 'file-store';
25
27
 
26
28
  export type FastCollectionRequestInput =
27
29
  | { type: 'block'; block: L2Block }
28
- | { type: 'proposal'; blockProposal: BlockProposal; blockNumber: number };
30
+ | { type: 'proposal'; blockProposal: BlockProposal; blockNumber: BlockNumber };
29
31
 
30
32
  export type FastCollectionRequest = FastCollectionRequestInput & {
31
- missingTxHashes: Set<string>;
32
- deadline: Date;
33
+ requestTracker: IRequestTracker;
33
34
  blockInfo: L2BlockInfo;
34
- promise: PromiseWithResolvers<void>;
35
- foundTxs: Map<string, Tx>;
36
35
  };
37
36
 
38
37
  /**
39
- * Coordinates tx collection from remote RPC nodes and reqresp.
38
+ * Collect missing transactions for a block or proposal via reqresp.
39
+ * @param requestTracker - The missing transactions tracker
40
+ * @param blockTxsSource - The block or proposal containing the transactions
41
+ * @param pinnedPeer - Optional peer expected to have the transactions
42
+ * @returns The collected transactions
43
+ */
44
+ export type IReqRespTxsCollector = (
45
+ requestTracker: IRequestTracker,
46
+ blockTxsSource: BlockTxsSource,
47
+ pinnedPeer: PeerId | undefined,
48
+ ) => Promise<Tx[]>;
49
+
50
+ /**
51
+ * Coordinates tx collection from remote RPC nodes, reqresp, and file store.
40
52
  *
41
- * The slow collection loops are used for periodically collecting missing txs from mined blocks,
42
- * from remote RPC nodes and via reqresp. The fast collection methods are used to quickly gather
43
- * txs, usually for attesting to block proposals or preparing to prove an epoch. The slow and fast
44
- * collection instances both send their txs to the collection sink, which handles metrics and adds
45
- * them to the tx pool. Whenever a tx is added to either the sink or the pool, this service is notified
46
- * via events and notifies the slow and fast collection loops to stop collecting that tx, so that we don't
47
- * collect the same tx multiple times.
53
+ * Runs a sequential pipeline: node RPC → reqresp → file store. Node collection starts immediately,
54
+ * reqresp starts after a configured delay, and file store (if configured) starts after a further
55
+ * delay. All paths send txs to the collection sink, which handles metrics and adds them to the
56
+ * tx pool. Whenever a tx is added to the sink or the pool, this service is notified and stops
57
+ * collecting that tx across all in-flight requests.
48
58
  */
49
59
  export class TxCollection {
50
- /** Slow collection background loops */
51
- protected readonly slowCollection: SlowTxCollection;
60
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
61
+ protected requests: Set<FastCollectionRequest> = new Set();
52
62
 
53
- /** Fast collection methods */
54
- protected readonly fastCollection: FastTxCollection;
63
+ /** The collector for txs via reqresp */
64
+ protected reqRespTxsCollector?: IReqRespTxsCollector;
55
65
 
56
- /** Loop for periodically reconciling found transactions from the tx pool in case we missed some */
57
- private readonly reconcileFoundTxsLoop: RunningPromise;
66
+ /** File store collection for the fast (proposal/proving) path */
67
+ protected readonly fileStoreFastCollection: FileStoreTxCollection;
58
68
 
59
- /** Handles txs found by the slow and fast collection loops */
69
+ /** Handles txs found by collection paths before adding to the pool */
60
70
  private readonly txCollectionSink: TxCollectionSink;
61
71
 
62
72
  /** Handler for the txs-added event from the tx pool */
63
- protected readonly handleTxsAddedToPool: TxPoolEvents['txs-added'];
73
+ protected readonly handleTxsAddedToPool: TxPoolV2Events['txs-added'];
64
74
 
65
75
  /** Handler for the txs-added event from the tx collection sink */
66
- protected readonly handleTxsFound: TxPoolEvents['txs-added'];
76
+ protected readonly handleTxsFound: TxPoolV2Events['txs-added'];
67
77
 
68
78
  constructor(
69
- private readonly reqResp: Pick<ReqRespInterface, 'sendBatchRequest'>,
79
+ private readonly p2pService: BatchTxRequesterLibP2PService,
70
80
  private readonly nodes: TxSource[],
71
81
  private readonly constants: L1RollupConstants,
72
- private readonly txPool: TxPool,
82
+ private readonly txPool: TxPoolV2,
73
83
  private readonly config: TxCollectionConfig,
84
+ fileStoreSources: FileStoreTxSource[] = [],
74
85
  private readonly dateProvider: DateProvider = new DateProvider(),
75
86
  telemetryClient: TelemetryClient = getTelemetryClient(),
76
87
  private readonly log: Logger = createLogger('p2p:tx_collection_service'),
77
88
  ) {
78
89
  this.txCollectionSink = new TxCollectionSink(this.txPool, telemetryClient, this.log);
79
90
 
80
- this.fastCollection = new FastTxCollection(
81
- this.reqResp,
82
- this.nodes,
83
- this.txCollectionSink,
84
- this.config,
85
- this.dateProvider,
86
- this.log,
87
- );
88
-
89
- this.slowCollection = new SlowTxCollection(
90
- this.reqResp,
91
- this.nodes,
91
+ this.reqRespTxsCollector = (requestTracker, blockTxsSource, pinnedPeer) =>
92
+ BatchTxRequester.collectAllTxs(
93
+ new BatchTxRequester(
94
+ requestTracker,
95
+ blockTxsSource,
96
+ pinnedPeer,
97
+ this.p2pService,
98
+ this.log,
99
+ this.dateProvider,
100
+ ).run(),
101
+ );
102
+
103
+ this.fileStoreFastCollection = new FileStoreTxCollection(
104
+ fileStoreSources,
92
105
  this.txCollectionSink,
93
- this.fastCollection,
94
- constants,
95
- this.config,
106
+ {
107
+ workerCount: config.txCollectionFileStoreFastWorkerCount,
108
+ backoffBaseMs: config.txCollectionFileStoreFastBackoffBaseMs,
109
+ backoffMaxMs: config.txCollectionFileStoreFastBackoffMaxMs,
110
+ },
96
111
  this.dateProvider,
97
112
  this.log,
98
113
  );
99
114
 
100
- this.reconcileFoundTxsLoop = new RunningPromise(
101
- () => this.reconcileFoundTxsWithPool(),
102
- this.log,
103
- this.config.txCollectionReconcileIntervalMs,
104
- );
105
-
106
- this.handleTxsFound = (args: Parameters<TxPoolEvents['txs-added']>[0]) => {
115
+ this.handleTxsFound = (args: Parameters<TxPoolV2Events['txs-added']>[0]) => {
107
116
  this.foundTxs(args.txs);
108
117
  };
109
118
  this.txCollectionSink.on('txs-added', this.handleTxsFound);
110
119
 
111
- this.handleTxsAddedToPool = (args: Parameters<TxPoolEvents['txs-added']>[0]) => {
120
+ this.handleTxsAddedToPool = (args: Parameters<TxPoolV2Events['txs-added']>[0]) => {
112
121
  const { txs, source } = args;
113
122
  if (source !== 'tx-collection') {
114
123
  this.foundTxs(txs);
@@ -117,48 +126,21 @@ export class TxCollection {
117
126
  this.txPool.on('txs-added', this.handleTxsAddedToPool);
118
127
  }
119
128
 
120
- /** Starts all collection loops. */
121
- public start(): Promise<void> {
122
- this.slowCollection.start();
123
- this.reconcileFoundTxsLoop.start();
124
-
125
- // TODO(palla/txs): Collect mined unproven tx hashes for txs we dont have in the pool and populate missingTxs on startup
126
- return Promise.resolve();
127
- }
128
-
129
- /** Stops all activity. */
130
- public async stop() {
131
- await Promise.all([this.slowCollection.stop(), this.fastCollection.stop(), this.reconcileFoundTxsLoop.stop()]);
129
+ /** Stops all activity. Cancels in-flight requests; file store workers self-terminate. */
130
+ public stop() {
131
+ this.requests.forEach(request => {
132
+ request.requestTracker.cancel();
133
+ });
132
134
 
133
135
  this.txPool.removeListener('txs-added', this.handleTxsAddedToPool);
134
136
  this.txCollectionSink.removeListener('txs-added', this.handleTxsFound);
135
137
  }
136
138
 
137
- /** Force trigger the slow collection and reconciliation loops */
138
- public async trigger() {
139
- await Promise.all([this.reconcileFoundTxsLoop.trigger(), this.slowCollection.trigger()]);
140
- }
141
-
142
139
  /** Returns L1 rollup constants. */
143
140
  public getConstants(): L1RollupConstants {
144
141
  return this.constants;
145
142
  }
146
143
 
147
- /** Starts collecting the given tx hashes for the given L2Block in the slow loop */
148
- public startCollecting(block: L2Block, txHashes: TxHash[]) {
149
- return this.slowCollection.startCollecting(block, txHashes);
150
- }
151
-
152
- /** Collects the set of txs for the given block proposal as fast as possible */
153
- public collectFastForProposal(
154
- blockProposal: BlockProposal,
155
- blockNumber: number,
156
- txHashes: TxHash[] | string[],
157
- opts: { deadline: Date; pinnedPeer?: PeerId },
158
- ) {
159
- return this.collectFastFor({ type: 'proposal', blockProposal, blockNumber }, txHashes, opts);
160
- }
161
-
162
144
  /** Collects the set of txs for the given mined block as fast as possible */
163
145
  public collectFastForBlock(
164
146
  block: L2Block,
@@ -169,47 +151,318 @@ export class TxCollection {
169
151
  }
170
152
 
171
153
  /** Collects the set of txs for the given proposal or block as fast as possible */
172
- public collectFastFor(
154
+ public async collectFastFor(
173
155
  input: FastCollectionRequestInput,
174
156
  txHashes: TxHash[] | string[],
175
157
  opts: { deadline: Date; pinnedPeer?: PeerId },
176
158
  ) {
177
- return this.fastCollection.collectFastFor(input, txHashes, opts);
159
+ const timeout = opts.deadline.getTime() - this.dateProvider.now();
160
+ if (timeout <= 0) {
161
+ this.log.warn(`Deadline for fast tx collection is in the past (${timeout}ms)`, {
162
+ deadline: opts.deadline.getTime(),
163
+ now: this.dateProvider.now(),
164
+ });
165
+ return [];
166
+ }
167
+
168
+ const hashes = txHashes.map(h => (typeof h === 'string' ? TxHash.fromString(h) : h));
169
+
170
+ const blockInfo: L2BlockInfo =
171
+ input.type === 'proposal'
172
+ ? { ...input.blockProposal.toBlockInfo(), blockNumber: input.blockNumber }
173
+ : { ...input.block.toBlockInfo() };
174
+
175
+ const request: FastCollectionRequest = {
176
+ ...input,
177
+ blockInfo,
178
+ requestTracker: RequestTracker.create(hashes, opts.deadline, this.dateProvider),
179
+ };
180
+
181
+ const [duration] = await elapsed(() => this.collectFast(request, { pinnedPeer: opts.pinnedPeer }));
182
+
183
+ this.log.verbose(
184
+ `Collected ${request.requestTracker.collectedTxs.length} txs out of ${hashes.length} for ${input.type} at slot ${blockInfo.slotNumber}`,
185
+ {
186
+ ...blockInfo,
187
+ duration,
188
+ requestType: input.type,
189
+ missingTxs: [...request.requestTracker.missingTxHashes],
190
+ },
191
+ );
192
+ return request.requestTracker.collectedTxs;
178
193
  }
179
194
 
180
- /** Mark the given txs as found. Stops collecting them. */
195
+ protected async collectFast(request: FastCollectionRequest, opts: { pinnedPeer?: PeerId }) {
196
+ this.requests.add(request);
197
+ const { blockInfo } = request;
198
+
199
+ this.log.debug(
200
+ `Starting fast collection of ${request.requestTracker.numberOfMissingTxs} txs for ${request.type} at slot ${blockInfo.slotNumber}`,
201
+ { ...blockInfo, requestType: request.type, deadline: request.requestTracker.deadline },
202
+ );
203
+
204
+ try {
205
+ // 1. Start node collection in the background.
206
+ // Note: this will be a noop if no nodes are configured.
207
+ const nodeCollectionPromise = this.collectFastFromNodes(request);
208
+
209
+ // 2. Wait before starting reqresp, interruptible by cancellation or node exhaustion.
210
+ await Promise.race([
211
+ request.requestTracker.cancellationToken,
212
+ sleep(this.config.txCollectionFastNodesTimeoutBeforeReqRespMs),
213
+ nodeCollectionPromise, // If node collection has finished (or if there are no nodes configured), we can exit early.
214
+ ]);
215
+
216
+ // 3. Start reqresp in the background (runs in parallel with node collection).
217
+ // Note: this will be a noop if all TXs were already found.
218
+ const reqRespPromise = this.collectFastViaReqResp(request, opts);
219
+
220
+ // 4. Wait before starting file store, interruptible by cancellation.
221
+ await Promise.race([
222
+ request.requestTracker.cancellationToken,
223
+ sleep(this.config.txCollectionFileStoreFastDelayMs),
224
+ reqRespPromise, // If reqresp has finished, we can exit early.
225
+ ]);
226
+
227
+ // 5. Start file store collection in the background. Self-terminates on tracker cancel / all-found.
228
+ // Note: this will be a noop if all TXs were already found.
229
+ const fileStorePromise = this.fileStoreFastCollection.startCollecting(
230
+ request.requestTracker,
231
+ this.getAddContext(request),
232
+ );
233
+
234
+ // 6. Wait for all paths to settle.
235
+ // NOTE: The request will automatically be cancelled after `opt.deadline` is reached.
236
+ await Promise.allSettled([reqRespPromise, nodeCollectionPromise, fileStorePromise]);
237
+ } catch (err) {
238
+ this.log.error(`Error collecting txs for ${request.type} for slot ${blockInfo.slotNumber}`, err, {
239
+ ...blockInfo,
240
+ missingTxs: request.requestTracker.missingTxHashes.values().map(txHash => txHash.toString()),
241
+ });
242
+ } finally {
243
+ request.requestTracker.cancel();
244
+ this.requests.delete(request);
245
+ }
246
+ }
247
+
248
+ /**
249
+ * Starts collecting txs from all configured nodes. We send `txCollectionFastMaxParallelRequestsPerNode` requests
250
+ * in parallel to each node. We keep track of the number of attempts made to collect each tx, so we can prioritize
251
+ * the txs that have been requested less often whenever we need to send a new batch of requests. We ensure that no
252
+ * tx is requested more than once at the same time to the same node.
253
+ */
254
+ private async collectFastFromNodes(request: FastCollectionRequest): Promise<void> {
255
+ if (this.nodes.length === 0) {
256
+ return;
257
+ }
258
+
259
+ // Keep a shared priority queue of all txs pending to be requested, sorted by the number of attempts made to collect them.
260
+ const attemptsPerTx = [...request.requestTracker.missingTxHashes].map(txHash => ({
261
+ txHash,
262
+ attempts: 0,
263
+ found: false,
264
+ }));
265
+
266
+ // Returns once we have finished all node loops. Each loop finishes when the deadline is hit, or all txs have been collected.
267
+ await Promise.allSettled(this.nodes.map(node => this.collectFastFromNode(request, node, attemptsPerTx)));
268
+ }
269
+
270
+ private async collectFastFromNode(
271
+ request: FastCollectionRequest,
272
+ node: TxSource,
273
+ attemptsPerTx: { txHash: string; attempts: number; found: boolean }[],
274
+ ) {
275
+ const notFinished = () => !request.requestTracker.checkCancelled();
276
+
277
+ const maxParallelRequests = this.config.txCollectionFastMaxParallelRequestsPerNode;
278
+ const maxBatchSize = this.config.txCollectionNodeRpcMaxBatchSize;
279
+ const activeRequestsToThisNode = new Set<string>(); // Track the txs being actively requested to this node
280
+
281
+ const processBatch = async () => {
282
+ while (notFinished()) {
283
+ // Pull tx hashes from the attemptsPerTx array, which is sorted by attempts,
284
+ // so we prioritize txs that have been requested less often.
285
+ const batch = [];
286
+ let index = 0;
287
+ while (batch.length < maxBatchSize) {
288
+ const txToRequest = attemptsPerTx[index++];
289
+ if (!txToRequest) {
290
+ // No more txs to process
291
+ break;
292
+ } else if (!request.requestTracker.isMissing(txToRequest.txHash)) {
293
+ // Mark as found if it was found somewhere else, we'll then remove it from the array.
294
+ // We don't delete it now since 'array.splice' is pretty expensive, so we do it after sorting.
295
+ txToRequest.found = true;
296
+ } else if (!activeRequestsToThisNode.has(txToRequest.txHash)) {
297
+ // If the tx is not already being requested to this node, add it to the current batch and increase attempts.
298
+ // Note that we increase the attempts *before* making the request, so the next `collectFastFromNode` that
299
+ // needs to grab txs to send, will pick txs that have been requested less often, instead of all requesting
300
+ // the same txs at the same time.
301
+ batch.push(txToRequest);
302
+ activeRequestsToThisNode.add(txToRequest.txHash);
303
+ txToRequest.attempts++;
304
+ }
305
+ }
306
+
307
+ // After modifying the array by removing txs or updating attempts, re-sort it and trim the found txs from the end.
308
+ attemptsPerTx.sort((a, b) =>
309
+ a.found === b.found ? a.attempts - b.attempts : Number(a.found) - Number(b.found),
310
+ );
311
+ const firstFoundTxIndex = attemptsPerTx.findIndex(tx => tx.found);
312
+ if (firstFoundTxIndex !== -1) {
313
+ attemptsPerTx.length = firstFoundTxIndex;
314
+ }
315
+
316
+ // If we see no more txs to request, we can stop this "process" loop
317
+ if (batch.length === 0) {
318
+ return;
319
+ }
320
+
321
+ const txHashes = batch.map(({ txHash }) => txHash);
322
+ // Collect this batch from the node
323
+ await this.txCollectionSink.collect(
324
+ async () => {
325
+ const result = await node.getTxsByHash(txHashes.map(TxHash.fromString));
326
+ for (const tx of result.validTxs) {
327
+ request.requestTracker.markFetched(tx);
328
+ }
329
+ return result;
330
+ },
331
+ txHashes,
332
+ {
333
+ description: `fast ${node.getInfo()}`,
334
+ node: node.getInfo(),
335
+ method: 'fast-node-rpc',
336
+ ...request.blockInfo,
337
+ },
338
+ this.getAddContext(request),
339
+ );
340
+
341
+ // Clear from the active requests the txs we just requested
342
+ for (const requestedTx of batch) {
343
+ activeRequestsToThisNode.delete(requestedTx.txHash);
344
+ }
345
+
346
+ // Sleep a bit until hitting the node again, but wake up immediately on cancellation
347
+ if (notFinished()) {
348
+ await Promise.race([
349
+ sleep(this.config.txCollectionFastNodeIntervalMs),
350
+ request.requestTracker.cancellationToken,
351
+ ]);
352
+ }
353
+ }
354
+ };
355
+
356
+ // Kick off N parallel requests to the node, up to the maxParallelRequests limit
357
+ await Promise.all(times(maxParallelRequests, processBatch));
358
+ }
359
+
360
+ private async collectFastViaReqResp(request: FastCollectionRequest, opts: { pinnedPeer?: PeerId }) {
361
+ const pinnedPeer = opts.pinnedPeer;
362
+ const blockInfo = request.blockInfo;
363
+ const slotNumber = blockInfo.slotNumber;
364
+ if (request.requestTracker.timeoutMs < 100) {
365
+ this.log.warn(
366
+ `Not initiating fast reqresp for txs for ${request.type} at slot ${blockInfo.slotNumber} due to timeout`,
367
+ { timeoutMs: request.requestTracker.timeoutMs, ...blockInfo },
368
+ );
369
+ return;
370
+ }
371
+
372
+ if (request.requestTracker.checkCancelled()) {
373
+ this.log.debug(`No txs to collect via reqresp for ${request.type} at slot ${blockInfo.slotNumber}`, {
374
+ ...blockInfo,
375
+ });
376
+ return;
377
+ }
378
+
379
+ this.log.debug(
380
+ `Starting fast reqresp for ${request.requestTracker.numberOfMissingTxs} txs for ${request.type} at slot ${blockInfo.slotNumber}`,
381
+ { ...blockInfo, timeoutMs: request.requestTracker.timeoutMs, pinnedPeer },
382
+ );
383
+
384
+ try {
385
+ await this.txCollectionSink.collect(
386
+ async () => {
387
+ let blockTxsSource: BlockTxsSource;
388
+ if (request.type === 'proposal') {
389
+ blockTxsSource = request.blockProposal;
390
+ } else if (request.type === 'block') {
391
+ blockTxsSource = {
392
+ txHashes: request.block.body.txEffects.map(e => e.txHash),
393
+ archive: request.block.archive.root,
394
+ };
395
+ } else {
396
+ throw new Error(`Unknown request type: ${(request as { type: string }).type}`);
397
+ }
398
+
399
+ const result = await this.reqRespTxsCollector!(request.requestTracker, blockTxsSource, pinnedPeer);
400
+ return { validTxs: result, invalidTxHashes: [] };
401
+ },
402
+ Array.from(request.requestTracker.missingTxHashes),
403
+ { description: `reqresp for slot ${slotNumber}`, method: 'fast-req-resp', ...opts, ...request.blockInfo },
404
+ this.getAddContext(request),
405
+ );
406
+ } catch (err) {
407
+ this.log.error(`Error sending fast reqresp request for txs`, err, {
408
+ txs: [...request.requestTracker.missingTxHashes],
409
+ ...blockInfo,
410
+ });
411
+ }
412
+ }
413
+
414
+ /** Returns the TxAddContext for the given request, used by the sink to add txs to the pool correctly. */
415
+ private getAddContext(request: FastCollectionRequest): TxAddContext {
416
+ if (request.type === 'proposal') {
417
+ return { type: 'proposal', blockHeader: request.blockProposal.blockHeader };
418
+ } else {
419
+ return { type: 'mined', block: request.block };
420
+ }
421
+ }
422
+
423
+ /** Mark the given txs as found. Stops collecting them across all in-flight requests. */
181
424
  private foundTxs(txs: Tx[]) {
182
- this.slowCollection.foundTxs(txs);
183
- this.fastCollection.foundTxs(txs);
425
+ for (const request of this.requests) {
426
+ for (const tx of txs) {
427
+ if (request.requestTracker.markFetched(tx)) {
428
+ this.log.trace(`Found tx ${tx.txHash.toString()} for fast collection request`, {
429
+ ...request.blockInfo,
430
+ txHash: tx.txHash.toString(),
431
+ type: request.type,
432
+ });
433
+ if (request.requestTracker.allFetched()) {
434
+ this.log.trace(`All txs found for fast collection request`, {
435
+ ...request.blockInfo,
436
+ type: request.type,
437
+ });
438
+ break;
439
+ }
440
+ }
441
+ }
442
+ }
184
443
  }
185
444
 
186
445
  /**
187
- * Stop collecting all txs for blocks less than or requal to the block number specified.
446
+ * Stop collecting all txs for blocks less than or equal to the block number specified.
188
447
  * To be called when we no longer care about gathering txs up to a certain block, eg when they become proven or finalized.
189
448
  */
190
- public stopCollectingForBlocksUpTo(blockNumber: number): void {
191
- this.slowCollection.stopCollectingForBlocksUpTo(blockNumber);
192
- this.fastCollection.stopCollectingForBlocksUpTo(blockNumber);
449
+ public stopCollectingForBlocksUpTo(blockNumber: BlockNumber): void {
450
+ for (const request of this.requests) {
451
+ if (request.blockInfo.blockNumber <= blockNumber) {
452
+ request.requestTracker.cancel();
453
+ }
454
+ }
193
455
  }
194
456
 
195
457
  /**
196
458
  * Stop collecting all txs for blocks greater than the block number specified.
197
459
  * To be called when there is a chain prune and previously mined txs are no longer relevant.
198
460
  */
199
- public stopCollectingForBlocksAfter(blockNumber: number): void {
200
- this.slowCollection.stopCollectingForBlocksAfter(blockNumber);
201
- this.fastCollection.stopCollectingForBlocksAfter(blockNumber);
202
- }
203
-
204
- /** Every now and then, check if the pool has received one of the txs we are looking for, just to catch any race conditions */
205
- private async reconcileFoundTxsWithPool() {
206
- const missingTxHashes = this.slowCollection.getMissingTxHashes();
207
- const foundTxs = compactArray(await this.txPool.getTxsByHash(missingTxHashes));
208
- if (foundTxs.length > 0) {
209
- this.log.verbose(`Found ${foundTxs.length} txs in the pool during reconciliation`, {
210
- foundTxs: foundTxs.map(t => t.getTxHash().toString()),
211
- });
212
- this.foundTxs(foundTxs);
461
+ public stopCollectingForBlocksAfter(blockNumber: BlockNumber): void {
462
+ for (const request of this.requests) {
463
+ if (request.blockInfo.blockNumber > blockNumber) {
464
+ request.requestTracker.cancel();
465
+ }
213
466
  }
214
467
  }
215
468
  }