@aztec/p2p 0.0.1-commit.e2b2873ed → 0.0.1-commit.e304674f1

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 (407) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +7 -7
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +37 -30
  5. package/dest/client/interface.d.ts +22 -20
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +11 -19
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +83 -102
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +20 -10
  11. package/dest/config.d.ts +43 -15
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +91 -37
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/errors/tx-pool.error.d.ts +8 -0
  18. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  19. package/dest/errors/tx-pool.error.js +9 -0
  20. package/dest/index.d.ts +1 -2
  21. package/dest/index.d.ts.map +1 -1
  22. package/dest/index.js +0 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +7 -5
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.js +16 -6
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  27. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  28. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  30. package/dest/mem_pools/index.d.ts +1 -2
  31. package/dest/mem_pools/index.d.ts.map +1 -1
  32. package/dest/mem_pools/instrumentation.d.ts +4 -2
  33. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  34. package/dest/mem_pools/instrumentation.js +16 -14
  35. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +30 -13
  36. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  37. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +91 -20
  38. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +3 -3
  39. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +18 -9
  41. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +7 -3
  44. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +3 -3
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +12 -4
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -2
  48. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +54 -5
  51. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +8 -0
  53. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +7 -5
  54. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +7 -5
  55. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
  56. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +14 -6
  58. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +4 -4
  59. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +16 -4
  61. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +3 -3
  62. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +3 -3
  64. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
  65. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  66. package/dest/mem_pools/tx_pool_v2/index.js +1 -1
  67. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  68. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  70. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +28 -10
  71. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  72. package/dest/mem_pools/tx_pool_v2/interfaces.js +5 -1
  73. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +56 -15
  74. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  75. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +112 -19
  76. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +12 -3
  77. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  78. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +50 -45
  79. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +12 -5
  80. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  81. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +17 -6
  82. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +14 -5
  83. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  84. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +319 -147
  85. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  86. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  88. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  89. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  90. package/dest/msg_validators/clock_tolerance.js +4 -3
  91. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  92. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  93. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  94. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  95. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  97. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  98. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  99. package/dest/msg_validators/proposal_validator/proposal_validator.js +53 -41
  100. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +2 -2
  101. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  102. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  103. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  104. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  105. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  106. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  107. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  108. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  109. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  110. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  112. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  113. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  114. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  115. package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
  116. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/factory.js +247 -60
  118. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  121. package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
  122. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/gas_validator.js +112 -43
  124. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  125. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/index.js +2 -0
  127. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  128. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  130. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  131. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  132. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  133. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  134. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  136. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +2 -2
  137. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  139. package/dest/services/dummy_service.d.ts +7 -5
  140. package/dest/services/dummy_service.d.ts.map +1 -1
  141. package/dest/services/dummy_service.js +9 -5
  142. package/dest/services/encoding.d.ts +6 -2
  143. package/dest/services/encoding.d.ts.map +1 -1
  144. package/dest/services/encoding.js +16 -9
  145. package/dest/services/gossipsub/topic_score_params.d.ts +18 -6
  146. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  147. package/dest/services/gossipsub/topic_score_params.js +32 -10
  148. package/dest/services/libp2p/libp2p_service.d.ts +29 -36
  149. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  150. package/dest/services/libp2p/libp2p_service.js +213 -197
  151. package/dest/services/peer-manager/metrics.d.ts +3 -1
  152. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  153. package/dest/services/peer-manager/metrics.js +6 -0
  154. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  155. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  156. package/dest/services/peer-manager/peer_manager.js +24 -9
  157. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  158. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  159. package/dest/services/peer-manager/peer_scoring.js +32 -10
  160. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +12 -8
  161. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  162. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +83 -106
  163. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
  164. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  165. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  166. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  167. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  168. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  169. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  170. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  171. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  172. package/dest/services/reqresp/interface.d.ts +1 -9
  173. package/dest/services/reqresp/interface.d.ts.map +1 -1
  174. package/dest/services/reqresp/interface.js +0 -11
  175. package/dest/services/reqresp/metrics.d.ts +1 -1
  176. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  177. package/dest/services/reqresp/metrics.js +0 -1
  178. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  179. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  180. package/dest/services/reqresp/protocols/index.js +0 -1
  181. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  182. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  183. package/dest/services/reqresp/protocols/tx.js +1 -3
  184. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  185. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  186. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  187. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  188. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  189. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  190. package/dest/services/reqresp/reqresp.d.ts +1 -1
  191. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  192. package/dest/services/reqresp/reqresp.js +20 -11
  193. package/dest/services/service.d.ts +9 -4
  194. package/dest/services/service.d.ts.map +1 -1
  195. package/dest/services/tx_collection/config.d.ts +13 -1
  196. package/dest/services/tx_collection/config.d.ts.map +1 -1
  197. package/dest/services/tx_collection/config.js +30 -0
  198. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  199. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  200. package/dest/services/tx_collection/fast_tx_collection.js +65 -75
  201. package/dest/services/tx_collection/file_store_tx_collection.d.ts +38 -29
  202. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  203. package/dest/services/tx_collection/file_store_tx_collection.js +126 -77
  204. package/dest/services/tx_collection/file_store_tx_source.d.ts +17 -6
  205. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  206. package/dest/services/tx_collection/file_store_tx_source.js +53 -10
  207. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  208. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  209. package/dest/services/tx_collection/instrumentation.js +2 -1
  210. package/dest/services/tx_collection/proposal_tx_collector.d.ts +7 -7
  211. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  212. package/dest/services/tx_collection/proposal_tx_collector.js +5 -4
  213. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  214. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  215. package/dest/services/tx_collection/request_tracker.js +84 -0
  216. package/dest/services/tx_collection/slow_tx_collection.d.ts +5 -3
  217. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  218. package/dest/services/tx_collection/slow_tx_collection.js +17 -12
  219. package/dest/services/tx_collection/tx_collection.d.ts +9 -9
  220. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  221. package/dest/services/tx_collection/tx_collection.js +26 -10
  222. package/dest/services/tx_collection/tx_collection_sink.d.ts +6 -5
  223. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  224. package/dest/services/tx_collection/tx_collection_sink.js +13 -22
  225. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  226. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  227. package/dest/services/tx_collection/tx_source.js +26 -7
  228. package/dest/services/tx_file_store/tx_file_store.d.ts +3 -2
  229. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  230. package/dest/services/tx_file_store/tx_file_store.js +9 -6
  231. package/dest/services/tx_provider.d.ts +3 -3
  232. package/dest/services/tx_provider.d.ts.map +1 -1
  233. package/dest/services/tx_provider.js +4 -4
  234. package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
  235. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  236. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  237. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  238. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  239. package/dest/test-helpers/mock-pubsub.js +8 -2
  240. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  241. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  242. package/dest/test-helpers/reqresp-nodes.js +2 -4
  243. package/dest/test-helpers/testbench-utils.d.ts +8 -3
  244. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  245. package/dest/test-helpers/testbench-utils.js +30 -4
  246. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  247. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  248. package/dest/testbench/p2p_client_testbench_worker.js +78 -26
  249. package/dest/testbench/worker_client_manager.d.ts +10 -1
  250. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  251. package/dest/testbench/worker_client_manager.js +55 -3
  252. package/dest/util.d.ts +3 -3
  253. package/dest/util.d.ts.map +1 -1
  254. package/package.json +14 -14
  255. package/src/client/factory.ts +68 -48
  256. package/src/client/interface.ts +26 -21
  257. package/src/client/p2p_client.ts +91 -132
  258. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +33 -14
  259. package/src/config.ts +133 -43
  260. package/src/errors/p2p-service.error.ts +11 -0
  261. package/src/errors/tx-pool.error.ts +12 -0
  262. package/src/index.ts +0 -1
  263. package/src/mem_pools/attestation_pool/attestation_pool.ts +20 -9
  264. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  265. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  266. package/src/mem_pools/index.ts +0 -3
  267. package/src/mem_pools/instrumentation.ts +17 -13
  268. package/src/mem_pools/tx_pool_v2/README.md +52 -28
  269. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +109 -22
  270. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +21 -8
  271. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +7 -3
  272. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +18 -4
  273. package/src/mem_pools/tx_pool_v2/eviction/index.ts +4 -0
  274. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +59 -4
  275. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +5 -5
  276. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -5
  277. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +14 -9
  278. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +33 -6
  279. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +4 -3
  280. package/src/mem_pools/tx_pool_v2/index.ts +1 -1
  281. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  282. package/src/mem_pools/tx_pool_v2/interfaces.ts +30 -10
  283. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +163 -27
  284. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +58 -45
  285. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +34 -8
  286. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +353 -143
  287. package/src/msg_validators/attestation_validator/README.md +49 -0
  288. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  289. package/src/msg_validators/clock_tolerance.ts +4 -3
  290. package/src/msg_validators/proposal_validator/README.md +123 -0
  291. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  292. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  293. package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -45
  294. package/src/msg_validators/tx_validator/README.md +119 -0
  295. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -3
  296. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  297. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  298. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  299. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  300. package/src/msg_validators/tx_validator/factory.ts +394 -78
  301. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  302. package/src/msg_validators/tx_validator/gas_validator.ts +145 -33
  303. package/src/msg_validators/tx_validator/index.ts +2 -0
  304. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  305. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  306. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  307. package/src/msg_validators/tx_validator/timestamp_validator.ts +7 -7
  308. package/src/services/dummy_service.ts +12 -7
  309. package/src/services/encoding.ts +16 -8
  310. package/src/services/gossipsub/README.md +29 -14
  311. package/src/services/gossipsub/topic_score_params.ts +49 -13
  312. package/src/services/libp2p/libp2p_service.ts +228 -223
  313. package/src/services/peer-manager/metrics.ts +7 -0
  314. package/src/services/peer-manager/peer_manager.ts +28 -9
  315. package/src/services/peer-manager/peer_scoring.ts +27 -5
  316. package/src/services/reqresp/README.md +229 -0
  317. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  318. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +79 -112
  319. package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
  320. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  321. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  322. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  323. package/src/services/reqresp/interface.ts +0 -11
  324. package/src/services/reqresp/metrics.ts +0 -1
  325. package/src/services/reqresp/protocols/index.ts +0 -1
  326. package/src/services/reqresp/protocols/tx.ts +1 -3
  327. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  328. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  329. package/src/services/reqresp/reqresp.ts +23 -13
  330. package/src/services/service.ts +17 -3
  331. package/src/services/tx_collection/config.ts +42 -0
  332. package/src/services/tx_collection/fast_tx_collection.ts +71 -76
  333. package/src/services/tx_collection/file_store_tx_collection.ts +143 -93
  334. package/src/services/tx_collection/file_store_tx_source.ts +69 -10
  335. package/src/services/tx_collection/instrumentation.ts +7 -1
  336. package/src/services/tx_collection/proposal_tx_collector.ts +9 -13
  337. package/src/services/tx_collection/request_tracker.ts +127 -0
  338. package/src/services/tx_collection/slow_tx_collection.ts +17 -13
  339. package/src/services/tx_collection/tx_collection.ts +46 -17
  340. package/src/services/tx_collection/tx_collection_sink.ts +15 -29
  341. package/src/services/tx_collection/tx_source.ts +28 -8
  342. package/src/services/tx_file_store/tx_file_store.ts +6 -4
  343. package/src/services/tx_provider.ts +2 -2
  344. package/src/test-helpers/make-test-p2p-clients.ts +1 -3
  345. package/src/test-helpers/mock-pubsub.ts +13 -6
  346. package/src/test-helpers/reqresp-nodes.ts +3 -8
  347. package/src/test-helpers/testbench-utils.ts +41 -6
  348. package/src/testbench/p2p_client_testbench_worker.ts +89 -29
  349. package/src/testbench/worker_client_manager.ts +68 -6
  350. package/src/util.ts +8 -2
  351. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  352. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  353. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  354. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  355. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  356. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  357. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  358. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  359. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  360. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  361. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  362. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  363. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  364. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  365. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  366. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  367. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  368. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  369. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  370. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  371. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  372. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  373. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  374. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  375. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  376. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  377. package/dest/mem_pools/tx_pool/index.js +0 -2
  378. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  379. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  380. package/dest/mem_pools/tx_pool/priority.js +0 -15
  381. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  382. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  383. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  384. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  385. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  386. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  387. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  388. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  389. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  390. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  391. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  392. package/dest/services/reqresp/protocols/block.js +0 -32
  393. package/src/mem_pools/tx_pool/README.md +0 -270
  394. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  395. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  396. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  397. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  398. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  399. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  400. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  401. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  402. package/src/mem_pools/tx_pool/index.ts +0 -2
  403. package/src/mem_pools/tx_pool/priority.ts +0 -20
  404. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  405. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  406. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  407. package/src/services/reqresp/protocols/block.ts +0 -37
