@aztec/p2p 0.0.1-commit.3469e52 → 0.0.1-commit.35158ae7e

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 (519) hide show
  1. package/README.md +129 -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 +4 -4
  5. package/dest/client/factory.d.ts +11 -11
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +59 -19
  8. package/dest/client/interface.d.ts +46 -33
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +41 -51
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +168 -224
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +304 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  19. package/dest/config.d.ts +65 -16
  20. package/dest/config.d.ts.map +1 -1
  21. package/dest/config.js +107 -39
  22. package/dest/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -1
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -0
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +445 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  40. package/dest/mem_pools/index.d.ts +3 -2
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +4 -2
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +18 -16
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +3 -3
  49. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +3 -2
  51. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +3 -2
  53. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +3 -3
  55. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +9 -1
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  58. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +3 -3
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  61. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  62. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool/priority.js +4 -4
  64. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  65. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  66. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  67. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  68. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  70. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  71. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  73. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  74. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  104. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  106. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  107. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  108. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  109. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  110. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  111. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  112. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +215 -0
  113. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  114. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  115. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +134 -0
  116. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  117. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +216 -0
  118. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  119. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  120. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  121. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  122. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  123. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  124. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  125. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  126. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  127. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  128. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  129. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +923 -0
  130. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
  131. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  132. package/dest/msg_validators/attestation_validator/attestation_validator.js +43 -11
  133. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  134. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
  136. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  137. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  138. package/dest/msg_validators/clock_tolerance.js +38 -0
  139. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  140. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  141. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  142. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  143. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  144. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  145. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  146. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  147. package/dest/msg_validators/proposal_validator/proposal_validator.js +84 -41
  148. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  149. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  150. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  151. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  152. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  154. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  155. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  156. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  157. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  158. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  160. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  161. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  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 +3 -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 +39 -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 +137 -5
  173. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  174. package/dest/msg_validators/tx_validator/factory.js +255 -58
  175. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  176. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  178. package/dest/msg_validators/tx_validator/gas_validator.d.ts +68 -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 +106 -38
  181. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  182. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/index.js +2 -0
  184. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  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 +75 -27
  193. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  194. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  195. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  196. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  197. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  198. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  199. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  200. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  201. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  202. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  203. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  204. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  205. package/dest/services/data_store.d.ts +1 -1
  206. package/dest/services/data_store.d.ts.map +1 -1
  207. package/dest/services/data_store.js +10 -6
  208. package/dest/services/discv5/discV5_service.d.ts +1 -1
  209. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  210. package/dest/services/discv5/discV5_service.js +5 -3
  211. package/dest/services/dummy_service.d.ts +24 -4
  212. package/dest/services/dummy_service.d.ts.map +1 -1
  213. package/dest/services/dummy_service.js +46 -1
  214. package/dest/services/encoding.d.ts +7 -3
  215. package/dest/services/encoding.d.ts.map +1 -1
  216. package/dest/services/encoding.js +18 -11
  217. package/dest/services/gossipsub/index.d.ts +3 -0
  218. package/dest/services/gossipsub/index.d.ts.map +1 -0
  219. package/dest/services/gossipsub/index.js +2 -0
  220. package/dest/services/gossipsub/scoring.d.ts +21 -3
  221. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  222. package/dest/services/gossipsub/scoring.js +24 -7
  223. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  224. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  225. package/dest/services/gossipsub/topic_score_params.js +346 -0
  226. package/dest/services/index.d.ts +2 -1
  227. package/dest/services/index.d.ts.map +1 -1
  228. package/dest/services/index.js +1 -0
  229. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  230. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  231. package/dest/services/libp2p/instrumentation.js +14 -3
  232. package/dest/services/libp2p/libp2p_service.d.ts +102 -46
  233. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  234. package/dest/services/libp2p/libp2p_service.js +585 -399
  235. package/dest/services/peer-manager/metrics.d.ts +4 -2
  236. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  237. package/dest/services/peer-manager/metrics.js +26 -5
  238. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  239. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  240. package/dest/services/peer-manager/peer_manager.js +6 -3
  241. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  242. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  243. package/dest/services/peer-manager/peer_scoring.js +33 -4
  244. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +51 -0
  245. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  246. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +543 -0
  247. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  248. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  249. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  250. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +47 -0
  251. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  252. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  253. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  254. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  255. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  256. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  257. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  258. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  259. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  260. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  261. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  262. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  263. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  264. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  265. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  266. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  267. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  268. package/dest/services/reqresp/interface.d.ts +14 -3
  269. package/dest/services/reqresp/interface.d.ts.map +1 -1
  270. package/dest/services/reqresp/interface.js +17 -3
  271. package/dest/services/reqresp/metrics.d.ts +6 -5
  272. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  273. package/dest/services/reqresp/metrics.js +17 -5
  274. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  275. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  276. package/dest/services/reqresp/protocols/block_txs/bitvector.js +5 -0
  277. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  278. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  279. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  280. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  281. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  282. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  283. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  284. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  285. package/dest/services/reqresp/protocols/tx.js +20 -0
  286. package/dest/services/reqresp/reqresp.d.ts +6 -1
  287. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  288. package/dest/services/reqresp/reqresp.js +86 -34
  289. package/dest/services/service.d.ts +48 -3
  290. package/dest/services/service.d.ts.map +1 -1
  291. package/dest/services/tx_collection/config.d.ts +22 -1
  292. package/dest/services/tx_collection/config.d.ts.map +1 -1
  293. package/dest/services/tx_collection/config.js +55 -1
  294. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -7
  295. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  296. package/dest/services/tx_collection/fast_tx_collection.js +95 -84
  297. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  298. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  299. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  300. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  301. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  302. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  303. package/dest/services/tx_collection/index.d.ts +3 -1
  304. package/dest/services/tx_collection/index.d.ts.map +1 -1
  305. package/dest/services/tx_collection/index.js +2 -0
  306. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  307. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  308. package/dest/services/tx_collection/instrumentation.js +10 -2
  309. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  310. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  311. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  312. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  313. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  314. package/dest/services/tx_collection/request_tracker.js +84 -0
  315. package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
  316. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  317. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  318. package/dest/services/tx_collection/tx_collection.d.ts +29 -19
  319. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  320. package/dest/services/tx_collection/tx_collection.js +79 -7
  321. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  322. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  323. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  324. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  325. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  326. package/dest/services/tx_collection/tx_source.js +19 -2
  327. package/dest/services/tx_file_store/config.d.ts +16 -0
  328. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  329. package/dest/services/tx_file_store/config.js +22 -0
  330. package/dest/services/tx_file_store/index.d.ts +4 -0
  331. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  332. package/dest/services/tx_file_store/index.js +3 -0
  333. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  334. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  335. package/dest/services/tx_file_store/instrumentation.js +29 -0
  336. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  337. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  338. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  339. package/dest/services/tx_provider.d.ts +6 -6
  340. package/dest/services/tx_provider.d.ts.map +1 -1
  341. package/dest/services/tx_provider.js +9 -8
  342. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  343. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  344. package/dest/services/tx_provider_instrumentation.js +5 -5
  345. package/dest/test-helpers/index.d.ts +3 -1
  346. package/dest/test-helpers/index.d.ts.map +1 -1
  347. package/dest/test-helpers/index.js +2 -0
  348. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  349. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  350. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  351. package/dest/test-helpers/mock-pubsub.d.ts +35 -4
  352. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  353. package/dest/test-helpers/mock-pubsub.js +114 -5
  354. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  355. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  356. package/dest/test-helpers/reqresp-nodes.js +4 -3
  357. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  358. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  359. package/dest/test-helpers/test_tx_provider.js +41 -0
  360. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  361. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  362. package/dest/test-helpers/testbench-utils.js +385 -0
  363. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  364. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  365. package/dest/testbench/p2p_client_testbench_worker.js +221 -138
  366. package/dest/testbench/worker_client_manager.d.ts +53 -6
  367. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  368. package/dest/testbench/worker_client_manager.js +231 -45
  369. package/dest/util.d.ts +10 -5
  370. package/dest/util.d.ts.map +1 -1
  371. package/dest/util.js +2 -9
  372. package/package.json +14 -14
  373. package/src/bootstrap/bootstrap.ts +7 -4
  374. package/src/client/factory.ts +109 -38
  375. package/src/client/interface.ts +56 -34
  376. package/src/client/p2p_client.ts +206 -273
  377. package/src/client/test/tx_proposal_collector/README.md +227 -0
  378. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +343 -0
  379. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  380. package/src/config.ts +170 -44
  381. package/src/errors/tx-pool.error.ts +12 -0
  382. package/src/index.ts +1 -0
  383. package/src/mem_pools/attestation_pool/attestation_pool.ts +497 -91
  384. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  385. package/src/mem_pools/attestation_pool/index.ts +9 -2
  386. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  387. package/src/mem_pools/index.ts +4 -1
  388. package/src/mem_pools/instrumentation.ts +19 -14
  389. package/src/mem_pools/interface.ts +4 -4
  390. package/src/mem_pools/tx_pool/README.md +1 -1
  391. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +2 -2
  392. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +2 -1
  393. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +2 -1
  394. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +11 -7
  395. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  396. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  397. package/src/mem_pools/tx_pool/priority.ts +4 -4
  398. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  399. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  400. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  401. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  402. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  403. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  404. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  405. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  406. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  407. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  408. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  409. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  410. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  411. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  412. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  413. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  414. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  415. package/src/mem_pools/tx_pool_v2/interfaces.ts +247 -0
  416. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +337 -0
  417. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  418. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  419. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  420. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1105 -0
  421. package/src/msg_validators/attestation_validator/README.md +49 -0
  422. package/src/msg_validators/attestation_validator/attestation_validator.ts +28 -15
  423. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -10
  424. package/src/msg_validators/clock_tolerance.ts +52 -0
  425. package/src/msg_validators/proposal_validator/README.md +123 -0
  426. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  427. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  428. package/src/msg_validators/proposal_validator/proposal_validator.ts +82 -51
  429. package/src/msg_validators/tx_validator/README.md +119 -0
  430. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  431. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  432. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  433. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  434. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  435. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  436. package/src/msg_validators/tx_validator/data_validator.ts +48 -3
  437. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  438. package/src/msg_validators/tx_validator/factory.ts +413 -56
  439. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  440. package/src/msg_validators/tx_validator/gas_validator.ts +132 -30
  441. package/src/msg_validators/tx_validator/index.ts +2 -0
  442. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  443. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  444. package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
  445. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  446. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  447. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  448. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  449. package/src/services/data_store.ts +10 -7
  450. package/src/services/discv5/discV5_service.ts +5 -3
  451. package/src/services/dummy_service.ts +59 -2
  452. package/src/services/encoding.ts +18 -10
  453. package/src/services/gossipsub/README.md +641 -0
  454. package/src/services/gossipsub/index.ts +2 -0
  455. package/src/services/gossipsub/scoring.ts +29 -5
  456. package/src/services/gossipsub/topic_score_params.ts +487 -0
  457. package/src/services/index.ts +1 -0
  458. package/src/services/libp2p/instrumentation.ts +15 -2
  459. package/src/services/libp2p/libp2p_service.ts +630 -437
  460. package/src/services/peer-manager/metrics.ts +28 -4
  461. package/src/services/peer-manager/peer_manager.ts +7 -3
  462. package/src/services/peer-manager/peer_scoring.ts +29 -1
  463. package/src/services/reqresp/README.md +229 -0
  464. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  465. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +673 -0
  466. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  467. package/src/services/reqresp/batch-tx-requester/interface.ts +54 -0
  468. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  469. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  470. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  471. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  472. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  473. package/src/services/reqresp/interface.ts +31 -3
  474. package/src/services/reqresp/metrics.ts +34 -9
  475. package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
  476. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  477. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  478. package/src/services/reqresp/protocols/tx.ts +22 -0
  479. package/src/services/reqresp/reqresp.ts +99 -32
  480. package/src/services/service.ts +62 -2
  481. package/src/services/tx_collection/config.ts +83 -1
  482. package/src/services/tx_collection/fast_tx_collection.ts +111 -91
  483. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  484. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  485. package/src/services/tx_collection/index.ts +6 -0
  486. package/src/services/tx_collection/instrumentation.ts +17 -2
  487. package/src/services/tx_collection/proposal_tx_collector.ts +108 -0
  488. package/src/services/tx_collection/request_tracker.ts +127 -0
  489. package/src/services/tx_collection/slow_tx_collection.ts +68 -35
  490. package/src/services/tx_collection/tx_collection.ts +122 -27
  491. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  492. package/src/services/tx_collection/tx_source.ts +22 -3
  493. package/src/services/tx_file_store/config.ts +37 -0
  494. package/src/services/tx_file_store/index.ts +3 -0
  495. package/src/services/tx_file_store/instrumentation.ts +36 -0
  496. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  497. package/src/services/tx_provider.ts +12 -11
  498. package/src/services/tx_provider_instrumentation.ts +11 -5
  499. package/src/test-helpers/index.ts +2 -0
  500. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  501. package/src/test-helpers/mock-pubsub.ts +155 -9
  502. package/src/test-helpers/reqresp-nodes.ts +5 -7
  503. package/src/test-helpers/test_tx_provider.ts +64 -0
  504. package/src/test-helpers/testbench-utils.ts +456 -0
  505. package/src/testbench/p2p_client_testbench_worker.ts +333 -132
  506. package/src/testbench/worker_client_manager.ts +312 -47
  507. package/src/util.ts +16 -14
  508. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  509. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  510. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  511. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  512. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  513. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  514. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  515. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  516. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -157
  517. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  518. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  519. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -191
