@aztec/p2p 0.0.1-commit.e6bd8901 → 0.0.1-commit.ec5f612

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 (445) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +10 -10
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +45 -18
  7. package/dest/client/interface.d.ts +46 -33
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +41 -51
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +156 -200
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +304 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  18. package/dest/config.d.ts +35 -7
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +21 -7
  21. package/dest/errors/tx-pool.error.d.ts +8 -0
  22. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  23. package/dest/errors/tx-pool.error.js +9 -0
  24. package/dest/index.d.ts +2 -1
  25. package/dest/index.d.ts.map +1 -1
  26. package/dest/index.js +1 -0
  27. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool.js +441 -3
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  33. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  34. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  35. package/dest/mem_pools/attestation_pool/index.js +1 -2
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  39. package/dest/mem_pools/index.d.ts +3 -2
  40. package/dest/mem_pools/index.d.ts.map +1 -1
  41. package/dest/mem_pools/index.js +1 -1
  42. package/dest/mem_pools/instrumentation.d.ts +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  44. package/dest/mem_pools/instrumentation.js +2 -2
  45. package/dest/mem_pools/interface.d.ts +5 -5
  46. package/dest/mem_pools/interface.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +174 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +73 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  87. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  88. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  90. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  91. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  93. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +211 -0
  94. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/interfaces.js +9 -0
  96. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +119 -0
  97. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +193 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +354 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +161 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +77 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +905 -0
  111. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  112. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +7 -2
  114. package/dest/msg_validators/proposal_validator/proposal_validator.js +5 -5
  115. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  116. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  118. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  119. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  121. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  122. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  124. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  125. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  127. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  128. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  130. package/dest/msg_validators/tx_validator/factory.d.ts +118 -5
  131. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  132. package/dest/msg_validators/tx_validator/factory.js +228 -57
  133. package/dest/msg_validators/tx_validator/gas_validator.d.ts +59 -3
  134. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/tx_validator/gas_validator.js +76 -38
  136. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  137. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  138. package/dest/msg_validators/tx_validator/index.js +1 -0
  139. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  140. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  141. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  142. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  143. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  144. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  145. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  146. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  147. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  148. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  149. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  150. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  151. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  152. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  154. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  155. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  157. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  158. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  160. package/dest/services/data_store.d.ts +1 -1
  161. package/dest/services/data_store.d.ts.map +1 -1
  162. package/dest/services/data_store.js +10 -6
  163. package/dest/services/discv5/discV5_service.js +1 -1
  164. package/dest/services/dummy_service.d.ts +24 -4
  165. package/dest/services/dummy_service.d.ts.map +1 -1
  166. package/dest/services/dummy_service.js +46 -1
  167. package/dest/services/encoding.d.ts +3 -3
  168. package/dest/services/encoding.d.ts.map +1 -1
  169. package/dest/services/encoding.js +11 -10
  170. package/dest/services/gossipsub/index.d.ts +3 -0
  171. package/dest/services/gossipsub/index.d.ts.map +1 -0
  172. package/dest/services/gossipsub/index.js +2 -0
  173. package/dest/services/gossipsub/scoring.d.ts +21 -3
  174. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  175. package/dest/services/gossipsub/scoring.js +24 -7
  176. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  177. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  178. package/dest/services/gossipsub/topic_score_params.js +346 -0
  179. package/dest/services/index.d.ts +2 -1
  180. package/dest/services/index.d.ts.map +1 -1
  181. package/dest/services/index.js +1 -0
  182. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  183. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  184. package/dest/services/libp2p/instrumentation.js +14 -3
  185. package/dest/services/libp2p/libp2p_service.d.ts +100 -42
  186. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  187. package/dest/services/libp2p/libp2p_service.js +451 -359
  188. package/dest/services/peer-manager/metrics.d.ts +2 -2
  189. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  190. package/dest/services/peer-manager/metrics.js +20 -5
  191. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  192. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  193. package/dest/services/peer-manager/peer_scoring.js +33 -4
  194. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
  195. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  196. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +539 -0
  197. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  198. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  199. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  200. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
  201. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  202. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  203. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
  204. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  205. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
  206. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +60 -0
  207. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  208. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +173 -0
  209. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  210. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  211. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  212. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  213. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  214. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  215. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  216. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  217. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  218. package/dest/services/reqresp/interface.d.ts +12 -1
  219. package/dest/services/reqresp/interface.d.ts.map +1 -1
  220. package/dest/services/reqresp/interface.js +15 -1
  221. package/dest/services/reqresp/metrics.d.ts +6 -5
  222. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  223. package/dest/services/reqresp/metrics.js +17 -5
  224. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  225. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  226. package/dest/services/reqresp/protocols/block_txs/bitvector.js +5 -0
  227. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  228. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  229. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  230. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  231. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  232. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  233. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  234. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  235. package/dest/services/reqresp/protocols/tx.js +20 -0
  236. package/dest/services/reqresp/reqresp.d.ts +6 -1
  237. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  238. package/dest/services/reqresp/reqresp.js +71 -27
  239. package/dest/services/service.d.ts +42 -3
  240. package/dest/services/service.d.ts.map +1 -1
  241. package/dest/services/tx_collection/config.d.ts +22 -1
  242. package/dest/services/tx_collection/config.d.ts.map +1 -1
  243. package/dest/services/tx_collection/config.js +55 -1
  244. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
  245. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  246. package/dest/services/tx_collection/fast_tx_collection.js +71 -44
  247. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  248. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  249. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  250. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  251. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  252. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  253. package/dest/services/tx_collection/index.d.ts +3 -1
  254. package/dest/services/tx_collection/index.d.ts.map +1 -1
  255. package/dest/services/tx_collection/index.js +2 -0
  256. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  257. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  258. package/dest/services/tx_collection/instrumentation.js +10 -2
  259. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  260. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  261. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  262. package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
  263. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  264. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  265. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  266. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  267. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  268. package/dest/services/tx_collection/tx_collection.d.ts +25 -12
  269. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  270. package/dest/services/tx_collection/tx_collection.js +79 -7
  271. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  272. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  273. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  274. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  275. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  276. package/dest/services/tx_collection/tx_source.js +19 -2
  277. package/dest/services/tx_file_store/config.d.ts +16 -0
  278. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  279. package/dest/services/tx_file_store/config.js +22 -0
  280. package/dest/services/tx_file_store/index.d.ts +4 -0
  281. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  282. package/dest/services/tx_file_store/index.js +3 -0
  283. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  284. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  285. package/dest/services/tx_file_store/instrumentation.js +29 -0
  286. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  287. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  288. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  289. package/dest/services/tx_provider.d.ts +4 -4
  290. package/dest/services/tx_provider.d.ts.map +1 -1
  291. package/dest/services/tx_provider.js +9 -8
  292. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  293. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  294. package/dest/services/tx_provider_instrumentation.js +5 -5
  295. package/dest/test-helpers/index.d.ts +3 -1
  296. package/dest/test-helpers/index.d.ts.map +1 -1
  297. package/dest/test-helpers/index.js +2 -0
  298. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  299. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  300. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  301. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  302. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  303. package/dest/test-helpers/mock-pubsub.js +105 -4
  304. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  305. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  306. package/dest/test-helpers/reqresp-nodes.js +4 -3
  307. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  308. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  309. package/dest/test-helpers/test_tx_provider.js +41 -0
  310. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  311. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  312. package/dest/test-helpers/testbench-utils.js +366 -0
  313. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  314. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  315. package/dest/testbench/p2p_client_testbench_worker.js +219 -138
  316. package/dest/testbench/worker_client_manager.d.ts +51 -6
  317. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  318. package/dest/testbench/worker_client_manager.js +226 -44
  319. package/dest/util.d.ts +2 -2
  320. package/dest/util.d.ts.map +1 -1
  321. package/package.json +14 -14
  322. package/src/bootstrap/bootstrap.ts +7 -4
  323. package/src/client/factory.ts +83 -36
  324. package/src/client/interface.ts +56 -34
  325. package/src/client/p2p_client.ts +192 -247
  326. package/src/client/test/tx_proposal_collector/README.md +227 -0
  327. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +345 -0
  328. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  329. package/src/config.ts +47 -11
  330. package/src/errors/tx-pool.error.ts +12 -0
  331. package/src/index.ts +1 -0
  332. package/src/mem_pools/attestation_pool/attestation_pool.ts +496 -91
  333. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  334. package/src/mem_pools/attestation_pool/index.ts +9 -2
  335. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  336. package/src/mem_pools/index.ts +4 -1
  337. package/src/mem_pools/instrumentation.ts +2 -1
  338. package/src/mem_pools/interface.ts +4 -4
  339. package/src/mem_pools/tx_pool/README.md +1 -1
  340. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  341. package/src/mem_pools/tx_pool_v2/README.md +275 -0
  342. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  343. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  344. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  345. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  346. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
  347. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  348. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  349. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +209 -0
  350. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  351. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  352. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  353. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +90 -0
  354. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
  355. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  356. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  357. package/src/mem_pools/tx_pool_v2/interfaces.ts +242 -0
  358. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +297 -0
  359. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  360. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +444 -0
  361. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +223 -0
  362. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1083 -0
  363. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +10 -4
  364. package/src/msg_validators/proposal_validator/proposal_validator.ts +5 -5
  365. package/src/msg_validators/tx_validator/README.md +115 -0
  366. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  367. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  368. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  369. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  370. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  371. package/src/msg_validators/tx_validator/factory.ts +372 -55
  372. package/src/msg_validators/tx_validator/gas_validator.ts +98 -29
  373. package/src/msg_validators/tx_validator/index.ts +1 -0
  374. package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
  375. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  376. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  377. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  378. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  379. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  380. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  381. package/src/services/data_store.ts +10 -7
  382. package/src/services/discv5/discV5_service.ts +1 -1
  383. package/src/services/dummy_service.ts +59 -2
  384. package/src/services/encoding.ts +9 -9
  385. package/src/services/gossipsub/README.md +641 -0
  386. package/src/services/gossipsub/index.ts +2 -0
  387. package/src/services/gossipsub/scoring.ts +29 -5
  388. package/src/services/gossipsub/topic_score_params.ts +487 -0
  389. package/src/services/index.ts +1 -0
  390. package/src/services/libp2p/instrumentation.ts +15 -2
  391. package/src/services/libp2p/libp2p_service.ts +496 -397
  392. package/src/services/peer-manager/metrics.ts +21 -4
  393. package/src/services/peer-manager/peer_scoring.ts +29 -1
  394. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  395. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +678 -0
  396. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  397. package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
  398. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
  399. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +244 -0
  400. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  401. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  402. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  403. package/src/services/reqresp/interface.ts +29 -1
  404. package/src/services/reqresp/metrics.ts +34 -9
  405. package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
  406. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  407. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  408. package/src/services/reqresp/protocols/tx.ts +22 -0
  409. package/src/services/reqresp/reqresp.ts +82 -23
  410. package/src/services/service.ts +55 -2
  411. package/src/services/tx_collection/config.ts +83 -1
  412. package/src/services/tx_collection/fast_tx_collection.ts +93 -47
  413. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  414. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  415. package/src/services/tx_collection/index.ts +6 -0
  416. package/src/services/tx_collection/instrumentation.ts +17 -2
  417. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  418. package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
  419. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  420. package/src/services/tx_collection/tx_collection.ts +117 -20
  421. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  422. package/src/services/tx_collection/tx_source.ts +22 -3
  423. package/src/services/tx_file_store/config.ts +37 -0
  424. package/src/services/tx_file_store/index.ts +3 -0
  425. package/src/services/tx_file_store/instrumentation.ts +36 -0
  426. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  427. package/src/services/tx_provider.ts +10 -9
  428. package/src/services/tx_provider_instrumentation.ts +11 -5
  429. package/src/test-helpers/index.ts +2 -0
  430. package/src/test-helpers/make-test-p2p-clients.ts +3 -5
  431. package/src/test-helpers/mock-pubsub.ts +146 -9
  432. package/src/test-helpers/reqresp-nodes.ts +4 -6
  433. package/src/test-helpers/test_tx_provider.ts +64 -0
  434. package/src/test-helpers/testbench-utils.ts +430 -0
  435. package/src/testbench/p2p_client_testbench_worker.ts +333 -131
  436. package/src/testbench/worker_client_manager.ts +304 -47
  437. package/src/util.ts +7 -1
  438. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  439. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  440. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  441. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  442. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  443. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  444. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  445. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
