@aztec/p2p 0.0.1-commit.96dac018d → 0.0.1-commit.993d240

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 (455) hide show
  1. package/README.md +129 -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 +9 -1
  5. package/dest/client/factory.d.ts +7 -7
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +34 -16
  8. package/dest/client/interface.d.ts +17 -8
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +15 -11
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +93 -49
  13. package/dest/config.d.ts +153 -102
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +134 -35
  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 +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +267 -197
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +181 -65
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +4 -2
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +33 -15
  39. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  54. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  55. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  57. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  58. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  60. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
  61. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/index.js +1 -1
  63. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +12 -5
  64. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  66. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +44 -12
  67. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +81 -22
  69. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  70. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -44
  72. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  73. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  75. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  76. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +133 -110
  78. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  79. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  81. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  82. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  84. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  85. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  86. package/dest/msg_validators/clock_tolerance.js +61 -3
  87. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  88. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  90. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  91. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  93. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  94. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
  96. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  97. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  99. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  100. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  102. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  103. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  104. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  105. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  106. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  107. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  108. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  109. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  110. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  112. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  113. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  114. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  115. package/dest/msg_validators/tx_validator/factory.d.ts +27 -7
  116. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/factory.js +47 -17
  118. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  121. package/dest/msg_validators/tx_validator/gas_validator.d.ts +48 -7
  122. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  124. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  125. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/index.js +3 -0
  127. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  128. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  130. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  131. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  132. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  133. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  134. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  136. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  137. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  138. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  139. package/dest/services/data_store.d.ts +1 -1
  140. package/dest/services/data_store.d.ts.map +1 -1
  141. package/dest/services/data_store.js +5 -5
  142. package/dest/services/discv5/discV5_service.d.ts +2 -1
  143. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  144. package/dest/services/discv5/discV5_service.js +35 -8
  145. package/dest/services/dummy_service.d.ts +11 -15
  146. package/dest/services/dummy_service.d.ts.map +1 -1
  147. package/dest/services/dummy_service.js +12 -16
  148. package/dest/services/encoding.d.ts +6 -2
  149. package/dest/services/encoding.d.ts.map +1 -1
  150. package/dest/services/encoding.js +14 -8
  151. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  152. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  153. package/dest/services/gossipsub/topic_score_params.js +21 -4
  154. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  155. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  156. package/dest/services/libp2p/instrumentation.js +14 -0
  157. package/dest/services/libp2p/libp2p_service.d.ts +39 -50
  158. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  159. package/dest/services/libp2p/libp2p_service.js +299 -250
  160. package/dest/services/peer-manager/metrics.d.ts +3 -1
  161. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  162. package/dest/services/peer-manager/metrics.js +6 -0
  163. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  164. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  165. package/dest/services/peer-manager/peer_manager.js +40 -11
  166. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  167. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  168. package/dest/services/peer-manager/peer_scoring.js +32 -10
  169. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  170. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  171. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +84 -71
  172. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  173. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  174. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  175. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  176. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  177. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  178. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  179. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  180. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  181. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  182. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  183. package/dest/services/reqresp/config.d.ts +3 -3
  184. package/dest/services/reqresp/config.d.ts.map +1 -1
  185. package/dest/services/reqresp/interface.d.ts +16 -18
  186. package/dest/services/reqresp/interface.d.ts.map +1 -1
  187. package/dest/services/reqresp/interface.js +10 -20
  188. package/dest/services/reqresp/metrics.d.ts +1 -1
  189. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  190. package/dest/services/reqresp/metrics.js +0 -1
  191. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  192. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  193. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +4 -2
  194. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  195. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  196. package/dest/services/reqresp/protocols/index.js +0 -1
  197. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  198. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  199. package/dest/services/reqresp/protocols/tx.js +1 -3
  200. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  201. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  202. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  203. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  204. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  205. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  206. package/dest/services/reqresp/reqresp.d.ts +7 -29
  207. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  208. package/dest/services/reqresp/reqresp.js +43 -215
  209. package/dest/services/service.d.ts +9 -12
  210. package/dest/services/service.d.ts.map +1 -1
  211. package/dest/services/tx_collection/config.d.ts +2 -23
  212. package/dest/services/tx_collection/config.d.ts.map +1 -1
  213. package/dest/services/tx_collection/config.js +2 -55
  214. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  215. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  216. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  217. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  218. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  219. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  220. package/dest/services/tx_collection/index.d.ts +2 -3
  221. package/dest/services/tx_collection/index.d.ts.map +1 -1
  222. package/dest/services/tx_collection/index.js +0 -1
  223. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  224. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  225. package/dest/services/tx_collection/instrumentation.js +0 -2
  226. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  227. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  228. package/dest/services/tx_collection/request_tracker.js +84 -0
  229. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  230. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  231. package/dest/services/tx_collection/tx_collection.js +275 -119
  232. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  233. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  234. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  235. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  236. package/dest/services/tx_collection/tx_source.js +9 -7
  237. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  238. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  239. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  240. package/dest/services/tx_provider.d.ts +3 -1
  241. package/dest/services/tx_provider.d.ts.map +1 -1
  242. package/dest/services/tx_provider.js +3 -0
  243. package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
  244. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  245. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  246. package/dest/test-helpers/mock-pubsub.d.ts +24 -11
  247. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  248. package/dest/test-helpers/mock-pubsub.js +45 -45
  249. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  250. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  251. package/dest/test-helpers/reqresp-nodes.js +17 -19
  252. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  253. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  254. package/dest/test-helpers/test_tx_provider.js +3 -0
  255. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  256. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  257. package/dest/test-helpers/testbench-utils.js +42 -15
  258. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  259. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  260. package/dest/testbench/p2p_client_testbench_worker.js +88 -42
  261. package/dest/testbench/worker_client_manager.d.ts +12 -6
  262. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  263. package/dest/testbench/worker_client_manager.js +57 -11
  264. package/dest/util.d.ts +12 -7
  265. package/dest/util.d.ts.map +1 -1
  266. package/dest/util.js +35 -14
  267. package/dest/versioning.d.ts +3 -6
  268. package/dest/versioning.d.ts.map +1 -1
  269. package/dest/versioning.js +3 -24
  270. package/package.json +15 -14
  271. package/src/bootstrap/bootstrap.ts +9 -1
  272. package/src/client/factory.ts +65 -21
  273. package/src/client/interface.ts +18 -20
  274. package/src/client/p2p_client.ts +108 -82
  275. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  276. package/src/config.ts +226 -36
  277. package/src/errors/p2p-service.error.ts +11 -0
  278. package/src/errors/reqresp.error.ts +0 -25
  279. package/src/index.ts +0 -1
  280. package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
  281. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  282. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  283. package/src/mem_pools/index.ts +0 -3
  284. package/src/mem_pools/instrumentation.ts +22 -14
  285. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  286. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  287. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
  288. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  289. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  290. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  291. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  292. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  293. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  294. package/src/mem_pools/tx_pool_v2/index.ts +1 -1
  295. package/src/mem_pools/tx_pool_v2/interfaces.ts +12 -4
  296. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +121 -27
  297. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  298. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  299. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +141 -114
  300. package/src/msg_validators/attestation_validator/README.md +49 -0
  301. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  302. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  303. package/src/msg_validators/clock_tolerance.ts +79 -3
  304. package/src/msg_validators/proposal_validator/README.md +123 -0
  305. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  306. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  307. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  308. package/src/msg_validators/tx_validator/README.md +15 -3
  309. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  310. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  311. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  312. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  313. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  314. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  315. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  316. package/src/msg_validators/tx_validator/factory.ts +61 -10
  317. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  318. package/src/msg_validators/tx_validator/gas_validator.ts +121 -39
  319. package/src/msg_validators/tx_validator/index.ts +3 -0
  320. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  321. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  322. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  323. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  324. package/src/services/data_store.ts +5 -13
  325. package/src/services/discv5/discV5_service.ts +38 -5
  326. package/src/services/dummy_service.ts +14 -39
  327. package/src/services/encoding.ts +14 -7
  328. package/src/services/gossipsub/topic_score_params.ts +36 -4
  329. package/src/services/libp2p/instrumentation.ts +14 -0
  330. package/src/services/libp2p/libp2p_service.ts +326 -287
  331. package/src/services/peer-manager/metrics.ts +7 -0
  332. package/src/services/peer-manager/peer_manager.ts +46 -11
  333. package/src/services/peer-manager/peer_scoring.ts +27 -5
  334. package/src/services/reqresp/README.md +215 -0
  335. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  336. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +83 -77
  337. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  338. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  339. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  340. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  341. package/src/services/reqresp/config.ts +2 -2
  342. package/src/services/reqresp/interface.ts +21 -47
  343. package/src/services/reqresp/metrics.ts +0 -1
  344. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
  345. package/src/services/reqresp/protocols/index.ts +0 -1
  346. package/src/services/reqresp/protocols/tx.ts +1 -3
  347. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  348. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  349. package/src/services/reqresp/reqresp.ts +48 -261
  350. package/src/services/service.ts +12 -28
  351. package/src/services/tx_collection/config.ts +3 -80
  352. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  353. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  354. package/src/services/tx_collection/index.ts +1 -6
  355. package/src/services/tx_collection/instrumentation.ts +1 -7
  356. package/src/services/tx_collection/request_tracker.ts +127 -0
  357. package/src/services/tx_collection/tx_collection.ts +331 -176
  358. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  359. package/src/services/tx_collection/tx_source.ts +8 -7
  360. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  361. package/src/services/tx_provider.ts +5 -0
  362. package/src/test-helpers/make-test-p2p-clients.ts +4 -3
  363. package/src/test-helpers/mock-pubsub.ts +49 -66
  364. package/src/test-helpers/reqresp-nodes.ts +15 -28
  365. package/src/test-helpers/test_tx_provider.ts +5 -0
  366. package/src/test-helpers/testbench-utils.ts +53 -28
  367. package/src/testbench/p2p_client_testbench_worker.ts +91 -61
  368. package/src/testbench/worker_client_manager.ts +72 -25
  369. package/src/util.ts +33 -18
  370. package/src/versioning.ts +3 -33
  371. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  372. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  373. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  374. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  375. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  376. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  377. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  378. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  379. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  380. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  381. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  382. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  383. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  384. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  385. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  386. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  387. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  388. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  389. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  390. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  391. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  392. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  393. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  394. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  395. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  396. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  397. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  398. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  399. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  400. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  401. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  402. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  403. package/dest/mem_pools/tx_pool/index.js +0 -2
  404. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  405. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  406. package/dest/mem_pools/tx_pool/priority.js +0 -15
  407. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  408. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  409. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  410. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  411. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  412. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  413. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  414. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  415. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  416. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  417. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  418. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  419. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  420. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  421. package/dest/services/reqresp/protocols/block.js +0 -32
  422. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  423. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  424. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  425. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  426. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  427. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  428. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  429. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  430. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  431. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  432. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  433. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  434. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -346
  435. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  436. package/src/mem_pools/tx_pool/README.md +0 -270
  437. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  438. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  439. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  440. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  441. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  442. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  443. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  444. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  445. package/src/mem_pools/tx_pool/index.ts +0 -2
  446. package/src/mem_pools/tx_pool/priority.ts +0 -20
  447. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  448. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  449. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  450. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  451. package/src/services/reqresp/protocols/block.ts +0 -37
  452. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  453. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  454. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  455. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,4 +1,4 @@
