@aztec/p2p 0.0.1-commit.358457c → 0.0.1-commit.3750d92a7

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 (348) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +5 -6
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +30 -16
  5. package/dest/client/interface.d.ts +12 -5
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +6 -5
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +47 -39
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +18 -8
  11. package/dest/config.d.ts +125 -100
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +92 -33
  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/index.d.ts +1 -2
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +0 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +7 -5
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +16 -9
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  24. package/dest/mem_pools/index.d.ts +1 -2
  25. package/dest/mem_pools/index.d.ts.map +1 -1
  26. package/dest/mem_pools/instrumentation.d.ts +4 -2
  27. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  28. package/dest/mem_pools/instrumentation.js +16 -14
  29. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  30. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  32. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  33. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  34. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
  35. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  36. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  37. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  38. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  39. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  41. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  42. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  44. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
  45. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool_v2/index.js +1 -1
  47. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
  48. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  50. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +40 -11
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +75 -19
  53. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -44
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +60 -28
  62. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  63. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  64. package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
  65. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
  66. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  67. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  68. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  69. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  70. package/dest/msg_validators/clock_tolerance.js +54 -3
  71. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +7 -4
  72. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  74. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +7 -4
  75. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  77. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +15 -8
  78. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  79. package/dest/msg_validators/proposal_validator/proposal_validator.js +67 -47
  80. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  81. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  82. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  83. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  84. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  85. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  86. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  87. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  88. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  90. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  91. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  93. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  94. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/factory.js +36 -10
  96. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  97. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  99. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  100. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/gas_validator.js +49 -17
  102. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  103. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/index.js +1 -0
  105. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  106. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  108. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  109. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  111. package/dest/services/data_store.d.ts +1 -1
  112. package/dest/services/data_store.d.ts.map +1 -1
  113. package/dest/services/data_store.js +5 -5
  114. package/dest/services/dummy_service.d.ts +6 -3
  115. package/dest/services/dummy_service.d.ts.map +1 -1
  116. package/dest/services/dummy_service.js +6 -1
  117. package/dest/services/encoding.d.ts +6 -2
  118. package/dest/services/encoding.d.ts.map +1 -1
  119. package/dest/services/encoding.js +14 -8
  120. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  121. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  122. package/dest/services/gossipsub/topic_score_params.js +21 -4
  123. package/dest/services/libp2p/libp2p_service.d.ts +19 -30
  124. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  125. package/dest/services/libp2p/libp2p_service.js +171 -135
  126. package/dest/services/peer-manager/metrics.d.ts +3 -1
  127. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  128. package/dest/services/peer-manager/metrics.js +6 -0
  129. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  130. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  131. package/dest/services/peer-manager/peer_manager.js +39 -11
  132. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  133. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_scoring.js +32 -10
  135. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  136. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  137. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  138. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  139. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  141. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  142. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  143. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  144. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  146. package/dest/services/reqresp/config.d.ts +3 -3
  147. package/dest/services/reqresp/config.d.ts.map +1 -1
  148. package/dest/services/reqresp/interface.d.ts +14 -9
  149. package/dest/services/reqresp/interface.d.ts.map +1 -1
  150. package/dest/services/reqresp/interface.js +10 -11
  151. package/dest/services/reqresp/metrics.d.ts +1 -1
  152. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  153. package/dest/services/reqresp/metrics.js +0 -1
  154. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  155. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  156. package/dest/services/reqresp/protocols/index.js +0 -1
  157. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  158. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  159. package/dest/services/reqresp/protocols/tx.js +1 -3
  160. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  161. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  162. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  163. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  164. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  165. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  166. package/dest/services/reqresp/reqresp.d.ts +4 -2
  167. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  168. package/dest/services/reqresp/reqresp.js +30 -12
  169. package/dest/services/service.d.ts +5 -2
  170. package/dest/services/service.d.ts.map +1 -1
  171. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  172. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  173. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  174. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  175. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  176. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  177. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  178. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  179. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  180. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  181. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  182. package/dest/services/tx_collection/request_tracker.js +84 -0
  183. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  184. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  185. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  186. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  187. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  188. package/dest/services/tx_collection/tx_source.js +9 -7
  189. package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
  190. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  191. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  192. package/dest/test-helpers/mock-pubsub.d.ts +12 -5
  193. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  194. package/dest/test-helpers/mock-pubsub.js +37 -12
  195. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  196. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  197. package/dest/test-helpers/reqresp-nodes.js +3 -4
  198. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  199. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  200. package/dest/test-helpers/testbench-utils.js +23 -3
  201. package/dest/testbench/p2p_client_testbench_worker.js +73 -21
  202. package/dest/testbench/worker_client_manager.d.ts +10 -1
  203. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  204. package/dest/testbench/worker_client_manager.js +55 -3
  205. package/dest/util.d.ts +1 -1
  206. package/package.json +14 -14
  207. package/src/client/factory.ts +51 -27
  208. package/src/client/interface.ts +12 -10
  209. package/src/client/p2p_client.ts +52 -51
  210. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +20 -11
  211. package/src/config.ts +137 -35
  212. package/src/errors/p2p-service.error.ts +11 -0
  213. package/src/index.ts +0 -1
  214. package/src/mem_pools/attestation_pool/attestation_pool.ts +17 -12
  215. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  216. package/src/mem_pools/index.ts +0 -3
  217. package/src/mem_pools/instrumentation.ts +17 -13
  218. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  219. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  220. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
  221. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  222. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  223. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  224. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  225. package/src/mem_pools/tx_pool_v2/index.ts +1 -1
  226. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  227. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +110 -22
  228. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  229. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  230. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +68 -26
  231. package/src/msg_validators/attestation_validator/README.md +49 -0
  232. package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
  233. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
  234. package/src/msg_validators/clock_tolerance.ts +72 -3
  235. package/src/msg_validators/proposal_validator/README.md +123 -0
  236. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
  237. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
  238. package/src/msg_validators/proposal_validator/proposal_validator.ts +79 -49
  239. package/src/msg_validators/tx_validator/README.md +5 -1
  240. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  241. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  242. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  243. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  244. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  245. package/src/msg_validators/tx_validator/factory.ts +43 -3
  246. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  247. package/src/msg_validators/tx_validator/gas_validator.ts +65 -16
  248. package/src/msg_validators/tx_validator/index.ts +1 -0
  249. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  250. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  251. package/src/services/data_store.ts +5 -13
  252. package/src/services/dummy_service.ts +8 -2
  253. package/src/services/encoding.ts +14 -7
  254. package/src/services/gossipsub/topic_score_params.ts +36 -4
  255. package/src/services/libp2p/libp2p_service.ts +169 -150
  256. package/src/services/peer-manager/metrics.ts +7 -0
  257. package/src/services/peer-manager/peer_manager.ts +45 -11
  258. package/src/services/peer-manager/peer_scoring.ts +27 -5
  259. package/src/services/reqresp/README.md +229 -0
  260. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  261. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  262. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  263. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  264. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  265. package/src/services/reqresp/config.ts +2 -2
  266. package/src/services/reqresp/interface.ts +21 -11
  267. package/src/services/reqresp/metrics.ts +0 -1
  268. package/src/services/reqresp/protocols/index.ts +0 -1
  269. package/src/services/reqresp/protocols/tx.ts +1 -3
  270. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  271. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  272. package/src/services/reqresp/reqresp.ts +40 -13
  273. package/src/services/service.ts +6 -1
  274. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  275. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  276. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  277. package/src/services/tx_collection/request_tracker.ts +127 -0
  278. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  279. package/src/services/tx_collection/tx_collection.ts +3 -5
  280. package/src/services/tx_collection/tx_source.ts +8 -7
  281. package/src/test-helpers/make-test-p2p-clients.ts +1 -3
  282. package/src/test-helpers/mock-pubsub.ts +34 -11
  283. package/src/test-helpers/reqresp-nodes.ts +5 -8
  284. package/src/test-helpers/testbench-utils.ts +30 -3
  285. package/src/testbench/p2p_client_testbench_worker.ts +74 -21
  286. package/src/testbench/worker_client_manager.ts +68 -6
  287. package/src/util.ts +1 -1
  288. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  289. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  290. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  291. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  292. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  293. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  294. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  295. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  296. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  297. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  298. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  299. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  300. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  301. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  302. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  303. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  304. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  305. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  306. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  307. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  308. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  309. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  310. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  311. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  312. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  313. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  314. package/dest/mem_pools/tx_pool/index.js +0 -2
  315. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  316. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  317. package/dest/mem_pools/tx_pool/priority.js +0 -15
  318. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  319. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  320. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  321. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  322. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  323. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  324. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  325. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  326. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  327. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  328. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  329. package/dest/services/reqresp/protocols/block.js +0 -32
  330. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  331. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  332. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  333. package/src/mem_pools/tx_pool/README.md +0 -270
  334. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  335. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  336. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  337. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  338. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  339. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  340. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  341. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  342. package/src/mem_pools/tx_pool/index.ts +0 -2
  343. package/src/mem_pools/tx_pool/priority.ts +0 -20
  344. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  345. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  346. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  347. package/src/services/reqresp/protocols/block.ts +0 -37
  348. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -3,13 +3,12 @@ import { BlockNumber } from '@aztec/foundation/branded-types';
