@aztec/p2p 0.0.1-commit.c31f2472 → 0.0.1-commit.c52d6e7

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 (559) hide show
  1. package/README.md +130 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +22 -6
  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 +67 -18
  8. package/dest/client/interface.d.ts +93 -40
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +69 -64
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +247 -244
  13. package/dest/config.d.ts +168 -89
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +157 -45
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  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 -2
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +164 -106
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +518 -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 +550 -125
  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 +7 -5
  40. package/dest/mem_pools/index.d.ts +3 -3
  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 +12 -5
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +38 -17
  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_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +39 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +97 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +99 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +15 -35
  78. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +92 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +79 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  90. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  91. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  93. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  96. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
  97. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +122 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +368 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +68 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +178 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +91 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1013 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +8 -4
  118. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  120. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +12 -5
  121. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
  123. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +12 -5
  124. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
  126. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +36 -9
  127. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/proposal_validator.js +130 -48
  129. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  130. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  132. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  133. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  135. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  136. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  137. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  138. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  139. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +18 -5
  141. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/block_header_validator.js +2 -2
  143. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  144. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  146. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  147. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  149. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  150. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  151. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  152. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  153. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  155. package/dest/msg_validators/tx_validator/factory.d.ts +133 -7
  156. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/factory.js +261 -61
  158. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  159. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  161. package/dest/msg_validators/tx_validator/gas_validator.d.ts +104 -3
  162. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
  164. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  165. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/index.js +4 -0
  167. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  168. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  170. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  171. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  173. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  174. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  176. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  177. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/timestamp_validator.js +7 -7
  179. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  180. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  181. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  182. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  183. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  184. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  185. package/dest/services/data_store.d.ts +1 -1
  186. package/dest/services/data_store.d.ts.map +1 -1
  187. package/dest/services/data_store.js +14 -10
  188. package/dest/services/discv5/discV5_service.d.ts +13 -2
  189. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  190. package/dest/services/discv5/discV5_service.js +119 -23
  191. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  192. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  193. package/dest/services/discv5/persisted_enr_store.js +145 -0
  194. package/dest/services/dummy_service.d.ts +26 -18
  195. package/dest/services/dummy_service.d.ts.map +1 -1
  196. package/dest/services/dummy_service.js +25 -20
  197. package/dest/services/encoding.d.ts +24 -7
  198. package/dest/services/encoding.d.ts.map +1 -1
  199. package/dest/services/encoding.js +43 -26
  200. package/dest/services/gossipsub/index.d.ts +3 -0
  201. package/dest/services/gossipsub/index.d.ts.map +1 -0
  202. package/dest/services/gossipsub/index.js +2 -0
  203. package/dest/services/gossipsub/scoring.d.ts +21 -3
  204. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  205. package/dest/services/gossipsub/scoring.js +24 -7
  206. package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
  207. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  208. package/dest/services/gossipsub/topic_score_params.js +336 -0
  209. package/dest/services/index.d.ts +2 -1
  210. package/dest/services/index.d.ts.map +1 -1
  211. package/dest/services/index.js +1 -0
  212. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  213. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  214. package/dest/services/libp2p/instrumentation.js +14 -0
  215. package/dest/services/libp2p/libp2p_service.d.ts +112 -61
  216. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  217. package/dest/services/libp2p/libp2p_service.js +808 -583
  218. package/dest/services/peer-manager/metrics.d.ts +3 -1
  219. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  220. package/dest/services/peer-manager/metrics.js +6 -0
  221. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  222. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  223. package/dest/services/peer-manager/peer_manager.js +83 -26
  224. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  225. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  226. package/dest/services/peer-manager/peer_scoring.js +127 -15
  227. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +7 -10
  228. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  229. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +100 -132
  230. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +11 -11
  231. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  232. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  233. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  234. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  235. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  236. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  237. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  238. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  239. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  240. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  241. package/dest/services/reqresp/config.d.ts +15 -3
  242. package/dest/services/reqresp/config.d.ts.map +1 -1
  243. package/dest/services/reqresp/config.js +11 -0
  244. package/dest/services/reqresp/interface.d.ts +25 -18
  245. package/dest/services/reqresp/interface.d.ts.map +1 -1
  246. package/dest/services/reqresp/interface.js +23 -19
  247. package/dest/services/reqresp/metrics.d.ts +1 -1
  248. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  249. package/dest/services/reqresp/metrics.js +0 -1
  250. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  251. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  252. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  253. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  254. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  255. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +34 -26
  256. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +33 -17
  257. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  258. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +72 -38
  259. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  260. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  261. package/dest/services/reqresp/protocols/index.js +0 -1
  262. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  263. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  264. package/dest/services/reqresp/protocols/tx.js +21 -3
  265. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  266. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  267. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  268. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  269. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  270. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  271. package/dest/services/reqresp/reqresp.d.ts +7 -29
  272. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  273. package/dest/services/reqresp/reqresp.js +85 -219
  274. package/dest/services/service.d.ts +66 -13
  275. package/dest/services/service.d.ts.map +1 -1
  276. package/dest/services/tx_collection/config.d.ts +11 -14
  277. package/dest/services/tx_collection/config.d.ts.map +1 -1
  278. package/dest/services/tx_collection/config.js +26 -33
  279. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  280. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  281. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  282. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  283. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  284. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  285. package/dest/services/tx_collection/index.d.ts +3 -3
  286. package/dest/services/tx_collection/index.d.ts.map +1 -1
  287. package/dest/services/tx_collection/index.js +1 -1
  288. package/dest/services/tx_collection/instrumentation.js +1 -2
  289. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  290. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  291. package/dest/services/tx_collection/request_tracker.js +84 -0
  292. package/dest/services/tx_collection/tx_collection.d.ts +45 -51
  293. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  294. package/dest/services/tx_collection/tx_collection.js +296 -68
  295. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  296. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  297. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  298. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  299. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  300. package/dest/services/tx_collection/tx_source.js +29 -7
  301. package/dest/services/tx_file_store/config.d.ts +16 -0
  302. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  303. package/dest/services/tx_file_store/config.js +22 -0
  304. package/dest/services/tx_file_store/index.d.ts +4 -0
  305. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  306. package/dest/services/tx_file_store/index.js +3 -0
  307. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  308. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  309. package/dest/services/tx_file_store/instrumentation.js +29 -0
  310. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  311. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  312. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  313. package/dest/services/tx_provider.d.ts +6 -4
  314. package/dest/services/tx_provider.d.ts.map +1 -1
  315. package/dest/services/tx_provider.js +12 -8
  316. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  317. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  318. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  319. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  320. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  321. package/dest/test-helpers/mock-pubsub.js +115 -14
  322. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  323. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  324. package/dest/test-helpers/reqresp-nodes.js +19 -20
  325. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  326. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  327. package/dest/test-helpers/test_tx_provider.js +3 -0
  328. package/dest/test-helpers/testbench-utils.d.ts +58 -50
  329. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  330. package/dest/test-helpers/testbench-utils.js +181 -76
  331. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  332. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  333. package/dest/testbench/p2p_client_testbench_worker.js +114 -51
  334. package/dest/testbench/worker_client_manager.d.ts +12 -6
  335. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  336. package/dest/testbench/worker_client_manager.js +57 -11
  337. package/dest/util.d.ts +13 -8
  338. package/dest/util.d.ts.map +1 -1
  339. package/dest/util.js +35 -14
  340. package/dest/versioning.d.ts +3 -6
  341. package/dest/versioning.d.ts.map +1 -1
  342. package/dest/versioning.js +3 -24
  343. package/package.json +15 -16
  344. package/src/bootstrap/bootstrap.ts +17 -3
  345. package/src/client/factory.ts +135 -31
  346. package/src/client/interface.ts +100 -48
  347. package/src/client/p2p_client.ts +289 -310
  348. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  349. package/src/config.ts +282 -49
  350. package/src/errors/p2p-service.error.ts +11 -0
  351. package/src/errors/reqresp.error.ts +13 -19
  352. package/src/errors/tx-pool.error.ts +12 -0
  353. package/src/index.ts +1 -1
  354. package/src/mem_pools/attestation_pool/attestation_pool.ts +585 -94
  355. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +656 -141
  356. package/src/mem_pools/attestation_pool/index.ts +9 -2
  357. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  358. package/src/mem_pools/index.ts +2 -2
  359. package/src/mem_pools/instrumentation.ts +27 -17
  360. package/src/mem_pools/interface.ts +4 -4
  361. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  362. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  363. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  364. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  365. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  366. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +120 -0
  367. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +126 -0
  368. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  369. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
  370. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  371. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +72 -0
  372. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +99 -0
  373. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +90 -0
  374. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  375. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  376. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  377. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  378. package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
  379. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  380. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  381. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +465 -0
  382. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +252 -0
  383. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1215 -0
  384. package/src/msg_validators/attestation_validator/README.md +49 -0
  385. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
  386. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +17 -9
  387. package/src/msg_validators/proposal_validator/README.md +123 -0
  388. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
  389. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
  390. package/src/msg_validators/proposal_validator/proposal_validator.ts +155 -49
  391. package/src/msg_validators/tx_validator/README.md +129 -0
  392. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  393. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  394. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  395. package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
  396. package/src/msg_validators/tx_validator/block_header_validator.ts +18 -8
  397. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  398. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  399. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  400. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  401. package/src/msg_validators/tx_validator/factory.ts +413 -80
  402. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  403. package/src/msg_validators/tx_validator/gas_validator.ts +195 -54
  404. package/src/msg_validators/tx_validator/index.ts +4 -0
  405. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  406. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  407. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  408. package/src/msg_validators/tx_validator/timestamp_validator.ts +24 -19
  409. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  410. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  411. package/src/services/data_store.ts +14 -19
  412. package/src/services/discv5/discV5_service.ts +126 -14
  413. package/src/services/discv5/persisted_enr_store.ts +158 -0
  414. package/src/services/dummy_service.ts +38 -45
  415. package/src/services/encoding.ts +42 -26
  416. package/src/services/gossipsub/README.md +663 -0
  417. package/src/services/gossipsub/index.ts +2 -0
  418. package/src/services/gossipsub/scoring.ts +29 -5
  419. package/src/services/gossipsub/topic_score_params.ts +478 -0
  420. package/src/services/index.ts +1 -0
  421. package/src/services/libp2p/instrumentation.ts +14 -0
  422. package/src/services/libp2p/libp2p_service.ts +880 -641
  423. package/src/services/peer-manager/metrics.ts +7 -0
  424. package/src/services/peer-manager/peer_manager.ts +91 -25
  425. package/src/services/peer-manager/peer_scoring.ts +127 -8
  426. package/src/services/reqresp/README.md +194 -0
  427. package/src/services/reqresp/batch-tx-requester/README.md +60 -21
  428. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +101 -147
  429. package/src/services/reqresp/batch-tx-requester/interface.ts +14 -10
  430. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  431. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  432. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  433. package/src/services/reqresp/config.ts +19 -2
  434. package/src/services/reqresp/interface.ts +45 -46
  435. package/src/services/reqresp/metrics.ts +0 -1
  436. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  437. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +43 -30
  438. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +86 -36
  439. package/src/services/reqresp/protocols/index.ts +0 -1
  440. package/src/services/reqresp/protocols/tx.ts +23 -3
  441. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  442. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  443. package/src/services/reqresp/reqresp.ts +100 -263
  444. package/src/services/service.ts +85 -29
  445. package/src/services/tx_collection/config.ts +40 -49
  446. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  447. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  448. package/src/services/tx_collection/index.ts +2 -6
  449. package/src/services/tx_collection/instrumentation.ts +1 -1
  450. package/src/services/tx_collection/request_tracker.ts +127 -0
  451. package/src/services/tx_collection/tx_collection.ts +362 -110
  452. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  453. package/src/services/tx_collection/tx_source.ts +29 -8
  454. package/src/services/tx_file_store/config.ts +37 -0
  455. package/src/services/tx_file_store/index.ts +3 -0
  456. package/src/services/tx_file_store/instrumentation.ts +36 -0
  457. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  458. package/src/services/tx_provider.ts +15 -9
  459. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  460. package/src/test-helpers/mock-pubsub.ts +137 -14
  461. package/src/test-helpers/reqresp-nodes.ts +17 -29
  462. package/src/test-helpers/test_tx_provider.ts +5 -0
  463. package/src/test-helpers/testbench-utils.ts +188 -94
  464. package/src/testbench/p2p_client_testbench_worker.ts +123 -66
  465. package/src/testbench/worker_client_manager.ts +72 -25
  466. package/src/util.ts +40 -19
  467. package/src/versioning.ts +3 -33
  468. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  469. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  470. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  471. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  472. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  473. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  474. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  475. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  476. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  477. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  478. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  479. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  480. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  481. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  482. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  483. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  484. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  485. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  486. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  487. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  488. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  489. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  490. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  491. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  492. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  493. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  494. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  495. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  496. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  497. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  498. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  499. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  500. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  501. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  502. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  503. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  504. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  505. package/dest/mem_pools/tx_pool/index.js +0 -2
  506. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  507. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  508. package/dest/mem_pools/tx_pool/priority.js +0 -15
  509. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  510. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  511. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  512. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  513. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  514. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  515. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  516. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  517. package/dest/msg_validators/clock_tolerance.js +0 -37
  518. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  519. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  520. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  521. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  522. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  523. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  524. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  525. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  526. package/dest/services/reqresp/protocols/block.js +0 -32
  527. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -53
  528. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  529. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  530. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  531. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  532. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  533. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  534. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  535. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  536. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -336
  537. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  538. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  539. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  540. package/src/mem_pools/tx_pool/README.md +0 -270
  541. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  542. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  543. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  544. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  545. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  546. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  547. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  548. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  549. package/src/mem_pools/tx_pool/index.ts +0 -2
  550. package/src/mem_pools/tx_pool/priority.ts +0 -20
  551. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  552. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  553. package/src/msg_validators/clock_tolerance.ts +0 -51
  554. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  555. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  556. package/src/services/reqresp/protocols/block.ts +0 -37
  557. package/src/services/tx_collection/fast_tx_collection.ts +0 -364
  558. package/src/services/tx_collection/proposal_tx_collector.ts +0 -114
  559. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -1,6 +1,13 @@
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';
@@ -10,12 +17,7 @@ import type EventEmitter from 'events';
10
17
  import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