1
- import { booleanConfigHelper, enumConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
1
+ import { numberConfigHelper } from '@aztec/foundation/config';
2
2
  import { MAX_RPC_TXS_LEN } from '@aztec/stdlib/interfaces/api-limit';
3
3
  export const txCollectionConfigMappings = {
4
4
  txCollectionFastNodesTimeoutBeforeReqRespMs: {
@@ -6,31 +6,6 @@ export const txCollectionConfigMappings = {
6
6
  description: 'How long to wait before starting reqresp for fast collection',
7
7
  ...numberConfigHelper(200)
8
8
  },
9
- txCollectionSlowNodesIntervalMs: {
10
- env: 'TX_COLLECTION_SLOW_NODES_INTERVAL_MS',
11
- description: 'How often to collect from configured nodes in the slow collection loop',
12
- ...numberConfigHelper(12_000)
13
- },
14
- txCollectionSlowReqRespIntervalMs: {
15
- env: 'TX_COLLECTION_SLOW_REQ_RESP_INTERVAL_MS',
16
- description: 'How often to collect from peers via reqresp in the slow collection loop',
17
- ...numberConfigHelper(12_000)
18
- },
19
- txCollectionSlowReqRespTimeoutMs: {
20
- env: 'TX_COLLECTION_SLOW_REQ_RESP_TIMEOUT_MS',
21
- description: 'How long to wait for a reqresp response during slow collection',
22
- ...numberConfigHelper(20_000)
23
- },
24
- txCollectionReconcileIntervalMs: {
25
- env: 'TX_COLLECTION_RECONCILE_INTERVAL_MS',
26
- description: 'How often to reconcile found txs from the tx pool',
27
- ...numberConfigHelper(60_000)
28
- },
29
- txCollectionDisableSlowDuringFastRequests: {
30
- env: 'TX_COLLECTION_DISABLE_SLOW_DURING_FAST_REQUESTS',
31
- description: 'Whether to disable the slow collection loop if we are dealing with any immediate requests',
32
- ...booleanConfigHelper(true)
33
- },
34
9
  txCollectionFastNodeIntervalMs: {
35
10
  env: 'TX_COLLECTION_FAST_NODE_INTERVAL_MS',
36
11
  description: 'How many ms to wait between retried request to a node via RPC during fast collection',
@@ -55,28 +30,15 @@ export const txCollectionConfigMappings = {
55
30
  description: 'Maximum number of transactions to request from a node in a single batch',
56
31
  ...numberConfigHelper(MAX_RPC_TXS_LEN)
57
32
  },
58
- txCollectionMissingTxsCollectorType: {
59
- env: 'TX_COLLECTION_MISSING_TXS_COLLECTOR_TYPE',
60
- description: 'Which collector implementation to use for missing txs collection (new or old)',
61
- ...enumConfigHelper([
62
- 'new',
63
- 'old'
64
- ], 'new')
65
- },
66
33
  txCollectionFileStoreUrls: {
67
34
  env: 'TX_COLLECTION_FILE_STORE_URLS',
68
35
  description: 'A comma-separated list of file store URLs (s3://, gs://, file://, http://) for tx collection',
69
36
  parseEnv: (val)=>val.split(',').map((url)=>url.trim()).filter((url)=>url.length > 0),
70
37
  defaultValue: []
71
38
  },
72
- txCollectionFileStoreSlowDelayMs: {
73
- env: 'TX_COLLECTION_FILE_STORE_SLOW_DELAY_MS',
74
- description: 'Delay before file store collection starts after slow collection',
75
- ...numberConfigHelper(24_000)
76
- },
77
39
  txCollectionFileStoreFastDelayMs: {
78
40
  env: 'TX_COLLECTION_FILE_STORE_FAST_DELAY_MS',
79
- description: 'Delay before file store collection starts after fast collection',
41
+ description: 'Delay in ms from reqresp start before file store collection begins',
80
42
  ...numberConfigHelper(2_000)
81
43
  },
82
44
  txCollectionFileStoreFastWorkerCount: {
@@ -84,29 +46,14 @@ export const txCollectionConfigMappings = {
84
46
  description: 'Number of concurrent workers for fast file store collection',
85
47
  ...numberConfigHelper(5)
86
48
  },
87
- txCollectionFileStoreSlowWorkerCount: {
88
- env: 'TX_COLLECTION_FILE_STORE_SLOW_WORKER_COUNT',
89
- description: 'Number of concurrent workers for slow file store collection',
90
- ...numberConfigHelper(2)
91
- },
92
49
  txCollectionFileStoreFastBackoffBaseMs: {
93
50
  env: 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_BASE_MS',
94
51
  description: 'Base backoff time in ms for fast file store collection retries',
95
52
  ...numberConfigHelper(1_000)
96
53
  },
97
- txCollectionFileStoreSlowBackoffBaseMs: {
98
- env: 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_BASE_MS',
99
- description: 'Base backoff time in ms for slow file store collection retries',
100
- ...numberConfigHelper(5_000)
101
- },
102
54
  txCollectionFileStoreFastBackoffMaxMs: {
103
55
  env: 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_MAX_MS',
104
56
  description: 'Max backoff time in ms for fast file store collection retries',
105
57
  ...numberConfigHelper(5_000)
106
- },
107
- txCollectionFileStoreSlowBackoffMaxMs: {
108
- env: 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_MAX_MS',
109
- description: 'Max backoff time in ms for slow file store collection retries',
110
- ...numberConfigHelper(30_000)
111
58
  }
112
59
  };
@@ -1,7 +1,7 @@
1
1
  import { type Logger } from '@aztec/foundation/log';
2
2
  import { DateProvider } from '@aztec/foundation/timer';
3
- import { Tx, TxHash } from '@aztec/stdlib/tx';
4
3
  import type { FileStoreTxSource } from './file_store_tx_source.js';
4
+ import type { IRequestTracker } from './request_tracker.js';
5
5
  import type { TxAddContext, TxCollectionSink } from './tx_collection_sink.js';
6
6
  /** Configuration for a FileStoreTxCollection instance. */
7
7
  export type FileStoreCollectionConfig = {
@@ -11,9 +11,10 @@ export type FileStoreCollectionConfig = {
11
11
  };
12
12
  /**
13
13
  * Collects txs from file stores as a fallback after P2P methods have been tried.
14
- * Uses a shared worker pool that pulls entries with priority (fewest attempts first),
15
- * retries with round-robin across sources, and applies exponential backoff between
16
- * full cycles through all sources.
14
+ * Each call to startCollecting spins up its own worker pool which pulls entries with priority
15
+ * (fewest attempts first), retries with round-robin across sources, and applies exponential
16
+ * backoff between full cycles through all sources. Workers self-terminate when the request
17
+ * tracker is cancelled (deadline / all-fetched / external) or when there is nothing left to do.
17
18
  */
18
19
  export declare class FileStoreTxCollection {
19
20
  private readonly sources;
@@ -21,33 +22,16 @@ export declare class FileStoreTxCollection {
21
22
  private readonly config;
22
23
  private readonly dateProvider;
23
24
  private readonly log;
24
- /** Map from tx hash string to entry for all pending downloads. */
25
- private entries;
26
- /** Worker promises for the shared worker pool. */
27
- private workers;
28
- /** Whether the worker pool is running. */
29
- private running;
30
- /** Signal used to wake sleeping workers when new entries arrive or stop is called. */
31
- private wakeSignal;
32
25
  constructor(sources: FileStoreTxSource[], txCollectionSink: TxCollectionSink, config: FileStoreCollectionConfig, dateProvider?: DateProvider, log?: Logger);
33
- /** Starts the shared worker pool. */
34
- start(): void;
35
- /** Stops all workers and clears state. */
36
- stop(): Promise<void>;
37
- /** Adds entries to the shared map and wakes workers. */
38
- startCollecting(txHashes: TxHash[], context: TxAddContext, deadline: Date): void;
39
- /** Removes entries for txs that have been found elsewhere. */
40
- foundTxs(txs: Tx[]): void;
41
- /** Clears all pending entries. */
42
- clearPending(): void;
26
+ /**
27
+ * Spins up workers to download all txs still missing from the tracker, racing across the
28
+ * configured file store sources. Resolves once all workers settle.
29
+ */
30
+ startCollecting(requestTracker: IRequestTracker, context: TxAddContext): Promise<void>;
43
31
  private workerLoop;
44
- /** Single-pass scan: removes expired entries, finds the best ready entry, or computes sleep time. */
32
+ /** Single-pass scan: removes stale entries, finds the best ready entry, or computes sleep time. */
45
33
  private getNextAction;
46
34
  /** Computes backoff for an entry. Backoff applies after a full cycle through all sources. */
47
35
  private getBackoffMs;
48
- /** Resolves the current wake signal and creates a new one. */
49
- private wake;
50
- private waitForWake;
51
- private sleepOrWake;
52
36
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yZV90eF9jb2xsZWN0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi9maWxlX3N0b3JlX3R4X2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUUsMERBQTBEO0FBQzFELE1BQU0sTUFBTSx5QkFBeUIsR0FBRztJQUN0QyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsWUFBWSxFQUFFLE1BQU0sQ0FBQztDQUN0QixDQUFDO0FBV0Y7Ozs7O0dBS0c7QUFDSCxxQkFBYSxxQkFBcUI7SUFjOUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPO0lBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO0lBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVk7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBakJ0QixrRUFBa0U7SUFDbEUsT0FBTyxDQUFDLE9BQU8sQ0FBdUM7SUFFdEQsa0RBQWtEO0lBQ2xELE9BQU8sQ0FBQyxPQUFPLENBQXVCO0lBRXRDLDBDQUEwQztJQUMxQyxPQUFPLENBQUMsT0FBTyxDQUFTO0lBRXhCLHNGQUFzRjtJQUN0RixPQUFPLENBQUMsVUFBVSxDQUE2QjtJQUUvQyxZQUNtQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsRUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLE1BQU0sRUFBRSx5QkFBeUIsRUFDakMsWUFBWSxHQUFFLFlBQWlDLEVBQy9DLEdBQUcsR0FBRSxNQUFxRCxFQUc1RTtJQUVELHFDQUFxQztJQUM5QixLQUFLLElBQUksSUFBSSxDQVNuQjtJQUVELDBDQUEwQztJQUM3QixJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQU1qQztJQUVELHdEQUF3RDtJQUNqRCxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxJQUFJLENBc0J0RjtJQUVELDhEQUE4RDtJQUN2RCxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FJL0I7SUFFRCxrQ0FBa0M7SUFDM0IsWUFBWSxJQUFJLElBQUksQ0FFMUI7WUFFYSxVQUFVO0lBa0N4QixxR0FBcUc7SUFDckcsT0FBTyxDQUFDLGFBQWE7SUE4QnJCLDZGQUE2RjtJQUM3RixPQUFPLENBQUMsWUFBWTtJQVFwQiw4REFBOEQ7SUFDOUQsT0FBTyxDQUFDLElBQUk7WUFNRSxXQUFXO1lBS1gsV0FBVztDQUcxQiJ9
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yZV90eF9jb2xsZWN0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi9maWxlX3N0b3JlX3R4X2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlFLDBEQUEwRDtBQUMxRCxNQUFNLE1BQU0seUJBQXlCLEdBQUc7SUFDdEMsV0FBVyxFQUFFLE1BQU0sQ0FBQztJQUNwQixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLFlBQVksRUFBRSxNQUFNLENBQUM7Q0FDdEIsQ0FBQztBQVNGOzs7Ozs7R0FNRztBQUNILHFCQUFhLHFCQUFxQjtJQUU5QixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU87SUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7SUFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWTtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7SUFMdEIsWUFDbUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEVBQzVCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxNQUFNLEVBQUUseUJBQXlCLEVBQ2pDLFlBQVksR0FBRSxZQUFpQyxFQUMvQyxHQUFHLEdBQUUsTUFBcUQsRUFDekU7SUFFSjs7O09BR0c7SUFDVSxlQUFlLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0F3QmxHO1lBRWEsVUFBVTtJQXVDeEIsbUdBQW1HO0lBQ25HLE9BQU8sQ0FBQyxhQUFhO0lBa0NyQiw2RkFBNkY7SUFDN0YsT0FBTyxDQUFDLFlBQVk7Q0FPckIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"file_store_tx_collection.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/file_store_tx_collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,0DAA0D;AAC1D,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAWF;;;;;GAKG;AACH,qBAAa,qBAAqB;IAc9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAjBtB,kEAAkE;IAClE,OAAO,CAAC,OAAO,CAAuC;IAEtD,kDAAkD;IAClD,OAAO,CAAC,OAAO,CAAuB;IAEtC,0CAA0C;IAC1C,OAAO,CAAC,OAAO,CAAS;IAExB,sFAAsF;IACtF,OAAO,CAAC,UAAU,CAA6B;IAE/C,YACmB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,yBAAyB,EACjC,YAAY,GAAE,YAAiC,EAC/C,GAAG,GAAE,MAAqD,EAG5E;IAED,qCAAqC;IAC9B,KAAK,IAAI,IAAI,CASnB;IAED,0CAA0C;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAMjC;IAED,wDAAwD;IACjD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,CAsBtF;IAED,8DAA8D;IACvD,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAI/B;IAED,kCAAkC;IAC3B,YAAY,IAAI,IAAI,CAE1B;YAEa,UAAU;IAkCxB,qGAAqG;IACrG,OAAO,CAAC,aAAa;IA8BrB,6FAA6F;IAC7F,OAAO,CAAC,YAAY;IAQpB,8DAA8D;IAC9D,OAAO,CAAC,IAAI;YAME,WAAW;YAKX,WAAW;CAG1B"}
1
+ {"version":3,"file":"file_store_tx_collection.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/file_store_tx_collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,0DAA0D;AAC1D,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AASF;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,YACmB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,yBAAyB,EACjC,YAAY,GAAE,YAAiC,EAC/C,GAAG,GAAE,MAAqD,EACzE;IAEJ;;;OAGG;IACU,eAAe,CAAC,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBlG;YAEa,UAAU;IAuCxB,mGAAmG;IACnG,OAAO,CAAC,aAAa;IAkCrB,6FAA6F;IAC7F,OAAO,CAAC,YAAY;CAOrB"}
@@ -1,86 +1,61 @@
1
+ import { times } from '@aztec/foundation/collection';
1
2
  import { createLogger } from '@aztec/foundation/log';
2
- import { promiseWithResolvers } from '@aztec/foundation/promise';
3
3
  import { sleep } from '@aztec/foundation/sleep';
4
4
  import { DateProvider } from '@aztec/foundation/timer';
5
5
  import { TxHash } from '@aztec/stdlib/tx';
6
6
  /**
7
7
  * Collects txs from file stores as a fallback after P2P methods have been tried.
8
- * Uses a shared worker pool that pulls entries with priority (fewest attempts first),
9
- * retries with round-robin across sources, and applies exponential backoff between
10
- * full cycles through all sources.
8
+ * Each call to startCollecting spins up its own worker pool which pulls entries with priority
9
+ * (fewest attempts first), retries with round-robin across sources, and applies exponential
10
+ * backoff between full cycles through all sources. Workers self-terminate when the request
11
+ * tracker is cancelled (deadline / all-fetched / external) or when there is nothing left to do.
11
12
  */ export class FileStoreTxCollection {
12
13
  sources;
13
14
  txCollectionSink;
14
15
  config;
15
16
  dateProvider;
16
17
  log;
17
- /** Map from tx hash string to entry for all pending downloads. */ entries;
18
- /** Worker promises for the shared worker pool. */ workers;
19
- /** Whether the worker pool is running. */ running;
20
- /** Signal used to wake sleeping workers when new entries arrive or stop is called. */ wakeSignal;
21
18
  constructor(sources, txCollectionSink, config, dateProvider = new DateProvider(), log = createLogger('p2p:file_store_tx_collection')){
22
19
  this.sources = sources;
23
20
  this.txCollectionSink = txCollectionSink;
24
21
  this.config = config;
25
22
  this.dateProvider = dateProvider;
26
23
  this.log = log;
27
- this.entries = new Map();
28
- this.workers = [];
29
- this.running = false;
30
- this.wakeSignal = promiseWithResolvers();
31
24
  }
32
- /** Starts the shared worker pool. */ start() {
33
- if (this.sources.length === 0) {
34
- this.log.debug('No file store sources configured');
25
+ /**
26
+ * Spins up workers to download all txs still missing from the tracker, racing across the
27
+ * configured file store sources. Resolves once all workers settle.
28
+ */ async startCollecting(requestTracker, context) {
29
+ if (this.sources.length === 0 || requestTracker.checkCancelled()) {
35
30
  return;
36
31
  }
37
- this.running = true;
38
- for(let i = 0; i < this.config.workerCount; i++){
39
- this.workers.push(this.workerLoop());
32
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
33
+ const entries = new Set();
34
+ for (const hashStr of requestTracker.missingTxHashes){
35
+ entries.add({
36
+ txHash: hashStr,
37
+ attempts: 0,
38
+ lastAttemptTime: 0,
39
+ nextSourceIndex: Math.floor(Math.random() * this.sources.length)
40
+ });
40
41
  }
41
- }
42
- /** Stops all workers and clears state. */ async stop() {
43
- this.running = false;
44
- this.wake();
45
- await Promise.all(this.workers);
46
- this.workers = [];
47
- this.entries.clear();
48
- }
49
- /** Adds entries to the shared map and wakes workers. */ startCollecting(txHashes, context, deadline) {
50
- if (this.sources.length === 0 || txHashes.length === 0) {
51
- return;
52
- }
53
- if (+deadline <= this.dateProvider.now()) {
42
+ // Yield before spawning so the synchronous caller can finish any follow-up (eg. marking a tx
43
+ // as fetched on the tracker, or cancelling it) before workers begin scanning entries.
44
+ await Promise.resolve();
45
+ if (requestTracker.checkCancelled()) {
54
46
  return;
55
47
  }
56
- for (const txHash of txHashes){
57
- const hashStr = txHash.toString();
58
- if (!this.entries.has(hashStr)) {
59
- this.entries.set(hashStr, {
60
- txHash: hashStr,
61
- context,
62
- deadline,
63
- attempts: 0,
64
- lastAttemptTime: 0,
65
- nextSourceIndex: Math.floor(Math.random() * this.sources.length)
66
- });
67
- }
68
- }
69
- this.wake();
70
- }
71
- /** Removes entries for txs that have been found elsewhere. */ foundTxs(txs) {
72
- for (const tx of txs){
73
- this.entries.delete(tx.getTxHash().toString());
74
- }
75
- }
76
- /** Clears all pending entries. */ clearPending() {
77
- this.entries.clear();
48
+ await Promise.allSettled(times(this.config.workerCount, ()=>this.workerLoop(entries, requestTracker, context)));
78
49
  }
79
- async workerLoop() {
80
- while(this.running){
81
- const action = this.getNextAction();
50
+ async workerLoop(// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
51
+ entries, requestTracker, context) {
52
+ while(!requestTracker.checkCancelled() && entries.size > 0){
53
+ const action = this.getNextAction(entries, requestTracker);
82
54
  if (action.type === 'sleep') {
83
- await action.promise;
55
+ await Promise.race([
56
+ sleep(action.ms),
57
+ requestTracker.cancellationToken
58
+ ]);
84
59
  continue;
85
60
  }
86
61
  const entry = action.entry;
@@ -97,9 +72,9 @@ import { TxHash } from '@aztec/stdlib/tx';
97
72
  description: `file-store ${source.getInfo()}`,
98
73
  method: 'file-store',
99
74
  fileStore: source.getInfo()
100
- }, entry.context);
75
+ }, context);
101
76
  if (result.txs.length > 0) {
102
- this.entries.delete(entry.txHash);
77
+ entries.delete(entry);
103
78
  }
104
79
  } catch (err) {
105
80
  this.log.trace(`Error downloading tx ${entry.txHash} from ${source.getInfo()}`, {
@@ -108,13 +83,15 @@ import { TxHash } from '@aztec/stdlib/tx';
108
83
  }
109
84
  }
110
85
  }
111
- /** Single-pass scan: removes expired entries, finds the best ready entry, or computes sleep time. */ getNextAction() {
86
+ /** Single-pass scan: removes stale entries, finds the best ready entry, or computes sleep time. */ getNextAction(// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
87
+ entries, requestTracker) {
112
88
  const now = this.dateProvider.now();
113
89
  let best;
114
90
  let earliestReadyAt = Infinity;
115
- for (const [key, entry] of this.entries){
116
- if (+entry.deadline <= now) {
117
- this.entries.delete(key);
91
+ for (const entry of entries){
92
+ // Drop entries whose tx was already found via another collection path.
93
+ if (!requestTracker.isMissing(entry.txHash)) {
94
+ entries.delete(entry);
118
95
  continue;
119
96
  }
120
97
  const backoffMs = this.getBackoffMs(entry);
@@ -133,15 +110,11 @@ import { TxHash } from '@aztec/stdlib/tx';
133
110
  entry: best
134
111
  };
135
112
  }
136
- if (earliestReadyAt < Infinity) {
137
- return {
138
- type: 'sleep',
139
- promise: this.sleepOrWake(earliestReadyAt - now)
140
- };
141
- }
113
+ // earliestReadyAt is finite whenever there are surviving entries; if entries became empty,
114
+ // the outer worker loop will exit on its next iteration via entries.size === 0.
142
115
  return {
143
116
  type: 'sleep',
144
- promise: this.waitForWake()
117
+ ms: earliestReadyAt === Infinity ? 0 : earliestReadyAt - now
145
118
  };
146
119
  }
147
120
  /** Computes backoff for an entry. Backoff applies after a full cycle through all sources. */ getBackoffMs(entry) {
@@ -151,17 +124,4 @@ import { TxHash } from '@aztec/stdlib/tx';
151
124
  }
152
125
  return Math.min(this.config.backoffBaseMs * Math.pow(2, fullCycles - 1), this.config.backoffMaxMs);
153
126
  }
154
- /** Resolves the current wake signal and creates a new one. */ wake() {
155
- this.wakeSignal.resolve();
156
- this.wakeSignal = promiseWithResolvers();
157
- }
158
- /** Waits until the wake signal is resolved. */ async waitForWake() {
159
- await this.wakeSignal.promise;
160
- }
161
- /** Sleeps for the given duration or until the wake signal is resolved. */ async sleepOrWake(ms) {
162
- await Promise.race([
163
- sleep(ms),
164
- this.wakeSignal.promise
165
- ]);
166
- }
167
127
  }
@@ -1,5 +1,5 @@
1
1
  import { type Logger } from '@aztec/foundation/log';
2
- import { type TxHash } from '@aztec/stdlib/tx';
2
+ import { type TxHash, type TxValidator } from '@aztec/stdlib/tx';
3
3
  import { type TelemetryClient } from '@aztec/telemetry-client';
4
4
  import type { TxSource, TxSourceCollectionResult } from './tx_source.js';
5
5
  /** TxSource implementation that downloads txs from a file store. */
@@ -7,6 +7,7 @@ export declare class FileStoreTxSource implements TxSource {
7
7
  private readonly fileStore;
8
8
  private readonly baseUrl;
9
9
  private readonly basePath;
10
+ private readonly txValidator;
10
11
  private readonly log;
11
12
  private downloadsSuccess;
12
13
  private downloadsFailed;
@@ -21,7 +22,7 @@ export declare class FileStoreTxSource implements TxSource {
21
22
  * @param telemetry - Optional telemetry client.
22
23
  * @returns The FileStoreTxSource instance, or undefined if creation fails.
23
24
  */
24
- static create(url: string, basePath: string, log?: Logger, telemetry?: TelemetryClient): Promise<FileStoreTxSource | undefined>;
25
+ static create(url: string, basePath: string, txValidator: TxValidator, log?: Logger, telemetry?: TelemetryClient): Promise<FileStoreTxSource | undefined>;
25
26
  getInfo(): string;
26
27
  getTxsByHash(txHashes: TxHash[]): Promise<TxSourceCollectionResult>;
27
28
  }
@@ -33,5 +34,5 @@ export declare class FileStoreTxSource implements TxSource {
33
34
  * @param telemetry - Optional telemetry client.
34
35
  * @returns Array of successfully created FileStoreTxSource instances.
35
36
  */
36
- export declare function createFileStoreTxSources(urls: string[], basePath: string, log?: Logger, telemetry?: TelemetryClient): Promise<FileStoreTxSource[]>;
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yZV90eF9zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90eF9jb2xsZWN0aW9uL2ZpbGVfc3RvcmVfdHhfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQU0sS0FBSyxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBR0wsS0FBSyxlQUFlLEVBR3JCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsb0VBQW9FO0FBQ3BFLHFCQUFhLGlCQUFrQixZQUFXLFFBQVE7SUFPOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBQzFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztJQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBVHRCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLGVBQWUsQ0FBZ0I7SUFDdkMsT0FBTyxDQUFDLGdCQUFnQixDQUFZO0lBQ3BDLE9BQU8sQ0FBQyxZQUFZLENBQVk7SUFFaEMsT0FBTyxlQVlOO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE9BQW9CLE1BQU0sQ0FDeEIsR0FBRyxFQUFFLE1BQU0sRUFDWCxRQUFRLEVBQUUsTUFBTSxFQUNoQixHQUFHLEdBQUUsTUFBaUQsRUFDdEQsU0FBUyxHQUFFLGVBQXNDLEdBQ2hELE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0FZeEM7SUFFTSxPQUFPLElBQUksTUFBTSxDQUV2QjtJQUVZLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBK0IvRTtDQUNGO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILHdCQUFzQix3QkFBd0IsQ0FDNUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUNkLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLEdBQUcsR0FBRSxNQUFpRCxFQUN0RCxTQUFTLEdBQUUsZUFBc0MsR0FDaEQsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FHOUIifQ==
37
+ export declare function createFileStoreTxSources(urls: string[], basePath: string, txValidator: TxValidator, log?: Logger, telemetry?: TelemetryClient): Promise<FileStoreTxSource[]>;
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yZV90eF9zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90eF9jb2xsZWN0aW9uL2ZpbGVfc3RvcmVfdHhfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQU0sS0FBSyxNQUFNLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBR0wsS0FBSyxlQUFlLEVBR3JCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsb0VBQW9FO0FBQ3BFLHFCQUFhLGlCQUFrQixZQUFXLFFBQVE7SUFPOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBQzFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztJQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXO0lBQzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztJQVZ0QixPQUFPLENBQUMsZ0JBQWdCLENBQWdCO0lBQ3hDLE9BQU8sQ0FBQyxlQUFlLENBQWdCO0lBQ3ZDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBWTtJQUNwQyxPQUFPLENBQUMsWUFBWSxDQUFZO0lBRWhDLE9BQU8sZUFhTjtJQUVEOzs7Ozs7O09BT0c7SUFDSCxPQUFvQixNQUFNLENBQ3hCLEdBQUcsRUFBRSxNQUFNLEVBQ1gsUUFBUSxFQUFFLE1BQU0sRUFDaEIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsR0FBRyxHQUFFLE1BQWlELEVBQ3RELFNBQVMsR0FBRSxlQUFzQyxHQUNoRCxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBWXhDO0lBRU0sT0FBTyxJQUFJLE1BQU0sQ0FFdkI7SUFFWSxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQXFDL0U7Q0FDRjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCx3QkFBc0Isd0JBQXdCLENBQzVDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFDZCxRQUFRLEVBQUUsTUFBTSxFQUNoQixXQUFXLEVBQUUsV0FBVyxFQUN4QixHQUFHLEdBQUUsTUFBaUQsRUFDdEQsU0FBUyxHQUFFLGVBQXNDLEdBQ2hELE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBSzlCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"file_store_tx_source.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/file_store_tx_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAGL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAEzE,oEAAoE;AACpE,qBAAa,iBAAkB,YAAW,QAAQ;IAO9C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,YAAY,CAAY;IAEhC,OAAO,eAYN;IAED;;;;;;;OAOG;IACH,OAAoB,MAAM,CACxB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAiD,EACtD,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAYxC;IAEM,OAAO,IAAI,MAAM,CAEvB;IAEY,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA+B/E;CACF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAiD,EACtD,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAG9B"}
1
+ {"version":3,"file":"file_store_tx_source.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/file_store_tx_source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAM,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAGL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAEzE,oEAAoE;AACpE,qBAAa,iBAAkB,YAAW,QAAQ;IAO9C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAVtB,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,YAAY,CAAY;IAEhC,OAAO,eAaN;IAED;;;;;;;OAOG;IACH,OAAoB,MAAM,CACxB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,GAAG,GAAE,MAAiD,EACtD,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAYxC;IAEM,OAAO,IAAI,MAAM,CAEvB;IAEY,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAqC/E;CACF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,GAAG,GAAE,MAAiD,EACtD,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAK9B"}
@@ -1,3 +1,4 @@
1
+ import { partitionAsync } from '@aztec/foundation/collection';
1
2
  import { createLogger } from '@aztec/foundation/log';
2
3
  import { Timer } from '@aztec/foundation/timer';
3
4
  import { createReadOnlyFileStore } from '@aztec/stdlib/file-store';
@@ -7,15 +8,17 @@ import { Metrics, getTelemetryClient } from '@aztec/telemetry-client';
7
8
  fileStore;
8
9
  baseUrl;
9
10
  basePath;
11
+ txValidator;
10
12
  log;
11
13
  downloadsSuccess;
12
14
  downloadsFailed;
13
15
  downloadDuration;
14
16
  downloadSize;
15
- constructor(fileStore, baseUrl, basePath, log, telemetry){
17
+ constructor(fileStore, baseUrl, basePath, txValidator, log, telemetry){
16
18
  this.fileStore = fileStore;
17
19
  this.baseUrl = baseUrl;
18
20
  this.basePath = basePath;
21
+ this.txValidator = txValidator;
19
22
  this.log = log;
20
23
  const meter = telemetry.getMeter('file-store-tx-source');
21
24
  this.downloadsSuccess = meter.createUpDownCounter(Metrics.TX_FILE_STORE_DOWNLOADS_SUCCESS);
@@ -30,14 +33,14 @@ import { Metrics, getTelemetryClient } from '@aztec/telemetry-client';
30
33
  * @param log - Optional logger.
31
34
  * @param telemetry - Optional telemetry client.
32
35
  * @returns The FileStoreTxSource instance, or undefined if creation fails.
33
- */ static async create(url, basePath, log = createLogger('p2p:file_store_tx_source'), telemetry = getTelemetryClient()) {
36
+ */ static async create(url, basePath, txValidator, log = createLogger('p2p:file_store_tx_source'), telemetry = getTelemetryClient()) {
34
37
  try {
35
38
  const fileStore = await createReadOnlyFileStore(url, log);
36
39
  if (!fileStore) {
37
40
  log.warn(`Failed to create file store for URL: ${url}`);
38
41
  return undefined;
39
42
  }
40
- return new FileStoreTxSource(fileStore, url, basePath, log, telemetry);
43
+ return new FileStoreTxSource(fileStore, url, basePath, txValidator, log, telemetry);
41
44
  } catch (err) {
42
45
  log.warn(`Error creating file store for URL: ${url}`, {
43
46
  error: err
@@ -49,31 +52,38 @@ import { Metrics, getTelemetryClient } from '@aztec/telemetry-client';
49
52
  return `file-store:${this.baseUrl}`;
50
53
  }
51
54
  async getTxsByHash(txHashes) {
52
- const invalidTxHashes = [];
55
+ const results = await Promise.all(txHashes.map(async (txHash)=>{
56
+ const path = `${this.basePath}/txs/${txHash.toString()}.bin`;
57
+ const timer = new Timer();
58
+ try {
59
+ const buffer = await this.fileStore.read(path);
60
+ const tx = Tx.fromBuffer(buffer);
61
+ return {
62
+ tx,
63
+ downloadDuration: timer.ms(),
64
+ downloadSize: buffer.length
65
+ };
66
+ } catch {
67
+ this.downloadsFailed.add(1);
68
+ return undefined;
69
+ }
70
+ }));
71
+ const txs = results.filter((tx)=>tx !== undefined);
72
+ const [validTxs, invalidTxs] = await partitionAsync(txs, async ({ tx, downloadDuration, downloadSize })=>{
73
+ const valid = await this.txValidator.validateTx(tx);
74
+ if (valid.result === 'valid') {
75
+ this.downloadsSuccess.add(1);
76
+ this.downloadDuration.record(Math.ceil(downloadDuration));
77
+ this.downloadSize.record(downloadSize);
78
+ return true;
79
+ } else {
80
+ this.downloadsFailed.add(1);
81
+ return false;
82
+ }
83
+ });
53
84
  return {
54
- validTxs: (await Promise.all(txHashes.map(async (txHash)=>{
55
- const path = `${this.basePath}/txs/${txHash.toString()}.bin`;
56
- const timer = new Timer();
57
- try {
58
- const buffer = await this.fileStore.read(path);
59
- const tx = Tx.fromBuffer(buffer);
60
- if (await tx.validateTxHash() && txHash.equals(tx.txHash)) {
61
- this.downloadsSuccess.add(1);
62
- this.downloadDuration.record(Math.ceil(timer.ms()));
63
- this.downloadSize.record(buffer.length);
64
- return tx;
65
- } else {
66
- invalidTxHashes.push(tx.txHash.toString());
67
- this.downloadsFailed.add(1);
68
- return undefined;
69
- }
70
- } catch {
71
- // Tx not found or error reading - return undefined
72
- this.downloadsFailed.add(1);
73
- return undefined;
74
- }
75
- }))).filter((tx)=>tx !== undefined),
76
- invalidTxHashes: invalidTxHashes
85
+ validTxs: validTxs.map(({ tx })=>tx),
86
+ invalidTxHashes: invalidTxs.map(({ tx })=>tx.getTxHash().toString())
77
87
  };
78
88
  }
79
89
  }
@@ -84,7 +94,7 @@ import { Metrics, getTelemetryClient } from '@aztec/telemetry-client';
84
94
  * @param log - Optional logger.
85
95
  * @param telemetry - Optional telemetry client.
86
96
  * @returns Array of successfully created FileStoreTxSource instances.
87
- */ export async function createFileStoreTxSources(urls, basePath, log = createLogger('p2p:file_store_tx_source'), telemetry = getTelemetryClient()) {
88
- const sources = await Promise.all(urls.map((url)=>FileStoreTxSource.create(url, basePath, log, telemetry)));
97
+ */ export async function createFileStoreTxSources(urls, basePath, txValidator, log = createLogger('p2p:file_store_tx_source'), telemetry = getTelemetryClient()) {
98
+ const sources = await Promise.all(urls.map((url)=>FileStoreTxSource.create(url, basePath, txValidator, log, telemetry)));
89
99
  return sources.filter((s)=>s !== undefined);
90
100
  }
@@ -1,5 +1,4 @@
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 { type MissingTxsCollector, BatchTxRequesterCollector, SendBatchRequestCollector, } from './proposal_tx_collector.js';
4
3
  export { FileStoreTxSource, createFileStoreTxSources } from './file_store_tx_source.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90eF9jb2xsZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSywwQkFBMEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RixPQUFPLEVBQ0wsS0FBSyxtQkFBbUIsRUFDeEIseUJBQXlCLEVBQ3pCLHlCQUF5QixHQUMxQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDIn0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90eF9jb2xsZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSywwQkFBMEIsRUFBRSxLQUFLLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUcsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,KAAK,QAAQ,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EACL,KAAK,mBAAmB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,0BAA0B,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,KAAK,QAAQ,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,4 +1,3 @@
1
1
  export { TxCollection } from './tx_collection.js';
2
2
  export { createNodeRpcTxSources, NodeRpcTxSource } from './tx_source.js';
3
- export { BatchTxRequesterCollector, SendBatchRequestCollector } from './proposal_tx_collector.js';
4
3
  export { FileStoreTxSource, createFileStoreTxSources } from './file_store_tx_source.js';
@@ -7,4 +7,4 @@ export declare class TxCollectionInstrumentation {
7
7
  constructor(client: TelemetryClient, name: string);
8
8
  increaseTxsFor(what: CollectionMethod, count: number, duration: number): void;
9
9
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi9pbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFM0QscUJBQWEsMkJBQTJCO0lBQ3RDLE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBWTtJQUMzQyxPQUFPLENBQUMsNEJBQTRCLENBQVk7SUFFaEQsWUFBWSxNQUFNLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBZ0JoRDtJQUVELGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUtyRTtDQUNGIn0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi9pbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFM0QscUJBQWEsMkJBQTJCO0lBQ3RDLE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBWTtJQUMzQyxPQUFPLENBQUMsNEJBQTRCLENBQVk7SUFFaEQsWUFBWSxNQUFNLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBVWhEO0lBRUQsY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBS3JFO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,qBAAa,2BAA2B;IACtC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,uBAAuB,CAAY;IAC3C,OAAO,CAAC,4BAA4B,CAAY;IAEhD,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAgBhD;IAED,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAKrE;CACF"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,qBAAa,2BAA2B;IACtC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,uBAAuB,CAAY;IAC3C,OAAO,CAAC,4BAA4B,CAAY;IAEhD,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAUhD;IAED,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAKrE;CACF"}
@@ -9,8 +9,6 @@ export class TxCollectionInstrumentation {
9
9
  [Attributes.TX_COLLECTION_METHOD]: [
10
10
  'fast-req-resp',
11
11
  'fast-node-rpc',
12
- 'slow-req-resp',
13
- 'slow-node-rpc',
14
12
  'file-store'
15
13
  ]
16
14
  });
@@ -0,0 +1,53 @@
1
+ import type { DateProvider } from '@aztec/foundation/timer';
2
+ import { TxHash } from '@aztec/stdlib/tx';
3
+ import type { Tx } from '@aztec/stdlib/tx';
4
+ /**
5
+ * Tracks which transactions are still missing and need to be fetched.
6
+ * Manages the request deadline and serves as the sole source of cancellation signal.
7
+ * The request is cancelled when all txs are fetched or the deadline expires.
8
+ */
9
+ export interface IRequestTracker {
10
+ /** Returns the set of transaction hashes that are still missing. */
11
+ get missingTxHashes(): Set<string>;
12
+ /** Size of this.missingTxHashes */
13
+ get numberOfMissingTxs(): number;
14
+ /** Are all requested txs fetched */
15
+ allFetched(): boolean;
16
+ /** Checks that transaction is still missing */
17
+ isMissing(txHash: string): boolean;
18
+ /** Marks a transaction as fetched. Returns true if it was previously missing. */
19
+ markFetched(tx: Tx): boolean;
20
+ /** Get list of collected txs */
21
+ get collectedTxs(): Tx[];
22
+ /** The deadline for this request. */
23
+ get deadline(): Date;
24
+ /** Remaining time in milliseconds until deadline. Returns 0 if already past. */
25
+ get timeoutMs(): number;
26
+ /** Checks whether the request is cancelled (deadline expired or all fetched). May trigger cancellation if deadline has passed. */
27
+ checkCancelled(): boolean;
28
+ /** Resolves when deadline expires or all txs are fetched. */
29
+ get cancellationToken(): Promise<void>;
30
+ /** Externally cancel the request. */
31
+ cancel(): void;
32
+ }
33
+ export declare class RequestTracker implements IRequestTracker {
34
+ readonly missingTxHashes: Set<string>;
35
+ readonly deadline: Date;
36
+ private readonly dateProvider?;
37
+ readonly collectedTxs: Tx[];
38
+ private done;
39
+ private readonly cancellationTokenPromise;
40
+ private readonly deadlineTimer;
41
+ private constructor();
42
+ static create(hashes: TxHash[] | string[], deadline: Date, dateProvider?: DateProvider): RequestTracker;
43
+ markFetched(tx: Tx): boolean;
44
+ get numberOfMissingTxs(): number;
45
+ allFetched(): boolean;
46
+ isMissing(txHash: string): boolean;
47
+ get timeoutMs(): number;
48
+ checkCancelled(): boolean;
49
+ get cancellationToken(): Promise<void>;
50
+ cancel(): void;
51
+ private finish;
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdF90cmFja2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi9yZXF1ZXN0X3RyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNDOzs7O0dBSUc7QUFDSCxNQUFNLFdBQVcsZUFBZTtJQUM5QixvRUFBb0U7SUFDcEUsSUFBSSxlQUFlLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLG1DQUFtQztJQUNuQyxJQUFJLGtCQUFrQixJQUFJLE1BQU0sQ0FBQztJQUNqQyxvQ0FBb0M7SUFDcEMsVUFBVSxJQUFJLE9BQU8sQ0FBQztJQUN0QiwrQ0FBK0M7SUFDL0MsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ25DLGlGQUFpRjtJQUNqRixXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDN0IsZ0NBQWdDO0lBQ2hDLElBQUksWUFBWSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3pCLHFDQUFxQztJQUNyQyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUM7SUFDckIsZ0ZBQWdGO0lBQ2hGLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUN4QixrSUFBa0k7SUFDbEksY0FBYyxJQUFJLE9BQU8sQ0FBQztJQUMxQiw2REFBNkQ7SUFDN0QsSUFBSSxpQkFBaUIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMscUNBQXFDO0lBQ3JDLE1BQU0sSUFBSSxJQUFJLENBQUM7Q0FDaEI7QUFFRCxxQkFBYSxjQUFlLFlBQVcsZUFBZTthQU9sQyxlQUFlLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQzthQUM1QixRQUFRLEVBQUUsSUFBSTtJQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztJQVJoQyxTQUFnQixZQUFZLEVBQUUsRUFBRSxFQUFFLENBQU07SUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBUztJQUNyQixPQUFPLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUE2QjtJQUN0RSxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBNEM7SUFFMUUsT0FBTyxlQW1CTjtJQUVELE9BQWMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxFQUFFLFlBQVksa0JBRTVGO0lBRUQsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQVMzQjtJQUVELElBQUksa0JBQWtCLElBQUksTUFBTSxDQUUvQjtJQUVELFVBQVUsSUFBSSxPQUFPLENBRXBCO0lBRUQsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUVqQztJQUVELElBQUksU0FBUyxJQUFJLE1BQU0sQ0FHdEI7SUFFRCxjQUFjLElBQUksT0FBTyxDQVl4QjtJQUVELElBQUksaUJBQWlCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUVyQztJQUVELE1BQU0sSUFBSSxJQUFJLENBRWI7SUFFRCxPQUFPLENBQUMsTUFBTTtDQVVmIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request_tracker.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/request_tracker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,IAAI,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,mCAAmC;IACnC,IAAI,kBAAkB,IAAI,MAAM,CAAC;IACjC,oCAAoC;IACpC,UAAU,IAAI,OAAO,CAAC;IACtB,+CAA+C;IAC/C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,iFAAiF;IACjF,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAC7B,gCAAgC;IAChC,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;IACzB,qCAAqC;IACrC,IAAI,QAAQ,IAAI,IAAI,CAAC;IACrB,gFAAgF;IAChF,IAAI,SAAS,IAAI,MAAM,CAAC;IACxB,kIAAkI;IAClI,cAAc,IAAI,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,IAAI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,qCAAqC;IACrC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qBAAa,cAAe,YAAW,eAAe;aAOlC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC;aAC5B,QAAQ,EAAE,IAAI;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IARhC,SAAgB,YAAY,EAAE,EAAE,EAAE,CAAM;IACxC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA6B;IACtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4C;IAE1E,OAAO,eAmBN;IAED,OAAc,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,YAAY,kBAE5F;IAED,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAS3B;IAED,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,UAAU,IAAI,OAAO,CAEpB;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjC;IAED,IAAI,SAAS,IAAI,MAAM,CAGtB;IAED,cAAc,IAAI,OAAO,CAYxB;IAED,IAAI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAErC;IAED,MAAM,IAAI,IAAI,CAEb;IAED,OAAO,CAAC,MAAM;CAUf"}