@aztec/p2p 0.0.1-commit.e3c1de76 → 0.0.1-commit.e588bc7e5

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 (470) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +11 -11
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +55 -15
  5. package/dest/client/interface.d.ts +54 -34
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +43 -52
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +179 -224
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +21 -11
  11. package/dest/config.d.ts +60 -17
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +105 -39
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/errors/tx-pool.error.d.ts +8 -0
  18. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  19. package/dest/errors/tx-pool.error.js +9 -0
  20. package/dest/index.d.ts +2 -2
  21. package/dest/index.d.ts.map +1 -1
  22. package/dest/index.js +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.js +446 -3
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  29. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  30. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/index.js +1 -2
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  33. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  35. package/dest/mem_pools/index.d.ts +3 -3
  36. package/dest/mem_pools/index.d.ts.map +1 -1
  37. package/dest/mem_pools/index.js +1 -1
  38. package/dest/mem_pools/instrumentation.d.ts +4 -2
  39. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  40. package/dest/mem_pools/instrumentation.js +16 -14
  41. package/dest/mem_pools/interface.d.ts +5 -5
  42. package/dest/mem_pools/interface.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  44. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  46. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  47. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  49. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  50. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  53. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  70. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_reorg_rule.js +39 -24
  73. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  82. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  83. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  85. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  86. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  88. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +215 -0
  89. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  91. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +134 -0
  92. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +220 -0
  94. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  95. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  97. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  98. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +923 -0
  106. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  107. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  109. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  110. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  111. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  112. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  113. package/dest/msg_validators/clock_tolerance.js +4 -3
  114. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  115. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  117. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  118. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  120. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  121. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/proposal_validator/proposal_validator.js +53 -41
  123. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  124. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  126. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  127. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  129. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  130. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  131. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  132. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  133. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  135. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  136. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  137. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  138. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  139. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  141. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  142. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  144. package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
  145. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/factory.js +247 -60
  147. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  148. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  149. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  150. package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
  151. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  152. package/dest/msg_validators/tx_validator/gas_validator.js +104 -37
  153. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  154. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  155. package/dest/msg_validators/tx_validator/index.js +2 -0
  156. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  157. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  158. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  159. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  160. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  161. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  162. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  163. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  164. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  165. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  166. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  167. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  168. package/dest/services/dummy_service.d.ts +16 -6
  169. package/dest/services/dummy_service.d.ts.map +1 -1
  170. package/dest/services/dummy_service.js +15 -5
  171. package/dest/services/encoding.d.ts +7 -3
  172. package/dest/services/encoding.d.ts.map +1 -1
  173. package/dest/services/encoding.js +18 -11
  174. package/dest/services/gossipsub/index.d.ts +3 -0
  175. package/dest/services/gossipsub/index.d.ts.map +1 -0
  176. package/dest/services/gossipsub/index.js +2 -0
  177. package/dest/services/gossipsub/scoring.d.ts +21 -3
  178. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  179. package/dest/services/gossipsub/scoring.js +24 -7
  180. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  181. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  182. package/dest/services/gossipsub/topic_score_params.js +346 -0
  183. package/dest/services/index.d.ts +2 -1
  184. package/dest/services/index.d.ts.map +1 -1
  185. package/dest/services/index.js +1 -0
  186. package/dest/services/libp2p/libp2p_service.d.ts +106 -51
  187. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  188. package/dest/services/libp2p/libp2p_service.js +538 -378
  189. package/dest/services/peer-manager/metrics.d.ts +3 -1
  190. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  191. package/dest/services/peer-manager/metrics.js +6 -0
  192. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  193. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  194. package/dest/services/peer-manager/peer_manager.js +24 -9
  195. package/dest/services/peer-manager/peer_scoring.d.ts +5 -2
  196. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  197. package/dest/services/peer-manager/peer_scoring.js +53 -12
  198. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +14 -10
  199. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  200. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +89 -112
  201. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
  202. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  203. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  204. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  205. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  206. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  207. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  208. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  209. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  210. package/dest/services/reqresp/interface.d.ts +10 -1
  211. package/dest/services/reqresp/interface.d.ts.map +1 -1
  212. package/dest/services/reqresp/interface.js +15 -1
  213. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  214. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  215. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -11
  216. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +21 -10
  217. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  218. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +27 -11
  219. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  220. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  221. package/dest/services/reqresp/protocols/tx.js +20 -0
  222. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  223. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  224. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  225. package/dest/services/reqresp/reqresp.d.ts +1 -1
  226. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  227. package/dest/services/reqresp/reqresp.js +30 -14
  228. package/dest/services/service.d.ts +43 -4
  229. package/dest/services/service.d.ts.map +1 -1
  230. package/dest/services/tx_collection/config.d.ts +22 -4
  231. package/dest/services/tx_collection/config.d.ts.map +1 -1
  232. package/dest/services/tx_collection/config.js +49 -3
  233. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -8
  234. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  235. package/dest/services/tx_collection/fast_tx_collection.js +88 -88
  236. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  237. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  238. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  239. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  240. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  241. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  242. package/dest/services/tx_collection/index.d.ts +3 -2
  243. package/dest/services/tx_collection/index.d.ts.map +1 -1
  244. package/dest/services/tx_collection/index.js +1 -0
  245. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  246. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  247. package/dest/services/tx_collection/instrumentation.js +2 -1
  248. package/dest/services/tx_collection/proposal_tx_collector.d.ts +15 -15
  249. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  250. package/dest/services/tx_collection/proposal_tx_collector.js +6 -6
  251. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  252. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  253. package/dest/services/tx_collection/request_tracker.js +84 -0
  254. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  255. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  256. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  257. package/dest/services/tx_collection/tx_collection.d.ts +23 -13
  258. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  259. package/dest/services/tx_collection/tx_collection.js +75 -3
  260. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  261. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  262. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  263. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  264. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  265. package/dest/services/tx_collection/tx_source.js +26 -7
  266. package/dest/services/tx_file_store/config.d.ts +16 -0
  267. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  268. package/dest/services/tx_file_store/config.js +22 -0
  269. package/dest/services/tx_file_store/index.d.ts +4 -0
  270. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  271. package/dest/services/tx_file_store/index.js +3 -0
  272. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  273. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  274. package/dest/services/tx_file_store/instrumentation.js +29 -0
  275. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  276. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  277. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  278. package/dest/services/tx_provider.d.ts +4 -4
  279. package/dest/services/tx_provider.d.ts.map +1 -1
  280. package/dest/services/tx_provider.js +9 -8
  281. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  282. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  283. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  284. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  285. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  286. package/dest/test-helpers/mock-pubsub.js +105 -4
  287. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  288. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  289. package/dest/test-helpers/reqresp-nodes.js +4 -3
  290. package/dest/test-helpers/testbench-utils.d.ts +43 -38
  291. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  292. package/dest/test-helpers/testbench-utils.js +149 -61
  293. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  294. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  295. package/dest/testbench/p2p_client_testbench_worker.js +58 -28
  296. package/dest/testbench/worker_client_manager.d.ts +3 -1
  297. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  298. package/dest/testbench/worker_client_manager.js +6 -3
  299. package/dest/util.d.ts +3 -3
  300. package/dest/util.d.ts.map +1 -1
  301. package/package.json +14 -14
  302. package/src/client/factory.ts +108 -28
  303. package/src/client/interface.ts +65 -35
  304. package/src/client/p2p_client.ts +215 -269
  305. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +34 -15
  306. package/src/config.ts +165 -44
  307. package/src/errors/p2p-service.error.ts +11 -0
  308. package/src/errors/tx-pool.error.ts +12 -0
  309. package/src/index.ts +1 -1
  310. package/src/mem_pools/attestation_pool/attestation_pool.ts +499 -91
  311. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  312. package/src/mem_pools/attestation_pool/index.ts +9 -2
  313. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  314. package/src/mem_pools/index.ts +2 -2
  315. package/src/mem_pools/instrumentation.ts +17 -13
  316. package/src/mem_pools/interface.ts +4 -4
  317. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  318. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  319. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  320. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  321. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  322. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  323. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  324. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  325. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  326. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  327. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  328. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  329. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  330. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  331. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  332. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  333. package/src/mem_pools/tx_pool_v2/interfaces.ts +247 -0
  334. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +343 -0
  335. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  336. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  337. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  338. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1105 -0
  339. package/src/msg_validators/attestation_validator/README.md +49 -0
  340. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  341. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +2 -2
  342. package/src/msg_validators/clock_tolerance.ts +4 -3
  343. package/src/msg_validators/proposal_validator/README.md +123 -0
  344. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  345. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  346. package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -45
  347. package/src/msg_validators/tx_validator/README.md +119 -0
  348. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  349. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  350. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  351. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  352. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  353. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  354. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  355. package/src/msg_validators/tx_validator/factory.ts +394 -78
  356. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  357. package/src/msg_validators/tx_validator/gas_validator.ts +123 -27
  358. package/src/msg_validators/tx_validator/index.ts +2 -0
  359. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  360. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  361. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  362. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  363. package/src/services/dummy_service.ts +24 -7
  364. package/src/services/encoding.ts +18 -10
  365. package/src/services/gossipsub/README.md +641 -0
  366. package/src/services/gossipsub/index.ts +2 -0
  367. package/src/services/gossipsub/scoring.ts +29 -5
  368. package/src/services/gossipsub/topic_score_params.ts +487 -0
  369. package/src/services/index.ts +1 -0
  370. package/src/services/libp2p/libp2p_service.ts +564 -412
  371. package/src/services/peer-manager/metrics.ts +7 -0
  372. package/src/services/peer-manager/peer_manager.ts +28 -9
  373. package/src/services/peer-manager/peer_scoring.ts +46 -5
  374. package/src/services/reqresp/README.md +229 -0
  375. package/src/services/reqresp/batch-tx-requester/README.md +53 -14
  376. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +89 -122
  377. package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
  378. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  379. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  380. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  381. package/src/services/reqresp/interface.ts +26 -1
  382. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +23 -14
  383. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +38 -15
  384. package/src/services/reqresp/protocols/tx.ts +22 -0
  385. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  386. package/src/services/reqresp/reqresp.ts +35 -15
  387. package/src/services/service.ts +57 -3
  388. package/src/services/tx_collection/config.ts +74 -6
  389. package/src/services/tx_collection/fast_tx_collection.ts +94 -97
  390. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  391. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  392. package/src/services/tx_collection/index.ts +2 -1
  393. package/src/services/tx_collection/instrumentation.ts +7 -1
  394. package/src/services/tx_collection/proposal_tx_collector.ts +21 -27
  395. package/src/services/tx_collection/request_tracker.ts +127 -0
  396. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  397. package/src/services/tx_collection/tx_collection.ts +114 -19
  398. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  399. package/src/services/tx_collection/tx_source.ts +28 -8
  400. package/src/services/tx_file_store/config.ts +37 -0
  401. package/src/services/tx_file_store/index.ts +3 -0
  402. package/src/services/tx_file_store/instrumentation.ts +36 -0
  403. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  404. package/src/services/tx_provider.ts +10 -9
  405. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  406. package/src/test-helpers/mock-pubsub.ts +146 -9
  407. package/src/test-helpers/reqresp-nodes.ts +5 -7
  408. package/src/test-helpers/testbench-utils.ts +156 -74
  409. package/src/testbench/p2p_client_testbench_worker.ts +64 -31
  410. package/src/testbench/worker_client_manager.ts +13 -6
  411. package/src/util.ts +8 -2
  412. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  413. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  414. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  415. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  416. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  417. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  418. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  419. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  420. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  421. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  422. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  423. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  424. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  425. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  426. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  427. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  428. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  429. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  430. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  431. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  432. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  433. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  434. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  435. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  436. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  437. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  438. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  439. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  440. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  441. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  442. package/dest/mem_pools/tx_pool/index.js +0 -2
  443. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  444. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  445. package/dest/mem_pools/tx_pool/priority.js +0 -15
  446. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  447. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  448. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  449. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  450. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  451. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  452. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  453. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  454. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  455. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  456. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  457. package/src/mem_pools/tx_pool/README.md +0 -270
  458. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  459. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  460. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  461. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  462. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  463. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  464. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  465. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  466. package/src/mem_pools/tx_pool/index.ts +0 -2
  467. package/src/mem_pools/tx_pool/priority.ts +0 -20
  468. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  469. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  470. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Metrics types for tx pool benchmarks.