11
18
  import type { P2PReqRespConfig } from './reqresp/config.js';
12
19
  import type { StatusMessage } from './reqresp/index.js';
13
- import type {
14
- ReqRespSubProtocol,
15
- ReqRespSubProtocolHandler,
16
- ReqRespSubProtocolValidators,
17
- SubProtocolMap,
18
- } from './reqresp/interface.js';
20
+ import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from './reqresp/interface.js';
19
21
  import type { AuthRequest, AuthResponse } from './reqresp/protocols/auth.js';
20
22
 
21
23
  export enum PeerDiscoveryState {
@@ -43,6 +45,47 @@ export type P2PCheckpointReceivedCallback = (
43
45
 
44
46
  export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
45
47
 
48
+ /** Minimal info passed to the duplicate proposal callback. */
49
+ export type DuplicateProposalInfo = {
50
+ slot: SlotNumber;
51
+ proposer: EthAddress;
52
+ type: 'checkpoint' | 'block';
53
+ };
54
+
55
+ /**
56
+ * Callback for when a duplicate proposal is detected (equivocation).
57
+ * Invoked on the first duplicate (when count goes from 1 to 2).
58
+ */
59
+ export type P2PDuplicateProposalCallback = (info: DuplicateProposalInfo) => void;
60
+
61
+ /** Minimal info passed to the oversized proposal callback. */
62
+ export type OversizedProposalInfo = {
63
+ slot: SlotNumber;
64
+ proposer: EthAddress;
65
+ };
66
+
67
+ /**
68
+ * Callback for when a block proposal whose index lands at or beyond the consensus per-checkpoint block
69
+ * limit is stored and re-broadcast as slashing evidence. May fire multiple times per (slot, proposer)
70
+ * if the proposer signed several oversized proposals; consumers are expected to dedup.
71
+ */
72
+ export type P2POversizedProposalCallback = (info: OversizedProposalInfo) => void;
73
+
74
+ /** Minimal info passed to the duplicate attestation callback. */
75
+ export type DuplicateAttestationInfo = {
76
+ slot: SlotNumber;
77
+ attester: EthAddress;
78
+ };
79
+
80
+ /**
81
+ * Callback for when a duplicate attestation is detected (equivocation).
82
+ * A validator signing attestations for different proposals at the same slot.
83
+ * Invoked on the first duplicate (when count goes from 1 to 2).
84
+ */
85
+ export type P2PDuplicateAttestationCallback = (info: DuplicateAttestationInfo) => void;
86
+
87
+ export type P2PCheckpointAttestationCallback = (attestation: CheckpointAttestation) => void;
88
+
46
89
  /**
47
90
  * The interface for a P2P service implementation.
48
91
  */
@@ -65,38 +108,48 @@ export interface P2PService {
65
108
  */
66
109
  propagate<T extends Gossipable>(message: T): Promise<void>;
67
110
 
111
+ // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
112
+ registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
113
+
114
+ registerValidatorCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
115
+
116
+ registerAllNodesCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
117
+
68
118
  /**
69
- * Send a batch of requests to peers, and return the responses
70
- *
71
- * @param protocol - The request response protocol to use
72
- * @param requests - The requests to send to the peers
73
- * @returns The responses to the requests
119
+ * Registers a callback invoked when a duplicate proposal is detected (equivocation).
120
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
74
121
  */
75
- sendBatchRequest<Protocol extends ReqRespSubProtocol>(
76
- protocol: Protocol,
77
- requests: InstanceType<SubProtocolMap[Protocol]['request']>[],
78
- pinnedPeerId?: PeerId,
79
- timeoutMs?: number,
80
- maxPeers?: number,
81
- maxRetryAttempts?: number,
82
- ): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
122
+ registerDuplicateProposalCallback(callback: P2PDuplicateProposalCallback): void;
83
123
 
84
- // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
85
- registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
124
+ /**
125
+ * Registers a callback invoked when an oversized block proposal (index at or beyond the consensus
126
+ * per-checkpoint block limit) is stored and re-broadcast as slashing evidence.
127
+ */
128
+ registerOversizedProposalCallback(callback: P2POversizedProposalCallback): void;
86
129
 
87
- registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
130
+ /**
131
+ * Registers a callback invoked when a duplicate attestation is detected (equivocation).
132
+ * A validator signing attestations for different proposals at the same slot.
133
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
134
+ */
135
+ registerDuplicateAttestationCallback(callback: P2PDuplicateAttestationCallback): void;
136
+
137
+ registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
88
138
 
89
139
  getEnr(): ENR | undefined;
90
140
 
91
141
  getPeers(includePending?: boolean): PeerInfo[];
92
142
 
93
- validate(txs: Tx[]): Promise<void>;
143
+ /** Returns the number of peers in the GossipSub mesh for a given topic type. */
144
+ getGossipMeshPeerCount(topicType: TopicType): number;
94
145
 
95
- addReqRespSubProtocol(
96
- subProtocol: ReqRespSubProtocol,
97
- handler: ReqRespSubProtocolHandler,
98
- validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
99
- ): Promise<void>;
146
+ /**
147
+ * Runs minimum integrity validation on txs carried in a block proposal.
148
+ * @throws InvalidBlockProposalTxsError - If any tx fails validation.
149
+ */
150
+ validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
151
+
152
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
100
153
 
101
154
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
102
155
 
@@ -147,6 +200,9 @@ export interface PeerDiscoveryService extends EventEmitter {
147
200
  on(event: 'peer:discovered', listener: (enr: ENR) => void): this;
148
201
  emit(event: 'peer:discovered', enr: ENR): boolean;
149
202
 
203
+ on(event: 'ip:changed', listener: (ip: string) => void): this;
204
+ emit(event: 'ip:changed', ip: string): boolean;
205
+
150
206
  getStatus(): PeerDiscoveryState;
151
207
 
152
208
  getEnr(): ENR | undefined;
@@ -1,26 +1,9 @@
1
- import {
2
- type ConfigMappingsType,
3
- booleanConfigHelper,
4
- enumConfigHelper,
5
- numberConfigHelper,
6
- } from '@aztec/foundation/config';
1
+ import { type ConfigMappingsType, numberConfigHelper } from '@aztec/foundation/config';
7
2
  import { MAX_RPC_TXS_LEN } from '@aztec/stdlib/interfaces/api-limit';
8
3
 
9
- export type ProposalTxCollectorType = 'new' | 'old';
10
-
11
4
  export type TxCollectionConfig = {
12
5
  /** How long to wait before starting reqresp for fast collection */
13
6
  txCollectionFastNodesTimeoutBeforeReqRespMs: number;
14
- /** How often to collect from configured nodes */
15
- txCollectionSlowNodesIntervalMs: number;
16
- /** How ofter to collect from peers */
17
- txCollectionSlowReqRespIntervalMs: number;
18
- /** How long to wait for a reqresp response during slow collection */
19
- txCollectionSlowReqRespTimeoutMs: number;
20
- /** How often to reconcile found txs with the tx pool */
21
- txCollectionReconcileIntervalMs: number;
22
- /** Whether to disable the slow collection loop if we are dealing with any immediate requests */
23
- txCollectionDisableSlowDuringFastRequests: boolean;
24
7
  /** How many ms to wait between retried request to a node via RPC during fast collection */
25
8
  txCollectionFastNodeIntervalMs: number;
26
9
  /** A comma-separated list of Aztec node RPC URLs to use for tx collection */
@@ -29,8 +12,16 @@ export type TxCollectionConfig = {
29
12
  txCollectionFastMaxParallelRequestsPerNode: number;
30
13
  /** Maximum number of transactions to request from a node in a single batch */
31
14
  txCollectionNodeRpcMaxBatchSize: number;
32
- /** Which collector implementation to use for proposal tx collection */
33
- txCollectionProposalTxCollectorType: ProposalTxCollectorType;
15
+ /** A comma-separated list of file store URLs (s3://, gs://, file://, http://) for tx collection */
16
+ txCollectionFileStoreUrls: string[];
17
+ /** Delay in ms from reqresp start before file store collection begins */
18
+ txCollectionFileStoreFastDelayMs: number;
19
+ /** Number of concurrent workers for fast file store collection */
20
+ txCollectionFileStoreFastWorkerCount: number;
21
+ /** Base backoff time in ms for fast file store collection retries */
22
+ txCollectionFileStoreFastBackoffBaseMs: number;
23
+ /** Max backoff time in ms for fast file store collection retries */
24
+ txCollectionFileStoreFastBackoffMaxMs: number;
34
25
  };
35
26
 
36
27
  export const txCollectionConfigMappings: ConfigMappingsType<TxCollectionConfig> = {
@@ -39,31 +30,6 @@ export const txCollectionConfigMappings: ConfigMappingsType<TxCollectionConfig>
39
30
  description: 'How long to wait before starting reqresp for fast collection',
40
31
  ...numberConfigHelper(200),
41
32
  },
42
- txCollectionSlowNodesIntervalMs: {
43
- env: 'TX_COLLECTION_SLOW_NODES_INTERVAL_MS',
44
- description: 'How often to collect from configured nodes in the slow collection loop',
45
- ...numberConfigHelper(12_000),
46
- },
47
- txCollectionSlowReqRespIntervalMs: {
48
- env: 'TX_COLLECTION_SLOW_REQ_RESP_INTERVAL_MS',
49
- description: 'How often to collect from peers via reqresp in the slow collection loop',
50
- ...numberConfigHelper(12_000),
51
- },
52
- txCollectionSlowReqRespTimeoutMs: {
53
- env: 'TX_COLLECTION_SLOW_REQ_RESP_TIMEOUT_MS',
54
- description: 'How long to wait for a reqresp response during slow collection',
55
- ...numberConfigHelper(20_000),
56
- },
57
- txCollectionReconcileIntervalMs: {
58
- env: 'TX_COLLECTION_RECONCILE_INTERVAL_MS',
59
- description: 'How often to reconcile found txs from the tx pool',
60
- ...numberConfigHelper(60_000),
61
- },
62
- txCollectionDisableSlowDuringFastRequests: {
63
- env: 'TX_COLLECTION_DISABLE_SLOW_DURING_FAST_REQUESTS',
64
- description: 'Whether to disable the slow collection loop if we are dealing with any immediate requests',
65
- ...booleanConfigHelper(true),
66
- },
67
33
  txCollectionFastNodeIntervalMs: {
68
34
  env: 'TX_COLLECTION_FAST_NODE_INTERVAL_MS',
69
35
  description: 'How many ms to wait between retried request to a node via RPC during fast collection',
@@ -90,9 +56,34 @@ export const txCollectionConfigMappings: ConfigMappingsType<TxCollectionConfig>
90
56
  description: 'Maximum number of transactions to request from a node in a single batch',
91
57
  ...numberConfigHelper(MAX_RPC_TXS_LEN),
92
58
  },
93
- txCollectionProposalTxCollectorType: {
94
- env: 'TX_COLLECTION_PROPOSAL_TX_COLLECTOR_TYPE',
95
- description: 'Which collector implementation to use for proposal tx collection (new or old)',
96
- ...enumConfigHelper(['new', 'old'] as const, 'new'),
59
+ txCollectionFileStoreUrls: {
60
+ env: 'TX_COLLECTION_FILE_STORE_URLS',
61
+ description: 'A comma-separated list of file store URLs (s3://, gs://, file://, http://) for tx collection',
62
+ parseEnv: (val: string) =>
63
+ val
64
+ .split(',')
65
+ .map(url => url.trim())
66
+ .filter(url => url.length > 0),
67
+ defaultValue: [],
68
+ },
69
+ txCollectionFileStoreFastDelayMs: {
70
+ env: 'TX_COLLECTION_FILE_STORE_FAST_DELAY_MS',
71
+ description: 'Delay in ms from reqresp start before file store collection begins',
72
+ ...numberConfigHelper(2_000),
73
+ },
74
+ txCollectionFileStoreFastWorkerCount: {
75
+ env: 'TX_COLLECTION_FILE_STORE_FAST_WORKER_COUNT',
76
+ description: 'Number of concurrent workers for fast file store collection',
77
+ ...numberConfigHelper(5),
78
+ },
79
+ txCollectionFileStoreFastBackoffBaseMs: {
80
+ env: 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_BASE_MS',
81
+ description: 'Base backoff time in ms for fast file store collection retries',
82
+ ...numberConfigHelper(1_000),
83
+ },
84
+ txCollectionFileStoreFastBackoffMaxMs: {
85
+ env: 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_MAX_MS',
86
+ description: 'Max backoff time in ms for fast file store collection retries',
87
+ ...numberConfigHelper(5_000),
97
88
  },
98
89
  };
@@ -0,0 +1,153 @@
1
+ import { times } from '@aztec/foundation/collection';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import { sleep } from '@aztec/foundation/sleep';
4
+ import { DateProvider } from '@aztec/foundation/timer';
5
+ import { TxHash } from '@aztec/stdlib/tx';
6
+
7
+ import type { FileStoreTxSource } from './file_store_tx_source.js';
8
+ import type { IRequestTracker } from './request_tracker.js';
9
+ import type { TxAddContext, TxCollectionSink } from './tx_collection_sink.js';
10
+
11
+ /** Configuration for a FileStoreTxCollection instance. */
12
+ export type FileStoreCollectionConfig = {
13
+ workerCount: number;
14
+ backoffBaseMs: number;
15
+ backoffMaxMs: number;
16
+ };
17
+
18
+ type FileStoreTxEntry = {
19
+ txHash: string;
20
+ attempts: number;
21
+ lastAttemptTime: number;
22
+ nextSourceIndex: number;
23
+ };
24
+
25
+ /**
26
+ * Collects txs from file stores as a fallback after P2P methods have been tried.
27
+ * Each call to startCollecting spins up its own worker pool which pulls entries with priority
28
+ * (fewest attempts first), retries with round-robin across sources, and applies exponential
29
+ * backoff between full cycles through all sources. Workers self-terminate when the request
30
+ * tracker is cancelled (deadline / all-fetched / external) or when there is nothing left to do.
31
+ */
32
+ export class FileStoreTxCollection {
33
+ constructor(
34
+ private readonly sources: FileStoreTxSource[],
35
+ private readonly txCollectionSink: TxCollectionSink,
36
+ private readonly config: FileStoreCollectionConfig,
37
+ private readonly dateProvider: DateProvider = new DateProvider(),
38
+ private readonly log: Logger = createLogger('p2p:file_store_tx_collection'),
39
+ ) {}
40
+
41
+ /**
42
+ * Spins up workers to download all txs still missing from the tracker, racing across the
43
+ * configured file store sources. Resolves once all workers settle.
44
+ */
45
+ public async startCollecting(requestTracker: IRequestTracker, context: TxAddContext): Promise<void> {
46
+ if (this.sources.length === 0 || requestTracker.checkCancelled()) {
47
+ return;
48
+ }
49
+
50
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
51
+ const entries: Set<FileStoreTxEntry> = new Set();
52
+ for (const hashStr of requestTracker.missingTxHashes) {
53
+ entries.add({
54
+ txHash: hashStr,
55
+ attempts: 0,
56
+ lastAttemptTime: 0,
57
+ nextSourceIndex: Math.floor(Math.random() * this.sources.length),
58
+ });
59
+ }
60
+
61
+ // Yield before spawning so the synchronous caller can finish any follow-up (eg. marking a tx
62
+ // as fetched on the tracker, or cancelling it) before workers begin scanning entries.
63
+ await Promise.resolve();
64
+ if (requestTracker.checkCancelled()) {
65
+ return;
66
+ }
67
+
68
+ await Promise.allSettled(times(this.config.workerCount, () => this.workerLoop(entries, requestTracker, context)));
69
+ }
70
+
71
+ private async workerLoop(
72
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
73
+ entries: Set<FileStoreTxEntry>,
74
+ requestTracker: IRequestTracker,
75
+ context: TxAddContext,
76
+ ): Promise<void> {
77
+ while (!requestTracker.checkCancelled() && entries.size > 0) {
78
+ const action = this.getNextAction(entries, requestTracker);
79
+ if (action.type === 'sleep') {
80
+ await Promise.race([sleep(action.ms), requestTracker.cancellationToken]);
81
+ continue;
82
+ }
83
+
84
+ const entry = action.entry;
85
+ const source = this.sources[entry.nextSourceIndex % this.sources.length];
86
+ entry.nextSourceIndex++;
87
+ entry.attempts++;
88
+ entry.lastAttemptTime = this.dateProvider.now();
89
+
90
+ try {
91
+ const result = await this.txCollectionSink.collect(
92
+ () => source.getTxsByHash([TxHash.fromString(entry.txHash)]),
93
+ [entry.txHash],
94
+ {
95
+ description: `file-store ${source.getInfo()}`,
96
+ method: 'file-store',
97
+ fileStore: source.getInfo(),
98
+ },
99
+ context,
100
+ );
101
+ if (result.txs.length > 0) {
102
+ entries.delete(entry);
103
+ }
104
+ } catch (err) {
105
+ this.log.trace(`Error downloading tx ${entry.txHash} from ${source.getInfo()}`, { err });
106
+ }
107
+ }
108
+ }
109
+
110
+ /** Single-pass scan: removes stale entries, finds the best ready entry, or computes sleep time. */
111
+ private getNextAction(
112
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
113
+ entries: Set<FileStoreTxEntry>,
114
+ requestTracker: IRequestTracker,
115
+ ): { type: 'process'; entry: FileStoreTxEntry } | { type: 'sleep'; ms: number } {
116
+ const now = this.dateProvider.now();
117
+ let best: FileStoreTxEntry | undefined;
118
+ let earliestReadyAt = Infinity;
119
+
120
+ for (const entry of entries) {
121
+ // Drop entries whose tx was already found via another collection path.
122
+ if (!requestTracker.isMissing(entry.txHash)) {
123
+ entries.delete(entry);
124
+ continue;
125
+ }
126
+ const backoffMs = this.getBackoffMs(entry);
127
+ const readyAt = entry.lastAttemptTime + backoffMs;
128
+ if (readyAt > now) {
129
+ earliestReadyAt = Math.min(earliestReadyAt, readyAt);
130
+ continue;
131
+ }
132
+ if (!best || entry.attempts < best.attempts) {
133
+ best = entry;
134
+ }
135
+ }
136
+
137
+ if (best) {
138
+ return { type: 'process', entry: best };
139
+ }
140
+ // earliestReadyAt is finite whenever there are surviving entries; if entries became empty,
141
+ // the outer worker loop will exit on its next iteration via entries.size === 0.
142
+ return { type: 'sleep', ms: earliestReadyAt === Infinity ? 0 : earliestReadyAt - now };
143
+ }
144
+
145
+ /** Computes backoff for an entry. Backoff applies after a full cycle through all sources. */
146
+ private getBackoffMs(entry: FileStoreTxEntry): number {
147
+ const fullCycles = Math.floor(entry.attempts / this.sources.length);
148
+ if (fullCycles === 0) {
149
+ return 0;
150
+ }
151
+ return Math.min(this.config.backoffBaseMs * Math.pow(2, fullCycles - 1), this.config.backoffMaxMs);
152
+ }
153
+ }
@@ -0,0 +1,129 @@
1
+ import { partitionAsync } from '@aztec/foundation/collection';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import { Timer } from '@aztec/foundation/timer';
4
+ import { type ReadOnlyFileStore, createReadOnlyFileStore } from '@aztec/stdlib/file-store';
5
+ import { Tx, type TxHash, type TxValidator } from '@aztec/stdlib/tx';
6
+ import {
7
+ type Histogram,
8
+ Metrics,
9
+ type TelemetryClient,
10
+ type UpDownCounter,
11
+ getTelemetryClient,
12
+ } from '@aztec/telemetry-client';
13
+
14
+ import type { TxSource, TxSourceCollectionResult } from './tx_source.js';
15
+
16
+ /** TxSource implementation that downloads txs from a file store. */
17
+ export class FileStoreTxSource implements TxSource {
18
+ private downloadsSuccess: UpDownCounter;
19
+ private downloadsFailed: UpDownCounter;
20
+ private downloadDuration: Histogram;
21
+ private downloadSize: Histogram;
22
+
23
+ private constructor(
24
+ private readonly fileStore: ReadOnlyFileStore,
25
+ private readonly baseUrl: string,
26
+ private readonly basePath: string,
27
+ private readonly txValidator: TxValidator,
28
+ private readonly log: Logger,
29
+ telemetry: TelemetryClient,
30
+ ) {
31
+ const meter = telemetry.getMeter('file-store-tx-source');
32
+ this.downloadsSuccess = meter.createUpDownCounter(Metrics.TX_FILE_STORE_DOWNLOADS_SUCCESS);
33
+ this.downloadsFailed = meter.createUpDownCounter(Metrics.TX_FILE_STORE_DOWNLOADS_FAILED);
34
+ this.downloadDuration = meter.createHistogram(Metrics.TX_FILE_STORE_DOWNLOAD_DURATION);
35
+ this.downloadSize = meter.createHistogram(Metrics.TX_FILE_STORE_DOWNLOAD_SIZE);
36
+ }
37
+
38
+ /**
39
+ * Creates a FileStoreTxSource from a URL.
40
+ * @param url - The file store URL (s3://, gs://, file://, http://, https://).
41
+ * @param basePath - Base path for tx files within the store.
42
+ * @param log - Optional logger.
43
+ * @param telemetry - Optional telemetry client.
44
+ * @returns The FileStoreTxSource instance, or undefined if creation fails.
45
+ */
46
+ public static async create(
47
+ url: string,
48
+ basePath: string,
49
+ txValidator: TxValidator,
50
+ log: Logger = createLogger('p2p:file_store_tx_source'),
51
+ telemetry: TelemetryClient = getTelemetryClient(),
52
+ ): Promise<FileStoreTxSource | undefined> {
53
+ try {
54
+ const fileStore = await createReadOnlyFileStore(url, log);
55
+ if (!fileStore) {
56
+ log.warn(`Failed to create file store for URL: ${url}`);
57
+ return undefined;
58
+ }
59
+ return new FileStoreTxSource(fileStore, url, basePath, txValidator, log, telemetry);
60
+ } catch (err) {
61
+ log.warn(`Error creating file store for URL: ${url}`, { error: err });
62
+ return undefined;
63
+ }
64
+ }
65
+
66
+ public getInfo(): string {
67
+ return `file-store:${this.baseUrl}`;
68
+ }
69
+
70
+ public async getTxsByHash(txHashes: TxHash[]): Promise<TxSourceCollectionResult> {
71
+ const results = await Promise.all(
72
+ txHashes.map(async txHash => {
73
+ const path = `${this.basePath}/txs/${txHash.toString()}.bin`;
74
+ const timer = new Timer();
75
+ try {
76
+ const buffer = await this.fileStore.read(path);
77
+ const tx = Tx.fromBuffer(buffer);
78
+ return { tx, downloadDuration: timer.ms(), downloadSize: buffer.length };
79
+ } catch {
80
+ this.downloadsFailed.add(1);
81
+ return undefined;
82
+ }
83
+ }),
84
+ );
85
+
86
+ const txs = results.filter(tx => tx !== undefined);
87
+ const [validTxs, invalidTxs] = await partitionAsync(
88
+ txs,
89
+ async ({ tx, downloadDuration, downloadSize }): Promise<boolean> => {
90
+ const valid = await this.txValidator.validateTx(tx);
91
+ if (valid.result === 'valid') {
92
+ this.downloadsSuccess.add(1);
93
+ this.downloadDuration.record(Math.ceil(downloadDuration));
94
+ this.downloadSize.record(downloadSize);
95
+ return true;
96
+ } else {
97
+ this.downloadsFailed.add(1);
98
+ return false;
99
+ }
100
+ },
101
+ );
102
+
103
+ return {
104
+ validTxs: validTxs.map(({ tx }) => tx),
105
+ invalidTxHashes: invalidTxs.map(({ tx }) => tx.getTxHash().toString()),
106
+ };
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Creates FileStoreTxSource instances from URLs.
112
+ * @param urls - Array of file store URLs.
113
+ * @param basePath - Base path for tx files within each store.
114
+ * @param log - Optional logger.
115
+ * @param telemetry - Optional telemetry client.
116
+ * @returns Array of successfully created FileStoreTxSource instances.
117
+ */
118
+ export async function createFileStoreTxSources(
119
+ urls: string[],
120
+ basePath: string,
121
+ txValidator: TxValidator,
122
+ log: Logger = createLogger('p2p:file_store_tx_source'),
123
+ telemetry: TelemetryClient = getTelemetryClient(),
124
+ ): Promise<FileStoreTxSource[]> {
125
+ const sources = await Promise.all(
126
+ urls.map(url => FileStoreTxSource.create(url, basePath, txValidator, log, telemetry)),
127
+ );
128
+ return sources.filter((s): s is FileStoreTxSource => s !== undefined);
129
+ }
@@ -1,7 +1,3 @@
1
- export { TxCollection, type FastCollectionRequestInput } from './tx_collection.js';
1
+ export { TxCollection, type FastCollectionRequestInput, type IReqRespTxsCollector } from './tx_collection.js';
2
2
  export { type TxSource, createNodeRpcTxSources, NodeRpcTxSource } from './tx_source.js';
3
- export {
4
- type ProposalTxCollector,
5
- BatchTxRequesterCollector,
6
- SendBatchRequestCollector,
7
- } from './proposal_tx_collector.js';
3
+ export { FileStoreTxSource, createFileStoreTxSources } from './file_store_tx_source.js';
@@ -18,7 +18,7 @@ export class TxCollectionInstrumentation {
18
18
  const meter = client.getMeter(name);
19
19
 
20
20
  this.txsCollected = createUpDownCounterWithDefault(meter, Metrics.TX_COLLECTOR_COUNT, {
21
- [Attributes.TX_COLLECTION_METHOD]: ['fast-req-resp', 'fast-node-rpc', 'slow-req-resp', 'slow-node-rpc'],
21
+ [Attributes.TX_COLLECTION_METHOD]: ['fast-req-resp', 'fast-node-rpc', 'file-store'],
22
22
  });
23
23
 
24
24
  this.collectionDurationPerTx = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_TX);