@@ -1,12 +1,13 @@
1
1
  import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
2
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
3
- import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
+ import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
5
  import { RunningPromise } from '@aztec/foundation/promise';
6
6
  import { DateProvider } from '@aztec/foundation/timer';
7
7
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
8
8
  import { L2TipsKVStore } from '@aztec/kv-store/stores';
9
9
  import {
10
+ type CheckpointId,
10
11
  type EthAddress,
11
12
  type L2Block,
12
13
  type L2BlockId,
@@ -17,14 +18,8 @@ import {
17
18
  type L2TipsStore,
18
19
  } from '@aztec/stdlib/block';
19
20
  import type { ContractDataSource } from '@aztec/stdlib/contract';
20
- import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
21
21
  import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
22
- import {
23
- type BlockProposal,
24
- CheckpointAttestation,
25
- type CheckpointProposal,
26
- type P2PClientType,
27
- } from '@aztec/stdlib/p2p';
22
+ import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
28
23
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
29
24
  import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
30
25
 
@@ -32,6 +27,7 @@ import type { PeerId } from '@libp2p/interface';
32
27
  import type { ENR } from '@nethermindeth/enr';
33
28
 
34
29
  import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
30
+ import { TxPoolError } from '../errors/tx-pool.error.js';
35
31
  import type { AttestationPoolApi } from '../mem_pools/attestation_pool/attestation_pool.js';
36
32
  import type { MemPools } from '../mem_pools/interface.js';
37
33
  import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
@@ -41,7 +37,6 @@ import {
41
37
  type ReqRespSubProtocolHandler,
42
38
  type ReqRespSubProtocolValidators,
43
39
  } from '../services/reqresp/interface.js';
44
- import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
45
40
  import type {
46
41
  DuplicateAttestationInfo,
47
42
  DuplicateProposalInfo,
@@ -57,10 +52,7 @@ import { type P2P, P2PClientState, type P2PSyncState } from './interface.js';
57
52
  /**
58
53
  * The P2P client implementation.
59
54
  */
60
- export class P2PClient<T extends P2PClientType = P2PClientType.Full>
61
- extends WithTracer
62
- implements P2P, P2P<P2PClientType.Prover>
63
- {
55
+ export class P2PClient extends WithTracer implements P2P {
64
56
  /** The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped. */
65
57
  private runningPromise!: Promise<void>;
66
58
 
@@ -92,7 +84,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
92
84
  private slotMonitor: RunningPromise | undefined;
93
85
 
94
86
  constructor(
95
- _clientType: T,
96
87
  private store: AztecAsyncKVStore,
97
88
  private l2BlockSource: L2BlockSource & ContractDataSource,
98
89
  mempools: MemPools,
@@ -119,27 +110,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
119
110
  this.telemetry,
120
111
  );
121
112
 
122
- // Default to collecting all txs when we see a valid proposal
123
- // This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
124
- // Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
125
- // TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
126
- // validator-client code into here so we can validate a proposal is reasonable.
127
- this.registerBlockProposalHandler(async (block, sender) => {
128
- this.log.debug(`Received block proposal from ${sender.toString()}`);
129
- // TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
130
- const constants = this.txCollection.getConstants();
131
- const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
132
- const deadline = new Date(nextSlotTimestampSeconds * 1000);
133
- const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
134
- if (!parentBlock) {
135
- this.log.debug(`Cannot collect txs for proposal as parent block not found`);
136
- return false;
137
- }
138
- const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
139
- await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
140
- return true;
141
- });
142
-
143
113
  this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
144
114
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
145
115
  }
@@ -165,6 +135,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
165
135
  return Promise.resolve(this.p2pService.getPeers(includePending));
166
136
  }
167
137
 
138
+ public getGossipMeshPeerCount(topicType: TopicType): Promise<number> {
139
+ return Promise.resolve(this.p2pService.getGossipMeshPeerCount(topicType));
140
+ }
141
+
168
142
  public getL2BlockHash(number: BlockNumber): Promise<string | undefined> {
169
143
  return this.l2Tips.getL2BlockHash(number);
170
144
  }
@@ -200,7 +174,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
200
174
  break;
201
175
  case 'chain-pruned':
202
176
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
203
- await this.handlePruneL2Blocks(event.block);
177
+ await this.handlePruneL2Blocks(event.block, event.checkpoint);
204
178
  break;
205
179
  case 'chain-checkpointed':
206
180
  break;
@@ -383,6 +357,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
383
357
  // Store our own last-block proposal so we can respond to req/resp requests for it.
384
358
  await this.attestationPool.tryAddBlockProposal(blockProposal);
385
359
  }
360
+ // Gossipsub doesn't deliver own messages, so fire the all-nodes handler locally
361
+ await this.p2pService.notifyOwnCheckpointProposal(proposal.toCore());
386
362
  return this.p2pService.propagate(proposal);
387
363
  }
