@aztec/p2p 0.0.1-commit.aada20e3 → 0.0.1-commit.b1c78909e

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