3
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
4
4
  import { DateProvider } from '@aztec/foundation/timer';
5
5
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
6
- import type { DataStoreConfig } from '@aztec/kv-store/config';
7
6
  import { AztecLMDBStoreV2, createStore } from '@aztec/kv-store/lmdb-v2';
8
7
  import type { L2BlockSource } from '@aztec/stdlib/block';
9
8
  import type { ChainConfig } from '@aztec/stdlib/config';
10
9
  import type { ContractDataSource } from '@aztec/stdlib/contract';
11
10
  import type { AztecNode, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
12
- import { P2PClientType } from '@aztec/stdlib/p2p';
11
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
13
12
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
14
13
 
15
14
  import { P2PClient } from '../client/p2p_client.js';
@@ -18,7 +17,12 @@ import { AttestationPool, type AttestationPoolApi } from '../mem_pools/attestati
18
17
  import type { MemPools } from '../mem_pools/interface.js';
19
18
  import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
20
19
  import { AztecKVTxPoolV2 } from '../mem_pools/tx_pool_v2/tx_pool_v2.js';
21
- import { createTxValidatorForTransactionsEnteringPendingTxPool } from '../msg_validators/index.js';
20
+ import {
21
+ createCheckAllowedSetupCalls,
22
+ createTxValidatorForReqResponseReceivedTxs,
23
+ createTxValidatorForTransactionsEnteringPendingTxPool,
24
+ getDefaultAllowedSetupFunctions,
25
+ } from '../msg_validators/index.js';
22
26
  import { DummyP2PService } from '../services/dummy_service.js';
23
27
  import { LibP2PService } from '../services/index.js';
24
28
  import { createFileStoreTxSources } from '../services/tx_collection/file_store_tx_source.js';
@@ -27,14 +31,14 @@ import { NodeRpcTxSource, type TxSource, createNodeRpcTxSources } from '../servi
27
31
  import { TxFileStore } from '../services/tx_file_store/tx_file_store.js';
28
32
  import { configureP2PClientAddresses, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
29
33
 
30
- export type P2PClientDeps<T extends P2PClientType> = {
34
+ export type P2PClientDeps = {
31
35
  txPool?: TxPoolV2;
32
36
  store?: AztecAsyncKVStore;
33
37
  attestationPool?: AttestationPoolApi;
34
38
  logger?: Logger;
35
39
  txCollectionNodeSources?: TxSource[];
36
40
  rpcTxProviders?: AztecNode[];
37
- p2pServiceFactory?: (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService<T>>;
41
+ p2pServiceFactory?: (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService>;
38
42
  };
39
43
 
40
44
  export const P2P_STORE_NAME = 'p2p';
@@ -42,8 +46,7 @@ export const P2P_ARCHIVE_STORE_NAME = 'p2p-archive';
42
46
  export const P2P_PEER_STORE_NAME = 'p2p-peers';
43
47
  export const P2P_ATTESTATION_STORE_NAME = 'p2p-attestation';
44
48
 
45
- export async function createP2PClient<T extends P2PClientType>(
46
- clientType: T,
49
+ export async function createP2PClient(
47
50
  inputConfig: P2PConfig & DataStoreConfig & ChainConfig,
48
51
  archiver: L2BlockSource & ContractDataSource,
49
52
  proofVerifier: ClientProtocolCircuitVerifier,
@@ -52,7 +55,7 @@ export async function createP2PClient<T extends P2PClientType>(
52
55
  packageVersion: string,
53
56
  dateProvider: DateProvider = new DateProvider(),
54
57
  telemetry: TelemetryClient = getTelemetryClient(),
55
- deps: P2PClientDeps<T> = {},
58
+ deps: P2PClientDeps = {},
56
59
  ) {
57
60
  const config = await configureP2PClientAddresses({
58
61
  ...inputConfig,
@@ -77,6 +80,33 @@ export async function createP2PClient<T extends P2PClientType>(
77
80
  const rollupAddress = inputConfig.l1Contracts.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
78
81
  const txFileStoreBasePath = `aztec-${inputConfig.l1ChainId}-${inputConfig.rollupVersion}-0x${rollupAddress}`;
79
82
 
83
+ const allowedInSetup = [
84
+ ...(await getDefaultAllowedSetupFunctions()),
85
+ ...(inputConfig.txPublicSetupAllowListExtend ?? []),
86
+ ];
87
+ const checkAllowedSetupCalls = createCheckAllowedSetupCalls(
88
+ archiver,
89
+ allowedInSetup,
90
+ () => epochCache.getEpochAndSlotInNextL1Slot().ts,
91
+ );
92
+
93
+ const createTxValidator = async () => {
94
+ // We accept transactions if they are not expired by the next slot and block number (checked based on the ExpirationTimestamp field)
95
+ const currentBlockNumber = await archiver.getBlockNumber();
96
+ const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
97
+ const l1Constants = await archiver.getL1Constants();
98
+ return createTxValidatorForTransactionsEnteringPendingTxPool(
99
+ worldStateSynchronizer,
100
+ nextSlotTimestamp,
101
+ BlockNumber(currentBlockNumber + 1),
102
+ {
103
+ rollupManaLimit: l1Constants.rollupManaLimit,
104
+ maxBlockL2Gas: config.validateMaxL2BlockGas,
105
+ maxBlockDAGas: config.validateMaxDABlockGas,
106
+ },
107
+ );
108
+ };
109
+
80
110
  const txPool =
81
111
  deps.txPool ??
82
112
  new AztecKVTxPoolV2(
@@ -85,16 +115,8 @@ export async function createP2PClient<T extends P2PClientType>(
85
115
  {
86
116
  l2BlockSource: archiver,
87
117
  worldStateSynchronizer,
88
- createTxValidator: async () => {
89
- // We accept transactions if they are not expired by the next slot and block number (checked based on the ExpirationTimestamp field)
90
- const currentBlockNumber = await archiver.getBlockNumber();
91
- const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
92
- return createTxValidatorForTransactionsEnteringPendingTxPool(
93
- worldStateSynchronizer,
94
- nextSlotTimestamp,
95
- BlockNumber(currentBlockNumber + 1),
96
- );
97
- },
118
+ checkAllowedSetupCalls,
119
+ createTxValidator,
98
120
  },
99
121
  telemetry,
100
122
  {
@@ -102,6 +124,7 @@ export async function createP2PClient<T extends P2PClientType>(
102
124
  archivedTxLimit: config.archivedTxLimit,
103
125
  minTxPoolAgeMs: config.minTxPoolAgeMs,
104
126
  dropTransactionsProbability: config.dropTransactionsProbability,
127
+ priceBumpPercentage: config.priceBumpPercentage,
105
128
  },
106
129
  dateProvider,
107
130
  );
@@ -111,9 +134,8 @@ export async function createP2PClient<T extends P2PClientType>(
111
134
  attestationPool: deps.attestationPool ?? new AttestationPool(attestationStore, telemetry),
112
135
  };
113
136
 
114
- const p2pService = await createP2PService<T>(
137
+ const p2pService = await createP2PService(
115
138
  config,
116
- clientType,
117
139
  archiver,
118
140
  proofVerifier,
119
141
  worldStateSynchronizer,
@@ -127,9 +149,12 @@ export async function createP2PClient<T extends P2PClientType>(
127
149
  telemetry,
128
150
  );
129
151
 
152
+ const txValidatorForTxCollection = createTxValidatorForReqResponseReceivedTxs(proofVerifier, config);
130
153
  const nodeSources = [
131
- ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, config),
132
- ...(deps.rpcTxProviders ?? []).map((node, i) => new NodeRpcTxSource(node, `node-rpc-provider-${i}`)),
154
+ ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, txValidatorForTxCollection, config),
155
+ ...(deps.rpcTxProviders ?? []).map(
156
+ (node, i) => new NodeRpcTxSource(node, txValidatorForTxCollection, `node-rpc-provider-${i}`),
157
+ ),
133
158
  ...(deps.txCollectionNodeSources ?? []),
134
159
  ];
135
160
  if (nodeSources.length > 0) {
@@ -141,6 +166,7 @@ export async function createP2PClient<T extends P2PClientType>(
141
166
  const fileStoreSources = await createFileStoreTxSources(
142
167
  config.txCollectionFileStoreUrls,
143
168
  txFileStoreBasePath,
169
+ txValidatorForTxCollection,
144
170
  logger.createChild('file-store-tx-source'),
145
171
  telemetry,
146
172
  );
@@ -171,7 +197,6 @@ export async function createP2PClient<T extends P2PClientType>(
171
197
  );
172
198
 
173
199
  return new P2PClient(
174
- clientType,
175
200
  store,
176
201
  archiver,
177
202
  mempools,
@@ -185,9 +210,8 @@ export async function createP2PClient<T extends P2PClientType>(
185
210
  );
186
211
  }
187
212
 
188
- async function createP2PService<T extends P2PClientType>(
213
+ async function createP2PService(
189
214
  config: P2PConfig & DataStoreConfig,
190
- clientType: T,
191
215
  archiver: L2BlockSource & ContractDataSource,
192
216
  proofVerifier: ClientProtocolCircuitVerifier,
193
217
  worldStateSynchronizer: WorldStateSynchronizer,
@@ -195,7 +219,7 @@ async function createP2PService<T extends P2PClientType>(
195
219
  store: AztecAsyncKVStore,
196
220
  peerStore: AztecLMDBStoreV2,
197
221
  mempools: MemPools,
198
- p2pServiceFactory: P2PClientDeps<T>['p2pServiceFactory'],
222
+ p2pServiceFactory: P2PClientDeps['p2pServiceFactory'],
199
223
  packageVersion: string,
200
224
  logger: Logger,
201
225
  telemetry: TelemetryClient,
@@ -211,7 +235,7 @@ async function createP2PService<T extends P2PClientType>(
211
235
  const peerIdPrivateKey = await getPeerIdPrivateKey(config, store, logger);
212
236
  const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey.getValue());
213
237
 
214
- const p2pService = await (p2pServiceFactory ?? LibP2PService.new<T>)(clientType, config, peerId, {
238
+ const p2pService = await (p2pServiceFactory ?? LibP2PService.new)(config, peerId, {
215
239
  packageVersion,
216
240
  mempools,
217
241
  l2BlockSource: archiver,
@@ -1,13 +1,7 @@
1
1
  import type { SlotNumber } from '@aztec/foundation/branded-types';
2
2
  import type { EthAddress, L2BlockId } from '@aztec/stdlib/block';
3
- import type { ITxProvider, P2PApiFull } from '@aztec/stdlib/interfaces/server';
4
- import type {
5
- BlockProposal,
6
- CheckpointAttestation,
7
- CheckpointProposal,
8
- P2PClientType,
9
- TopicType,
10
- } from '@aztec/stdlib/p2p';
3
+ import type { ITxProvider, P2PClient } from '@aztec/stdlib/interfaces/server';
4
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposal, TopicType } from '@aztec/stdlib/p2p';
11
5
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
12
6
 
13
7
  import type { PeerId } from '@libp2p/interface';
@@ -54,7 +48,7 @@ export interface P2PSyncState {
54
48
  /**
55
49
  * Interface of a P2P client.
56
50
  **/
57
- export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> & {
51
+ export type P2P = P2PClient & {
58
52
  /**
59
53
  * Broadcasts a block proposal to other peers.
60
54
  *
@@ -88,7 +82,15 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
88
82
  *
89
83
  * @param handler - A function taking a received checkpoint proposal and producing attestations
90
84
  */
91
- registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
85
+ registerValidatorCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
86
+
87
+ /**
88
+ * Registers a callback that runs for ALL nodes (not just validators) when a checkpoint proposal is received.
89
+ * Used to set the proposed checkpoint number on the archiver so the sequencer can build on top of it.
90
+ *
91
+ * @param handler - A function taking a received checkpoint proposal
92
+ */
93
+ registerAllNodesCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
92
94
 
93
95
  /**
94
96
  * Registers a callback invoked when a duplicate proposal is detected (equivocation).
@@ -1,4 +1,3 @@
1
- import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
3
2
  import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
4
3
  import { createLogger } from '@aztec/foundation/log';
@@ -9,6 +8,7 @@ import { L2TipsKVStore } from '@aztec/kv-store/stores';
9
8
  import {
10
9
  type CheckpointId,
11
10
  type EthAddress,
11
+ GENESIS_BLOCK_HEADER_HASH,
12
12
  type L2Block,
13
13
  type L2BlockId,
14
14
  type L2BlockSource,
@@ -18,15 +18,8 @@ import {
18
18
  type L2TipsStore,
19
19
  } from '@aztec/stdlib/block';
20
20
  import type { ContractDataSource } from '@aztec/stdlib/contract';
21
- import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
22
21
  import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
23
- import {
24
- type BlockProposal,
25
- CheckpointAttestation,
26
- type CheckpointProposal,
27
- type P2PClientType,
28
- type TopicType,
29
- } from '@aztec/stdlib/p2p';
22
+ import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
30
23
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
31
24
  import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
32
25
 
@@ -59,10 +52,7 @@ import { type P2P, P2PClientState, type P2PSyncState } from './interface.js';
59
52
  /**
60
53
  * The P2P client implementation.
61
54
  */
62
- export class P2PClient<T extends P2PClientType = P2PClientType.Full>
63
- extends WithTracer
64
- implements P2P, P2P<P2PClientType.Prover>
65
- {
55
+ export class P2PClient extends WithTracer implements P2P {
66
56
  /** The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped. */
67
57
  private runningPromise!: Promise<void>;
68
58
 
@@ -94,7 +84,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
94
84
  private slotMonitor: RunningPromise | undefined;
95
85
 
96
86
  constructor(
97
- _clientType: T,
98
87
  private store: AztecAsyncKVStore,
99
88
  private l2BlockSource: L2BlockSource & ContractDataSource,
100
89
  mempools: MemPools,
@@ -121,27 +110,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
121
110
  this.telemetry,
122
111
  );
123
112
 
124
- // Default to collecting all txs when we see a valid proposal
125
- // This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
126
- // Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
127
- // TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
128
- // validator-client code into here so we can validate a proposal is reasonable.
129
- this.registerBlockProposalHandler(async (block, sender) => {
130
- this.log.debug(`Received block proposal from ${sender.toString()}`);
131
- // TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
132
- const constants = this.txCollection.getConstants();
133
- const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
134
- const deadline = new Date(nextSlotTimestampSeconds * 1000);
135
- const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
136
- if (!parentBlock) {
137
- this.log.debug(`Cannot collect txs for proposal as parent block not found`);
138
- return false;
139
- }
140
- const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
141
- await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
142
- return true;
143
- });
144
-
145
113
  this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
146
114
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
147
115
  }
@@ -289,7 +257,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
289
257
  });
290
258
  }
291
259
 
292
- this.blockStream!.start();
260
+ // Should never happen: all branches above call initBlockStream()
261
+ if (!this.blockStream) {
262
+ throw new Error('Block stream not initialized');
263
+ }
264
+ this.blockStream.start();
293
265
  await this.txCollection.start();
294
266
  this.txFileStore?.start();
295
267
 
@@ -351,7 +323,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
351
323
  /** Triggers a sync to the archiver. Used for testing. */
352
324
  public async sync() {
353
325
  this.initBlockStream();
354
- await this.blockStream!.sync();
326
+ // Should never happen: initBlockStream() creates blockStream if absent
327
+ if (!this.blockStream) {
328
+ throw new Error('Block stream not initialized');
329
+ }
330
+ await this.blockStream.sync();
355
331
  }
356
332
 
357
333
  @trackSpan('p2pClient.broadcastProposal', async proposal => ({
@@ -389,6 +365,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
389
365
  // Store our own last-block proposal so we can respond to req/resp requests for it.
390
366
  await this.attestationPool.tryAddBlockProposal(blockProposal);
391
367
  }
368
+ // Gossipsub doesn't deliver own messages, so fire the all-nodes handler locally
369
+ await this.p2pService.notifyOwnCheckpointProposal(proposal.toCore());
392
370
  return this.p2pService.propagate(proposal);
393
371
  }
394
372
 
@@ -420,8 +398,12 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
420
398
  this.p2pService.registerBlockReceivedCallback(handler);
421
399
  }
422
400
 
423
- public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
424
- this.p2pService.registerCheckpointReceivedCallback(handler);
401
+ public registerValidatorCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
402
+ this.p2pService.registerValidatorCheckpointReceivedCallback(handler);
403
+ }
404
+
405
+ public registerAllNodesCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
406
+ this.p2pService.registerAllNodesCheckpointReceivedCallback(handler);
425
407
  }
426
408
 
427
409
  public registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void {
@@ -701,31 +683,50 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
701
683
  }
702
684
 
703
685
  /**
704
- * Returns true if the prune crossed a checkpoint boundary.
705
- * If the old and new checkpoint numbers are the same, the prune is within a single checkpoint.
706
- * If they differ, the prune spans across checkpoints (epoch prune).
686
+ * Returns true if the prune is an epoch prune (new checkpoint number is less than old).
687
+ * If the checkpoint number stays the same or increases, the prune is within a checkpoint.
707
688
  */
708
689
  private async isEpochPrune(newCheckpoint: CheckpointId): Promise<boolean> {
709
690
  const tips = await this.l2Tips.getL2Tips();
710
691
  const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
711
- if (oldCheckpointNumber <= CheckpointNumber.ZERO) {
692
+ if (oldCheckpointNumber <= CheckpointNumber.INITIAL) {
712
693
  return false;
713
694
  }
714
- const isEpochPrune = oldCheckpointNumber !== newCheckpoint.number;
715
- this.log.info(
716
- `Detected epoch prune: ${isEpochPrune}. Old checkpoint: ${oldCheckpointNumber}, new checkpoint: ${newCheckpoint.number}`,
717
- );
695
+ const newCheckpointNumber = newCheckpoint.number;
696
+ // We check that the new checkpoint number is less than the old checkpoint number in order to consider it an epoch prune.
697
+ // To be more certain that it is an epoch prune, we will check that at least 2 checkpoints were removed.
698
+ // This means we should avoid thinking checkpoints removed by L1 re-orgs are epoch prunes
699
+ const thresholdForEpochPrune = CheckpointNumber(oldCheckpointNumber - 2);
700
+ const isEpochPrune = newCheckpointNumber <= thresholdForEpochPrune;
701
+ if (isEpochPrune) {
702
+ this.log.info(`Detected epoch prune to ${newCheckpointNumber}`, {
703
+ oldCheckpointNumber,
704
+ newCheckpointNumber,
705
+ thresholdForEpochPrune,
706
+ });
707
+ }
718
708
  return isEpochPrune;
719
709
  }
720
710
 
721
711
  /** Checks if the slot has changed and calls prepareForSlot if so. */
722
712
  private async maybeCallPrepareForSlot(): Promise<void> {
723
- const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
724
- if (currentSlot <= this.lastSlotProcessed) {
713
+ // If we have a proposed checkpoint available, we want to prepare the target slot - otherwise we prepare the current slot
714
+ const l2Tips = await this.l2Tips.getL2Tips();
715
+ const hasProposedCheckpoint = l2Tips.proposedCheckpoint.checkpoint.number > l2Tips.checkpointed.checkpoint.number;
716
+
717
+ let slot;
718
+ if (this.epochCache.isProposerPipeliningEnabled() && hasProposedCheckpoint) {
719
+ const { targetSlot } = this.epochCache.getTargetAndNextSlot();
720
+ slot = targetSlot;
721
+ } else {
722
+ const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
723
+ slot = currentSlot;
724
+ }
725
+ if (slot <= this.lastSlotProcessed) {
725
726
  return;
726
727
  }
727
- this.lastSlotProcessed = currentSlot;
728
- await this.txPool.prepareForSlot(currentSlot);
728
+ this.lastSlotProcessed = slot;
729
+ await this.txPool.prepareForSlot(slot);
729
730
  }
730
731
 
731
732
  private async startServiceIfSynched() {
@@ -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
 
@@ -19,7 +19,7 @@ import type { P2PConfig } from '../../../config.js';
19
19
  import { BatchTxRequesterCollector, SendBatchRequestCollector } from '../../../services/index.js';
20
20
  import type { IBatchRequestTxValidator } from '../../../services/reqresp/batch-tx-requester/tx_validator.js';
21
21
  import { RateLimitStatus } from '../../../services/reqresp/rate-limiter/rate_limiter.js';
22
- import { MissingTxsTracker } from '../../../services/tx_collection/missing_txs_tracker.js';
22
+ import { RequestTracker } from '../../../services/tx_collection/request_tracker.js';
23
23
  import {
24
24
  AlwaysTrueCircuitVerifier,
25
25
  BENCHMARK_CONSTANTS,
@@ -114,7 +114,6 @@ async function startClient(config: P2PConfig, clientIndex: number) {
114
114
  };
115
115
 
116
116
  client = await createP2PClient(
117
- P2PClientType.Full,
118
117
  config as P2PConfig & DataStoreConfig,
119
118
  l2BlockSource as L2BlockSource & ContractDataSource,
120
119
  proofVerifier as ClientProtocolCircuitVerifier,
@@ -214,10 +213,9 @@ async function runCollector(cmd: Extract<WorkerCommand, { type: 'RUN_COLLECTOR'
214
213
  const fetched = await executeTimeout(
215
214
  (_signal: AbortSignal) =>
216
215
  collector.collectTxs(
217
- MissingTxsTracker.fromArray(parsedTxHashes),
216
+ RequestTracker.create(parsedTxHashes, new Date(Date.now() + internalTimeoutMs)),
218
217
  parsedProposal,
219
218
  pinnedPeer,
220
- internalTimeoutMs,
221
219
  ),
222
220
  timeoutMs,
223
221
  () => new Error(`Collector timed out after ${timeoutMs}ms`),
@@ -232,10 +230,9 @@ async function runCollector(cmd: Extract<WorkerCommand, { type: 'RUN_COLLECTOR'
232
230
  const fetched = await executeTimeout(
233
231
  (_signal: AbortSignal) =>
234
232
  collector.collectTxs(
235
- MissingTxsTracker.fromArray(parsedTxHashes),
233
+ RequestTracker.create(parsedTxHashes, new Date(Date.now() + internalTimeoutMs)),
236
234
  parsedProposal,
237
235
  pinnedPeer,
238
- internalTimeoutMs,
239
236
  ),
240
237
  timeoutMs,
241
238
  () => new Error(`Collector timed out after ${timeoutMs}ms`),
@@ -262,9 +259,20 @@ async function stopClient() {
262
259
  attestationPool = undefined;
263
260
  }
264
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
+
265
273
  process.on('disconnect', () => {
266
274
  ipcDisconnected = true;
267
- void stopClient().finally(() => process.exit(0));
275
+ void stopClient();
268
276
  });
269
277
 
270
278
  process.on('error', err => {
@@ -328,7 +336,7 @@ process.on('message', (msg: WorkerCommand) => {
328
336
  case 'STOP': {
329
337
  await stopClient();
330
338
  await sendMessage({ type: 'STOPPED', requestId });
331
- process.exit(0);
339
+ gracefulExit(0);
332
340
  break;
333
341
  }
334
342
  default: {
@@ -339,7 +347,8 @@ process.on('message', (msg: WorkerCommand) => {
339
347
  } catch (err: any) {
340
348
  await sendMessage({ type: 'ERROR', requestId, error: err?.message ?? String(err) });
341
349
  if (msg.type === 'START') {
342
- process.exit(1);
350
+ await stopClient();
351
+ gracefulExit(1);
343
352
  }
344
353
  }
345
354
  })();