388
364
 
@@ -404,14 +380,22 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
404
380
  return this.attestationPool.addOwnCheckpointAttestations(attestations);
405
381
  }
406
382
 
383
+ public hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean> {
384
+ return this.attestationPool.hasBlockProposalsForSlot(slot);
385
+ }
386
+
407
387
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
408
388
  // ^ This pattern is not my favorite (md)
409
389
  public registerBlockProposalHandler(handler: P2PBlockReceivedCallback): void {
410
390
  this.p2pService.registerBlockReceivedCallback(handler);
411
391
  }
412
392
 
413
- public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
414
- this.p2pService.registerCheckpointReceivedCallback(handler);
393
+ public registerValidatorCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
394
+ this.p2pService.registerValidatorCheckpointReceivedCallback(handler);
395
+ }
396
+
397
+ public registerAllNodesCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
398
+ this.p2pService.registerAllNodesCheckpointReceivedCallback(handler);
415
399
  }
416
400
 
417
401
  public registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void {
@@ -422,36 +406,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
422
406
  this.p2pService.registerDuplicateAttestationCallback(callback);
423
407
  }
424
408
 
425
- /**
426
- * Uses the batched Request Response protocol to request a set of transactions from the network.
427
- */
428
- private async requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<Tx[]> {
429
- const timeoutMs = 8000; // Longer timeout for now
430
- const maxRetryAttempts = 10; // Keep retrying within the timeout
431
- const requests = chunkTxHashesRequest(txHashes);
432
- const maxPeers = Math.min(Math.ceil(requests.length / 3), 10);
433
-
434
- const txBatches = await this.p2pService.sendBatchRequest(
435
- ReqRespSubProtocol.TX,
436
- requests,
437
- pinnedPeerId,
438
- timeoutMs,
439
- maxPeers,
440
- maxRetryAttempts,
441
- );
442
-
443
- const txs = txBatches.flat();
444
- if (txs.length > 0) {
445
- await this.txPool.addPendingTxs(txs);
446
- }
447
-
448
- const txHashesStr = txHashes.map(tx => tx.toString()).join(', ');
449
- this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
450
-
451
- // We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
452
- return txs;
453
- }
454
-
455
409
  public async getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]> {
456
410
  if (limit !== undefined && limit <= 0) {
457
411
  throw new TypeError('limit must be greater than 0');
@@ -488,6 +442,15 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
488
442
  }
489
443
  }
