@aztec/p2p 0.0.1-commit.2eb6648a → 0.0.1-commit.343b43af6

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 (364) hide show
  1. package/dest/client/factory.d.ts +9 -9
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +43 -13
  4. package/dest/client/interface.d.ts +39 -33
  5. package/dest/client/interface.d.ts.map +1 -1
  6. package/dest/client/p2p_client.d.ts +37 -50
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +144 -223
  9. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +6 -7
  10. package/dest/config.d.ts +48 -17
  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 +21 -12
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  21. package/dest/mem_pools/attestation_pool/attestation_pool.js +72 -38
  22. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  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 +53 -53
  25. package/dest/mem_pools/attestation_pool/index.d.ts +2 -2
  26. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/index.js +1 -1
  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 +2 -1
  32. package/dest/mem_pools/index.d.ts.map +1 -1
  33. package/dest/mem_pools/instrumentation.d.ts +4 -2
  34. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  35. package/dest/mem_pools/instrumentation.js +16 -14
  36. package/dest/mem_pools/interface.d.ts +3 -3
  37. package/dest/mem_pools/interface.d.ts.map +1 -1
  38. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  39. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  40. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool/priority.js +4 -3
  42. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  43. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  45. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  46. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  47. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +3 -3
  49. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +18 -9
  51. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +5 -2
  54. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +3 -3
  55. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +12 -4
  57. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -2
  58. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -1
  60. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +54 -5
  61. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +8 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +7 -5
  64. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +7 -5
  65. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
  66. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +14 -6
  68. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +4 -4
  69. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  70. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +16 -4
  71. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +3 -3
  72. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +3 -3
  74. package/dest/mem_pools/tx_pool_v2/index.d.ts +3 -2
  75. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool_v2/index.js +2 -1
  77. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  78. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  79. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  80. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +24 -8
  81. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  82. package/dest/mem_pools/tx_pool_v2/interfaces.js +5 -1
  83. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +70 -14
  84. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  85. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +132 -17
  86. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +12 -3
  87. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  88. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +50 -45
  89. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -4
  90. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  91. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +14 -6
  92. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +14 -5
  93. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  94. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +353 -185
  95. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  96. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  97. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  98. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  99. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  100. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  101. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  102. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  103. package/dest/msg_validators/proposal_validator/proposal_validator.js +48 -36
  104. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  105. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  106. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  107. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  108. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  109. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  110. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  111. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  112. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  113. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  114. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  115. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  116. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  117. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  119. package/dest/msg_validators/tx_validator/factory.d.ts +125 -6
  120. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  121. package/dest/msg_validators/tx_validator/factory.js +226 -58
  122. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  123. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  124. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  125. package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
  126. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  127. package/dest/msg_validators/tx_validator/gas_validator.js +104 -37
  128. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  129. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  130. package/dest/msg_validators/tx_validator/index.js +2 -0
  131. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  132. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  133. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  134. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  135. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  136. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  137. package/dest/msg_validators/tx_validator/phases_validator.d.ts +2 -2
  138. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  139. package/dest/msg_validators/tx_validator/phases_validator.js +44 -23
  140. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  141. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  143. package/dest/services/dummy_service.d.ts +9 -5
  144. package/dest/services/dummy_service.d.ts.map +1 -1
  145. package/dest/services/dummy_service.js +7 -4
  146. package/dest/services/encoding.d.ts +3 -3
  147. package/dest/services/encoding.d.ts.map +1 -1
  148. package/dest/services/encoding.js +11 -10
  149. package/dest/services/gossipsub/index.d.ts +3 -0
  150. package/dest/services/gossipsub/index.d.ts.map +1 -0
  151. package/dest/services/gossipsub/index.js +2 -0
  152. package/dest/services/gossipsub/scoring.d.ts +21 -3
  153. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  154. package/dest/services/gossipsub/scoring.js +24 -7
  155. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  156. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  157. package/dest/services/gossipsub/topic_score_params.js +346 -0
  158. package/dest/services/libp2p/libp2p_service.d.ts +25 -14
  159. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  160. package/dest/services/libp2p/libp2p_service.js +195 -153
  161. package/dest/services/peer-manager/metrics.d.ts +3 -1
  162. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  163. package/dest/services/peer-manager/metrics.js +6 -0
  164. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  165. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  166. package/dest/services/peer-manager/peer_manager.js +2 -1
  167. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  168. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  169. package/dest/services/peer-manager/peer_scoring.js +25 -2
  170. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -3
  171. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  172. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +19 -46
  173. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +2 -6
  174. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  175. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +10 -13
  176. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  177. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +25 -46
  178. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +17 -11
  179. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  180. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +49 -15
  181. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  182. package/dest/services/reqresp/interface.d.ts +10 -1
  183. package/dest/services/reqresp/interface.d.ts.map +1 -1
  184. package/dest/services/reqresp/interface.js +15 -1
  185. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +3 -3
  186. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  187. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +7 -1
  188. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  189. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +15 -0
  190. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  191. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  192. package/dest/services/reqresp/protocols/tx.js +20 -0
  193. package/dest/services/reqresp/reqresp.d.ts +1 -1
  194. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  195. package/dest/services/reqresp/reqresp.js +13 -5
  196. package/dest/services/service.d.ts +22 -3
  197. package/dest/services/service.d.ts.map +1 -1
  198. package/dest/services/tx_collection/config.d.ts +19 -1
  199. package/dest/services/tx_collection/config.d.ts.map +1 -1
  200. package/dest/services/tx_collection/config.js +46 -0
  201. package/dest/services/tx_collection/fast_tx_collection.d.ts +3 -1
  202. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  203. package/dest/services/tx_collection/fast_tx_collection.js +56 -36
  204. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  205. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  206. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  207. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  208. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  209. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  210. package/dest/services/tx_collection/index.d.ts +2 -1
  211. package/dest/services/tx_collection/index.d.ts.map +1 -1
  212. package/dest/services/tx_collection/index.js +1 -0
  213. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  214. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  215. package/dest/services/tx_collection/instrumentation.js +2 -1
  216. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  217. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  218. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  219. package/dest/services/tx_collection/proposal_tx_collector.d.ts +7 -6
  220. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  221. package/dest/services/tx_collection/proposal_tx_collector.js +5 -4
  222. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  223. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  224. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  225. package/dest/services/tx_collection/tx_collection.d.ts +23 -10
  226. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  227. package/dest/services/tx_collection/tx_collection.js +75 -3
  228. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  229. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  230. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  231. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  232. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  233. package/dest/services/tx_collection/tx_source.js +19 -2
  234. package/dest/services/tx_file_store/config.d.ts +1 -3
  235. package/dest/services/tx_file_store/config.d.ts.map +1 -1
  236. package/dest/services/tx_file_store/config.js +0 -4
  237. package/dest/services/tx_file_store/tx_file_store.d.ts +4 -3
  238. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  239. package/dest/services/tx_file_store/tx_file_store.js +9 -6
  240. package/dest/services/tx_provider.d.ts +4 -4
  241. package/dest/services/tx_provider.d.ts.map +1 -1
  242. package/dest/services/tx_provider.js +9 -8
  243. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  244. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  245. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  246. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  247. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  248. package/dest/test-helpers/mock-pubsub.js +105 -4
  249. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  250. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  251. package/dest/test-helpers/reqresp-nodes.js +4 -3
  252. package/dest/test-helpers/testbench-utils.d.ts +35 -24
  253. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  254. package/dest/test-helpers/testbench-utils.js +104 -36
  255. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  256. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  257. package/dest/testbench/p2p_client_testbench_worker.js +16 -15
  258. package/dest/testbench/worker_client_manager.d.ts +3 -1
  259. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  260. package/dest/testbench/worker_client_manager.js +6 -2
  261. package/dest/util.d.ts +3 -3
  262. package/dest/util.d.ts.map +1 -1
  263. package/package.json +14 -14
  264. package/src/client/factory.ts +79 -24
  265. package/src/client/interface.ts +43 -33
  266. package/src/client/p2p_client.ts +165 -265
  267. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +20 -11
  268. package/src/config.ts +141 -44
  269. package/src/errors/tx-pool.error.ts +12 -0
  270. package/src/index.ts +1 -0
  271. package/src/mem_pools/attestation_pool/attestation_pool.ts +100 -48
  272. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +57 -53
  273. package/src/mem_pools/attestation_pool/index.ts +3 -3
  274. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  275. package/src/mem_pools/index.ts +3 -0
  276. package/src/mem_pools/instrumentation.ts +17 -13
  277. package/src/mem_pools/interface.ts +2 -2
  278. package/src/mem_pools/tx_pool/README.md +1 -1
  279. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  280. package/src/mem_pools/tx_pool/priority.ts +6 -3
  281. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  282. package/src/mem_pools/tx_pool_v2/README.md +85 -11
  283. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  284. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +21 -8
  285. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +5 -2
  286. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +18 -4
  287. package/src/mem_pools/tx_pool_v2/eviction/index.ts +4 -0
  288. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +59 -4
  289. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +5 -5
  290. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -5
  291. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +14 -9
  292. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +33 -6
  293. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +4 -3
  294. package/src/mem_pools/tx_pool_v2/index.ts +2 -1
  295. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  296. package/src/mem_pools/tx_pool_v2/interfaces.ts +26 -8
  297. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +191 -25
  298. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +58 -45
  299. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +21 -7
  300. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +398 -183
  301. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  302. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  303. package/src/msg_validators/proposal_validator/proposal_validator.ts +63 -40
  304. package/src/msg_validators/tx_validator/README.md +115 -0
  305. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  306. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  307. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  308. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  309. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  310. package/src/msg_validators/tx_validator/factory.ts +366 -77
  311. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  312. package/src/msg_validators/tx_validator/gas_validator.ts +123 -27
  313. package/src/msg_validators/tx_validator/index.ts +2 -0
  314. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  315. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  316. package/src/msg_validators/tx_validator/phases_validator.ts +51 -26
  317. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  318. package/src/services/dummy_service.ts +12 -6
  319. package/src/services/encoding.ts +9 -9
  320. package/src/services/gossipsub/README.md +641 -0
  321. package/src/services/gossipsub/index.ts +2 -0
  322. package/src/services/gossipsub/scoring.ts +29 -5
  323. package/src/services/gossipsub/topic_score_params.ts +487 -0
  324. package/src/services/libp2p/libp2p_service.ts +206 -164
  325. package/src/services/peer-manager/metrics.ts +7 -0
  326. package/src/services/peer-manager/peer_manager.ts +2 -1
  327. package/src/services/peer-manager/peer_scoring.ts +25 -0
  328. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +20 -48
  329. package/src/services/reqresp/batch-tx-requester/interface.ts +1 -5
  330. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +23 -71
  331. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +63 -24
  332. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  333. package/src/services/reqresp/interface.ts +26 -1
  334. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +2 -2
  335. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +17 -0
  336. package/src/services/reqresp/protocols/tx.ts +22 -0
  337. package/src/services/reqresp/reqresp.ts +16 -4
  338. package/src/services/service.ts +31 -2
  339. package/src/services/tx_collection/config.ts +68 -0
  340. package/src/services/tx_collection/fast_tx_collection.ts +65 -32
  341. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  342. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  343. package/src/services/tx_collection/index.ts +1 -0
  344. package/src/services/tx_collection/instrumentation.ts +7 -1
  345. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  346. package/src/services/tx_collection/proposal_tx_collector.ts +8 -7
  347. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  348. package/src/services/tx_collection/tx_collection.ts +113 -16
  349. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  350. package/src/services/tx_collection/tx_source.ts +22 -3
  351. package/src/services/tx_file_store/config.ts +0 -6
  352. package/src/services/tx_file_store/tx_file_store.ts +10 -8
  353. package/src/services/tx_provider.ts +10 -9
  354. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  355. package/src/test-helpers/mock-pubsub.ts +146 -9
  356. package/src/test-helpers/reqresp-nodes.ts +5 -7
  357. package/src/test-helpers/testbench-utils.ts +118 -40
  358. package/src/testbench/p2p_client_testbench_worker.ts +25 -21
  359. package/src/testbench/worker_client_manager.ts +13 -5
  360. package/src/util.ts +8 -2
  361. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  362. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  363. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  364. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
