@aztec/p2p 0.0.1-commit.24de95ac → 0.0.1-commit.2e2504e2

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 (538) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +2 -2
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +11 -9
  7. package/dest/client/index.d.ts +1 -1
  8. package/dest/client/interface.d.ts +18 -3
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +18 -37
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +477 -128
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  19. package/dest/config.d.ts +75 -60
  20. package/dest/config.d.ts.map +1 -1
  21. package/dest/config.js +26 -15
  22. package/dest/enr/generate-enr.d.ts +1 -1
  23. package/dest/enr/index.d.ts +1 -1
  24. package/dest/errors/attestation-pool.error.d.ts +7 -0
  25. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  26. package/dest/errors/attestation-pool.error.js +12 -0
  27. package/dest/errors/reqresp.error.d.ts +1 -1
  28. package/dest/errors/reqresp.error.d.ts.map +1 -1
  29. package/dest/index.d.ts +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
  31. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +241 -266
  35. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  36. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
  37. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
  39. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
  40. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  41. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
  42. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  43. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  44. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  45. package/dest/mem_pools/index.d.ts +1 -1
  46. package/dest/mem_pools/instrumentation.d.ts +9 -1
  47. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  48. package/dest/mem_pools/instrumentation.js +37 -10
  49. package/dest/mem_pools/interface.d.ts +3 -4
  50. package/dest/mem_pools/interface.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
  52. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  54. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  55. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  57. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  58. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  60. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  61. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  66. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  67. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  69. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  70. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  72. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  73. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  75. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  76. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool/index.js +0 -1
  78. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  79. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  80. package/dest/mem_pools/tx_pool/priority.js +6 -1
  81. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  82. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  83. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  84. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  85. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  86. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  87. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  88. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  89. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  90. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  91. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +119 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +90 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +89 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  104. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +131 -0
  105. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  106. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +17 -0
  107. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  108. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  109. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +63 -0
  110. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  111. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  112. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +91 -0
  113. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  114. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  115. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +70 -0
  116. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  117. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  118. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +63 -0
  119. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  120. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  121. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  122. package/dest/mem_pools/tx_pool_v2/index.d.ts +5 -0
  123. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  124. package/dest/mem_pools/tx_pool_v2/index.js +4 -0
  125. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +193 -0
  126. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  127. package/dest/mem_pools/tx_pool_v2/interfaces.js +6 -0
  128. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +71 -0
  129. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  130. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +94 -0
  131. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  132. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  133. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  134. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +55 -0
  135. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  136. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +150 -0
  137. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +69 -0
  138. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  139. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1041 -0
  140. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
  141. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
  143. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  144. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
  146. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  147. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  148. package/dest/msg_validators/attestation_validator/index.js +1 -0
  149. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  150. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  151. package/dest/msg_validators/clock_tolerance.js +37 -0
  152. package/dest/msg_validators/index.d.ts +2 -2
  153. package/dest/msg_validators/index.d.ts.map +1 -1
  154. package/dest/msg_validators/index.js +1 -1
  155. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  156. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  158. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  159. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  160. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  161. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  162. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  163. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  164. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  165. package/dest/msg_validators/proposal_validator/index.js +3 -0
  166. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  167. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  168. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  169. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  170. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  171. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  172. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  173. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  174. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  175. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  176. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  178. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  179. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
  181. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  182. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  184. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  185. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  186. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  187. package/dest/msg_validators/tx_validator/factory.d.ts +10 -4
  188. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  189. package/dest/msg_validators/tx_validator/factory.js +22 -12
  190. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  191. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  192. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  193. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  194. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  195. package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
  196. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  197. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  198. package/dest/msg_validators/tx_validator/index.js +1 -0
  199. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
  200. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  201. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  202. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  203. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  204. package/dest/msg_validators/tx_validator/phases_validator.js +6 -4
  205. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  206. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  207. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  208. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  209. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  210. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +5 -3
  211. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  212. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  213. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  214. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  215. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  216. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  217. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  218. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  219. package/dest/services/data_store.d.ts +1 -1
  220. package/dest/services/data_store.d.ts.map +1 -1
  221. package/dest/services/data_store.js +10 -6
  222. package/dest/services/discv5/discV5_service.d.ts +1 -1
  223. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  224. package/dest/services/discv5/discV5_service.js +1 -1
  225. package/dest/services/dummy_service.d.ts +18 -2
  226. package/dest/services/dummy_service.d.ts.map +1 -1
  227. package/dest/services/dummy_service.js +42 -0
  228. package/dest/services/encoding.d.ts +1 -1
  229. package/dest/services/encoding.d.ts.map +1 -1
  230. package/dest/services/encoding.js +7 -6
  231. package/dest/services/gossipsub/scoring.d.ts +1 -1
  232. package/dest/services/index.d.ts +2 -1
  233. package/dest/services/index.d.ts.map +1 -1
  234. package/dest/services/index.js +1 -0
  235. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  236. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  237. package/dest/services/libp2p/instrumentation.js +36 -71
  238. package/dest/services/libp2p/libp2p_service.d.ts +48 -81
  239. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  240. package/dest/services/libp2p/libp2p_service.js +926 -193
  241. package/dest/services/peer-manager/interface.d.ts +1 -1
  242. package/dest/services/peer-manager/metrics.d.ts +9 -2
  243. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  244. package/dest/services/peer-manager/metrics.js +39 -16
  245. package/dest/services/peer-manager/peer_manager.d.ts +2 -33
  246. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  247. package/dest/services/peer-manager/peer_manager.js +6 -12
  248. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  249. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  250. package/dest/services/peer-manager/peer_scoring.js +43 -2
  251. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  252. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  253. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  254. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  255. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  256. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  257. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  258. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  259. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  260. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  261. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  262. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  263. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  264. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  265. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  266. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  267. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  268. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  269. package/dest/services/reqresp/config.d.ts +1 -1
  270. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  271. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  272. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  273. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -4
  274. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  275. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  276. package/dest/services/reqresp/constants.d.ts +12 -0
  277. package/dest/services/reqresp/constants.d.ts.map +1 -0
  278. package/dest/services/reqresp/constants.js +7 -0
  279. package/dest/services/reqresp/index.d.ts +1 -1
  280. package/dest/services/reqresp/interface.d.ts +4 -2
  281. package/dest/services/reqresp/interface.d.ts.map +1 -1
  282. package/dest/services/reqresp/interface.js +1 -1
  283. package/dest/services/reqresp/metrics.d.ts +6 -5
  284. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  285. package/dest/services/reqresp/metrics.js +17 -21
  286. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  287. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  288. package/dest/services/reqresp/protocols/auth.js +2 -2
  289. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  290. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  291. package/dest/services/reqresp/protocols/block.js +3 -2
  292. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  293. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  294. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  295. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  296. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  297. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
  298. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +19 -9
  299. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  300. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +44 -14
  301. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  302. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  303. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  304. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  305. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  306. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  307. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  308. package/dest/services/reqresp/protocols/status.js +7 -3
  309. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  310. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  311. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  312. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  313. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  314. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  315. package/dest/services/reqresp/reqresp.d.ts +6 -41
  316. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  317. package/dest/services/reqresp/reqresp.js +460 -46
  318. package/dest/services/reqresp/status.d.ts +2 -2
  319. package/dest/services/reqresp/status.d.ts.map +1 -1
  320. package/dest/services/service.d.ts +19 -3
  321. package/dest/services/service.d.ts.map +1 -1
  322. package/dest/services/tx_collection/config.d.ts +4 -1
  323. package/dest/services/tx_collection/config.d.ts.map +1 -1
  324. package/dest/services/tx_collection/config.js +10 -2
  325. package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -12
  326. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  327. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  328. package/dest/services/tx_collection/index.d.ts +2 -1
  329. package/dest/services/tx_collection/index.d.ts.map +1 -1
  330. package/dest/services/tx_collection/index.js +1 -0
  331. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  332. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  333. package/dest/services/tx_collection/instrumentation.js +10 -13
  334. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  335. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  336. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  337. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
  338. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  339. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  340. package/dest/services/tx_collection/tx_collection.d.ts +10 -10
  341. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  342. package/dest/services/tx_collection/tx_collection.js +5 -5
  343. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  344. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  345. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  346. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  347. package/dest/services/tx_file_store/config.d.ts +18 -0
  348. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  349. package/dest/services/tx_file_store/config.js +26 -0
  350. package/dest/services/tx_file_store/index.d.ts +4 -0
  351. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  352. package/dest/services/tx_file_store/index.js +3 -0
  353. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  354. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  355. package/dest/services/tx_file_store/instrumentation.js +29 -0
  356. package/dest/services/tx_file_store/tx_file_store.d.ts +47 -0
  357. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  358. package/dest/services/tx_file_store/tx_file_store.js +149 -0
  359. package/dest/services/tx_provider.d.ts +4 -2
  360. package/dest/services/tx_provider.d.ts.map +1 -1
  361. package/dest/services/tx_provider.js +11 -2
  362. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  363. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  364. package/dest/services/tx_provider_instrumentation.js +14 -14
  365. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  366. package/dest/test-helpers/get-ports.d.ts +1 -1
  367. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  368. package/dest/test-helpers/index.d.ts +3 -1
  369. package/dest/test-helpers/index.d.ts.map +1 -1
  370. package/dest/test-helpers/index.js +2 -0
  371. package/dest/test-helpers/make-enrs.d.ts +1 -1
  372. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  373. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  374. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  375. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  376. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  377. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  378. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  379. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  380. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  381. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  382. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  383. package/dest/test-helpers/test_tx_provider.js +41 -0
  384. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  385. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  386. package/dest/test-helpers/testbench-utils.js +297 -0
  387. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  388. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  389. package/dest/testbench/p2p_client_testbench_worker.js +218 -120
  390. package/dest/testbench/parse_log_file.d.ts +1 -1
  391. package/dest/testbench/testbench.d.ts +1 -1
  392. package/dest/testbench/worker_client_manager.d.ts +51 -6
  393. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  394. package/dest/testbench/worker_client_manager.js +226 -39
  395. package/dest/types/index.d.ts +1 -1
  396. package/dest/util.d.ts +2 -1
  397. package/dest/util.d.ts.map +1 -1
  398. package/dest/util.js +11 -2
  399. package/dest/versioning.d.ts +1 -1
  400. package/package.json +19 -18
  401. package/src/bootstrap/bootstrap.ts +7 -4
  402. package/src/client/factory.ts +15 -20
  403. package/src/client/interface.ts +20 -2
  404. package/src/client/p2p_client.ts +121 -156
  405. package/src/client/test/tx_proposal_collector/README.md +227 -0
  406. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  407. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  408. package/src/config.ts +43 -20
  409. package/src/errors/attestation-pool.error.ts +13 -0
  410. package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
  411. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
  412. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
  413. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
  414. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  415. package/src/mem_pools/instrumentation.ts +48 -10
  416. package/src/mem_pools/interface.ts +2 -4
  417. package/src/mem_pools/tx_pool/README.md +270 -0
  418. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  419. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  420. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  421. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  422. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  423. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  424. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  425. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  426. package/src/mem_pools/tx_pool/index.ts +0 -1
  427. package/src/mem_pools/tx_pool/priority.ts +8 -1
  428. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  429. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  430. package/src/mem_pools/tx_pool_v2/README.md +188 -0
  431. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  432. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  433. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +147 -0
  434. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +118 -0
  435. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +111 -0
  436. package/src/mem_pools/tx_pool_v2/eviction/index.ts +23 -0
  437. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +164 -0
  438. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  439. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  440. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +86 -0
  441. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +72 -0
  442. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
  443. package/src/mem_pools/tx_pool_v2/index.ts +11 -0
  444. package/src/mem_pools/tx_pool_v2/interfaces.ts +225 -0
  445. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +160 -0
  446. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  447. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +209 -0
  448. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1265 -0
  449. package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
  450. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
  451. package/src/msg_validators/attestation_validator/index.ts +1 -0
  452. package/src/msg_validators/clock_tolerance.ts +51 -0
  453. package/src/msg_validators/index.ts +1 -1
  454. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  455. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  456. package/src/msg_validators/proposal_validator/index.ts +3 -0
  457. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  458. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  459. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  460. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  461. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  462. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  463. package/src/msg_validators/tx_validator/factory.ts +67 -25
  464. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  465. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  466. package/src/msg_validators/tx_validator/index.ts +1 -0
  467. package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
  468. package/src/msg_validators/tx_validator/phases_validator.ts +8 -4
  469. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  470. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  471. package/src/msg_validators/tx_validator/timestamp_validator.ts +11 -5
  472. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  473. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  474. package/src/services/data_store.ts +10 -7
  475. package/src/services/discv5/discV5_service.ts +1 -1
  476. package/src/services/dummy_service.ts +51 -0
  477. package/src/services/encoding.ts +6 -5
  478. package/src/services/index.ts +1 -0
  479. package/src/services/libp2p/instrumentation.ts +39 -71
  480. package/src/services/libp2p/libp2p_service.ts +629 -195
  481. package/src/services/peer-manager/metrics.ts +44 -16
  482. package/src/services/peer-manager/peer_manager.ts +7 -4
  483. package/src/services/peer-manager/peer_scoring.ts +45 -3
  484. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  485. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  486. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  487. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  488. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  489. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  490. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  491. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  492. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  493. package/src/services/reqresp/constants.ts +14 -0
  494. package/src/services/reqresp/interface.ts +4 -1
  495. package/src/services/reqresp/metrics.ts +36 -27
  496. package/src/services/reqresp/protocols/auth.ts +2 -2
  497. package/src/services/reqresp/protocols/block.ts +3 -2
  498. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  499. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
  500. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +52 -10
  501. package/src/services/reqresp/protocols/status.ts +16 -12
  502. package/src/services/reqresp/protocols/tx.ts +1 -2
  503. package/src/services/reqresp/reqresp.ts +66 -19
  504. package/src/services/service.ts +23 -4
  505. package/src/services/tx_collection/config.ts +16 -2
  506. package/src/services/tx_collection/fast_tx_collection.ts +39 -15
  507. package/src/services/tx_collection/index.ts +5 -0
  508. package/src/services/tx_collection/instrumentation.ts +5 -13
  509. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  510. package/src/services/tx_collection/slow_tx_collection.ts +5 -4
  511. package/src/services/tx_collection/tx_collection.ts +10 -9
  512. package/src/services/tx_file_store/config.ts +43 -0
  513. package/src/services/tx_file_store/index.ts +3 -0
  514. package/src/services/tx_file_store/instrumentation.ts +36 -0
  515. package/src/services/tx_file_store/tx_file_store.ts +173 -0
  516. package/src/services/tx_provider.ts +19 -3
  517. package/src/services/tx_provider_instrumentation.ts +24 -14
  518. package/src/test-helpers/index.ts +2 -0
  519. package/src/test-helpers/mock-pubsub.ts +1 -1
  520. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  521. package/src/test-helpers/reqresp-nodes.ts +1 -1
  522. package/src/test-helpers/test_tx_provider.ts +64 -0
  523. package/src/test-helpers/testbench-utils.ts +374 -0
  524. package/src/testbench/p2p_client_testbench_worker.ts +338 -116
  525. package/src/testbench/worker_client_manager.ts +304 -42
  526. package/src/util.ts +12 -2
  527. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  528. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  529. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  530. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  531. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  532. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  533. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  534. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  535. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  536. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  537. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  538. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -0,0 +1,106 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import type { TxHash } from '@aztec/stdlib/tx';