490
444
 
445
+ public async *iterateEligiblePendingTxs(): AsyncIterableIterator<Tx> {
446
+ for (const txHash of await this.txPool.getEligiblePendingTxHashes()) {
447
+ const tx = await this.txPool.getTxByHash(txHash);
448
+ if (tx) {
449
+ yield tx;
450
+ }
451
+ }
452
+ }
453
+
491
454
  /**
492
455
  * Returns a transaction in the transaction pool by its hash.
493
456
  * @param txHash - Hash of the transaction to look for in the pool.
@@ -510,49 +473,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
510
473
  return this.txPool.hasTxs(txHashes);
511
474
  }
512
475
 
513
- /**
514
- * Returns transactions in the transaction pool by hash.
515
- * If a transaction is not in the pool, it will be requested from the network.
516
- * @param txHashes - Hashes of the transactions to look for.
517
- * @returns The txs found, or undefined if not found in the order requested.
518
- */
519
- async getTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<(Tx | undefined)[]> {
520
- const txs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash)));
521
- const missingTxHashes = txs
522
- .map((tx, index) => [tx, index] as const)
523
- .filter(([tx, _index]) => !tx)
524
- .map(([_tx, index]) => txHashes[index]);
525
-
526
- if (missingTxHashes.length === 0) {
527
- return txs as Tx[];
528
- }
529
-
530
- const missingTxs = await this.requestTxsByHash(missingTxHashes, pinnedPeerId);
531
- // TODO: optimize
532
- // Merge the found txs in order
533
- const mergingTxs = txHashes.map(txHash => {
534
- // Is it in the txs list from the mempool?
535
- for (const tx of txs) {
536
- if (tx !== undefined && tx.getTxHash().equals(txHash)) {
537
- return tx;
538
- }
539
- }
540
-
541
- // Is it in the fetched missing txs?
542
- // Note: this is an O(n^2) operation, but we expect the number of missing txs to be small.
543
- for (const tx of missingTxs) {
544
- if (tx.getTxHash().equals(txHash)) {
545
- return tx;
546
- }
547
- }
548
-
549
- // Otherwise return undefined
550
- return undefined;
551
- });
552
-
553
- return mergingTxs;
554
- }
555
-
556
476
  /**
557
477
  * Returns an archived transaction in the transaction pool by its hash.
558
478
  * @param txHash - Hash of the archived transaction to look for.
@@ -569,23 +489,22 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
569
489
  **/