@@ -4,7 +4,6 @@ import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
4
  import type { L2BlockSource } from '@aztec/stdlib/block';
5
5
  import type { ContractDataSource } from '@aztec/stdlib/contract';
6
6
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
7
- import { P2PClientType } from '@aztec/stdlib/p2p';
8
7
  import type { TelemetryClient } from '@aztec/telemetry-client';
9
8
 
10
9
  import type { GossipsubEvents, GossipsubMessage } from '@chainsafe/libp2p-gossipsub';
@@ -19,8 +18,20 @@ import {
19
18
 
20
19
  import type { P2PConfig } from '../config.js';
21
20
  import type { MemPools } from '../mem_pools/interface.js';
22
- import { DummyPeerDiscoveryService, DummyPeerManager, DummyReqResp, LibP2PService } from '../services/index.js';
23
- import type { ReqRespInterface } from '../services/reqresp/interface.js';
21
+ import { DummyPeerDiscoveryService, DummyPeerManager, LibP2PService } from '../services/index.js';
22
+ import type { P2PReqRespConfig } from '../services/reqresp/config.js';
23
+ import type { ConnectionSampler } from '../services/reqresp/connection-sampler/connection_sampler.js';
24
+ import {
25
+ type ReqRespInterface,
26
+ type ReqRespResponse,
27
+ type ReqRespSubProtocol,
28
+ type ReqRespSubProtocolHandler,
29
+ type ReqRespSubProtocolHandlers,
30
+ type ReqRespSubProtocolValidators,
31
+ type SubProtocolMap,
32
+ responseFromBuffer,
33
+ } from '../services/reqresp/interface.js';
34
+ import { ReqRespStatus } from '../services/reqresp/status.js';
24
35
  import { GossipSubEvent } from '../types/index.js';
25
36
  import type { PubSubLibp2p } from '../util.js';
26
37
 
@@ -30,11 +41,10 @@ type GossipSubService = PubSubLibp2p['services']['pubsub'];
30
41
  * Given a mock gossip sub network, returns a factory function that creates an instance LibP2PService connected to it.
31
42
  * Designed to be used in tests in P2PClientDeps.p2pServiceFactory.
32
43
  */
33
- export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
44
+ export function getMockPubSubP2PServiceFactory(
34
45
  network: MockGossipSubNetwork,
35
- ): (...args: Parameters<(typeof LibP2PService<T>)['new']>) => Promise<LibP2PService<T>> {
46
+ ): (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService> {
36
47
  return (
37
- clientType: P2PClientType,
38
48
  config: P2PConfig,
39
49
  peerId: PeerId,
40
50
  deps: {
@@ -52,10 +62,9 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
52
62
  deps.logger.verbose('Creating mock PubSub service');
53
63
  const libp2p = new MockPubSub(peerId, network);
54
64
  const peerManager = new DummyPeerManager(peerId, network);
55
- const reqresp: ReqRespInterface = new DummyReqResp();
65
+ const reqresp: ReqRespInterface = new MockReqResp(peerId, network);
56
66
  const peerDiscoveryService = new DummyPeerDiscoveryService();
57
- const service = new LibP2PService<T>(
58
- clientType as T,
67
+ const service = new LibP2PService(
59
68
  config,
60
69
  libp2p,
61
70
  peerDiscoveryService,
@@ -74,6 +83,115 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
74
83
  };
75
84
  }
76
85
 
86
+ /**
87
+ * Mock implementation of ReqRespInterface that routes requests to other peers' handlers through the mock network.
88
+ * When a peer calls sendBatchRequest, the mock iterates over network peers and invokes their registered handler
89
+ * for the sub-protocol, simulating the request-response protocol without actual libp2p streams.
90
+ */
91
+ class MockReqResp implements ReqRespInterface {
92
+ private handlers: Partial<ReqRespSubProtocolHandlers> = {};
93
+ private logger = createLogger('p2p:test:mock-reqresp');
94
+
95
+ constructor(
96
+ private peerId: PeerId,
97
+ private network: MockGossipSubNetwork,
98
+ ) {
99
+ network.registerReqRespPeer(this);
100
+ }
101
+
102
+ updateConfig(_config: Partial<P2PReqRespConfig>): void {}
103
+
104
+ start(
105
+ subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
106
+ _subProtocolValidators: ReqRespSubProtocolValidators,
107
+ ): Promise<void> {
108
+ Object.assign(this.handlers, subProtocolHandlers);
109
+ return Promise.resolve();
110
+ }
111
+
112
+ addSubProtocol(
113
+ subProtocol: ReqRespSubProtocol,
114
+ handler: ReqRespSubProtocolHandler,
115
+ _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
116
+ ): Promise<void> {
117
+ this.handlers[subProtocol] = handler;
118
+ return Promise.resolve();
119
+ }
120
+
121
+ stop(): Promise<void> {
122
+ this.handlers = {};
123
+ return Promise.resolve();
124
+ }
125
+
126
+ getHandler(subProtocol: ReqRespSubProtocol): ReqRespSubProtocolHandler | undefined {
127
+ return this.handlers[subProtocol];
128
+ }
129
+
130
+ async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
131
+ subProtocol: SubProtocol,
132
+ requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
133
+ pinnedPeer: PeerId | undefined,
134
+ _timeoutMs?: number,
135
+ _maxPeers?: number,
136
+ _maxRetryAttempts?: number,
137
+ ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
138
+ const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
139
+ const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
140
+ const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
141
+
142
+ for (const request of requests) {
143
+ const requestBuffer = request.toBuffer();
144
+ for (const peer of targetPeers) {
145
+ const handler = peer.getHandler(subProtocol);
146
+ if (!handler) {
147
+ continue;
148
+ }
149
+ try {
150
+ const responseBuffer = await handler(this.peerId, requestBuffer);
151
+ if (responseBuffer.length > 0) {
152
+ const response = responseFromBuffer(subProtocol, responseBuffer);
153
+ responses.push(response as InstanceType<SubProtocolMap[SubProtocol]['response']>);
154
+ break;
155
+ }
156
+ } catch (err) {
157
+ this.logger.debug(`Mock reqresp handler error from peer ${peer.peerId}`, { err });
158
+ }
159
+ }
160
+ }
161
+
162
+ return responses;
163
+ }
164
+
165
+ async sendRequestToPeer(
166
+ peerId: PeerId,
167
+ subProtocol: ReqRespSubProtocol,
168
+ payload: Buffer,
169
+ _dialTimeout?: number,
170
+ ): Promise<ReqRespResponse> {
171
+ const peer = this.network.getReqRespPeers().find(p => p.peerId.equals(peerId));
172
+ const handler = peer?.getHandler(subProtocol);
173
+ if (!handler) {
174
+ return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
175
+ }
176
+ try {
177
+ const data = await handler(this.peerId, payload);
178
+ return { status: ReqRespStatus.SUCCESS, data };
179
+ } catch {
180
+ return { status: ReqRespStatus.FAILURE };
181
+ }
182
+ }
183
+
184
+ getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
185
+ return {
186
+ getPeerListSortedByConnectionCountAsc: () =>
187
+ this.network
188
+ .getReqRespPeers()
189
+ .filter(p => !p.peerId.equals(this.peerId))
190
+ .map(p => p.peerId),
191
+ };
192
+ }
193
+ }
194
+
77
195
  /**
78
196
  * Implementation of PubSub services that relies on a mock gossip sub network.
79
197
  * This is used in tests to simulate a gossip sub network without needing a real P2P network.
@@ -149,6 +267,16 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
149
267
  { msgId, propagationSource, acceptance },
150
268
  );
151
269
  }
270
+
271
+ getMeshPeers(topic?: TopicStr): PeerIdStr[] {
272
+ if (topic && !this.subscribedTopics.has(topic)) {
273
+ return [];
274
+ }
275
+ return this.network
276
+ .getPeers()
277
+ .filter(peer => !this.peerId.equals(peer))
278
+ .map(peer => peer.toString());
279
+ }
152
280
  }
153
281
 
154
282
  /**
@@ -157,6 +285,7 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
157
285
  */
158
286
  export class MockGossipSubNetwork {
159
287
  private peers: MockGossipSubService[] = [];
288
+ private reqRespPeers: MockReqResp[] = [];
160
289
  private nextMsgId = 0;
161
290
 
162
291
  private logger = createLogger('p2p:test:mock-gossipsub-network');
@@ -169,6 +298,14 @@ export class MockGossipSubNetwork {
169
298
  this.peers.push(peer);
170
299
  }
171
300
 
301
+ public registerReqRespPeer(peer: MockReqResp): void {
302
+ this.reqRespPeers.push(peer);
303
+ }
304
+
305
+ public getReqRespPeers(): MockReqResp[] {
306
+ return this.reqRespPeers;
307
+ }
308
+
172
309
  public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
173
310
  const msgId = (this.nextMsgId++).toString();
174
311
  this.logger.debug(`Network is distributing message on topic ${topic}`, {
@@ -2,7 +2,6 @@ import type { EpochCache } from '@aztec/epoch-cache';
2
2
  import { timesParallel } from '@aztec/foundation/collection';
3
3
  import { SecretValue } from '@aztec/foundation/config';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
- import type { DataStoreConfig } from '@aztec/kv-store/config';
6
5
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
7
6
  import type { L2BlockSource } from '@aztec/stdlib/block';
8
7
  import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
@@ -12,7 +11,7 @@ import type {
12
11
  IVCProofVerificationResult,
13
12
  WorldStateSynchronizer,
14
13
  } from '@aztec/stdlib/interfaces/server';
15
- import type { P2PClientType } from '@aztec/stdlib/p2p';
14
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
16
15
  import type { Tx } from '@aztec/stdlib/tx';
17
16
  import { compressComponentVersions } from '@aztec/stdlib/versioning';
18
17
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
@@ -34,6 +33,7 @@ import { BootstrapNode } from '../bootstrap/bootstrap.js';
34
33
  import type { BootnodeConfig, P2PConfig } from '../config.js';
35
34
  import type { MemPools } from '../mem_pools/interface.js';
36
35
  import { DiscV5Service } from '../services/discv5/discV5_service.js';
36
+ import { APP_SPECIFIC_WEIGHT } from '../services/gossipsub/scoring.js';
37
37
  import { LibP2PService } from '../services/libp2p/libp2p_service.js';
38
38
  import { PeerManager } from '../services/peer-manager/peer_manager.js';
39
39
  import { PeerScoring } from '../services/peer-manager/peer_scoring.js';
@@ -106,8 +106,7 @@ export async function createLibp2pNode(
106
106
  *
107
107
  *
108
108
  */
109
- export async function createTestLibP2PService<T extends P2PClientType>(
110
- clientType: T,
109
+ export async function createTestLibP2PService(
111
110
  boostrapAddrs: string[] = [],
112
111
  archiver: L2BlockSource & ContractDataSource,
113
112
  worldStateSynchronizer: WorldStateSynchronizer,
@@ -154,12 +153,11 @@ export async function createTestLibP2PService<T extends P2PClientType>(
154
153
  epochCache,
155
154
  );
156
155
 
157
- p2pNode.services.pubsub.score.params.appSpecificWeight = 10;
156
+ p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
158
157
  p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
159
158
  peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
160
159
 
161
- return new LibP2PService<T>(
162
- clientType,
160
+ return new LibP2PService(
163
161
  config,
164
162
  p2pNode as PubSubLibp2p,
165
163
  discoveryService,
@@ -1,6 +1,7 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type BlockNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
3
  import type { Logger } from '@aztec/foundation/log';
4
+ import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
4
5
  import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
5
6
  import type {
6
7
  BlockProposal,
@@ -13,14 +14,16 @@ import { type BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
13
14
  import EventEmitter from 'events';
14
15
 
15
16
  import type { TryAddResult } from '../mem_pools/attestation_pool/attestation_pool.js';
16
- import type { TxPool } from '../mem_pools/tx_pool/index.js';
17
+ import type { AddTxsResult, TxPoolV2, TxPoolV2Config } from '../mem_pools/tx_pool_v2/interfaces.js';
18
+ import type { TxState } from '../mem_pools/tx_pool_v2/tx_metadata.js';
17
19
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
18
20
 
19
21
  /**
20
22
  * In-memory TxPool implementation for testing.
21
23
  * Provides basic tx storage without persistence.
24
+ * Implements TxPoolV2 interface with stub implementations for testing.
22
25
  */
23
- export class InMemoryTxPool extends EventEmitter implements TxPool {
26
+ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
24
27
  private txsByHash = new Map<string, Tx>();
25
28
  private logger: Logger | null = null;
26
29
 
@@ -54,93 +57,154 @@ export class InMemoryTxPool extends EventEmitter implements TxPool {
54
57
  this.removeAllListeners();
55
58
  }
56
59
 
57
- addTxs(txs: Tx[], opts?: { source?: string }): Promise<number> {
60
+ // === Core Operations (TxPoolV2) ===
61
+
62
+ addPendingTxs(txs: Tx[], opts?: { source?: string; feeComparisonOnly?: boolean }): Promise<AddTxsResult> {
63
+ const accepted: TxHash[] = [];
58
64
  const newTxs: Tx[] = [];
59
- let added = 0;
60
65
  for (const tx of txs) {
61
66
  const key = tx.getTxHash().toString();
62
67
  if (!this.txsByHash.has(key)) {
63
68
  newTxs.push(tx);
64
- added += 1;
69
+ accepted.push(tx.getTxHash());
65
70
  }
66
71
  this.txsByHash.set(key, tx);
67
72
  }
68
73
  if (newTxs.length > 0) {
69
74
  this.emit('txs-added', { txs: newTxs, source: opts?.source });
70
75
  }
71
- return Promise.resolve(added);
76
+ return Promise.resolve({ accepted, ignored: [], rejected: [] });
72
77
  }
73
78
 
74
- getTxByHash(hash: TxHash): Promise<Tx | undefined> {
75
- return Promise.resolve(this.txsByHash.get(hash.toString()));
79
+ canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'> {
80
+ const key = tx.getTxHash().toString();
81
+ if (this.txsByHash.has(key)) {
82
+ return Promise.resolve('ignored');
83
+ }
84
+ return Promise.resolve('accepted');
76
85
  }
77
86
 
78
- getTxsByHash(hashes: TxHash[]): Promise<(Tx | undefined)[]> {
79
- const result = hashes.map(h => this.txsByHash.get(h.toString()));
80
- const found = result.filter(tx => tx !== undefined).length;
81
- this.logger?.debug(`[TxPool] getTxsByHash: requested ${hashes.length}, found ${found}`);
82
- return Promise.resolve(result);
87
+ addProtectedTxs(txs: Tx[], _block: BlockHeader, opts?: { source?: string }): Promise<void> {
88
+ for (const tx of txs) {
89
+ const key = tx.getTxHash().toString();
90
+ this.txsByHash.set(key, tx);
91
+ }
92
+ if (txs.length > 0) {
93
+ this.emit('txs-added', { txs, source: opts?.source });
94
+ }
95
+ return Promise.resolve();
83
96
  }
84
97
 
85
- hasTxs(hashes: TxHash[]): Promise<boolean[]> {
86
- return Promise.resolve(hashes.map(h => this.txsByHash.has(h.toString())));
98
+ protectTxs(txHashes: TxHash[], _block: BlockHeader): Promise<TxHash[]> {
99
+ const notFound: TxHash[] = [];
100
+ for (const txHash of txHashes) {
101
+ if (!this.txsByHash.has(txHash.toString())) {
102
+ notFound.push(txHash);
103
+ }
104
+ }
105
+ return Promise.resolve(notFound);
87
106
  }
88
107
 
89
- hasTx(hash: TxHash): Promise<boolean> {
90
- return Promise.resolve(this.txsByHash.has(hash.toString()));
108
+ addMinedTxs(txs: Tx[], _block: BlockHeader, _opts?: { source?: string }): Promise<void> {
109
+ for (const tx of txs) {
110
+ const key = tx.getTxHash().toString();
111
+ this.txsByHash.set(key, tx);
112
+ }
113
+ return Promise.resolve();
91
114
  }
92
115
 
93
- getArchivedTxByHash(_hash: TxHash): Promise<Tx | undefined> {
94
- return Promise.resolve(undefined);
116
+ // === State Transition Handlers (TxPoolV2) ===
117
+
118
+ handleMinedBlock(_block: L2Block): Promise<void> {
119
+ return Promise.resolve();
95
120
  }
96
121
 
97
- async markAsMined(_txHashes: TxHash[], _blockHeader: BlockHeader): Promise<void> {}
122
+ prepareForSlot(_slotNumber: SlotNumber): Promise<void> {
123
+ return Promise.resolve();
124
+ }
98
125
 
99
- async markMinedAsPending(_txHashes: TxHash[], _latestBlock: BlockNumber): Promise<void> {}
126
+ handlePrunedBlocks(_latestBlock: L2BlockId, _options?: { deleteAllTxs?: boolean }): Promise<void> {
127
+ return Promise.resolve();
128
+ }
100
129
 
101
- deleteTxs(txHashes: TxHash[], _opts?: { permanently?: boolean }): Promise<void> {
130
+ handleFailedExecution(txHashes: TxHash[]): Promise<void> {
102
131
  for (const txHash of txHashes) {
103
132
  this.txsByHash.delete(txHash.toString());
104
133
  }
105
134
  return Promise.resolve();
106
135
  }
107
136
 
108
- getAllTxs(): Promise<Tx[]> {
109
- return Promise.resolve([...this.txsByHash.values()]);
137
+ handleFinalizedBlock(_block: BlockHeader): Promise<void> {
138
+ return Promise.resolve();
110
139
  }
111
140
 
112
- getAllTxHashes(): Promise<TxHash[]> {
113
- return Promise.resolve([...this.txsByHash.keys()].map(key => TxHash.fromString(key)));
141
+ // === Query Operations (TxPoolV2) ===
142
+
143
+ getTxByHash(hash: TxHash): Promise<Tx | undefined> {
144
+ return Promise.resolve(this.txsByHash.get(hash.toString()));
145
+ }
146
+
147
+ getTxsByHash(hashes: TxHash[]): Promise<(Tx | undefined)[]> {
148
+ const result = hashes.map(h => this.txsByHash.get(h.toString()));
149
+ const found = result.filter(tx => tx !== undefined).length;
150
+ this.logger?.debug(`[TxPool] getTxsByHash: requested ${hashes.length}, found ${found}`);
151
+ return Promise.resolve(result);
152
+ }
153
+
154
+ hasTxs(hashes: TxHash[]): Promise<boolean[]> {
155
+ return Promise.resolve(hashes.map(h => this.txsByHash.has(h.toString())));
156
+ }
157
+
158
+ getArchivedTxByHash(_hash: TxHash): Promise<Tx | undefined> {
159
+ return Promise.resolve(undefined);
114
160
  }
115
161
 
116
162
  getPendingTxHashes(): Promise<TxHash[]> {
117
163
  return Promise.resolve([...this.txsByHash.keys()].map(key => TxHash.fromString(key)));
118
164
  }
119
165
 
166
+ getEligiblePendingTxHashes(): Promise<TxHash[]> {
167
+ return this.getPendingTxHashes();
168
+ }
169
+
120
170
  getPendingTxCount(): Promise<number> {
121
171
  return Promise.resolve(this.txsByHash.size);
122
172
  }
123
173
 
124
- getMinedTxHashes(): Promise<[tx: TxHash, blockNumber: BlockNumber][]> {
174
+ getMinedTxHashes(): Promise<[TxHash, L2BlockId][]> {
125
175
  return Promise.resolve([]);
126
176
  }
127
177
 
128
- getTxStatus(hash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined> {
129
- return Promise.resolve(this.txsByHash.has(hash.toString()) ? 'pending' : undefined);
178
+ getMinedTxCount(): Promise<number> {
179
+ return Promise.resolve(0);
130
180
  }
131
181
 
132
- updateConfig(_config: { maxPendingTxCount?: number; archivedTxLimit?: number }): void {}
182
+ getTxStatus(hash: TxHash): Promise<TxState | 'deleted' | undefined> {
183
+ return Promise.resolve(this.txsByHash.has(hash.toString()) ? 'pending' : undefined);
184
+ }
133
185
 
134
186
  isEmpty(): Promise<boolean> {
135
187
  return Promise.resolve(this.txsByHash.size === 0);
136
188
  }
137
189
 
138
- async markTxsAsNonEvictable(_txHashes: TxHash[]): Promise<void> {}
190
+ getLowestPriorityPending(_limit: number): Promise<TxHash[]> {
191
+ return Promise.resolve([]);
192
+ }
139
193
 
140
- async clearNonEvictableTxs(): Promise<void> {}
194
+ // === Configuration (TxPoolV2) ===
141
195
 
142
- cleanupDeletedMinedTxs(_blockNumber: BlockNumber): Promise<number> {
143
- return Promise.resolve(0);
196
+ updateConfig(_config: Partial<TxPoolV2Config>): Promise<void> {
197
+ return Promise.resolve();
198
+ }
199
+
200
+ // === Lifecycle (TxPoolV2) ===
201
+
202
+ start(): Promise<void> {
203
+ return Promise.resolve();
204
+ }
205
+
206
+ stop(): Promise<void> {
207
+ return Promise.resolve();
144
208
  }
145
209
  }
146
210
 
@@ -155,10 +219,10 @@ export class InMemoryAttestationPool {
155
219
  const id = blockProposal.archive.toString();
156
220
  const alreadyExists = this.proposals.has(id);
157
221
  if (alreadyExists) {
158
- return Promise.resolve({ added: false, alreadyExists: true, totalForPosition: 1 });
222
+ return Promise.resolve({ added: false, alreadyExists: true, count: 1 });
159
223
  }
160
224
  this.proposals.set(id, blockProposal);
161
- return Promise.resolve({ added: true, alreadyExists: false, totalForPosition: 1 });
225
+ return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
162
226
  }
163
227
 
164
228
  getBlockProposal(id: string): Promise<BlockProposal | undefined> {
@@ -166,7 +230,7 @@ export class InMemoryAttestationPool {
166
230
  }
167
231
 
168
232
  tryAddCheckpointProposal(_proposal: CheckpointProposal): Promise<TryAddResult> {
169
- return Promise.resolve({ added: true, alreadyExists: false, totalForPosition: 1 });
233
+ return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
170
234
  }
171
235
 
172
236
  getCheckpointProposal(_id: string): Promise<CheckpointProposalCore | undefined> {
@@ -188,8 +252,12 @@ export class InMemoryAttestationPool {
188
252
  return Promise.resolve([]);
189
253
  }
190
254
 
191
- tryAddCheckpointAttestation(_attestation: CheckpointAttestation, _committeeSize: number): Promise<TryAddResult> {
192
- return Promise.resolve({ added: true, alreadyExists: false, totalForPosition: 1 });
255
+ tryAddCheckpointAttestation(_attestation: CheckpointAttestation): Promise<TryAddResult> {
256
+ return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
257
+ }
258
+
259
+ hasBlockProposalsForSlot(_slot: SlotNumber): Promise<boolean> {
260
+ return Promise.resolve(false);
193
261
  }
194
262
 
195
263
  isEmpty(): Promise<boolean> {
@@ -216,6 +284,16 @@ export function createMockEpochCache(): EpochCacheInterface {
216
284
  isInCommittee: () => Promise.resolve(false),
217
285
  getRegisteredValidators: () => Promise.resolve([]),
218
286
  filterInCommittee: () => Promise.resolve([]),
287
+ getL1Constants: () => ({
288
+ l1StartBlock: 0n,
289
+ l1GenesisTime: 0n,
290
+ epochDuration: 1,
291
+ slotDuration: 1,
292
+ ethereumSlotDuration: 1,
293
+ proofSubmissionEpochs: 1,
294
+ targetCommitteeSize: 48,
295
+ rollupManaLimit: Number.MAX_SAFE_INTEGER,
296
+ }),
219
297
  };
220
298
  }
221
299
 
@@ -12,14 +12,14 @@ import { Fr } from '@aztec/foundation/curves/bn254';
12
12
  import { type Logger, createLogger } from '@aztec/foundation/log';
13
13
  import { sleep } from '@aztec/foundation/sleep';
14
14
  import { DateProvider, Timer } from '@aztec/foundation/timer';
15
- import type { DataStoreConfig } from '@aztec/kv-store/config';
16
15
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
17
16
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
18
17
  import { protocolContractsHash } from '@aztec/protocol-contracts';
19
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
20
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
21
20
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
22
- import { type BlockProposal, P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
21
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
22
+ import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
23
23
  import { ChonkProof } from '@aztec/stdlib/proofs';
24
24
  import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
25
25
  import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
@@ -29,22 +29,19 @@ import type { Message, PeerId } from '@libp2p/interface';
29
29
  import { TopicValidatorResult } from '@libp2p/interface';
30
30
  import { peerIdFromString } from '@libp2p/peer-id';
31
31
 
32
- import type { P2PClient } from '../client/p2p_client.js';
32
+ import type { P2PClient } from '../client/index.js';
33
33
  import type { P2PConfig } from '../config.js';
34
34
  import { createP2PClient } from '../index.js';
35
- import type { MemPools } from '../mem_pools/interface.js';
36
- import { LibP2PService } from '../services/libp2p/libp2p_service.js';
35
+ import type { MemPools } from '../mem_pools/index.js';
36
+ import { BatchTxRequesterCollector, LibP2PService, SendBatchRequestCollector } from '../services/index.js';
37
37
  import type { PeerManager } from '../services/peer-manager/peer_manager.js';
38
38
  import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
39
39
  import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requester/tx_validator.js';
40
40
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
41
41
  import type { ReqResp } from '../services/reqresp/reqresp.js';
42
42
  import type { PeerDiscoveryService } from '../services/service.js';
43
- import {
44
- BatchTxRequesterCollector,
45
- SendBatchRequestCollector,
46
- } from '../services/tx_collection/proposal_tx_collector.js';
47
- import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
43
+ import { MissingTxsTracker } from '../services/tx_collection/missing_txs_tracker.js';
44
+ import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
48
45
  import {
49
46
  BENCHMARK_CONSTANTS,
50
47
  type CollectorType,
@@ -55,7 +52,7 @@ import {
55
52
  createMockEpochCache,
56
53
  createMockWorldStateSynchronizer,
57
54
  filterTxsByDistribution,
58
- } from '../test-helpers/testbench-utils.js';
55
+ } from '../test-helpers/index.js';
59
56
  import type { PubSubLibp2p } from '../util.js';
60
57
 
61
58
  export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
@@ -89,12 +86,11 @@ export interface BenchReadyMessage {
89
86
  }
90
87
  const txCache = new Map<number, Tx[]>();
91
88
 
92
- class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends LibP2PService<T> {
89
+ class TestLibP2PService extends LibP2PService {
93
90
  private disableTxValidation: boolean;
94
91
  private gossipMessageCount = 0;
95
92
 
96
93
  constructor(
97
- clientType: T,
98
94
  config: P2PConfig,
99
95
  node: PubSubLibp2p,
100
96
  peerDiscoveryService: PeerDiscoveryService,
@@ -110,7 +106,6 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
110
106
  disableTxValidation = true,
111
107
  ) {
112
108
  super(
113
- clientType,
114
109
  config,
115
110
  node,
116
111
  peerDiscoveryService,
@@ -144,7 +139,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
144
139
  const txHash = tx.getTxHash();
145
140
  const txHashString = txHash.toString();
146
141
  this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
147
- await this.mempools.txPool.addTxs([tx]);
142
+ await this.mempools.txPool.addPendingTxs([tx]);
148
143
  } else {
149
144
  await super.handleGossipedTx(payload, msgId, source);
150
145
  }
@@ -166,7 +161,7 @@ async function generateDeterministicTxs(txCount: number, seed: number, config: P
166
161
  return cached.slice(0, txCount);
167
162
  }
168
163
 
169
- const includeByTimestampBase = BigInt(seed);
164
+ const expirationTimestampBase = BigInt(seed);
170
165
  for (let i = cached.length; i < txCount; i++) {
171
166
  const txSeed = seed * 10000 + i;
172
167
  const tx = await mockTx(txSeed, {
@@ -182,7 +177,7 @@ async function generateDeterministicTxs(txCount: number, seed: number, config: P
182
177
  hasPublicTeardownCallRequest: false,
183
178
  publicCalldataSize: 0,
184
179
  });
185
- tx.data.includeByTimestamp = includeByTimestampBase + BigInt(i);
180
+ tx.data.expirationTimestamp = expirationTimestampBase + BigInt(i);
186
181
  await tx.recomputeHash();
187
182
  cached.push(tx);
188
183
  }
@@ -277,7 +272,12 @@ async function runAggregatorBenchmark(
277
272
  new DateProvider(),
278
273
  noopTxValidator,
279
274
  );
280
- const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
275
+ const fetchedTxs = await collector.collectTxs(
276
+ MissingTxsTracker.fromArray(txHashes),
277
+ blockProposal,
278
+ pinnedPeer,
279
+ timeoutMs,
280
+ );
281
281
  const durationMs = timer.ms();
282
282
  return {
283
283
  type: 'BENCH_RESULT',
@@ -292,7 +292,12 @@ async function runAggregatorBenchmark(
292
292
  BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
293
293
  BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
294
294
  );
295
- const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
295
+ const fetchedTxs = await collector.collectTxs(
296
+ MissingTxsTracker.fromArray(txHashes),
297
+ blockProposal,
298
+ pinnedPeer,
299
+ timeoutMs,
300
+ );
296
301
  const durationMs = timer.ms();
297
302
  return {
298
303
  type: 'BENCH_RESULT',
@@ -335,6 +340,7 @@ process.on('message', async msg => {
335
340
  const config: P2PConfig = {
336
341
  ...rawConfig,
337
342
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
343
+ priceBumpPercentage: 10n,
338
344
  } as P2PConfig;
339
345
 
340
346
  workerConfig = config;
@@ -358,7 +364,6 @@ process.on('message', async msg => {
358
364
  };
359
365
 
360
366
  const client = await createP2PClient(
361
- P2PClientType.Full,
362
367
  config as P2PConfig & DataStoreConfig,
363
368
  l2BlockSource,
364
369
  proofVerifier as ClientProtocolCircuitVerifier,
@@ -371,7 +376,6 @@ process.on('message', async msg => {
371
376
  );
372
377
 
373
378
  const testService = new TestLibP2PService(
374
- P2PClientType.Full,
375
379
  config,
376
380
  (client as any).p2pService.node,
377
381
  (client as any).p2pService.peerDiscoveryService,