@@ -1,12 +1,20 @@
1
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
1
2
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore, Gossipable } from '@aztec/stdlib/p2p';
4
+ import type {
5
+ BlockProposal,
6
+ CheckpointAttestation,
7
+ CheckpointProposalCore,
8
+ Gossipable,
9
+ TopicType,
10
+ } from '@aztec/stdlib/p2p';
4
11
  import type { Tx } from '@aztec/stdlib/tx';
5
12
 
6
13
  import type { PeerId } from '@libp2p/interface';
7
14
  import type { ENR } from '@nethermindeth/enr';
8
15
  import type EventEmitter from 'events';
9
16
 
17
+ import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
10
18
  import type { P2PReqRespConfig } from './reqresp/config.js';
11
19
  import type { StatusMessage } from './reqresp/index.js';
12
20
  import type {
@@ -42,6 +50,32 @@ export type P2PCheckpointReceivedCallback = (
42
50
 
43
51
  export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
44
52
 
53
+ /** Minimal info passed to the duplicate proposal callback. */
54
+ export type DuplicateProposalInfo = {
55
+ slot: SlotNumber;
56
+ proposer: EthAddress;
57
+ type: 'checkpoint' | 'block';
58
+ };
59
+
60
+ /**
61
+ * Callback for when a duplicate proposal is detected (equivocation).
62
+ * Invoked on the first duplicate (when count goes from 1 to 2).
63
+ */
64
+ export type P2PDuplicateProposalCallback = (info: DuplicateProposalInfo) => void;
65
+
66
+ /** Minimal info passed to the duplicate attestation callback. */
67
+ export type DuplicateAttestationInfo = {
68
+ slot: SlotNumber;
69
+ attester: EthAddress;
70
+ };
71
+
72
+ /**
73
+ * Callback for when a duplicate attestation is detected (equivocation).
74
+ * A validator signing attestations for different proposals at the same slot.
75
+ * Invoked on the first duplicate (when count goes from 1 to 2).
76
+ */
77
+ export type P2PDuplicateAttestationCallback = (info: DuplicateAttestationInfo) => void;
78
+
45
79
  /**
46
80
  * The interface for a P2P service implementation.
47
81
  */
@@ -85,11 +119,27 @@ export interface P2PService {
85
119
 
86
120
  registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
87
121
 
122
+ /**
123
+ * Registers a callback invoked when a duplicate proposal is detected (equivocation).
124
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
125
+ */
126
+ registerDuplicateProposalCallback(callback: P2PDuplicateProposalCallback): void;
127
+
128
+ /**
129
+ * Registers a callback invoked when a duplicate attestation is detected (equivocation).
130
+ * A validator signing attestations for different proposals at the same slot.
131
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
132
+ */
133
+ registerDuplicateAttestationCallback(callback: P2PDuplicateAttestationCallback): void;
134
+
88
135
  getEnr(): ENR | undefined;
89
136
 
90
137
  getPeers(includePending?: boolean): PeerInfo[];
91
138
 
92
- validate(txs: Tx[]): Promise<void>;
139
+ /** Returns the number of peers in the GossipSub mesh for a given topic type. */
140
+ getGossipMeshPeerCount(topicType: TopicType): number;
141
+
142
+ validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
93
143
 
94
144
  addReqRespSubProtocol(
95
145
  subProtocol: ReqRespSubProtocol,
@@ -103,6 +153,9 @@ export interface P2PService {
103
153
 
104
154
  /** If node running this P2P stack is validator, passes in validator address to P2P layer */
105
155
  registerThisValidatorAddresses(address: EthAddress[]): void;
156
+
157
+ /** Get BatchTxRequester service dependencies */
158
+ getBatchTxRequesterService(): BatchTxRequesterLibP2PService;
106
159
  }
107
160
 
108
161
  /**
@@ -143,6 +196,13 @@ export interface PeerDiscoveryService extends EventEmitter {
143
196
  on(event: 'peer:discovered', listener: (enr: ENR) => void): this;
144
197
  emit(event: 'peer:discovered', enr: ENR): boolean;
145
198
 
199
+ /**
200
+ * Event emitted when our public IP is discovered or changes via discv5 peer interactions.
201
+ * Only emitted when enrUpdate is enabled (i.e. queryForIp=true and no static p2pIp).
202
+ */
203
+ on(event: 'ip:changed', listener: (ip: string) => void): this;
204
+ emit(event: 'ip:changed', ip: string): boolean;
205
+
146
206
  getStatus(): PeerDiscoveryState;
147
207
 
148
208
  getEnr(): ENR | undefined;
@@ -1,6 +1,13 @@
1
- import { type ConfigMappingsType, booleanConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
1
+ import {
2
+ type ConfigMappingsType,
3
+ booleanConfigHelper,
4
+ enumConfigHelper,
5
+ numberConfigHelper,
6
+ } from '@aztec/foundation/config';
2
7
  import { MAX_RPC_TXS_LEN } from '@aztec/stdlib/interfaces/api-limit';
3
8
 
9
+ export type MissingTxsCollectorType = 'new' | 'old';
10
+
4
11
  export type TxCollectionConfig = {
5
12
  /** How long to wait before starting reqresp for fast collection */
6
13
  txCollectionFastNodesTimeoutBeforeReqRespMs: number;
@@ -22,6 +29,26 @@ export type TxCollectionConfig = {
22
29
  txCollectionFastMaxParallelRequestsPerNode: number;
23
30
  /** Maximum number of transactions to request from a node in a single batch */
24
31
  txCollectionNodeRpcMaxBatchSize: number;
32
+ /** Which collector implementation to use for missing txs collection */
33
+ txCollectionMissingTxsCollectorType: MissingTxsCollectorType;
34
+ /** A comma-separated list of file store URLs (s3://, gs://, file://, http://) for tx collection */
35
+ txCollectionFileStoreUrls: string[];
36
+ /** Delay in ms before file store collection starts after slow collection is triggered */
37
+ txCollectionFileStoreSlowDelayMs: number;
38
+ /** Delay in ms before file store collection starts after fast collection is triggered */
39
+ txCollectionFileStoreFastDelayMs: number;
40
+ /** Number of concurrent workers for fast file store collection */
41
+ txCollectionFileStoreFastWorkerCount: number;
42
+ /** Number of concurrent workers for slow file store collection */
43
+ txCollectionFileStoreSlowWorkerCount: number;
44
+ /** Base backoff time in ms for fast file store collection retries */
45
+ txCollectionFileStoreFastBackoffBaseMs: number;
46
+ /** Base backoff time in ms for slow file store collection retries */
47
+ txCollectionFileStoreSlowBackoffBaseMs: number;
48
+ /** Max backoff time in ms for fast file store collection retries */
49
+ txCollectionFileStoreFastBackoffMaxMs: number;
50
+ /** Max backoff time in ms for slow file store collection retries */
51
+ txCollectionFileStoreSlowBackoffMaxMs: number;
25
52
  };
26
53
 
27
54
  export const txCollectionConfigMappings: ConfigMappingsType<TxCollectionConfig> = {
@@ -81,4 +108,59 @@ export const txCollectionConfigMappings: ConfigMappingsType<TxCollectionConfig>
81
108
  description: 'Maximum number of transactions to request from a node in a single batch',
82
109
  ...numberConfigHelper(MAX_RPC_TXS_LEN),
83
110
  },
111
+ txCollectionMissingTxsCollectorType: {
112
+ env: 'TX_COLLECTION_MISSING_TXS_COLLECTOR_TYPE',
113
+ description: 'Which collector implementation to use for missing txs collection (new or old)',
114
+ ...enumConfigHelper(['new', 'old'] as const, 'new'),
115
+ },
116
+ txCollectionFileStoreUrls: {
117
+ env: 'TX_COLLECTION_FILE_STORE_URLS',
118
+ description: 'A comma-separated list of file store URLs (s3://, gs://, file://, http://) for tx collection',
119
+ parseEnv: (val: string) =>
120
+ val
121
+ .split(',')
122
+ .map(url => url.trim())
123
+ .filter(url => url.length > 0),
124
+ defaultValue: [],
125
+ },
126
+ txCollectionFileStoreSlowDelayMs: {
127
+ env: 'TX_COLLECTION_FILE_STORE_SLOW_DELAY_MS',
128
+ description: 'Delay before file store collection starts after slow collection',
129
+ ...numberConfigHelper(24_000),
130
+ },
131
+ txCollectionFileStoreFastDelayMs: {
132
+ env: 'TX_COLLECTION_FILE_STORE_FAST_DELAY_MS',
133
+ description: 'Delay before file store collection starts after fast collection',
134
+ ...numberConfigHelper(2_000),
135
+ },
136
+ txCollectionFileStoreFastWorkerCount: {
137
+ env: 'TX_COLLECTION_FILE_STORE_FAST_WORKER_COUNT',
138
+ description: 'Number of concurrent workers for fast file store collection',
139
+ ...numberConfigHelper(5),
140
+ },
141
+ txCollectionFileStoreSlowWorkerCount: {
142
+ env: 'TX_COLLECTION_FILE_STORE_SLOW_WORKER_COUNT',
143
+ description: 'Number of concurrent workers for slow file store collection',
144
+ ...numberConfigHelper(2),
145
+ },
146
+ txCollectionFileStoreFastBackoffBaseMs: {
147
+ env: 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_BASE_MS',
148
+ description: 'Base backoff time in ms for fast file store collection retries',
149
+ ...numberConfigHelper(1_000),
150
+ },
151
+ txCollectionFileStoreSlowBackoffBaseMs: {
152
+ env: 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_BASE_MS',
153
+ description: 'Base backoff time in ms for slow file store collection retries',
154
+ ...numberConfigHelper(5_000),
155
+ },
156
+ txCollectionFileStoreFastBackoffMaxMs: {
157
+ env: 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_MAX_MS',
158
+ description: 'Max backoff time in ms for fast file store collection retries',
159
+ ...numberConfigHelper(5_000),
160
+ },
161
+ txCollectionFileStoreSlowBackoffMaxMs: {
162
+ env: 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_MAX_MS',
163
+ description: 'Max backoff time in ms for slow file store collection retries',
164
+ ...numberConfigHelper(30_000),
165
+ },
84
166
  };
@@ -1,39 +1,53 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
2
  import { times } from '@aztec/foundation/collection';
3
- import { AbortError, TimeoutError } from '@aztec/foundation/error';
4
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
5
- import { boundInclusive } from '@aztec/foundation/number';
6
- import { promiseWithResolvers } from '@aztec/foundation/promise';
7
4
  import { sleep } from '@aztec/foundation/sleep';
8
5
  import { DateProvider, elapsed } from '@aztec/foundation/timer';
9
6
  import type { L2BlockInfo } from '@aztec/stdlib/block';
10
- import type { BlockProposal } from '@aztec/stdlib/p2p';
11
7
  import { type Tx, TxHash } from '@aztec/stdlib/tx';
12
8
 
13
9
  import type { PeerId } from '@libp2p/interface';
14
10
 
15
- import { type ReqRespInterface, ReqRespSubProtocol } from '../reqresp/interface.js';
16
- import { chunkTxHashesRequest } from '../reqresp/protocols/tx.js';
11
+ import type { BatchTxRequesterConfig } from '../reqresp/batch-tx-requester/config.js';
12
+ import type { BatchTxRequesterLibP2PService } from '../reqresp/batch-tx-requester/interface.js';
17
13
  import type { TxCollectionConfig } from './config.js';
14
+ import {
15
+ BatchTxRequesterCollector,
16
+ type MissingTxsCollector,
17
+ SendBatchRequestCollector,
18
+ } from './proposal_tx_collector.js';
19
+ import { RequestTracker } from './request_tracker.js';
18
20
  import type { FastCollectionRequest, FastCollectionRequestInput } from './tx_collection.js';
19
- import type { TxCollectionSink } from './tx_collection_sink.js';
21
+ import type { TxAddContext, TxCollectionSink } from './tx_collection_sink.js';
20
22
  import type { TxSource } from './tx_source.js';
21
23
 
22
24
  export class FastTxCollection {
23
25
  // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
24
26
  protected requests: Set<FastCollectionRequest> = new Set();
27
+ private missingTxsCollector: MissingTxsCollector;
25
28
 
26
29
  constructor(
27
- private reqResp: Pick<ReqRespInterface, 'sendBatchRequest'>,
30
+ p2pService: BatchTxRequesterLibP2PService,
28
31
  private nodes: TxSource[],
29
32
  private txCollectionSink: TxCollectionSink,
30
33
  private config: TxCollectionConfig,
31
34
  private dateProvider: DateProvider = new DateProvider(),
32
35
  private log: Logger = createLogger('p2p:tx_collection_service'),
33
- ) {}
36
+ missingTxsCollector?: MissingTxsCollector,
37
+ ) {
38
+ const batchTxRequesterConfig = this.config as Partial<BatchTxRequesterConfig>;
39
+ const missingTxsCollectorType = this.config.txCollectionMissingTxsCollectorType;
40
+ this.missingTxsCollector =
41
+ missingTxsCollector ??
42
+ (missingTxsCollectorType === 'old'
43
+ ? new SendBatchRequestCollector(p2pService)
44
+ : new BatchTxRequesterCollector(p2pService, log, dateProvider, undefined, batchTxRequesterConfig));
45
+ }
34
46
 
35
47
  public async stop() {
36
- this.requests.forEach(request => request.promise.reject(new AbortError(`Stopped collection service`)));
48
+ this.requests.forEach(request => {
49
+ request.requestTracker.cancel();
50
+ });
37
51
  await Promise.resolve();
38
52
  }
39
53
 
@@ -60,81 +74,65 @@ export class FastTxCollection {
60
74
  ? { ...input.blockProposal.toBlockInfo(), blockNumber: input.blockNumber }
61
75
  : { ...input.block.toBlockInfo() };
62
76
 
63
- // This promise is used to await for the collection to finish during the main collectFast method.
64
- // It gets resolved in `foundTxs` when all txs have been collected, or rejected if the request is aborted or hits the deadline.
65
- const promise = promiseWithResolvers<void>();
66
- setTimeout(() => promise.reject(new TimeoutError(`Timed out while collecting txs`)), timeout);
67
-
68
77
  const request: FastCollectionRequest = {
69
78
  ...input,
70
79
  blockInfo,
71
- promise,
72
- foundTxs: new Map<string, Tx>(),
73
- missingTxHashes: new Set(txHashes.map(t => t.toString())),
74
- deadline: opts.deadline,
80
+ requestTracker: RequestTracker.create(txHashes, opts.deadline, this.dateProvider),
75
81
  };
76
82
 
77
83
  const [duration] = await elapsed(() => this.collectFast(request, { ...opts }));
78
84
 
79
85
  this.log.verbose(
80
- `Collected ${request.foundTxs.size} txs out of ${txHashes.length} for ${input.type} at slot ${blockInfo.slotNumber}`,
86
+ `Collected ${request.requestTracker.collectedTxs.length} txs out of ${txHashes.length} for ${input.type} at slot ${blockInfo.slotNumber}`,
81
87
  {
82
88
  ...blockInfo,
83
89
  duration,
84
90
  requestType: input.type,
85
- missingTxs: [...request.missingTxHashes],
91
+ missingTxs: [...request.requestTracker.missingTxHashes],
86
92
  },
87
93
  );
88
- return [...request.foundTxs.values()];
94
+ return request.requestTracker.collectedTxs;
89
95
  }
90
96
 
91
- protected async collectFast(
92
- request: FastCollectionRequest,
93
- opts: { proposal?: BlockProposal; deadline: Date; pinnedPeer?: PeerId },
94
- ) {
97
+ protected async collectFast(request: FastCollectionRequest, opts: { pinnedPeer?: PeerId }) {
95
98
  this.requests.add(request);
96
99
  const { blockInfo } = request;
97
100
 
98
101
  this.log.debug(
99
- `Starting fast collection of ${request.missingTxHashes.size} txs for ${request.type} at slot ${blockInfo.slotNumber}`,
100
- { ...blockInfo, requestType: request.type, deadline: opts.deadline },
102
+ `Starting fast collection of ${request.requestTracker.numberOfMissingTxs} txs for ${request.type} at slot ${blockInfo.slotNumber}`,
103
+ { ...blockInfo, requestType: request.type, deadline: request.requestTracker.deadline },
101
104
  );
102
105
 
103
106
  try {
104
107
  // Start blasting all nodes for the txs. We give them a little time to respond before we start reqresp.
105
- // And keep an eye on the request promise to ensure we don't wait longer than the deadline or return as soon
106
- // as we have collected all txs, whatever the source.
107
- const nodeCollectionPromise = this.collectFastFromNodes(request, opts);
108
+ // We race against the cancellation token to exit as soon as all txs are collected, the deadline expires,
109
+ // or the request is externally cancelled.
110
+ const nodeCollectionPromise = this.collectFastFromNodes(request);
108
111
  const waitBeforeReqResp = sleep(this.config.txCollectionFastNodesTimeoutBeforeReqRespMs);
109
- await Promise.race([request.promise.promise, waitBeforeReqResp]);
112
+ await Promise.race([request.requestTracker.cancellationToken, waitBeforeReqResp]);
110
113
 
111
- // If we have collected all txs, we can stop here
112
- if (request.missingTxHashes.size === 0) {
113
- this.log.debug(`All txs collected for slot ${blockInfo.slotNumber} without reqresp`, blockInfo);
114
+ // If we have collected all txs or the request was cancelled, we can stop here.
115
+ // Wait for node collection to settle so inner tasks finish before we return.
116
+ if (request.requestTracker.checkCancelled()) {
117
+ if (request.requestTracker.allFetched()) {
118
+ this.log.debug(`All txs collected for slot ${blockInfo.slotNumber} without reqresp`, blockInfo);
119
+ }
120
+ await nodeCollectionPromise;
114
121
  return;
115
122
  }
116
123
 
117
124
  // Start blasting reqresp for the remaining txs. Note that node collection keeps running in parallel.
118
125
  // We stop when we have collected all txs, timed out, or both node collection and reqresp have given up.
119
- const collectionPromise = Promise.allSettled([this.collectFastViaReqResp(request, opts), nodeCollectionPromise]);
120
- await Promise.race([collectionPromise, request.promise.promise]);
126
+ // Inner tasks observe requestTracker.checkCancelled() and stop themselves, so this settles shortly after cancellation.
127
+ await Promise.allSettled([this.collectFastViaReqResp(request, opts), nodeCollectionPromise]);
121
128
  } catch (err) {
122
- // Log and swallow all errors
123
- const logCtx = {
129
+ this.log.error(`Error collecting txs for ${request.type} for slot ${blockInfo.slotNumber}`, err, {
124
130
  ...blockInfo,
125
- errorMessage: err instanceof Error ? err.message : undefined,
126
- missingTxs: [...request.missingTxHashes].map(txHash => txHash.toString()),
127
- };
128
- if (err instanceof Error && err.name === 'TimeoutError') {
129
- this.log.warn(`Timed out collecting txs for ${request.type} at slot ${blockInfo.slotNumber}`, logCtx);
130
- } else if (err instanceof Error && err.name === 'AbortError') {
131
- this.log.warn(`Aborted collecting txs for ${request.type} at slot ${blockInfo.slotNumber}`, logCtx);
132
- } else {
133
- this.log.error(`Error collecting txs for ${request.type} for slot ${blockInfo.slotNumber}`, err, logCtx);
134
- }
131
+ missingTxs: request.requestTracker.missingTxHashes.values().map(txHash => txHash.toString()),
132
+ });
135
133
  } finally {
136
134
  // Ensure no unresolved promises and remove the request from the set
137
- request.promise.resolve();
135
+ request.requestTracker.cancel();
138
136
  this.requests.delete(request);
139
137
  }
140
138
  }
@@ -145,26 +143,28 @@ export class FastTxCollection {
145
143
  * the txs that have been requested less often whenever we need to send a new batch of requests. We ensure that no
146
144
  * tx is requested more than once at the same time to the same node.
147
145
  */
148
- private async collectFastFromNodes(request: FastCollectionRequest, opts: { deadline: Date }): Promise<void> {
146
+ private async collectFastFromNodes(request: FastCollectionRequest): Promise<void> {
149
147
  if (this.nodes.length === 0) {
150
148
  return;
151
149
  }
152
150
 
153
151
  // Keep a shared priority queue of all txs pending to be requested, sorted by the number of attempts made to collect them.
154
- const attemptsPerTx = [...request.missingTxHashes].map(txHash => ({ txHash, attempts: 0, found: false }));
152
+ const attemptsPerTx = [...request.requestTracker.missingTxHashes].map(txHash => ({
153
+ txHash,
154
+ attempts: 0,
155
+ found: false,
156
+ }));
155
157
 
156
158
  // Returns once we have finished all node loops. Each loop finishes when the deadline is hit, or all txs have been collected.
157
- await Promise.allSettled(this.nodes.map(node => this.collectFastFromNode(request, node, attemptsPerTx, opts)));
159
+ await Promise.allSettled(this.nodes.map(node => this.collectFastFromNode(request, node, attemptsPerTx)));
158
160
  }
159
161
 
160
162
  private async collectFastFromNode(
161
163
  request: FastCollectionRequest,
162
164
  node: TxSource,
163
165
  attemptsPerTx: { txHash: string; attempts: number; found: boolean }[],
164
- opts: { deadline: Date },
165
166
  ) {
166
- const notFinished = () =>
167
- this.dateProvider.now() <= +opts.deadline && request.missingTxHashes.size > 0 && this.requests.has(request);
167
+ const notFinished = () => !request.requestTracker.checkCancelled();
168
168
 
169
169
  const maxParallelRequests = this.config.txCollectionFastMaxParallelRequestsPerNode;
170
170
  const maxBatchSize = this.config.txCollectionNodeRpcMaxBatchSize;
@@ -181,7 +181,7 @@ export class FastTxCollection {
181
181
  if (!txToRequest) {
182
182
  // No more txs to process
183
183
  break;
184
- } else if (!request.missingTxHashes.has(txToRequest.txHash)) {
184
+ } else if (!request.requestTracker.isMissing(txToRequest.txHash)) {
185
185
  // Mark as found if it was found somewhere else, we'll then remove it from the array.
186
186
  // We don't delete it now since 'array.splice' is pretty expensive, so we do it after sorting.
187
187
  txToRequest.found = true;
@@ -210,16 +210,24 @@ export class FastTxCollection {
210
210
  return;
211
211
  }
212
212
 
213
+ const txHashes = batch.map(({ txHash }) => txHash);
213
214
  // Collect this batch from the node
214
215
  await this.txCollectionSink.collect(
215
- txHashes => node.getTxsByHash(txHashes),
216
- batch.map(({ txHash }) => TxHash.fromString(txHash)),
216
+ async () => {
217
+ const result = await node.getTxsByHash(txHashes.map(TxHash.fromString));
218
+ for (const tx of result.validTxs) {
219
+ request.requestTracker.markFetched(tx);
220
+ }
221
+ return result;
222
+ },
223
+ txHashes,
217
224
  {
218
225
  description: `fast ${node.getInfo()}`,
219
226
  node: node.getInfo(),
220
227
  method: 'fast-node-rpc',
221
228
  ...request.blockInfo,
222
229
  },
230
+ this.getAddContext(request),
223
231
  );
224
232
 
225
233
  // Clear from the active requests the txs we just requested
@@ -227,9 +235,12 @@ export class FastTxCollection {
227
235
  activeRequestsToThisNode.delete(requestedTx.txHash);
228
236
  }
229
237
 
230
- // Sleep a bit until hitting the node again (or not, depending on config)
238
+ // Sleep a bit until hitting the node again, but wake up immediately on cancellation
231
239
  if (notFinished()) {
232
- await sleep(this.config.txCollectionFastNodeIntervalMs);
240
+ await Promise.race([
241
+ sleep(this.config.txCollectionFastNodeIntervalMs),
242
+ request.requestTracker.cancellationToken,
243
+ ]);
233
244
  }
234
245
  }
235
246
  };
@@ -239,50 +250,64 @@ export class FastTxCollection {
239
250
  }
240
251
 
241
252
  private async collectFastViaReqResp(request: FastCollectionRequest, opts: { pinnedPeer?: PeerId }) {
242
- const timeoutMs = +request.deadline - this.dateProvider.now();
243
253
  const pinnedPeer = opts.pinnedPeer;
244
- const maxPeers = boundInclusive(Math.ceil(request.missingTxHashes.size / 2), 8, 32);
245
- const maxRetryAttempts = 5;
246
254
  const blockInfo = request.blockInfo;
247
255
  const slotNumber = blockInfo.slotNumber;
248
- if (timeoutMs < 100) {
256
+ if (request.requestTracker.timeoutMs < 100) {
249
257
  this.log.warn(
250
258
  `Not initiating fast reqresp for txs for ${request.type} at slot ${blockInfo.slotNumber} due to timeout`,
251
- { timeoutMs, ...blockInfo },
259
+ { timeoutMs: request.requestTracker.timeoutMs, ...blockInfo },
252
260
  );
253
261
  return;
254
262
  }
255
263
 
256
264
  this.log.debug(
257
- `Starting fast reqresp for ${request.missingTxHashes.size} txs for ${request.type} at slot ${blockInfo.slotNumber}`,
258
- { ...blockInfo, timeoutMs, pinnedPeer },
265
+ `Starting fast reqresp for ${request.requestTracker.numberOfMissingTxs} txs for ${request.type} at slot ${blockInfo.slotNumber}`,
266
+ { ...blockInfo, timeoutMs: request.requestTracker.timeoutMs, pinnedPeer },
259
267
  );
260
268
 
261
269
  try {
262
270
  await this.txCollectionSink.collect(
263
- async txHashes => {
264
- const txs = await this.reqResp.sendBatchRequest<ReqRespSubProtocol.TX>(
265
- ReqRespSubProtocol.TX,
266
- chunkTxHashesRequest(txHashes),
267
- pinnedPeer,
268
- timeoutMs,
269
- maxPeers,
270
- maxRetryAttempts,
271
- );
272
-
273
- return txs.flat();
271
+ async () => {
272
+ let result: Tx[];
273
+ if (request.type === 'proposal') {
274
+ result = await this.missingTxsCollector.collectTxs(
275
+ request.requestTracker,
276
+ request.blockProposal,
277
+ pinnedPeer,
278
+ );
279
+ } else if (request.type === 'block') {
280
+ const blockTxsSource = {
281
+ txHashes: request.block.body.txEffects.map(e => e.txHash),
282
+ archive: request.block.archive.root,
283
+ };
284
+ result = await this.missingTxsCollector.collectTxs(request.requestTracker, blockTxsSource, pinnedPeer);
285
+ } else {
286
+ throw new Error(`Unknown request type: ${(request as any).type}`);
287
+ }
288
+ return { validTxs: result, invalidTxHashes: [] };
274
289
  },
275
- Array.from(request.missingTxHashes).map(txHash => TxHash.fromString(txHash)),
290
+ Array.from(request.requestTracker.missingTxHashes),
276
291
  { description: `reqresp for slot ${slotNumber}`, method: 'fast-req-resp', ...opts, ...request.blockInfo },
292
+ this.getAddContext(request),
277
293
  );
278
294
  } catch (err) {
279
295
  this.log.error(`Error sending fast reqresp request for txs`, err, {
280
- txs: [...request.missingTxHashes],
296
+ txs: [...request.requestTracker.missingTxHashes],
281
297
  ...blockInfo,
282
298
  });
283
299
  }
284
300
  }
285
301
 
302
+ /** Returns the TxAddContext for the given request, used by the sink to add txs to the pool correctly. */
303
+ private getAddContext(request: FastCollectionRequest): TxAddContext {
304
+ if (request.type === 'proposal') {
305
+ return { type: 'proposal', blockHeader: request.blockProposal.blockHeader };
306
+ } else {
307
+ return { type: 'mined', block: request.block };
308
+ }
309
+ }
310
+
286
311
  /**
287
312
  * Handle txs by marking them as found for the requests that are waiting for them, and resolves the request if all its txs have been found.
288
313
  * Called internally and from the main tx collection manager whenever the tx pool emits a tx-added event.
@@ -292,21 +317,18 @@ export class FastTxCollection {
292
317
  for (const tx of txs) {
293
318
  const txHash = tx.txHash.toString();
294
319
  // Remove the tx hash from the missing set, and add it to the found set.
295
- if (request.missingTxHashes.has(txHash)) {
296
- request.missingTxHashes.delete(txHash);
297
- request.foundTxs.set(txHash, tx);
320
+ if (request.requestTracker.markFetched(tx)) {
298
321
  this.log.trace(`Found tx ${txHash} for fast collection request`, {
299
322
  ...request.blockInfo,
300
323
  txHash: tx.txHash.toString(),
301
324
  type: request.type,
302
325
  });
303
- // If we found all txs for this request, we resolve the promise
304
- if (request.missingTxHashes.size === 0) {
326
+ if (request.requestTracker.allFetched()) {
305
327
  this.log.trace(`All txs found for fast collection request`, {
306
328
  ...request.blockInfo,
307
329
  type: request.type,
308
330
  });
309
- request.promise.resolve();
331
+ break;
310
332
  }
311
333
  }
312
334
  }
@@ -320,8 +342,7 @@ export class FastTxCollection {
320
342
  public stopCollectingForBlocksUpTo(blockNumber: BlockNumber): void {
321
343
  for (const request of this.requests) {
322
344
  if (request.blockInfo.blockNumber <= blockNumber) {
323
- request.promise.reject(new AbortError(`Stopped collecting txs up to block ${blockNumber}`));
324
- this.requests.delete(request);
345
+ request.requestTracker.cancel();
325
346
  }
326
347
  }
327
348
  }
@@ -333,8 +354,7 @@ export class FastTxCollection {
333
354
  public stopCollectingForBlocksAfter(blockNumber: BlockNumber): void {
334
355
  for (const request of this.requests) {
335
356
  if (request.blockInfo.blockNumber > blockNumber) {
336
- request.promise.reject(new AbortError(`Stopped collecting txs after block ${blockNumber}`));
337
- this.requests.delete(request);
357
+ request.requestTracker.cancel();
338
358
  }
339
359
  }
340
360
  }