570
490
  public async sendTx(tx: Tx): Promise<void> {
571
491
  this.#assertIsReady();
572
- const result = await this.txPool.addPendingTxs([tx]);
492
+ const result = await this.txPool.addPendingTxs([tx], { feeComparisonOnly: true });
573
493
  if (result.accepted.length === 1) {
574
494
  await this.p2pService.propagate(tx);
575
- } else {
576
- this.log.warn(
577
- `Tx ${tx.getTxHash()} not propagated: accepted=${result.accepted.length} ignored=${result.ignored.length} rejected=${result.rejected.length}`,
578
- );
495
+ return;
579
496
  }
580
- }
581
497
 
582
- /**
583
- * Adds transactions to the pool. Does not send to peers or validate the txs.
584
- * @param txs - The transactions.
585
- **/
586
- public async addTxsToPool(txs: Tx[]): Promise<number> {
587
- this.#assertIsReady();
588
- return (await this.txPool.addPendingTxs(txs)).accepted.length;
498
+ const txHashStr = tx.getTxHash().toString();
499
+ const reason = result.errors?.get(txHashStr);
500
+ if (reason) {
501
+ this.log.warn(`Tx ${txHashStr} not added to pool: ${reason.message}`);
502
+ throw new TxPoolError(reason);
503
+ }
504
+
505
+ this.log.warn(
506
+ `Tx ${txHashStr} not propagated: accepted=${result.accepted.length} ignored=${result.ignored.length} rejected=${result.rejected.length}`,
507
+ );
589
508
  }