3
+ */ export var TxPoolOperation = /*#__PURE__*/ function(TxPoolOperation) {
4
+ TxPoolOperation["ADD_PENDING_TXS"] = "addPendingTxs";
5
+ TxPoolOperation["CAN_ADD_PENDING_TX"] = "canAddPendingTx";
6
+ TxPoolOperation["GET_PENDING_TX_HASHES"] = "getPendingTxHashes";
7
+ TxPoolOperation["GET_TX_BY_HASH"] = "getTxByHash";
8
+ TxPoolOperation["GET_TXS_BY_HASH"] = "getTxsByHash";
9
+ TxPoolOperation["HAS_TXS"] = "hasTxs";
10
+ TxPoolOperation["HANDLE_MINED_BLOCK"] = "handleMinedBlock";
11
+ TxPoolOperation["PREPARE_FOR_SLOT"] = "prepareForSlot";
12
+ TxPoolOperation["HANDLE_PRUNED_BLOCKS"] = "handlePrunedBlocks";
13
+ TxPoolOperation["GET_LOWEST_PRIORITY_PENDING"] = "getLowestPriorityPending";
14
+ TxPoolOperation["HYDRATE_FROM_DATABASE"] = "hydrateFromDatabase";
15
+ return TxPoolOperation;
16
+ }({});
17
+ /**
18
+ * Collects and formats tx pool benchmark metrics.
19
+ */ export class TxPoolBenchMetrics {
20
+ metrics = [];
21
+ addMetric(operation, poolSize, batchSize, value) {
22
+ this.metrics.push({
23
+ operation,
24
+ poolSize,
25
+ batchSize,
26
+ value
27
+ });
28
+ }
29
+ toPrettyString() {
30
+ let pretty = 'TxPool Benchmark Metrics:\n';
31
+ pretty += '='.repeat(60) + '\n';
32
+ // Group by operation
33
+ const byOperation = new Map();
34
+ for (const metric of this.metrics){
35
+ if (!byOperation.has(metric.operation)) {
36
+ byOperation.set(metric.operation, []);
37
+ }
38
+ byOperation.get(metric.operation).push(metric);
39
+ }
40
+ for (const [operation, opMetrics] of byOperation){
41
+ pretty += `\n${operation}:\n`;
42
+ for (const metric of opMetrics){
43
+ const poolSizeStr = metric.poolSize > 0 ? `pool=${metric.poolSize}` : '';
44
+ const batchSizeStr = metric.batchSize > 0 ? `batch=${metric.batchSize}` : '';
45
+ const params = [
46
+ poolSizeStr,
47
+ batchSizeStr
48
+ ].filter(Boolean).join(', ');
49
+ pretty += ` ${params ? `(${params})` : ''}: ${metric.value.toFixed(3)} ms\n`;
50
+ }
51
+ }
52
+ return pretty;
53
+ }
54
+ toGithubActionBenchmarkJSON(indent = 2) {
55
+ const data = this.metrics.map((metric)=>{
56
+ const poolSizeStr = metric.poolSize > 0 ? `${metric.poolSize} txs in pool` : '';
57
+ const batchSizeStr = metric.batchSize > 0 ? `batch of ${metric.batchSize}` : '';
58
+ const params = [
59
+ poolSizeStr,
60
+ batchSizeStr
61
+ ].filter(Boolean).join('/');
62
+ return {
63
+ name: `TxPool/${metric.operation}${params ? `/${params}` : ''}`,
64
+ value: metric.value,
65
+ unit: 'ms'
66
+ };
67
+ });
68
+ return JSON.stringify(data, null, indent);
69
+ }
70
+ }
@@ -0,0 +1,108 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import type { L2BlockId } from '@aztec/stdlib/block';
3
+ import { type TxMetaData, type TxState } from './tx_metadata.js';
4
+ /**
5
+ * Manages in-memory indices for the transaction pool.
6
+ *
7
+ * Tracks transaction metadata and maintains several indices for efficient querying:
8
+ * - Metadata by txHash (primary store)
9
+ * - Nullifier to txHash mapping (pending txs only)
10
+ * - Fee payer to txHashes mapping (pending txs only)
11
+ * - Priority-ordered pending txs
12
+ * - Protected transaction tracking
13
+ *
14
+ * Key invariant: Only pending txs appear in nullifier/feePayer/priority indices.
15
+ */
16
+ export declare class TxPoolIndices {
17
+ #private;
18
+ /**
19
+ * Derives the transaction state from its metadata and protection status.
20
+ * A transaction is:
21
+ * - 'mined' if it has a minedL2BlockId
22
+ * - 'protected' if it's in the protectedTransactions map (but not mined)
23
+ * - 'pending' otherwise
24
+ */
25
+ getTxState(meta: TxMetaData): TxState;
26
+ getMetadata(txHash: string): TxMetaData | undefined;
27
+ has(txHash: string): boolean;
28
+ isEmpty(): boolean;
29
+ getTxCount(): number;
30
+ /**
31
+ * Iterates pending transaction hashes in priority order.
32
+ * @param order - 'desc' for highest priority first, 'asc' for lowest priority first
33
+ */
34
+ iteratePendingByPriority(order: 'asc' | 'desc', filter?: (hash: string) => boolean): Generator<string>;
35
+ /**
36
+ * Iterates pending transaction hashes in priority order, skipping txs received after maxReceivedAt.
37
+ * @param order - 'desc' for highest priority first, 'asc' for lowest priority first
38
+ * @param maxReceivedAt - Only yield txs with receivedAt <= this value
39
+ */
40
+ iterateEligiblePendingByPriority(order: 'asc' | 'desc', maxReceivedAt: number): Generator<string>;
41
+ /** Iterates all metadata entries */
42
+ iterateMetadata(): Generator<[string, TxMetaData]>;
43
+ /** Adds a new pending transaction to all indices */
44
+ addPending(meta: TxMetaData): void;
45
+ /** Adds a new protected transaction (not added to pending indices) */
46
+ addProtected(meta: TxMetaData, slot: SlotNumber): void;
47
+ /** Adds a new mined transaction (not added to pending indices) */
48
+ addMined(meta: TxMetaData): void;
49
+ /** Marks an existing transaction as mined and removes from pending indices */
50
+ markAsMined(meta: TxMetaData, blockId: L2BlockId): void;
51
+ /** Clears the mined status from a transaction */
52
+ markAsUnmined(meta: TxMetaData): void;
53
+ /**
54
+ * Updates protection status for an existing transaction.
55
+ * Removes from pending indices if transitioning from pending to protected.
56
+ */
57
+ updateProtection(txHash: string, slotNumber: SlotNumber): void;
58
+ /** Sets protection for a txHash that may not have metadata yet */
59
+ setProtection(txHash: string, slotNumber: SlotNumber): void;
60
+ /** Gets the protection slot for a txHash, if protected */
61
+ getProtectionSlot(txHash: string): SlotNumber | undefined;
62
+ /** Removes protection from tx hashes */
63
+ clearProtection(txHashes: string[]): void;
64
+ /** Removes a transaction from all indices */
65
+ remove(txHash: string): void;
66
+ /** Removes a transaction from pending indices only (not metadata) */
67
+ removeFromPendingIndices(meta: TxMetaData): void;
68
+ /** Adds a transaction to pending indices (used during conflict resolution) */
69
+ addToPendingIndices(meta: TxMetaData): void;
70
+ /** Gets all pending transactions for a given fee payer */
71
+ getFeePayerPendingTxs(feePayer: string): TxMetaData[];
72
+ /** Gets the count of pending transactions */
73
+ getPendingTxCount(): number;
74
+ /** Gets the lowest priority pending transaction hashes (up to limit) */
75
+ getLowestPriorityPending(limit: number): string[];
76
+ /** Gets the lowest priority pending transaction */
77
+ getLowestPriorityPendingTx(): TxMetaData | undefined;
78
+ /** Gets all pending transactions */
79
+ getPendingTxs(): TxMetaData[];
80
+ /** Gets all fee payers with pending transactions */
81
+ getPendingFeePayers(): string[];
82
+ /** Gets the txHash that uses a given nullifier (pending txs only) */
83
+ getTxHashByNullifier(nullifier: string): string | undefined;
84
+ /** Gets txHashes for a fee payer */
85
+ getTxHashesByFeePayer(feePayer: string): Set<string> | undefined;
86
+ /** Finds all transactions mined in blocks after the given block number */
87
+ findTxsMinedAfter(blockNumber: number): TxMetaData[];
88
+ /** Finds tx hashes mined at or before the given block number */
89
+ findTxsMinedAtOrBefore(blockNumber: number): string[];
90
+ /** Finds protected tx hashes from slots earlier than the given slot number */
91
+ findExpiredProtectedTxs(slotNumber: SlotNumber): string[];
92
+ /** Filters out transactions that are currently protected */
93
+ filterUnprotected(txs: TxMetaData[]): TxMetaData[];
94
+ /** Filters to transactions that have metadata and are not mined */
95
+ filterRestorable(txHashes: string[]): TxMetaData[];
96
+ /** Counts transactions by state and estimates total metadata memory usage */
97
+ countTxs(): {
98
+ pending: number;
99
+ protected: number;
100
+ mined: number;
101
+ totalMetadataBytes: number;
102
+ };
103
+ /** Returns the estimated total memory consumed by all metadata objects */
104
+ getTotalMetadataBytes(): number;
105
+ /** Gets all mined transactions with their block IDs */
106
+ getMinedTxs(): [string, L2BlockId][];
107
+ }
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF9pbmRpY2VzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL3R4X3Bvb2xfdjIvdHhfcG9vbF9pbmRpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQTJCLEtBQUssVUFBVSxFQUFFLEtBQUssT0FBTyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBRTNHOzs7Ozs7Ozs7OztHQVdHO0FBQ0gscUJBQWEsYUFBYTs7SUFnQnhCOzs7Ozs7T0FNRztJQUNILFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FRcEM7SUFFRCxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxVQUFVLEdBQUcsU0FBUyxDQUVsRDtJQUVELEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FFM0I7SUFFRCxPQUFPLElBQUksT0FBTyxDQUVqQjtJQUVELFVBQVUsSUFBSSxNQUFNLENBRW5CO0lBTUQ7OztPQUdHO0lBQ0Ysd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxLQUFLLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBV3RHO0lBRUQ7Ozs7T0FJRztJQUNGLGdDQUFnQyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQU9qRztJQUVELG9DQUFvQztJQUNuQyxlQUFlLElBQUksU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBRWxEO0lBTUQsb0RBQW9EO0lBQ3BELFVBQVUsQ0FB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_pool_indices.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_indices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,337 @@
1
+ import { insertIntoSortedArray, removeFromSortedArray } from '@aztec/foundation/array';
2
+ import { comparePriority } from './tx_metadata.js';
3
+ /**
4
+ * Manages in-memory indices for the transaction pool.
5
+ *
6
+ * Tracks transaction metadata and maintains several indices for efficient querying:
7
+ * - Metadata by txHash (primary store)
8
+ * - Nullifier to txHash mapping (pending txs only)
9
+ * - Fee payer to txHashes mapping (pending txs only)
10
+ * - Priority-ordered pending txs
11
+ * - Protected transaction tracking
12
+ *
13
+ * Key invariant: Only pending txs appear in nullifier/feePayer/priority indices.
14
+ */ export class TxPoolIndices {
15
+ /** Primary metadata store: txHash -> TxMetaData */ #metadata = new Map();
16
+ /** Nullifier to txHash index (pending txs only) */ #nullifierToTxHash = new Map();
17
+ /** Fee payer to txHashes index (pending txs only) */ #feePayerToTxHashes = new Map();
18
+ /** Pending transactions sorted ascending by priority fee, ties broken by txHash */ #pendingByPriority = [];
19
+ /** Protected transactions: txHash -> slotNumber */ #protectedTransactions = new Map();
20
+ // ============================================================================
21
+ // STATE QUERIES
22
+ // ============================================================================
23
+ /**
24
+ * Derives the transaction state from its metadata and protection status.
25
+ * A transaction is:
26
+ * - 'mined' if it has a minedL2BlockId
27
+ * - 'protected' if it's in the protectedTransactions map (but not mined)
28
+ * - 'pending' otherwise
29
+ */ getTxState(meta) {
30
+ if (meta.minedL2BlockId !== undefined) {
31
+ return 'mined';
32
+ } else if (this.#protectedTransactions.has(meta.txHash)) {
33
+ return 'protected';
34
+ } else {
35
+ return 'pending';
36
+ }
37
+ }
38
+ getMetadata(txHash) {
39
+ return this.#metadata.get(txHash);
40
+ }
41
+ has(txHash) {
42
+ return this.#metadata.has(txHash);
43
+ }
44
+ isEmpty() {
45
+ return this.#metadata.size === 0;
46
+ }
47
+ getTxCount() {
48
+ return this.#metadata.size;
49
+ }
50
+ // ============================================================================
51
+ // ITERATION
52
+ // ============================================================================
53
+ /**
54
+ * Iterates pending transaction hashes in priority order.
55
+ * @param order - 'desc' for highest priority first, 'asc' for lowest priority first
56
+ */ *iteratePendingByPriority(order, filter) {
57
+ const arr = this.#pendingByPriority;
58
+ const start = order === 'asc' ? 0 : arr.length - 1;
59
+ const step = order === 'asc' ? 1 : -1;
60
+ const inBounds = order === 'asc' ? (i)=>i < arr.length : (i)=>i >= 0;
61
+ for(let i = start; inBounds(i); i += step){
62
+ if (filter === undefined || filter(arr[i].txHash)) {
63
+ yield arr[i].txHash;
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Iterates pending transaction hashes in priority order, skipping txs received after maxReceivedAt.
69
+ * @param order - 'desc' for highest priority first, 'asc' for lowest priority first
70
+ * @param maxReceivedAt - Only yield txs with receivedAt <= this value
71
+ */ *iterateEligiblePendingByPriority(order, maxReceivedAt) {
72
+ const filter = (hash)=>{
73
+ const meta = this.#metadata.get(hash);
74
+ return meta !== undefined && meta.receivedAt <= maxReceivedAt;
75
+ };
76
+ yield* this.iteratePendingByPriority(order, filter);
77
+ }
78
+ /** Iterates all metadata entries */ *iterateMetadata() {
79
+ yield* this.#metadata;
80
+ }
81
+ // ============================================================================
82
+ // INDEX MODIFICATIONS
83
+ // ============================================================================
84
+ /** Adds a new pending transaction to all indices */ addPending(meta) {
85
+ this.#metadata.set(meta.txHash, meta);
86
+ this.#addToPendingIndices(meta);
87
+ }
88
+ /** Adds a new protected transaction (not added to pending indices) */ addProtected(meta, slot) {
89
+ this.#metadata.set(meta.txHash, meta);
90
+ this.#protectedTransactions.set(meta.txHash, slot);
91
+ }
92
+ /** Adds a new mined transaction (not added to pending indices) */ addMined(meta) {
93
+ this.#metadata.set(meta.txHash, meta);
94
+ }
95
+ /** Marks an existing transaction as mined and removes from pending indices */ markAsMined(meta, blockId) {
96
+ meta.minedL2BlockId = blockId;
97
+ // Safe to call unconditionally - removeFromPendingIndices is idempotent
98
+ this.#removeFromPendingIndices(meta);
99
+ }
100
+ /** Clears the mined status from a transaction */ markAsUnmined(meta) {
101
+ meta.minedL2BlockId = undefined;
102
+ }
103
+ /**
104
+ * Updates protection status for an existing transaction.
105
+ * Removes from pending indices if transitioning from pending to protected.
106
+ */ updateProtection(txHash, slotNumber) {
107
+ const currentSlot = this.#protectedTransactions.get(txHash);
108
+ // Only update if not already protected at an equal or later slot
109
+ if (currentSlot !== undefined && currentSlot >= slotNumber) {
110
+ return;
111
+ }
112
+ // Remove from pending indices if transitioning from pending to protected
113
+ if (currentSlot === undefined) {
114
+ const meta = this.#metadata.get(txHash);
115
+ if (meta) {
116
+ this.#removeFromPendingIndices(meta);
117
+ }
118
+ }
119
+ this.#protectedTransactions.set(txHash, slotNumber);
120
+ }
121
+ /** Sets protection for a txHash that may not have metadata yet */ setProtection(txHash, slotNumber) {
122
+ this.#protectedTransactions.set(txHash, slotNumber);
123
+ }
124
+ /** Gets the protection slot for a txHash, if protected */ getProtectionSlot(txHash) {
125
+ return this.#protectedTransactions.get(txHash);
126
+ }
127
+ /** Removes protection from tx hashes */ clearProtection(txHashes) {
128
+ for (const txHash of txHashes){
129
+ this.#protectedTransactions.delete(txHash);
130
+ }
131
+ }
132
+ /** Removes a transaction from all indices */ remove(txHash) {
133
+ const meta = this.#metadata.get(txHash);
134
+ if (!meta) {
135
+ return;
136
+ }
137
+ this.#metadata.delete(txHash);
138
+ this.#protectedTransactions.delete(txHash);
139
+ this.#removeFromPendingIndices(meta);
140
+ }
141
+ /** Removes a transaction from pending indices only (not metadata) */ removeFromPendingIndices(meta) {
142
+ this.#removeFromPendingIndices(meta);
143
+ }
144
+ /** Adds a transaction to pending indices (used during conflict resolution) */ addToPendingIndices(meta) {
145
+ this.#addToPendingIndices(meta);
146
+ }
147
+ // ============================================================================
148
+ // QUERIES FOR EVICTION RULES
149
+ // ============================================================================
150
+ /** Gets all pending transactions for a given fee payer */ getFeePayerPendingTxs(feePayer) {
151
+ const txHashes = this.#feePayerToTxHashes.get(feePayer);
152
+ if (!txHashes) {
153
+ return [];
154
+ }
155
+ const result = [];
156
+ for (const txHash of txHashes){
157
+ const meta = this.#metadata.get(txHash);
158
+ if (meta && this.getTxState(meta) === 'pending') {
159
+ result.push(meta);
160
+ }
161
+ }
162
+ return result;
163
+ }
164
+ /** Gets the count of pending transactions */ getPendingTxCount() {
165
+ return this.#pendingByPriority.length;
166
+ }
167
+ /** Gets the lowest priority pending transaction hashes (up to limit) */ getLowestPriorityPending(limit) {
168
+ if (limit <= 0) {
169
+ return [];
170
+ }
171
+ const result = [];
172
+ for (const hash of this.iteratePendingByPriority('asc')){
173
+ result.push(hash);
174
+ if (result.length >= limit) {
175
+ break;
176
+ }
177
+ }
178
+ return result;
179
+ }
180
+ /** Gets the lowest priority pending transaction */ getLowestPriorityPendingTx() {
181
+ for (const txHash of this.iteratePendingByPriority('asc')){
182
+ const meta = this.#metadata.get(txHash);
183
+ if (meta) {
184
+ return meta;
185
+ }
186
+ }
187
+ return undefined;
188
+ }
189
+ /** Gets all pending transactions */ getPendingTxs() {
190
+ const result = [];
191
+ for (const entry of this.#pendingByPriority){
192
+ const meta = this.#metadata.get(entry.txHash);
193
+ if (meta) {
194
+ result.push(meta);
195
+ }
196
+ }
197
+ return result;
198
+ }
199
+ /** Gets all fee payers with pending transactions */ getPendingFeePayers() {
200
+ return Array.from(this.#feePayerToTxHashes.keys());
201
+ }
202
+ /** Gets the txHash that uses a given nullifier (pending txs only) */ getTxHashByNullifier(nullifier) {
203
+ return this.#nullifierToTxHash.get(nullifier);
204
+ }
205
+ /** Gets txHashes for a fee payer */ getTxHashesByFeePayer(feePayer) {
206
+ return this.#feePayerToTxHashes.get(feePayer);
207
+ }
208
+ // ============================================================================
209
+ // FIND/FILTER OPERATIONS
210
+ // ============================================================================
211
+ /** Finds all transactions mined in blocks after the given block number */ findTxsMinedAfter(blockNumber) {
212
+ const result = [];
213
+ for (const meta of this.#metadata.values()){
214
+ if (meta.minedL2BlockId !== undefined && meta.minedL2BlockId.number > blockNumber) {
215
+ result.push(meta);
216
+ }
217
+ }
218
+ return result;
219
+ }
220
+ /** Finds tx hashes mined at or before the given block number */ findTxsMinedAtOrBefore(blockNumber) {
221
+ const result = [];
222
+ for (const [txHash, meta] of this.#metadata){
223
+ if (meta.minedL2BlockId !== undefined && meta.minedL2BlockId.number <= blockNumber) {
224
+ result.push(txHash);
225
+ }
226
+ }
227
+ return result;
228
+ }
229
+ /** Finds protected tx hashes from slots earlier than the given slot number */ findExpiredProtectedTxs(slotNumber) {
230
+ const result = [];
231
+ for (const [txHash, protectedSlot] of this.#protectedTransactions){
232
+ if (protectedSlot < slotNumber) {
233
+ result.push(txHash);
234
+ }
235
+ }
236
+ return result;
237
+ }
238
+ /** Filters out transactions that are currently protected */ filterUnprotected(txs) {
239
+ return txs.filter((meta)=>!this.#protectedTransactions.has(meta.txHash));
240
+ }
241
+ /** Filters to transactions that have metadata and are not mined */ filterRestorable(txHashes) {
242
+ const result = [];
243
+ for (const txHash of txHashes){
244
+ const meta = this.#metadata.get(txHash);
245
+ if (meta && meta.minedL2BlockId === undefined) {
246
+ result.push(meta);
247
+ }
248
+ }
249
+ return result;
250
+ }
251
+ // ============================================================================
252
+ // METRICS
253
+ // ============================================================================
254
+ /** Counts transactions by state and estimates total metadata memory usage */ countTxs() {
255
+ let pending = 0;
256
+ let protected_ = 0;
257
+ let mined = 0;
258
+ let totalMetadataBytes = 0;
259
+ for (const meta of this.#metadata.values()){
260
+ totalMetadataBytes += meta.estimatedSizeBytes;
261
+ const state = this.getTxState(meta);
262
+ if (state === 'pending') {
263
+ pending++;
264
+ } else if (state === 'protected') {
265
+ protected_++;
266
+ } else if (state === 'mined') {
267
+ mined++;
268
+ }
269
+ }
270
+ return {
271
+ pending,
272
+ protected: protected_,
273
+ mined,
274
+ totalMetadataBytes
275
+ };
276
+ }
277
+ /** Returns the estimated total memory consumed by all metadata objects */ getTotalMetadataBytes() {
278
+ let total = 0;
279
+ for (const meta of this.#metadata.values()){
280
+ total += meta.estimatedSizeBytes;
281
+ }
282
+ return total;
283
+ }
284
+ /** Gets all mined transactions with their block IDs */ getMinedTxs() {
285
+ const result = [];
286
+ for (const [txHash, meta] of this.#metadata){
287
+ if (meta.minedL2BlockId !== undefined) {
288
+ result.push([
289
+ txHash,
290
+ meta.minedL2BlockId
291
+ ]);
292
+ }
293
+ }
294
+ return result;
295
+ }
296
+ // ============================================================================
297
+ // PRIVATE HELPERS
298
+ // ============================================================================
299
+ #addToPendingIndices(meta) {
300
+ // Add to nullifier index
301
+ for (const nullifier of meta.nullifiers){
302
+ this.#nullifierToTxHash.set(nullifier, meta.txHash);
303
+ }
304
+ // Add to fee payer index
305
+ let feePayerSet = this.#feePayerToTxHashes.get(meta.feePayer);
306
+ if (!feePayerSet) {
307
+ feePayerSet = new Set();
308
+ this.#feePayerToTxHashes.set(meta.feePayer, feePayerSet);
309
+ }
310
+ feePayerSet.add(meta.txHash);
311
+ insertIntoSortedArray(this.#pendingByPriority, {
312
+ txHash: meta.txHash,
313
+ priorityFee: meta.priorityFee,
314
+ txHashBigInt: meta.txHashBigInt
315
+ }, comparePriority, false);
316
+ }
317
+ #removeFromPendingIndices(meta) {
318
+ // Remove from nullifier index
319
+ for (const nullifier of meta.nullifiers){
320
+ this.#nullifierToTxHash.delete(nullifier);
321
+ }
322
+ // Remove from fee payer index
323
+ const feePayerSet = this.#feePayerToTxHashes.get(meta.feePayer);
324
+ if (feePayerSet) {
325
+ feePayerSet.delete(meta.txHash);
326
+ if (feePayerSet.size === 0) {
327
+ this.#feePayerToTxHashes.delete(meta.feePayer);
328
+ }
329
+ }
330
+ // Remove from priority array
331
+ removeFromSortedArray(this.#pendingByPriority, {
332
+ txHash: meta.txHash,
333
+ priorityFee: meta.priorityFee,
334
+ txHashBigInt: meta.txHashBigInt
335
+ }, comparePriority);
336
+ }
337
+ }
@@ -0,0 +1,62 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { type Logger } from '@aztec/foundation/log';
3
+ import { DateProvider } from '@aztec/foundation/timer';
4
+ import type { TypedEventEmitter } from '@aztec/foundation/types';
5
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
6
+ import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
7
+ import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
8
+ import { type TelemetryClient } from '@aztec/telemetry-client';
9
+ import type { AddTxsResult, PoolReadAccess, TxPoolV2, TxPoolV2Config, TxPoolV2Dependencies, TxPoolV2Events } from './interfaces.js';
10
+ import type { TxState } from './tx_metadata.js';
11
+ declare const AztecKVTxPoolV2_base: new () => TypedEventEmitter<TxPoolV2Events>;
12
+ /**
13
+ * Implementation of TxPoolV2 with explicit state management.
14
+ *
15
+ * This class is a thin wrapper that manages the serial queue and delegates
16
+ * all operations to TxPoolV2Impl.
17
+ */
18
+ export declare class AztecKVTxPoolV2 extends AztecKVTxPoolV2_base implements TxPoolV2 {
19
+ #private;
20
+ constructor(store: AztecAsyncKVStore, archiveStore: AztecAsyncKVStore, deps: TxPoolV2Dependencies, telemetry?: TelemetryClient, config?: Partial<TxPoolV2Config>, dateProvider?: DateProvider, log?: Logger);
21
+ addPendingTxs(txs: Tx[], opts?: {
22
+ source?: string;
23
+ feeComparisonOnly?: boolean;
24
+ }): Promise<AddTxsResult>;
25
+ canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'>;
26
+ addProtectedTxs(txs: Tx[], block: BlockHeader, opts?: {
27
+ source?: string;
28
+ }): Promise<void>;
29
+ protectTxs(txHashes: TxHash[], block: BlockHeader): Promise<TxHash[]>;
30
+ addMinedTxs(txs: Tx[], block: BlockHeader, opts?: {
31
+ source?: string;
32
+ }): Promise<void>;
33
+ handleMinedBlock(block: L2Block): Promise<void>;
34
+ prepareForSlot(slotNumber: SlotNumber): Promise<void>;
35
+ handlePrunedBlocks(latestBlock: L2BlockId, options?: {
36
+ deleteAllTxs?: boolean;
37
+ }): Promise<void>;
38
+ handleFailedExecution(txHashes: TxHash[]): Promise<void>;
39
+ handleFinalizedBlock(block: BlockHeader): Promise<void>;
40
+ getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
41
+ getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
42
+ hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
43
+ getTxStatus(txHash: TxHash): Promise<TxState | 'deleted' | undefined>;
44
+ getPendingTxHashes(): Promise<TxHash[]>;
45
+ getEligiblePendingTxHashes(): Promise<TxHash[]>;
46
+ getPendingTxCount(): Promise<number>;
47
+ getMinedTxHashes(): Promise<[TxHash, L2BlockId][]>;
48
+ getMinedTxCount(): Promise<number>;
49
+ isEmpty(): Promise<boolean>;
50
+ getArchivedTxByHash(txHash: TxHash): Promise<Tx | undefined>;
51
+ getLowestPriorityPending(limit: number): Promise<TxHash[]>;
52
+ /** Returns read-only access to the pool. Used for testing. */
53
+ getPoolReadAccess(): PoolReadAccess;
54
+ updateConfig(config: Partial<TxPoolV2Config>): Promise<void>;
55
+ /**
56
+ * Starts the pool and initializes state from persistence.
57
+ */
58
+ start(): Promise<void>;
59
+ stop(): Promise<void>;
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF92Mi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sX3YyL3R4X3Bvb2xfdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFLbkYsT0FBTyxLQUFLLEVBQ1YsWUFBWSxFQUNaLGNBQWMsRUFDZCxRQUFRLEVBQ1IsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEVBQ2YsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHaEQ7Ozs7O0dBS0c7QUFDSCxxQkFBYSxlQUFnQixTQUFRLG9CQUE4RCxZQUFXLFFBQVE7O0lBU3BILFlBQ0UsS0FBSyxFQUFFLGlCQUFpQixFQUN4QixZQUFZLEVBQUUsaUJBQWlCLEVBQy9CLElBQUksRUFBRSxvQkFBb0IsRUFDMUIsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELE1BQU0sR0FBRSxPQUFPLENBQUMsY0FBYyxDQUFNLEVBQ3BDLFlBQVksR0FBRSxZQUFp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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_pool_v2.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_v2.ts"],"names":[],"mappings":"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"}