@@ -1,10 +1,13 @@
1
1
  import { compactArray } from '@aztec/foundation/collection';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { RunningPromise } from '@aztec/foundation/promise';
4
+ import { sleep } from '@aztec/foundation/sleep';
4
5
  import { DateProvider } from '@aztec/foundation/timer';
6
+ import { TxHash } from '@aztec/stdlib/tx';
5
7
  import { getTelemetryClient } from '@aztec/telemetry-client';
6
8
  import { FastTxCollection } from './fast_tx_collection.js';
7
- import { SlowTxCollection } from './slow_tx_collection.js';
9
+ import { FileStoreTxCollection } from './file_store_tx_collection.js';
10
+ import { SlowTxCollection, getProofDeadlineForSlot } from './slow_tx_collection.js';
8
11
  import { TxCollectionSink } from './tx_collection_sink.js';
9
12
  /**
10
13
  * Coordinates tx collection from remote RPC nodes and reqresp.
@@ -17,7 +20,7 @@ import { TxCollectionSink } from './tx_collection_sink.js';
17
20
  * via events and notifies the slow and fast collection loops to stop collecting that tx, so that we don't
18
21
  * collect the same tx multiple times.
19
22
  */ export class TxCollection {
20
- reqResp;
23
+ p2pService;
21
24
  nodes;
22
25
  constants;
23
26
  txPool;
@@ -26,21 +29,37 @@ import { TxCollectionSink } from './tx_collection_sink.js';
26
29
  log;
27
30
  /** Slow collection background loops */ slowCollection;
28
31
  /** Fast collection methods */ fastCollection;
32
+ /** File store collection for slow (mined block) path */ fileStoreSlowCollection;
33
+ /** File store collection for fast (proposal/proving) path */ fileStoreFastCollection;
29
34
  /** Loop for periodically reconciling found transactions from the tx pool in case we missed some */ reconcileFoundTxsLoop;
30
35
  /** Handles txs found by the slow and fast collection loops */ txCollectionSink;
31
36
  /** Handler for the txs-added event from the tx pool */ handleTxsAddedToPool;
32
37
  /** Handler for the txs-added event from the tx collection sink */ handleTxsFound;
33
- constructor(reqResp, nodes, constants, txPool, config, dateProvider = new DateProvider(), telemetryClient = getTelemetryClient(), log = createLogger('p2p:tx_collection_service')){
34
- this.reqResp = reqResp;
38
+ /** Whether the service has been started. */ started;
39
+ /** Whether file store sources are configured. */ hasFileStoreSources;
40
+ constructor(p2pService, nodes, constants, txPool, config, fileStoreSources = [], dateProvider = new DateProvider(), telemetryClient = getTelemetryClient(), log = createLogger('p2p:tx_collection_service')){
41
+ this.p2pService = p2pService;
35
42
  this.nodes = nodes;
36
43
  this.constants = constants;
37
44
  this.txPool = txPool;
38
45
  this.config = config;
39
46
  this.dateProvider = dateProvider;
40
47
  this.log = log;
48
+ this.started = false;
41
49
  this.txCollectionSink = new TxCollectionSink(this.txPool, telemetryClient, this.log);
42
- this.fastCollection = new FastTxCollection(this.reqResp, this.nodes, this.txCollectionSink, this.config, this.dateProvider, this.log);
43
- this.slowCollection = new SlowTxCollection(this.reqResp, this.nodes, this.txCollectionSink, this.fastCollection, constants, this.config, this.dateProvider, this.log);
50
+ this.fastCollection = new FastTxCollection(this.p2pService, this.nodes, this.txCollectionSink, this.config, this.dateProvider, this.log);
51
+ this.slowCollection = new SlowTxCollection(this.p2pService.reqResp, this.nodes, this.txCollectionSink, this.fastCollection, constants, this.config, this.dateProvider, this.log);
52
+ this.hasFileStoreSources = fileStoreSources.length > 0;
53
+ this.fileStoreSlowCollection = new FileStoreTxCollection(fileStoreSources, this.txCollectionSink, {
54
+ workerCount: config.txCollectionFileStoreSlowWorkerCount,
55
+ backoffBaseMs: config.txCollectionFileStoreSlowBackoffBaseMs,
56
+ backoffMaxMs: config.txCollectionFileStoreSlowBackoffMaxMs
57
+ }, this.dateProvider, this.log);
58
+ this.fileStoreFastCollection = new FileStoreTxCollection(fileStoreSources, this.txCollectionSink, {
59
+ workerCount: config.txCollectionFileStoreFastWorkerCount,
60
+ backoffBaseMs: config.txCollectionFileStoreFastBackoffBaseMs,
61
+ backoffMaxMs: config.txCollectionFileStoreFastBackoffMaxMs
62
+ }, this.dateProvider, this.log);
44
63
  this.reconcileFoundTxsLoop = new RunningPromise(()=>this.reconcileFoundTxsWithPool(), this.log, this.config.txCollectionReconcileIntervalMs);
45
64
  this.handleTxsFound = (args)=>{
46
65
  this.foundTxs(args.txs);
@@ -55,15 +74,21 @@ import { TxCollectionSink } from './tx_collection_sink.js';
55
74
  this.txPool.on('txs-added', this.handleTxsAddedToPool);
56
75
  }
57
76
  /** Starts all collection loops. */ start() {
77
+ this.started = true;
58
78
  this.slowCollection.start();
79
+ this.fileStoreSlowCollection.start();
80
+ this.fileStoreFastCollection.start();
59
81
  this.reconcileFoundTxsLoop.start();
60
82
  // TODO(palla/txs): Collect mined unproven tx hashes for txs we dont have in the pool and populate missingTxs on startup
61
83
  return Promise.resolve();
62
84
  }
63
85
  /** Stops all activity. */ async stop() {
86
+ this.started = false;
64
87
  await Promise.all([
65
88
  this.slowCollection.stop(),
66
89
  this.fastCollection.stop(),
90
+ this.fileStoreSlowCollection.stop(),
91
+ this.fileStoreFastCollection.stop(),
67
92
  this.reconcileFoundTxsLoop.stop()
68
93
  ]);
69
94
  this.txPool.removeListener('txs-added', this.handleTxsAddedToPool);
@@ -79,7 +104,25 @@ import { TxCollectionSink } from './tx_collection_sink.js';
79
104
  return this.constants;
80
105
  }
81
106
  /** Starts collecting the given tx hashes for the given L2Block in the slow loop */ startCollecting(block, txHashes) {
82
- return this.slowCollection.startCollecting(block, txHashes);
107
+ this.slowCollection.startCollecting(block, txHashes);
108
+ // Delay file store collection to give P2P methods time to find txs first
109
+ if (this.hasFileStoreSources) {
110
+ const context = {
111
+ type: 'mined',
112
+ block
113
+ };
114
+ const deadline = getProofDeadlineForSlot(block.header.getSlot(), this.constants);
115
+ sleep(this.config.txCollectionFileStoreSlowDelayMs).then(()=>{
116
+ if (this.started) {
117
+ // Only queue txs that are still missing after the delay
118
+ const stillMissing = new Set(this.slowCollection.getMissingTxHashes().map((h)=>h.toString()));
119
+ const remaining = txHashes.filter((h)=>stillMissing.has(h.toString()));
120
+ if (remaining.length > 0) {
121
+ this.fileStoreSlowCollection.startCollecting(remaining, context, deadline);
122
+ }
123
+ }
124
+ }).catch((err)=>this.log.error('Error in file store slow delay', err));
125
+ }
83
126
  }
84
127
  /** Collects the set of txs for the given block proposal as fast as possible */ collectFastForProposal(blockProposal, blockNumber, txHashes, opts) {
85
128
  return this.collectFastFor({
@@ -95,11 +138,36 @@ import { TxCollectionSink } from './tx_collection_sink.js';
95
138
  }, txHashes, opts);
96
139
  }
97
140
  /** Collects the set of txs for the given proposal or block as fast as possible */ collectFastFor(input, txHashes, opts) {
141
+ const hashes = txHashes.map((h)=>typeof h === 'string' ? TxHash.fromString(h) : h);
142
+ // Delay file store collection to give P2P methods time to find txs first
143
+ if (this.hasFileStoreSources) {
144
+ const context = this.getAddContextForInput(input);
145
+ sleep(this.config.txCollectionFileStoreFastDelayMs).then(()=>{
146
+ if (this.started) {
147
+ this.fileStoreFastCollection.startCollecting(hashes, context, opts.deadline);
148
+ }
149
+ }).catch((err)=>this.log.error('Error in file store fast delay', err));
150
+ }
98
151
  return this.fastCollection.collectFastFor(input, txHashes, opts);
99
152
  }
153
+ /** Returns the TxAddContext for the given fast collection request input */ getAddContextForInput(input) {
154
+ if (input.type === 'proposal') {
155
+ return {
156
+ type: 'proposal',
157
+ blockHeader: input.blockProposal.blockHeader
158
+ };
159
+ } else {
160
+ return {
161
+ type: 'mined',
162
+ block: input.block
163
+ };
164
+ }
165
+ }
100
166
  /** Mark the given txs as found. Stops collecting them. */ foundTxs(txs) {
101
167
  this.slowCollection.foundTxs(txs);
102
168
  this.fastCollection.foundTxs(txs);
169
+ this.fileStoreSlowCollection.foundTxs(txs);
170
+ this.fileStoreFastCollection.foundTxs(txs);
103
171
  }
104
172
  /**
105
173
  * Stop collecting all txs for blocks less than or requal to the block number specified.
@@ -107,6 +175,8 @@ import { TxCollectionSink } from './tx_collection_sink.js';
107
175
  */ stopCollectingForBlocksUpTo(blockNumber) {
108
176
  this.slowCollection.stopCollectingForBlocksUpTo(blockNumber);
109
177
  this.fastCollection.stopCollectingForBlocksUpTo(blockNumber);
178
+ this.fileStoreSlowCollection.clearPending();
179
+ this.fileStoreFastCollection.clearPending();
110
180
  }
111
181
  /**
112
182
  * Stop collecting all txs for blocks greater than the block number specified.
@@ -114,6 +184,8 @@ import { TxCollectionSink } from './tx_collection_sink.js';
114
184
  */ stopCollectingForBlocksAfter(blockNumber) {
115
185
  this.slowCollection.stopCollectingForBlocksAfter(blockNumber);
116
186
  this.fastCollection.stopCollectingForBlocksAfter(blockNumber);
187
+ this.fileStoreSlowCollection.clearPending();
188
+ this.fileStoreFastCollection.clearPending();
117
189
  }
118
190
  /** Every now and then, check if the pool has received one of the txs we are looking for, just to catch any race conditions */ async reconcileFoundTxsWithPool() {
119
191
  const missingTxHashes = this.slowCollection.getMissingTxHashes();
@@ -1,10 +1,20 @@
1
1
  import type { Logger } from '@aztec/foundation/log';
2
2
  import type { TypedEventEmitter } from '@aztec/foundation/types';
3
- import { Tx, type TxHash } from '@aztec/stdlib/tx';
3
+ import type { L2Block } from '@aztec/stdlib/block';
4
+ import type { BlockHeader, Tx } from '@aztec/stdlib/tx';
4
5
  import type { TelemetryClient } from '@aztec/telemetry-client';
5
- import type { TxPool, TxPoolEvents } from '../../mem_pools/tx_pool/tx_pool.js';
6
+ import type { TxPoolV2, TxPoolV2Events } from '../../mem_pools/index.js';
6
7
  import type { CollectionMethod } from './tx_collection.js';
7
- declare const TxCollectionSink_base: new () => TypedEventEmitter<TxPoolEvents>;
8
+ import type { TxSourceCollectionResult } from './tx_source.js';
9
+ /** Context determining how collected txs should be added to the pool. */
10
+ export type TxAddContext = {
11
+ type: 'proposal';
12
+ blockHeader: BlockHeader;
13
+ } | {
14
+ type: 'mined';
15
+ block: L2Block;
16
+ };
17
+ declare const TxCollectionSink_base: new () => TypedEventEmitter<TxPoolV2Events>;
8
18
  /**
9
19
  * Executes collection requests from the fast and slow collection loops, and handles collected txs
10
20
  * by adding them to the tx pool and emitting events, as well as handling logging and metrics.
@@ -13,13 +23,13 @@ export declare class TxCollectionSink extends TxCollectionSink_base {
13
23
  private readonly txPool;
14
24
  private readonly log;
15
25
  private readonly instrumentation;
16
- constructor(txPool: TxPool, telemetryClient: TelemetryClient, log: Logger);
17
- collect(collectValidTxsFn: (txHashes: TxHash[]) => Promise<(Tx | undefined)[]>, requested: TxHash[], info: Record<string, any> & {
26
+ constructor(txPool: TxPoolV2, telemetryClient: TelemetryClient, log: Logger);
27
+ collect(collectValidTxsFn: () => Promise<TxSourceCollectionResult>, requested: string[], info: Record<string, any> & {
18
28
  description: string;
19
29
  method: CollectionMethod;
20
- }): Promise<{
30
+ }, context: TxAddContext): Promise<{
21
31
  txs: Tx[];
22
- requested: TxHash[];
32
+ requested: string[];
23
33
  duration: number;
24
34
  } | {
25
35
  txs: Tx[];
@@ -27,4 +37,4 @@ export declare class TxCollectionSink extends TxCollectionSink_base {
27
37
  private foundTxs;
28
38
  }
29
39
  export {};
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfY29sbGVjdGlvbl9zaW5rLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi90eF9jb2xsZWN0aW9uX3NpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJL0QsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRS9FLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBRTNEOzs7R0FHRztBQUNILHFCQUFhLGdCQUFpQixTQUFRLHFCQUEyRDtJQUk3RixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFFdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBTHRCLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUE4QjtJQUU5RCxZQUNtQixNQUFNLEVBQUUsTUFBTSxFQUMvQixlQUFlLEVBQUUsZUFBZSxFQUNmLEdBQUcsRUFBRSxNQUFNLEVBSTdCO0lBRVksT0FBTyxDQUNsQixpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUN0RSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHO1FBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQTtLQUFFOzs7Ozs7T0F1RTlFO1lBRWEsUUFBUTtDQXdCdkIifQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfY29sbGVjdGlvbl9zaW5rLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi90eF9jb2xsZWN0aW9uX3NpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJL0QsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCx5RUFBeUU7QUFDekUsTUFBTSxNQUFNLFlBQVksR0FBRztJQUFFLElBQUksRUFBRSxVQUFVLENBQUM7SUFBQyxXQUFXLEVBQUUsV0FBVyxDQUFBO0NBQUUsR0FBRztJQUFFLElBQUksRUFBRSxPQUFPLENBQUM7SUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFBO0NBQUUsQ0FBQzs7QUFFOUc7OztHQUdHO0FBQ0gscUJBQWEsZ0JBQWlCLFNBQVEscUJBQTZEO0lBSS9GLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUV2QixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7SUFMdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQThCO0lBRTlELFlBQ21CLE1BQU0sRUFBRSxRQUFRLEVBQ2pDLGVBQWUsRUFBRSxlQUFlLEVBQ2YsR0FBRyxFQUFFLE1BQU0sRUFJN0I7SUFFWSxPQUFPLENBQ2xCLGlCQUFpQixFQUFFLE1BQU0sT0FBTyxDQUFDLHdCQUF3QixDQUFDLEVBQzFELFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUc7UUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFBO0tBQUUsRUFDN0UsT0FBTyxFQUFFLFlBQVk7Ozs7OztPQXdEdEI7WUFFYSxRQUFRO0NBNkJ2QiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"tx_collection_sink.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/tx_collection_sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;;AAE3D;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAA2D;IAI7F,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAE9D,YACmB,MAAM,EAAE,MAAM,EAC/B,eAAe,EAAE,eAAe,EACf,GAAG,EAAE,MAAM,EAI7B;IAEY,OAAO,CAClB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,EACtE,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE;;;;;;OAuE9E;YAEa,QAAQ;CAwBvB"}
1
+ {"version":3,"file":"tx_collection_sink.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/tx_collection_sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;;AAE9G;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAA6D;IAI/F,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAE9D,YACmB,MAAM,EAAE,QAAQ,EACjC,eAAe,EAAE,eAAe,EACf,GAAG,EAAE,MAAM,EAI7B;IAEY,OAAO,CAClB,iBAAiB,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,EAC1D,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE,EAC7E,OAAO,EAAE,YAAY;;;;;;OAwDtB;YAEa,QAAQ;CA6BvB"}
@@ -12,46 +12,37 @@ import { TxCollectionInstrumentation } from './instrumentation.js';
12
12
  super(), this.txPool = txPool, this.log = log;
13
13
  this.instrumentation = new TxCollectionInstrumentation(telemetryClient, 'TxCollection');
14
14
  }
15
- async collect(collectValidTxsFn, requested, info) {
15
+ async collect(collectValidTxsFn, requested, info, context) {
16
16
  this.log.trace(`Requesting ${requested.length} txs via ${info.description}`, {
17
17
  ...info,
18
- requestedTxs: requested.map((t)=>t.toString())
18
+ requestedTxs: requested
19
19
  });
20
20
  // Execute collection function and measure the time taken, catching any errors.
21
- const [duration, txs] = await elapsed(async ()=>{
21
+ const [duration, { validTxs, invalidTxHashes }] = await elapsed(async ()=>{
22
22
  try {
23
- const response = await collectValidTxsFn(requested);
24
- return response.filter((tx)=>tx !== undefined);
23
+ return await collectValidTxsFn();
25
24
  } catch (err) {
26
25
  this.log.error(`Error collecting txs via ${info.description}`, err, {
27
26
  ...info,
28
- requestedTxs: requested.map((hash)=>hash.toString())
27
+ requestedTxs: requested
29
28
  });
30
- return [];
29
+ return {
30
+ validTxs: [],
31
+ invalidTxHashes: []
32
+ };
31
33
  }
32
34
  });
33
- if (txs.length === 0) {
35
+ if (validTxs.length === 0 && invalidTxHashes.length === 0) {
34
36
  this.log.trace(`No txs found via ${info.description}`, {
35
37
  ...info,
36
- requestedTxs: requested.map((t)=>t.toString())
38
+ requestedTxs: requested
37
39
  });
38
40
  return {
39
- txs,
41
+ txs: validTxs,
40
42
  requested,
41
43
  duration
42
44
  };
43
45
  }
44
- // Validate tx hashes for all collected txs from external sources
45
- const validTxs = [];
46
- const invalidTxHashes = [];
47
- await Promise.all(txs.map(async (tx)=>{
48
- const isValid = await tx.validateTxHash();
49
- if (isValid) {
50
- validTxs.push(tx);
51
- } else {
52
- invalidTxHashes.push(tx.getTxHash().toString());
53
- }
54
- }));
55
46
  if (invalidTxHashes.length > 0) {
56
47
  this.log.warn(`Rejecting ${invalidTxHashes.length} txs with invalid hashes from ${info.description}`, {
57
48
  ...info,
@@ -61,7 +52,7 @@ import { TxCollectionInstrumentation } from './instrumentation.js';
61
52
  if (validTxs.length === 0) {
62
53
  this.log.trace(`No valid txs found via ${info.description} after validation`, {
63
54
  ...info,
64
- requestedTxs: requested.map((t)=>t.toString()),
55
+ requestedTxs: requested,
65
56
  invalidTxHashes
66
57
  });
67
58
  return {
@@ -74,26 +65,32 @@ import { TxCollectionInstrumentation } from './instrumentation.js';
74
65
  ...info,
75
66
  duration,
76
67
  txs: validTxs.map((t)=>t.getTxHash().toString()),
77
- requestedTxs: requested.map((t)=>t.toString()),
68
+ requestedTxs: requested,
78
69
  rejectedCount: invalidTxHashes.length
79
70
  });
80
71
  return await this.foundTxs(validTxs, {
81
72
  ...info,
82
73
  duration
83
- });
74
+ }, context);
84
75
  }
85
- async foundTxs(txs, info) {
76
+ async foundTxs(txs, info, context) {
86
77
  // Report metrics for the collection
87
78
  this.instrumentation.increaseTxsFor(info.method, txs.length, info.duration);
88
79
  // Mark txs as found in the slow missing txs set and all fast requests
89
80
  this.emit('txs-added', {
90
81
  txs
91
82
  });
92
- // Add the txs to the tx pool (should not fail, but we catch it just in case)
83
+ // Add the txs to the tx pool using the appropriate method based on context
93
84
  try {
94
- await this.txPool.addTxs(txs, {
95
- source: `tx-collection`
96
- });
85
+ if (context.type === 'mined') {
86
+ await this.txPool.addMinedTxs(txs, context.block.header, {
87
+ source: 'tx-collection'
88
+ });
89
+ } else {
90
+ await this.txPool.addProtectedTxs(txs, context.blockHeader, {
91
+ source: 'tx-collection'
92
+ });
93
+ }
97
94
  } catch (err) {
98
95
  this.log.error(`Error adding txs to the pool via ${info.description}`, err, {
99
96
  ...info,
@@ -2,9 +2,13 @@ import type { ChainConfig } from '@aztec/stdlib/config';
2
2
  import { type AztecNode } from '@aztec/stdlib/interfaces/client';
3
3
  import type { Tx, TxHash } from '@aztec/stdlib/tx';
4
4
  import { type ComponentsVersions } from '@aztec/stdlib/versioning';
5
+ export type TxSourceCollectionResult = {
6
+ validTxs: Tx[];
7
+ invalidTxHashes: string[];
8
+ };
5
9
  export interface TxSource {
6
10
  getInfo(): string;
7
- getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
11
+ getTxsByHash(txHashes: TxHash[]): Promise<TxSourceCollectionResult>;
8
12
  }
9
13
  export declare class NodeRpcTxSource implements TxSource {
10
14
  private readonly client;
@@ -12,7 +16,8 @@ export declare class NodeRpcTxSource implements TxSource {
12
16
  constructor(client: Pick<AztecNode, 'getTxsByHash'>, info: string);
13
17
  static fromUrl(nodeUrl: string, versions: ComponentsVersions): NodeRpcTxSource;
14
18
  getInfo(): string;
15
- getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
19
+ getTxsByHash(txHashes: TxHash[]): Promise<TxSourceCollectionResult>;
20
+ private verifyTxs;
16
21
  }
17
22
  export declare function createNodeRpcTxSources(urls: string[], chainConfig: ChainConfig): NodeRpcTxSource[];
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfc291cmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi90eF9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBbUMsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRyxNQUFNLFdBQVcsUUFBUTtJQUN2QixPQUFPLElBQUksTUFBTSxDQUFDO0lBQ2xCLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUMvRDtBQUVELHFCQUFhLGVBQWdCLFlBQVcsUUFBUTtJQUU1QyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO0lBRnZCLFlBQ21CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUN2QyxJQUFJLEVBQUUsTUFBTSxFQUMzQjtJQUVKLE9BQWMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixHQUFHLGVBQWUsQ0FHcEY7SUFFTSxPQUFPLFdBRWI7SUFFTSxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBRW5FO0NBQ0Y7QUFFRCx3QkFBZ0Isc0JBQXNCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLHFCQUc5RSJ9
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfc291cmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi90eF9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBbUMsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRyxNQUFNLE1BQU0sd0JBQXdCLEdBQUc7SUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLENBQUE7Q0FBRSxDQUFDO0FBRXJGLE1BQU0sV0FBVyxRQUFRO0lBQ3ZCLE9BQU8sSUFBSSxNQUFNLENBQUM7SUFDbEIsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztDQUNyRTtBQUVELHFCQUFhLGVBQWdCLFlBQVcsUUFBUTtJQUU1QyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO0lBRnZCLFlBQ21CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUN2QyxJQUFJLEVBQUUsTUFBTSxFQUMzQjtJQUVKLE9BQWMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixHQUFHLGVBQWUsQ0FHcEY7SUFFTSxPQUFPLFdBRWI7SUFFWSxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUUvRTtZQUVhLFNBQVM7Q0FnQnhCO0FBRUQsd0JBQWdCLHNCQUFzQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxxQkFHOUUifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"tx_source.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/tx_source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,kBAAkB,EAAmC,MAAM,0BAA0B,CAAC;AAGpG,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,MAAM,CAAC;IAClB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CAC/D;AAED,qBAAa,eAAgB,YAAW,QAAQ;IAE5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACvC,IAAI,EAAE,MAAM,EAC3B;IAEJ,OAAc,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,eAAe,CAGpF;IAEM,OAAO,WAEb;IAEM,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAEnE;CACF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,qBAG9E"}
1
+ {"version":3,"file":"tx_source.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/tx_source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,kBAAkB,EAAmC,MAAM,0BAA0B,CAAC;AAGpG,MAAM,MAAM,wBAAwB,GAAG;IAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAErF,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,MAAM,CAAC;IAClB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACrE;AAED,qBAAa,eAAgB,YAAW,QAAQ;IAE5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACvC,IAAI,EAAE,MAAM,EAC3B;IAEJ,OAAc,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,eAAe,CAGpF;IAEM,OAAO,WAEb;IAEY,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAE/E;YAEa,SAAS;CAgBxB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,qBAG9E"}
@@ -21,8 +21,25 @@ export class NodeRpcTxSource {
21
21
  getInfo() {
22
22
  return this.info;
23
23
  }
24
- getTxsByHash(txHashes) {
25
- return this.client.getTxsByHash(txHashes);
24
+ async getTxsByHash(txHashes) {
25
+ return this.verifyTxs(await this.client.getTxsByHash(txHashes));
26
+ }
27
+ async verifyTxs(txs) {
28
+ // Validate tx hashes for all collected txs from external sources
29
+ const validTxs = [];
30
+ const invalidTxHashes = [];
31
+ await Promise.all(txs.map(async (tx)=>{
32
+ const isValid = await tx.validateTxHash();
33
+ if (isValid) {
34
+ validTxs.push(tx);
35
+ } else {
36
+ invalidTxHashes.push(tx.getTxHash().toString());
37
+ }
38
+ }));
39
+ return {
40
+ validTxs: validTxs,
41
+ invalidTxHashes: invalidTxHashes
42
+ };
26
43
  }
27
44
  }
28
45
  export function createNodeRpcTxSources(urls, chainConfig) {
@@ -0,0 +1,16 @@
1
+ import { type ConfigMappingsType } from '@aztec/foundation/config';
2
+ /**
3
+ * Configuration for the TxFileStore service.
4
+ */
5
+ export type TxFileStoreConfig = {
6
+ /** URL for uploading txs to file storage (s3://, gs://, file://) */
7
+ txFileStoreUrl?: string;
8
+ /** Max concurrent uploads */
9
+ txFileStoreUploadConcurrency: number;
10
+ /** Max queue size to prevent unbounded memory growth */
11
+ txFileStoreMaxQueueSize: number;
12
+ /** Enable tx file store upload */
13
+ txFileStoreEnabled: boolean;
14
+ };
15
+ export declare const txFileStoreConfigMappings: ConfigMappingsType<TxFileStoreConfig>;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfZmlsZV9zdG9yZS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQTJDLE1BQU0sMEJBQTBCLENBQUM7QUFFNUc7O0dBRUc7QUFDSCxNQUFNLE1BQU0saUJBQWlCLEdBQUc7SUFDOUIsb0VBQW9FO0lBQ3BFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN4Qiw2QkFBNkI7SUFDN0IsNEJBQTRCLEVBQUUsTUFBTSxDQUFDO0lBQ3JDLHdEQUF3RDtJQUN4RCx1QkFBdUIsRUFBRSxNQUFNLENBQUM7SUFDaEMsa0NBQWtDO0lBQ2xDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQztDQUM3QixDQUFDO0FBRUYsZUFBTyxNQUFNLHlCQUF5QixFQUFFLGtCQUFrQixDQUFDLGlCQUFpQixDQW9CM0UsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/tx_file_store/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA2C,MAAM,0BAA0B,CAAC;AAE5G;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,4BAA4B,EAAE,MAAM,CAAC;IACrC,wDAAwD;IACxD,uBAAuB,EAAE,MAAM,CAAC;IAChC,kCAAkC;IAClC,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CAoB3E,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { booleanConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
2
+ export const txFileStoreConfigMappings = {
3
+ txFileStoreUrl: {
4
+ env: 'TX_FILE_STORE_URL',
5
+ description: 'URL for uploading txs to file storage (s3://, gs://, file://)'
6
+ },
7
+ txFileStoreUploadConcurrency: {
8
+ env: 'TX_FILE_STORE_UPLOAD_CONCURRENCY',
9
+ description: 'Maximum number of concurrent tx uploads',
10
+ ...numberConfigHelper(10)
11
+ },
12
+ txFileStoreMaxQueueSize: {
13
+ env: 'TX_FILE_STORE_MAX_QUEUE_SIZE',
14
+ description: 'Maximum queue size for pending uploads (oldest dropped when exceeded)',
15
+ ...numberConfigHelper(1000)
16
+ },
17
+ txFileStoreEnabled: {
18
+ env: 'TX_FILE_STORE_ENABLED',
19
+ description: 'Enable uploading transactions to file storage',
20
+ ...booleanConfigHelper(false)
21
+ }
22
+ };
@@ -0,0 +1,4 @@
1
+ export { TxFileStore } from './tx_file_store.js';
2
+ export { TxFileStoreInstrumentation } from './instrumentation.js';
3
+ export { type TxFileStoreConfig, txFileStoreConfigMappings } from './config.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90eF9maWxlX3N0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/tx_file_store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,KAAK,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { TxFileStore } from './tx_file_store.js';
2
+ export { TxFileStoreInstrumentation } from './instrumentation.js';
3
+ export { txFileStoreConfigMappings } from './config.js';
@@ -0,0 +1,15 @@
1
+ import { type TelemetryClient } from '@aztec/telemetry-client';
2
+ /** Instrumentation for the TxFileStore service. */
3
+ export declare class TxFileStoreInstrumentation {
4
+ private uploadsSuccess;
5
+ private uploadsFailed;
6
+ private uploadsSkipped;
7
+ private uploadDuration;
8
+ private queueSize;
9
+ constructor(client: TelemetryClient, name: string);
10
+ recordUploadSuccess(durationMs: number): void;
11
+ recordUploadFailed(): void;
12
+ recordUploadSkipped(): void;
13
+ recordQueueSize(size: number): void;
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfZmlsZV9zdG9yZS9pbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QyxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUV4SCxtREFBbUQ7QUFDbkQscUJBQWEsMEJBQTBCO0lBQ3JDLE9BQU8sQ0FBQyxjQUFjLENBQWdCO0lBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQWdCO0lBQ3JDLE9BQU8sQ0FBQyxjQUFjLENBQWdCO0lBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQVk7SUFDbEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUV6QixZQUFZLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFPaEQ7SUFFRCxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQUdyQztJQUVELGtCQUFrQixTQUVqQjtJQUVELG1CQUFtQixTQUVsQjtJQUVELGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxRQUUzQjtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/services/tx_file_store/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAExH,mDAAmD;AACnD,qBAAa,0BAA0B;IACrC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,SAAS,CAAQ;IAEzB,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAOhD;IAED,mBAAmB,CAAC,UAAU,EAAE,MAAM,QAGrC;IAED,kBAAkB,SAEjB;IAED,mBAAmB,SAElB;IAED,eAAe,CAAC,IAAI,EAAE,MAAM,QAE3B;CACF"}
@@ -0,0 +1,29 @@
1
+ import { Metrics } from '@aztec/telemetry-client';
2
+ /** Instrumentation for the TxFileStore service. */ export class TxFileStoreInstrumentation {
3
+ uploadsSuccess;
4
+ uploadsFailed;
5
+ uploadsSkipped;
6
+ uploadDuration;
7
+ queueSize;
8
+ constructor(client, name){
9
+ const meter = client.getMeter(name);
10
+ this.uploadsSuccess = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_SUCCESS);
11
+ this.uploadsFailed = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_FAILED);
12
+ this.uploadsSkipped = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_SKIPPED);
13
+ this.uploadDuration = meter.createHistogram(Metrics.TX_FILE_STORE_UPLOAD_DURATION);
14
+ this.queueSize = meter.createGauge(Metrics.TX_FILE_STORE_QUEUE_SIZE);
15
+ }
16
+ recordUploadSuccess(durationMs) {
17
+ this.uploadsSuccess.add(1);
18
+ this.uploadDuration.record(durationMs);
19
+ }
20
+ recordUploadFailed() {
21
+ this.uploadsFailed.add(1);
22
+ }
23
+ recordUploadSkipped() {
24
+ this.uploadsSkipped.add(1);
25
+ }
26
+ recordQueueSize(size) {
27
+ this.queueSize.record(size);
28
+ }
29
+ }
@@ -0,0 +1,48 @@
1
+ import { type Logger } from '@aztec/foundation/log';
2
+ import { type FileStore } from '@aztec/stdlib/file-store';
3
+ import { type TelemetryClient } from '@aztec/telemetry-client';
4
+ import type { TxPoolV2 } from '../../mem_pools/index.js';
5
+ import type { TxFileStoreConfig } from './config.js';
6
+ /**
7
+ * Uploads validated transactions to a file store as a fallback retrieval mechanism.
8
+ * Listens to TxPool txs-added events and uploads txs asynchronously with bounded concurrency.
9
+ */
10
+ export declare class TxFileStore {
11
+ private readonly fileStore;
12
+ private readonly txPool;
13
+ private readonly config;
14
+ private readonly instrumentation;
15
+ private readonly log;
16
+ private readonly basePath;
17
+ private uploadQueue;
18
+ private activeUploads;
19
+ private readonly queueProcessor;
20
+ private readonly handleTxsAdded;
21
+ /** Recently uploaded tx hashes for deduplication. */
22
+ private recentUploads;
23
+ private recentUploadsOrder;
24
+ private readonly maxRecentUploads;
25
+ private constructor();
26
+ /**
27
+ * Creates and initializes the file store.
28
+ * @param txPool - The transaction pool to listen to.
29
+ * @param config - The file store configuration.
30
+ * @param log - Optional logger.
31
+ * @param telemetry - Optional telemetry client.
32
+ * @param fileStoreOverride - Optional FileStore for testing (bypasses createFileStore).
33
+ * @returns The file store instance, or undefined if not configured/enabled.
34
+ */
35
+ static create(txPool: TxPoolV2, config: TxFileStoreConfig, basePath: string, log?: Logger, telemetry?: TelemetryClient, fileStoreOverride?: FileStore): Promise<TxFileStore | undefined>;
36
+ /** Starts listening to TxPool events and uploading txs. */
37
+ start(): void;
38
+ /** Stops listening and waits for pending uploads to complete. */
39
+ stop(): Promise<void>;
40
+ private enqueueTxs;
41
+ private processQueueBatch;
42
+ private uploadTx;
43
+ /** Waits for all queued and in-flight uploads to complete. For testing. */
44
+ flush(): Promise<void>;
45
+ /** Returns the number of pending uploads (queued + in-flight). */
46
+ getPendingUploadCount(): number;
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfZmlsZV9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3R4X2ZpbGVfc3RvcmUvdHhfZmlsZV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFJbEUsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdyRDs7O0dBR0c7QUFDSCxxQkFBYSxXQUFXO0lBWXBCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZTtJQUNoQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7SUFDcEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRO0lBaEIzQixPQUFPLENBQUMsV0FBVyxDQUFZO0lBQy9CLE9BQU8sQ0FBQyxhQUFhLENBQUs7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQWlCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFpRDtJQUVoRixxREFBcUQ7SUFDckQsT0FBTyxDQUFDLGFBQWEsQ0FBMEI7SUFDL0MsT0FBTyxDQUFDLGtCQUFrQixDQUFnQjtJQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFRO0lBRXpDLE9BQU8sZUFZTjtJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsT0FBYSxNQUFNLENBQ2pCLE1BQU0sRUFBRSxRQUFRLEVBQ2hCLE1BQU0sRUFBRSxpQkFBaUIsRUFDekIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsR0FBRyxHQUFFLE1BQTBDLEVBQy9DLFNBQVMsR0FBRSxlQUFzQyxFQUNqRCxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsR0FDNUIsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FvQmxDO0lBRUQsMkRBQTJEO0lBQ3BELEtBQUssSUFBSSxJQUFJLENBT25CO0lBRUQsaUVBQWlFO0lBQ3BELElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWpDO0lBRUQsT0FBTyxDQUFDLFVBQVU7WUFnQkosaUJBQWlCO1lBWWpCLFFBQVE7SUF1Q3RCLDJFQUEyRTtJQUM5RCxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUlsQztJQUVELGtFQUFrRTtJQUMzRCxxQkFBcUIsSUFBSSxNQUFNLENBRXJDO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_file_store.d.ts","sourceRoot":"","sources":["../../../src/services/tx_file_store/tx_file_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD;;;GAGG;AACH,qBAAa,WAAW;IAYpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAhB3B,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;IAEhF,qDAAqD;IACrD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IAEzC,OAAO,eAYN;IAED;;;;;;;;OAQG;IACH,OAAa,MAAM,CACjB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAA0C,EAC/C,SAAS,GAAE,eAAsC,EACjD,iBAAiB,CAAC,EAAE,SAAS,GAC5B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAoBlC;IAED,2DAA2D;IACpD,KAAK,IAAI,IAAI,CAOnB;IAED,iEAAiE;IACpD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjC;IAED,OAAO,CAAC,UAAU;YAgBJ,iBAAiB;YAYjB,QAAQ;IAuCtB,2EAA2E;IAC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlC;IAED,kEAAkE;IAC3D,qBAAqB,IAAI,MAAM,CAErC;CACF"}