590
509
 
591
510
  /**
@@ -746,20 +665,60 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
746
665
 
747
666
  /**
748
667
  * Updates the tx pool after a chain prune.
668
+ * Detects epoch prunes (checkpoint number changed) and deletes all txs in that case.
749
669
  * @param latestBlock - The block ID the chain was pruned to.
670
+ * @param newCheckpoint - The checkpoint ID after the prune.
750
671
  */
751
- private async handlePruneL2Blocks(latestBlock: L2BlockId): Promise<void> {
752
- await this.txPool.handlePrunedBlocks(latestBlock);
672
+ private async handlePruneL2Blocks(latestBlock: L2BlockId, newCheckpoint: CheckpointId): Promise<void> {
673
+ const deleteAllTxs = this.config.txPoolDeleteTxsAfterReorg && (await this.isEpochPrune(newCheckpoint));
674
+ await this.txPool.handlePrunedBlocks(latestBlock, { deleteAllTxs });
675
+ }
676
+
677
+ /**
678
+ * Returns true if the prune is an epoch prune (new checkpoint number is less than old).
679
+ * If the checkpoint number stays the same or increases, the prune is within a checkpoint.
680
+ */
681
+ private async isEpochPrune(newCheckpoint: CheckpointId): Promise<boolean> {
682
+ const tips = await this.l2Tips.getL2Tips();
683
+ const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
684
+ if (oldCheckpointNumber <= CheckpointNumber.INITIAL) {
685
+ return false;
686
+ }
687
+ const newCheckpointNumber = newCheckpoint.number;
688
+ // We check that the new checkpoint number is less than the old checkpoint number in order to consider it an epoch prune.
689
+ // To be more certain that it is an epoch prune, we will check that at least 2 checkpoints were removed.
690
+ // This means we should avoid thinking checkpoints removed by L1 re-orgs are epoch prunes
691
+ const thresholdForEpochPrune = CheckpointNumber(oldCheckpointNumber - 2);
692
+ const isEpochPrune = newCheckpointNumber <= thresholdForEpochPrune;
693
+ if (isEpochPrune) {
694
+ this.log.info(`Detected epoch prune to ${newCheckpointNumber}`, {
695
+ oldCheckpointNumber,
696
+ newCheckpointNumber,
697
+ thresholdForEpochPrune,
698
+ });
699
+ }
700
+ return isEpochPrune;
753
701
  }
754
702
 
755
703
  /** Checks if the slot has changed and calls prepareForSlot if so. */
756
704
  private async maybeCallPrepareForSlot(): Promise<void> {
757
- const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
758
- if (currentSlot <= this.lastSlotProcessed) {
705
+ // If we have a proposed checkpoint available, we want to prepare the target slot - otherwise we prepare the current slot
706
+ const l2Tips = await this.l2Tips.getL2Tips();
707
+ const hasProposedCheckpoint = l2Tips.proposedCheckpoint.checkpoint.number > l2Tips.checkpointed.checkpoint.number;
708
+
709
+ let slot;
710
+ if (this.epochCache.isProposerPipeliningEnabled() && hasProposedCheckpoint) {
711
+ const { targetSlot } = this.epochCache.getTargetAndNextSlot();
712
+ slot = targetSlot;
713
+ } else {
714
+ const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
715
+ slot = currentSlot;
716
+ }
717
+ if (slot <= this.lastSlotProcessed) {
759
718
  return;
760
719
  }
761
- this.lastSlotProcessed = currentSlot;
762
- await this.txPool.prepareForSlot(currentSlot);
720
+ this.lastSlotProcessed = slot;
721
+ await this.txPool.prepareForSlot(slot);
763
722
  }
764
723
 
765
724
  private async startServiceIfSynched() {
@@ -799,8 +758,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
799
758
  this.log.debug(`Moved from state ${P2PClientState[oldState]} to ${P2PClientState[this.currentState]}`);
800
759
  }
801
760
 
802
- public validate(txs: Tx[]): Promise<void> {
803
- return this.p2pService.validate(txs);
761
+ public validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void> {
762
+ return this.p2pService.validateTxsReceivedInBlockProposal(txs);
804
763
  }
805
764
 
806
765
  /**
@@ -3,12 +3,12 @@ import { SecretValue } from '@aztec/foundation/config';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
4
  import { sleep } from '@aztec/foundation/sleep';
5
5
  import { DateProvider, Timer, executeTimeout } from '@aztec/foundation/timer';
6
- import type { DataStoreConfig } from '@aztec/kv-store/config';
7
6
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
8
7
  import type { L2BlockSource } from '@aztec/stdlib/block';
9
8
  import type { ContractDataSource } from '@aztec/stdlib/contract';
10
9
  import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
11
- import { P2PClientType, PeerErrorSeverity } from '@aztec/stdlib/p2p';
10
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
11
+ import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
12
12
  import type { Tx, TxValidationResult } from '@aztec/stdlib/tx';
13
13
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
14
14
 
@@ -16,14 +16,12 @@ import type { PeerId } from '@libp2p/interface';
16
16
  import { peerIdFromString } from '@libp2p/peer-id';
17
17
 
18
18
  import type { P2PConfig } from '../../../config.js';
19
+ import { BatchTxRequesterCollector, SendBatchRequestCollector } from '../../../services/index.js';
19
20
  import type { IBatchRequestTxValidator } from '../../../services/reqresp/batch-tx-requester/tx_validator.js';
20
21
  import { RateLimitStatus } from '../../../services/reqresp/rate-limiter/rate_limiter.js';
22
+ import { RequestTracker } from '../../../services/tx_collection/request_tracker.js';
21
23
  import {
22
- BatchTxRequesterCollector,
23
- SendBatchRequestCollector,
24
- } from '../../../services/tx_collection/proposal_tx_collector.js';
25
- import { AlwaysTrueCircuitVerifier } from '../../../test-helpers/reqresp-nodes.js';
26
- import {
24
+ AlwaysTrueCircuitVerifier,
27
25
  BENCHMARK_CONSTANTS,
28
26
  InMemoryAttestationPool,
29
27
  InMemoryTxPool,
@@ -31,7 +29,7 @@ import {
31
29
  calculateInternalTimeout,
32
30
  createMockEpochCache,
33
31
  createMockWorldStateSynchronizer,
34
- } from '../../../test-helpers/testbench-utils.js';
32
+ } from '../../../test-helpers/index.js';
35
33
  import { createP2PClient } from '../../index.js';
36
34
  import type { P2PClient } from '../../p2p_client.js';
37
35
  import {
@@ -116,7 +114,6 @@ async function startClient(config: P2PConfig, clientIndex: number) {
116
114
  };
117
115
 
118
116
  client = await createP2PClient(
119
- P2PClientType.Full,
120
117
  config as P2PConfig & DataStoreConfig,
121
118
  l2BlockSource as L2BlockSource & ContractDataSource,
122
119
  proofVerifier as ClientProtocolCircuitVerifier,
@@ -214,7 +211,12 @@ async function runCollector(cmd: Extract<WorkerCommand, { type: 'RUN_COLLECTOR'
214
211
  if (collectorType === 'batch-requester') {
215
212
  const collector = new BatchTxRequesterCollector(p2pService, logger, new DateProvider(), noopTxValidator);
216
213
  const fetched = await executeTimeout(
217
- (_signal: AbortSignal) => collector.collectTxs(parsedTxHashes, parsedProposal, pinnedPeer, internalTimeoutMs),
214
+ (_signal: AbortSignal) =>
215
+ collector.collectTxs(
216
+ RequestTracker.create(parsedTxHashes, new Date(Date.now() + internalTimeoutMs)),
217
+ parsedProposal,
218
+ pinnedPeer,
219
+ ),
218
220
  timeoutMs,
219
221
  () => new Error(`Collector timed out after ${timeoutMs}ms`),
220
222
  );
@@ -226,7 +228,12 @@ async function runCollector(cmd: Extract<WorkerCommand, { type: 'RUN_COLLECTOR'
226
228
  BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
227
229
  );
228
230
  const fetched = await executeTimeout(
229
- (_signal: AbortSignal) => collector.collectTxs(parsedTxHashes, parsedProposal, pinnedPeer, internalTimeoutMs),
231
+ (_signal: AbortSignal) =>
232
+ collector.collectTxs(
233
+ RequestTracker.create(parsedTxHashes, new Date(Date.now() + internalTimeoutMs)),
234
+ parsedProposal,
235
+ pinnedPeer,
236
+ ),
230
237
  timeoutMs,
231
238
  () => new Error(`Collector timed out after ${timeoutMs}ms`),
232
239
  );
@@ -252,9 +259,20 @@ async function stopClient() {
252
259
  attestationPool = undefined;
253
260
  }
254
261
 
262
+ function gracefulExit(code: number = 0) {
263
+ try {
264
+ if (process.connected) {
265
+ process.disconnect();
266
+ }
267
+ } catch {
268
+ // IPC channel already closed
269
+ }
270
+ setTimeout(() => process.exit(code), 5000).unref();
271
+ }
272
+
255
273
  process.on('disconnect', () => {
256
274
  ipcDisconnected = true;
257
- void stopClient().finally(() => process.exit(0));
275
+ void stopClient();
258
276
  });
259
277
 
260
278
  process.on('error', err => {
@@ -318,7 +336,7 @@ process.on('message', (msg: WorkerCommand) => {
318
336
  case 'STOP': {
319
337
  await stopClient();
320
338
  await sendMessage({ type: 'STOPPED', requestId });
321
- process.exit(0);
339
+ gracefulExit(0);
322
340
  break;
323
341
  }
324
342
  default: {
@@ -329,7 +347,8 @@ process.on('message', (msg: WorkerCommand) => {
329
347
  } catch (err: any) {
330
348
  await sendMessage({ type: 'ERROR', requestId, error: err?.message ?? String(err) });
331
349
  if (msg.type === 'START') {
332
- process.exit(1);
350
+ await stopClient();
351
+ gracefulExit(1);
333
352
  }
334
353
  }
335
354
  })();