3
+
4
+ import type { TxPoolOptions } from '../tx_pool.js';
5
+ import {
6
+ type EvictionContext,
7
+ EvictionEvent,
8
+ type EvictionResult,
9
+ type EvictionRule,
10
+ type TxPoolOperations,
11
+ } from './eviction_strategy.js';
12
+
13
+ export interface LowPriorityEvictionConfig {
14
+ /** Maximum number of pending transactions before eviction kicks in */
15
+ maxPoolSize: number;
16
+ }
17
+
18
+ /**
19
+ * Eviction rule that removes low-priority transactions when the number of pending transactions exceeds configured limits.
20
+ * Only triggers on TXS_ADDED events and respects non-evictable transactions.
21
+ */
22
+ export class LowPriorityEvictionRule implements EvictionRule {
23
+ public readonly name = 'LowPriorityEviction';
24
+
25
+ private log = createLogger('p2p:mempool:tx_pool:low_priority_eviction_rule');
26
+
27
+ constructor(private config: LowPriorityEvictionConfig) {}
28
+
29
+ public async evict(context: EvictionContext, txPool: TxPoolOperations): Promise<EvictionResult> {
30
+ if (context.event !== EvictionEvent.TXS_ADDED) {
31
+ return {
32
+ reason: 'low_priority',
33
+ success: true,
34
+ txsEvicted: [],
35
+ };
36
+ }
37
+
38
+ if (this.config.maxPoolSize === 0) {
39
+ return {
40
+ reason: 'low_priority',
41
+ success: true,
42
+ txsEvicted: [],
43
+ };
44
+ }
45
+
46
+ try {
47
+ const currentTxCount = await txPool.getPendingTxCount();
48
+ const maxCount = this.config.maxPoolSize;
49
+
50
+ if (currentTxCount <= maxCount) {
51
+ this.log.trace(`Not evicting low priority txs. Pending tx count below limit ${currentTxCount} <= ${maxCount}`);
52
+ return {
53
+ reason: 'low_priority',
54
+ success: true,
55
+ txsEvicted: [],
56
+ };
57
+ }
58
+
59
+ this.log.verbose(`Evicting low priority txs. Pending tx count above limit: ${currentTxCount} > ${maxCount}`);
60
+ const numberToEvict = currentTxCount - maxCount;
61
+ const txsToEvict: TxHash[] = await txPool.getLowestPriorityEvictable(numberToEvict);
62
+
63
+ if (txsToEvict.length > 0) {
64
+ await txPool.deleteTxs(txsToEvict);
65
+ }
66
+
67
+ const numNewTxsEvicted = context.newTxs.filter(newTxHash =>
68
+ txsToEvict.some(evictedTx => evictedTx.equals(newTxHash)),
69
+ ).length;
70
+
71
+ this.log.verbose(`Evicted ${txsToEvict.length} low priority txs, including ${numNewTxsEvicted} newly added txs`, {
72
+ txsEvicted: txsToEvict,
73
+ });
74
+
75
+ return {
76
+ reason: 'low_priority',
77
+ success: true,
78
+ txsEvicted: txsToEvict,
79
+ };
80
+ } catch (err) {
81
+ this.log.error('Failed to evict low priority transactions', { err });
82
+ return {
83
+ reason: 'low_priority',
84
+ success: false,
85
+ txsEvicted: [],
86
+ error: new Error('Failed to evict low priority txs', { cause: err }),
87
+ };
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Updates the configuration for this eviction rule
93
+ */
94
+ updateConfig(config: TxPoolOptions): void {
95
+ if (config.maxPendingTxCount !== undefined) {
96
+ this.config.maxPoolSize = config.maxPendingTxCount;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Gets the current configuration
102
+ */
103
+ getConfig(): LowPriorityEvictionConfig {
104
+ return { ...this.config };
105
+ }
106
+ }
@@ -0,0 +1,75 @@
1
+ import { findIndexInSortedArray, insertIntoSortedArray } from '@aztec/foundation/array';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+ import { type Tx, TxHash } from '@aztec/stdlib/tx';
5
+
6
+ import type { PreAddEvictionResult, PreAddEvictionRule, PreAddPoolAccess } from './eviction_strategy.js';
7
+
8
+ const cmpTxHash = (a: TxHash, b: TxHash) => Fr.cmp(a.hash, b.hash);
9
+
10
+ /**
11
+ * Pre-add eviction rule that checks for nullifier conflicts between incoming and existing transactions.
12
+ *
13
+ * When an incoming tx shares nullifiers with existing pending txs:
14
+ * - If the incoming tx has strictly higher priority fee, evict all conflicting txs
15
+ * - If any conflicting tx has equal or higher priority fee, reject the incoming tx
16
+ *
17
+ * This prevents nullifier spam attacks where an attacker floods the mempool with
18
+ * transactions spending the same nullifiers.
19
+ */
20
+ export class NullifierConflictPreAddRule implements PreAddEvictionRule {
21
+ public readonly name = 'NullifierConflictPreAdd';
22
+
23
+ private log = createLogger('p2p:mempool:tx_pool:nullifier_conflict_pre_add_rule');
24
+
25
+ /**
26
+ * Check if the incoming transaction conflicts with existing transactions via nullifiers.
27
+ *
28
+ * @param tx - The incoming transaction
29
+ * @param poolAccess - Read-only access to pool state
30
+ * @returns Result with rejection status and txs to evict
31
+ */
32
+ async check(tx: Tx, poolAccess: PreAddPoolAccess): Promise<PreAddEvictionResult> {
33
+ const txHash = tx.getTxHash();
34
+ const nullifiers = tx.data.getNonEmptyNullifiers();
35
+ const txHashesToEvict: TxHash[] = [];
36
+ const incomingPriority = poolAccess.getTxPriority(tx);
37
+
38
+ for (const nullifier of nullifiers) {
39
+ const conflictingHash = await poolAccess.getTxHashByNullifier(nullifier);
40
+
41
+ if (
42
+ !conflictingHash ||
43
+ conflictingHash.equals(txHash) ||
44
+ findIndexInSortedArray(txHashesToEvict, conflictingHash, cmpTxHash) !== -1
45
+ ) {
46
+ continue;
47
+ }
48
+
49
+ // Get the conflicting tx's priority
50
+ const conflictingTx = await poolAccess.getPendingTxByHash(conflictingHash);
51
+ if (!conflictingTx) {
52
+ continue;
53
+ }
54
+
55
+ const conflictingPriority = poolAccess.getTxPriority(conflictingTx);
56
+
57
+ // If incoming tx has strictly higher priority, mark for eviction
58
+ // Otherwise, reject incoming tx (ties go to existing tx)
59
+ if (incomingPriority > conflictingPriority) {
60
+ insertIntoSortedArray(txHashesToEvict, conflictingHash, cmpTxHash);
61
+ } else {
62
+ this.log.debug(
63
+ `Rejecting tx ${txHash.toString()}: nullifier conflict with ${conflictingHash.toString()} which has higher or equal fee`,
64
+ );
65
+ return {
66
+ shouldReject: true,
67
+ txHashesToEvict: [],
68
+ reason: `nullifier conflict with ${conflictingHash.toString()}`,
69
+ };
70
+ }
71
+ }
72
+
73
+ return { shouldReject: false, txHashesToEvict };
74
+ }
75
+ }
@@ -1,3 +1,2 @@
1
1
  export * from './tx_pool.js';
2
- export * from './memory_tx_pool.js';
3
2
  export * from './aztec_kv_tx_pool.js';
@@ -7,7 +7,14 @@ import type { Tx } from '@aztec/stdlib/tx';
7
7
  * We currently use the sum of the priority fees for the tx for this value, represented as hex.
8
8
  */
9
9
  export function getPendingTxPriority(tx: Tx): string {
10
+ return Buffer32.fromBigInt(getTxPriorityFee(tx)).toString();
11
+ }
12
+
13
+ /**
14
+ * Returns the priority of a tx.
15
+ */
16
+ export function getTxPriorityFee(tx: Tx): bigint {
10
17
  const priorityFees = tx.getGasSettings().maxPriorityFeesPerGas;
11
18
  const totalFees = priorityFees.feePerDaGas + priorityFees.feePerL2Gas;
12
- return Buffer32.fromBigInt(totalFees).toString();
19
+ return totalFees;
13
20
  }
@@ -1,9 +1,9 @@
1
+ import type { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import type { TypedEventEmitter } from '@aztec/foundation/types';
2
3
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
3
4
 
4
5
  export type TxPoolOptions = {
5
- maxTxPoolSize?: number;
6
- txPoolOverflowFactor?: number;
6
+ maxPendingTxCount?: number;
7
7
  archivedTxLimit?: number;
8
8
  };
9
9
 
@@ -68,8 +68,9 @@ export interface TxPool extends TypedEventEmitter<TxPoolEvents> {
68
68
  * Moves mined txs back to the pending set in the case of a reorg.
69
69
  * Note: txs not known by this peer will be ignored.
70
70
  * @param txHashes - Hashes of the txs to flag as pending.
71
+ * @param latestBlock - The block number the chain was pruned to.
71
72
  */
72
- markMinedAsPending(txHashes: TxHash[]): Promise<void>;
73
+ markMinedAsPending(txHashes: TxHash[], latestBlock: BlockNumber): Promise<void>;
73
74
 
74
75
  /**
75
76
  * Deletes transactions from the pool. Tx hashes that are not present are ignored.
@@ -102,7 +103,7 @@ export interface TxPool extends TypedEventEmitter<TxPoolEvents> {
102
103
  * Gets the hashes of mined transactions currently in the tx pool.
103
104
  * @returns An array of mined transaction hashes found in the tx pool.
104
105
  */
105
- getMinedTxHashes(): Promise<[tx: TxHash, blockNumber: number][]>;
106
+ getMinedTxHashes(): Promise<[tx: TxHash, blockNumber: BlockNumber][]>;
106
107
 
107
108
  /**
108
109
  * Returns whether the given tx hash is flagged as pending, mined, or deleted.
@@ -126,10 +127,15 @@ export interface TxPool extends TypedEventEmitter<TxPoolEvents> {
126
127
  */
127
128
  markTxsAsNonEvictable(txHashes: TxHash[]): Promise<void>;
128
129
 
130
+ /**
131
+ * Clears collection of non-evictable transactions in the pool
132
+ */
133
+ clearNonEvictableTxs(): Promise<void>;
134
+
129
135
  /**
130
136
  * Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
131
137
  * @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
132
138
  * @returns The number of transactions permanently deleted.
133
139
  */
134
- cleanupDeletedMinedTxs(blockNumber: number): Promise<number>;
140
+ cleanupDeletedMinedTxs(blockNumber: BlockNumber): Promise<number>;
135
141
  }
@@ -1,3 +1,4 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import { unfreeze } from '@aztec/foundation/types';
2
3
  import { GasFees } from '@aztec/stdlib/gas';
3
4
  import { mockTx } from '@aztec/stdlib/testing';
@@ -13,7 +14,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
13
14
  let pool: TxPool;
14
15
 
15
16
  const minedBlockHeader = BlockHeader.empty({
16
- globalVariables: GlobalVariables.empty({ blockNumber: 1, timestamp: 0n }),
17
+ globalVariables: GlobalVariables.empty({ blockNumber: BlockNumber(1), timestamp: 0n }),
17
18
  });
18
19
 
19
20
  beforeEach(() => {
@@ -25,7 +26,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
25
26
  });
26
27
 
27
28
  it('adds txs to the pool as pending', async () => {
28
- const tx1 = await mockTx();
29
+ const tx1 = await mockTx(1);
29
30
 
30
31
  await pool.addTxs([tx1]);
31
32
  const poolTx = await pool.getTxByHash(tx1.getTxHash());
@@ -36,9 +37,9 @@ export function describeTxPool(getTxPool: () => TxPool) {
36
37
  });
37
38
 
38
39
  it('emits txs-added event with new txs', async () => {
39
- const tx1 = await mockTx(); // existing and pending
40
- const tx2 = await mockTx(); // mined but not known
41
- const tx3 = await mockTx(); // brand new
40
+ const tx1 = await mockTx(1); // existing and pending
41
+ const tx2 = await mockTx(2); // mined but not known
42
+ const tx3 = await mockTx(3); // brand new
42
43
 
43
44
  await pool.addTxs([tx1]);
44
45
  await pool.markAsMined([tx2.getTxHash()], minedBlockHeader);
@@ -51,10 +52,11 @@ export function describeTxPool(getTxPool: () => TxPool) {
51
52
  await pool.addTxs([tx1, tx2, tx3]);
52
53
  expect(txsFromEvent).toBeDefined();
53
54
  expect(txsFromEvent).toHaveLength(2);
54
- expect(txsFromEvent).toEqual(expect.arrayContaining([tx2, tx3]));
55
+ const eventHashes = txsFromEvent!.map(tx => tx.getTxHash());
56
+ expect(eventHashes).toEqual(expect.arrayContaining([tx2.getTxHash(), tx3.getTxHash()]));
55
57
  });
56
58
 
57
- it('permanently deletes pending txs and soft-deletes mined txs', async () => {
59
+ it('removes txs from the pool', async () => {
58
60
  const pendingTx = await mockTx(1);
59
61
  const minedTx = await mockTx(2);
60
62
 
@@ -82,7 +84,8 @@ export function describeTxPool(getTxPool: () => TxPool) {
82
84
  await pool.addTxs([tx1, tx2]);
83
85
  await pool.markAsMined([tx1.getTxHash()], minedBlockHeader);
84
86
 
85
- await expect(pool.getTxByHash(tx1.getTxHash())).resolves.toEqual(tx1);
87
+ const retrievedTx = await pool.getTxByHash(tx1.getTxHash());
88
+ expect(retrievedTx?.getTxHash()).toEqual(tx1.getTxHash());
86
89
  await expect(pool.getTxStatus(tx1.getTxHash())).resolves.toEqual('mined');
87
90
  await expect(pool.getMinedTxHashes()).resolves.toEqual([[tx1.getTxHash(), 1]]);
88
91
  await expect(pool.getPendingTxHashes()).resolves.toEqual([tx2.getTxHash()]);
@@ -96,7 +99,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
96
99
  await pool.addTxs([tx1, tx2]);
97
100
  await pool.markAsMined([tx1.getTxHash()], minedBlockHeader);
98
101
 
99
- await pool.markMinedAsPending([tx1.getTxHash()]);
102
+ await pool.markMinedAsPending([tx1.getTxHash()], BlockNumber(1));
100
103
  await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
101
104
  const pending = await pool.getPendingTxHashes();
102
105
  expect(pending).toHaveLength(2);
@@ -120,7 +123,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
120
123
  );
121
124
 
122
125
  // reorg: both txs should now become available again
123
- await pool.markMinedAsPending([tx1.getTxHash(), someTxHashThatThisPeerDidNotSee]);
126
+ await pool.markMinedAsPending([tx1.getTxHash(), someTxHashThatThisPeerDidNotSee], BlockNumber(1));
124
127
  await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
125
128
  await expect(pool.getPendingTxHashes()).resolves.toEqual([tx1.getTxHash()]); // tx2 is not in the pool
126
129
  await expect(pool.getPendingTxCount()).resolves.toEqual(1);
@@ -135,7 +138,8 @@ export function describeTxPool(getTxPool: () => TxPool) {
135
138
 
136
139
  const poolTxs = await pool.getAllTxs();
137
140
  expect(poolTxs).toHaveLength(3);
138
- expect(poolTxs).toEqual(expect.arrayContaining([tx1, tx2, tx3]));
141
+ const poolHashes = poolTxs.map(tx => tx.getTxHash());
142
+ expect(poolHashes).toEqual(expect.arrayContaining([tx1.getTxHash(), tx2.getTxHash(), tx3.getTxHash()]));
139
143
  await expect(pool.getPendingTxCount()).resolves.toEqual(3);
140
144
  });
141
145
 
@@ -162,17 +166,19 @@ export function describeTxPool(getTxPool: () => TxPool) {
162
166
 
163
167
  const requestedTxs = await pool.getTxsByHash([tx1.getTxHash(), tx3.getTxHash()]);
164
168
  expect(requestedTxs).toHaveLength(2);
165
- expect(requestedTxs).toEqual(expect.arrayContaining([tx1, tx3]));
169
+ const requestedHashes = requestedTxs.map(tx => tx!.getTxHash());
170
+ expect(requestedHashes).toEqual(expect.arrayContaining([tx1.getTxHash(), tx3.getTxHash()]));
166
171
  });
167
172
 
168
173
  it('returns a large number of transactions by their hash', async () => {
169
- const numTxs = 1000;
174
+ const numTxs = 1_000;
170
175
  const txs = await Promise.all(Array.from({ length: numTxs }, (_, i) => mockTx(i)));
171
176
  const hashes = txs.map(tx => tx.getTxHash());
172
177
  await pool.addTxs(txs);
173
178
  const requestedTxs = await pool.getTxsByHash(hashes);
174
179
  expect(requestedTxs).toHaveLength(numTxs);
175
- expect(requestedTxs).toEqual(expect.arrayContaining(txs));
180
+ const requestedHashes = requestedTxs.map(tx => tx!.getTxHash());
181
+ expect(requestedHashes).toEqual(expect.arrayContaining(hashes));
176
182
  });
177
183
 
178
184
  it('returns whether or not txs exist', async () => {
@@ -261,7 +267,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
261
267
  await pool.deleteTxs([txs[0].getTxHash(), txs[1].getTxHash()]);
262
268
 
263
269
  // Clean up deleted mined txs from block 1 and earlier
264
- const deletedCount = await pool.cleanupDeletedMinedTxs(1);
270
+ const deletedCount = await pool.cleanupDeletedMinedTxs(BlockNumber(1));
265
271
 
266
272
  // Verify old transactions are permanently deleted
267
273
  expect(deletedCount).toBe(2);
@@ -276,7 +282,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
276
282
 
277
283
  // Mark as mined in block 2
278
284
  const laterBlockHeader = BlockHeader.empty({
279
- globalVariables: GlobalVariables.empty({ blockNumber: 2, timestamp: 0n }),
285
+ globalVariables: GlobalVariables.empty({ blockNumber: BlockNumber(2), timestamp: 0n }),
280
286
  });
281
287
  await pool.markAsMined([txs[0].getTxHash()], laterBlockHeader);
282
288
 
@@ -284,7 +290,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
284
290
  await pool.deleteTxs([txs[0].getTxHash()]);
285
291
 
286
292
  // Try to clean up with block 1 (before the mined block)
287
- const deletedCount = await pool.cleanupDeletedMinedTxs(1);
293
+ const deletedCount = await pool.cleanupDeletedMinedTxs(BlockNumber(1));
288
294
 
289
295
  // Verify no transactions were cleaned up
290
296
  expect(deletedCount).toBe(0);
@@ -0,0 +1,188 @@
1
+ # TxPoolV2
2
+
3
+ Transaction pool implementation with explicit state management and pluggable eviction rules.
4
+
5
+ ## Overview
6
+
7
+ TxPoolV2 manages transactions through a state machine with clear transitions:
8
+
9
+ ```
10
+ addPendingTxs()
11
+
12
+
13
+ ┌─────────────────────────────────────┐
14
+ │ PENDING │◄──────────────────┐
15
+ │ (awaiting block inclusion) │ │
16
+ └─────────────────────────────────────┘ │
17
+ │ │
18
+ │ protectTxs() / addProtectedTxs() │
19
+ ▼ │
20
+ ┌─────────────────────────────────────┐ │
21
+ │ PROTECTED │───────────────────┘
22
+ │ (in a block proposal) │ prepareForSlot()
23
+ └─────────────────────────────────────┘ (slot passed without mining)
24
+ │ │
25
+ │ handleMinedBlock() │
26
+ ▼ │
27
+ ┌─────────────────────────────────────┐ │
28
+ │ MINED │───────────────────┘
29
+ │ (included in a block) │ handlePrunedBlocks()
30
+ └─────────────────────────────────────┘ (reorg)
31
+
32
+ │ handleFinalizedBlock()
33
+
34
+ ┌─────────────────────────────────────┐
35
+ │ DELETED │
36
+ │ (optionally archived) │
37
+ └─────────────────────────────────────┘
38
+ ```
39
+
40
+ ## Key Components
41
+
42
+ ### TxPoolV2 (`tx_pool_v2.ts`)
43
+
44
+ The public API wrapper that serializes all operations through a queue to prevent race conditions. Delegates to `TxPoolV2Impl` for actual logic.
45
+
46
+ ### TxPoolV2Impl (`tx_pool_v2_impl.ts`)
47
+
48
+ Core implementation containing:
49
+ - KV store persistence for transactions and metadata
50
+ - In-memory indices for fast lookups (by nullifier, fee payer, priority)
51
+ - State transition logic
52
+ - Pre-add rule execution
53
+ - Post-event eviction rule execution
54
+
55
+ ### TxMetaData (`tx_metadata.ts`)
56
+
57
+ Lightweight metadata stored alongside each transaction:
58
+ - `txHash`: Transaction identifier
59
+ - `state`: Current state (pending, protected, mined)
60
+ - `priorityFee`: For priority ordering
61
+ - `feePayer`: For balance-based eviction
62
+ - `nullifiers`: For conflict detection
63
+ - `estimatedTxFee`: For balance calculations
64
+ - `blockId`: Block info when mined
65
+ - `protectedSlot`: Slot number when protected
66
+
67
+ ## Eviction Rules
68
+
69
+ The pool uses a pluggable rule system for managing transactions.
70
+
71
+ ### Pre-Add Rules
72
+
73
+ Checked before adding a transaction to the pending pool:
74
+
75
+ | Rule | Purpose |
76
+ |------|---------|
77
+ | `NullifierConflictRule` | Handles transactions with conflicting nullifiers. Higher priority tx wins. |
78
+ | `FeePayerBalancePreAddRule` | Ensures fee payer has sufficient balance for all their pending txs. |
79
+ | `LowPriorityPreAddRule` | Rejects txs when pool is full and new tx has lowest priority. |
80
+
81
+ ### Post-Event Eviction Rules
82
+
83
+ Run after events to clean up the pool:
84
+
85
+ | Rule | Trigger | Purpose |
86
+ |------|---------|---------|
87
+ | `LowPriorityEvictionRule` | `txs_added` | Evicts lowest priority txs when pool exceeds limit. |
88
+ | `FeePayerBalanceEvictionRule` | `block_mined` | Evicts txs when fee payer balance decreases. |
89
+ | `InvalidTxsAfterMiningRule` | `block_mined` | Evicts pending txs with nullifiers that were just mined. |
90
+ | `InvalidTxsAfterReorgRule` | `chain_pruned` | Evicts txs with invalid anchor blocks after reorg. |
91
+
92
+ ## Usage
93
+
94
+ ### Creating a Pool
95
+
96
+ ```typescript
97
+ import { AztecKVTxPoolV2 } from './tx_pool_v2.js';
98
+
99
+ const pool = new AztecKVTxPoolV2(txStore, archiveStore, {
100
+ l2BlockSource: archiver,
101
+ worldStateSynchronizer: worldState,
102
+ pendingTxValidator: validator,
103
+ });
104
+
105
+ await pool.start();
106
+ ```
107
+
108
+ ### Adding Transactions
109
+
110
+ ```typescript
111
+ // Add to pending pool (validates and runs pre-add rules)
112
+ const result = await pool.addPendingTxs(txs, { source: 'gossip' });
113
+ // result: { accepted: TxHash[], ignored: TxHash[], rejected: TxHash[] }
114
+
115
+ // Check without modifying pool
116
+ const canAdd = await pool.canAddPendingTx(tx);
117
+ // canAdd: 'accepted' | 'ignored' | 'rejected'
118
+ ```
119
+
120
+ ### Block Building Flow
121
+
122
+ ```typescript
123
+ // 1. Proposer protects txs for their block
124
+ await pool.protectTxs(selectedTxHashes, blockHeader);
125
+
126
+ // 2. On successful mining
127
+ await pool.handleMinedBlock(minedTxHashes, blockHeader);
128
+
129
+ // 3. If slot passes without mining
130
+ await pool.prepareForSlot(nextSlotNumber);
131
+
132
+ // 4. On finalization
133
+ await pool.handleFinalizedBlock(finalizedBlockHeader);
134
+ ```
135
+
136
+ ### Handling Reorgs
137
+
138
+ ```typescript
139
+ // When blocks are pruned, un-mine affected transactions
140
+ await pool.handlePrunedBlocks(latestValidBlockId);
141
+ ```
142
+
143
+ ## Configuration
144
+
145
+ ```typescript
146
+ await pool.updateConfig({
147
+ maxPendingTxCount: 10000, // 0 = unlimited
148
+ archivedTxLimit: 1000, // 0 = disabled
149
+ });
150
+ ```
151
+
152
+ ## Return Values
153
+
154
+ ### AddTxsResult
155
+
156
+ When adding pending transactions, each tx is categorized:
157
+
158
+ | Status | Meaning |
159
+ |--------|---------|
160
+ | `accepted` | Successfully added to the pool |
161
+ | `ignored` | Valid but not added (duplicate, lost nullifier conflict, insufficient balance) |
162
+ | `rejected` | Failed validation (invalid proof, expired, etc.) |
163
+
164
+ ## Archive
165
+
166
+ Finalized transactions can optionally be archived for historical queries:
167
+
168
+ ```typescript
169
+ const archivedTx = await pool.getArchivedTxByHash(txHash);
170
+ ```
171
+
172
+ The archive uses FIFO eviction when `archivedTxLimit` is reached.
173
+
174
+ ## Testing
175
+
176
+ ```bash
177
+ # Unit tests (131 tests)
178
+ yarn test src/mem_pools/tx_pool_v2/tx_pool_v2.test.ts
179
+
180
+ # Compatibility tests (25 tests)
181
+ yarn test src/mem_pools/tx_pool_v2/tx_pool_v2.compat.test.ts
182
+
183
+ # Eviction rule tests
184
+ yarn test src/mem_pools/tx_pool_v2/eviction/
185
+
186
+ # Benchmarks
187
+ yarn test src/mem_pools/tx_pool_v2/tx_pool_v2_bench.test.ts
188
+ ```
@@ -0,0 +1 @@
1
+ export { TxArchive } from './tx_archive.js';