@aztec/p2p 5.0.0-private.20260319 → 5.0.0-rc.2

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 (411) hide show
  1. package/README.md +4 -1
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +22 -6
  5. package/dest/client/factory.d.ts +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +33 -24
  8. package/dest/client/interface.d.ts +43 -11
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +33 -19
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +100 -44
  13. package/dest/config.d.ts +137 -107
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +64 -23
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +98 -56
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -196
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +175 -59
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +1 -1
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +17 -1
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  42. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  53. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +22 -5
  54. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +7 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +10 -0
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +8 -3
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +7 -4
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +8 -3
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  66. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +153 -111
  67. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  68. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
  70. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  71. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
  74. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  76. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
  77. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  79. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
  80. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/proposal_validator/proposal_validator.js +77 -14
  82. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  83. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  85. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  86. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  87. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  88. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  90. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  91. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  92. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  93. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  94. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  96. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  97. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/factory.js +36 -17
  99. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  100. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  102. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  103. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/index.js +2 -0
  105. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  106. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  109. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  110. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  112. package/dest/services/data_store.d.ts +1 -1
  113. package/dest/services/data_store.d.ts.map +1 -1
  114. package/dest/services/data_store.js +5 -5
  115. package/dest/services/discv5/discV5_service.d.ts +13 -2
  116. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  117. package/dest/services/discv5/discV5_service.js +119 -23
  118. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  119. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  120. package/dest/services/discv5/persisted_enr_store.js +145 -0
  121. package/dest/services/dummy_service.d.ts +15 -15
  122. package/dest/services/dummy_service.d.ts.map +1 -1
  123. package/dest/services/dummy_service.js +15 -16
  124. package/dest/services/encoding.d.ts +8 -8
  125. package/dest/services/encoding.d.ts.map +1 -1
  126. package/dest/services/encoding.js +11 -15
  127. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  128. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  129. package/dest/services/gossipsub/topic_score_params.js +4 -14
  130. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  131. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  132. package/dest/services/libp2p/instrumentation.js +14 -0
  133. package/dest/services/libp2p/libp2p_service.d.ts +44 -39
  134. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  135. package/dest/services/libp2p/libp2p_service.js +383 -278
  136. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  137. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  138. package/dest/services/peer-manager/peer_manager.js +79 -23
  139. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  140. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  141. package/dest/services/peer-manager/peer_scoring.js +102 -13
  142. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  143. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  144. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +38 -44
  145. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
  146. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  147. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  148. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  149. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  150. package/dest/services/reqresp/config.d.ts +3 -3
  151. package/dest/services/reqresp/config.d.ts.map +1 -1
  152. package/dest/services/reqresp/interface.d.ts +16 -18
  153. package/dest/services/reqresp/interface.d.ts.map +1 -1
  154. package/dest/services/reqresp/interface.js +10 -20
  155. package/dest/services/reqresp/metrics.d.ts +1 -1
  156. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  157. package/dest/services/reqresp/metrics.js +0 -1
  158. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  159. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  160. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  161. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  162. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  163. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  165. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  166. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  167. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  168. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  169. package/dest/services/reqresp/protocols/index.js +0 -1
  170. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  171. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  172. package/dest/services/reqresp/protocols/tx.js +1 -3
  173. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  174. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  175. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  176. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  177. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  178. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  179. package/dest/services/reqresp/reqresp.d.ts +7 -29
  180. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  181. package/dest/services/reqresp/reqresp.js +26 -207
  182. package/dest/services/service.d.ts +25 -12
  183. package/dest/services/service.d.ts.map +1 -1
  184. package/dest/services/tx_collection/config.d.ts +2 -23
  185. package/dest/services/tx_collection/config.d.ts.map +1 -1
  186. package/dest/services/tx_collection/config.js +2 -55
  187. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  188. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  189. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  190. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  191. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  192. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  193. package/dest/services/tx_collection/index.d.ts +2 -3
  194. package/dest/services/tx_collection/index.d.ts.map +1 -1
  195. package/dest/services/tx_collection/index.js +0 -1
  196. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  197. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  198. package/dest/services/tx_collection/instrumentation.js +0 -2
  199. package/dest/services/tx_collection/tx_collection.d.ts +35 -51
  200. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  201. package/dest/services/tx_collection/tx_collection.js +275 -119
  202. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  203. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  204. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  205. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  206. package/dest/services/tx_collection/tx_source.js +13 -8
  207. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  208. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  209. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  210. package/dest/services/tx_provider.d.ts +3 -1
  211. package/dest/services/tx_provider.d.ts.map +1 -1
  212. package/dest/services/tx_provider.js +3 -0
  213. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  214. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  215. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  216. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  217. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  218. package/dest/test-helpers/mock-pubsub.js +44 -44
  219. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  220. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  221. package/dest/test-helpers/reqresp-nodes.js +16 -18
  222. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  223. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  224. package/dest/test-helpers/test_tx_provider.js +3 -0
  225. package/dest/test-helpers/testbench-utils.d.ts +14 -14
  226. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  227. package/dest/test-helpers/testbench-utils.js +25 -13
  228. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  229. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  230. package/dest/testbench/p2p_client_testbench_worker.js +102 -41
  231. package/dest/testbench/worker_client_manager.d.ts +10 -6
  232. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  233. package/dest/testbench/worker_client_manager.js +51 -9
  234. package/dest/util.d.ts +11 -6
  235. package/dest/util.d.ts.map +1 -1
  236. package/dest/util.js +35 -14
  237. package/dest/versioning.d.ts +3 -6
  238. package/dest/versioning.d.ts.map +1 -1
  239. package/dest/versioning.js +3 -24
  240. package/package.json +16 -16
  241. package/src/bootstrap/bootstrap.ts +17 -3
  242. package/src/client/factory.ts +52 -24
  243. package/src/client/interface.ts +38 -17
  244. package/src/client/p2p_client.ts +118 -76
  245. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  246. package/src/config.ts +130 -31
  247. package/src/errors/p2p-service.error.ts +11 -0
  248. package/src/errors/reqresp.error.ts +0 -25
  249. package/src/index.ts +0 -1
  250. package/src/mem_pools/attestation_pool/attestation_pool.ts +319 -238
  251. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +198 -62
  252. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  253. package/src/mem_pools/index.ts +0 -3
  254. package/src/mem_pools/instrumentation.ts +5 -1
  255. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  256. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  257. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
  258. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  259. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  260. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  261. package/src/mem_pools/tx_pool_v2/interfaces.ts +18 -4
  262. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
  263. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +12 -0
  264. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +8 -4
  265. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +163 -117
  266. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
  267. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  268. package/src/msg_validators/proposal_validator/README.md +1 -1
  269. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  270. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  271. package/src/msg_validators/proposal_validator/proposal_validator.ts +89 -11
  272. package/src/msg_validators/tx_validator/README.md +13 -3
  273. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  274. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  275. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  276. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  277. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  278. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  279. package/src/msg_validators/tx_validator/factory.ts +44 -20
  280. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  281. package/src/msg_validators/tx_validator/index.ts +2 -0
  282. package/src/msg_validators/tx_validator/phases_validator.ts +3 -3
  283. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  284. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  285. package/src/services/data_store.ts +5 -13
  286. package/src/services/discv5/discV5_service.ts +126 -14
  287. package/src/services/discv5/persisted_enr_store.ts +158 -0
  288. package/src/services/dummy_service.ts +20 -39
  289. package/src/services/encoding.ts +11 -21
  290. package/src/services/gossipsub/README.md +33 -11
  291. package/src/services/gossipsub/topic_score_params.ts +9 -18
  292. package/src/services/libp2p/instrumentation.ts +14 -0
  293. package/src/services/libp2p/libp2p_service.ts +436 -311
  294. package/src/services/peer-manager/peer_manager.ts +86 -22
  295. package/src/services/peer-manager/peer_scoring.ts +102 -8
  296. package/src/services/reqresp/README.md +0 -14
  297. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +42 -52
  298. package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
  299. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  300. package/src/services/reqresp/config.ts +2 -2
  301. package/src/services/reqresp/interface.ts +21 -47
  302. package/src/services/reqresp/metrics.ts +0 -1
  303. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  304. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  305. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  306. package/src/services/reqresp/protocols/index.ts +0 -1
  307. package/src/services/reqresp/protocols/tx.ts +1 -3
  308. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  309. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  310. package/src/services/reqresp/reqresp.ts +29 -252
  311. package/src/services/service.ts +31 -28
  312. package/src/services/tx_collection/config.ts +3 -80
  313. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  314. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  315. package/src/services/tx_collection/index.ts +1 -6
  316. package/src/services/tx_collection/instrumentation.ts +1 -7
  317. package/src/services/tx_collection/tx_collection.ts +330 -173
  318. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  319. package/src/services/tx_collection/tx_source.ts +10 -8
  320. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  321. package/src/services/tx_provider.ts +5 -0
  322. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  323. package/src/test-helpers/mock-pubsub.ts +46 -60
  324. package/src/test-helpers/reqresp-nodes.ts +12 -22
  325. package/src/test-helpers/test_tx_provider.ts +5 -0
  326. package/src/test-helpers/testbench-utils.ts +31 -26
  327. package/src/testbench/p2p_client_testbench_worker.ts +110 -55
  328. package/src/testbench/worker_client_manager.ts +59 -20
  329. package/src/util.ts +32 -17
  330. package/src/versioning.ts +3 -33
  331. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  332. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  333. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  334. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  335. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  336. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  337. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  338. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  339. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  340. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  341. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  342. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  343. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  344. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  345. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  346. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  347. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  348. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  349. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  350. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  351. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  352. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  353. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  354. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  355. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  356. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  358. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  359. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  360. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  361. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  362. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  363. package/dest/mem_pools/tx_pool/index.js +0 -2
  364. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  365. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  366. package/dest/mem_pools/tx_pool/priority.js +0 -15
  367. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  368. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  369. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  370. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  371. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  372. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  373. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  374. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  375. package/dest/msg_validators/clock_tolerance.js +0 -38
  376. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  377. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  378. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  379. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  380. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  381. package/dest/services/reqresp/protocols/block.js +0 -32
  382. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  383. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  384. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  385. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  386. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  387. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  388. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  389. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  390. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  391. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -344
  392. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  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 -163
  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 -321
  406. package/src/msg_validators/clock_tolerance.ts +0 -52
  407. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  408. package/src/services/reqresp/protocols/block.ts +0 -37
  409. package/src/services/tx_collection/fast_tx_collection.ts +0 -361
  410. package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
  411. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -9,15 +9,13 @@ import type { ENR } from '@nethermindeth/enr';
9
9
 
10
10
  import type { P2PConfig } from '../config.js';
11
11
  import type { AuthRequest, StatusMessage } from '../services/index.js';
12
- import type {
13
- ReqRespSubProtocol,
14
- ReqRespSubProtocolHandler,
15
- ReqRespSubProtocolValidators,
16
- } from '../services/reqresp/interface.js';
12
+ import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
17
13
  import type {
18
14
  DuplicateAttestationInfo,
19
15
  DuplicateProposalInfo,
16
+ OversizedProposalInfo,
20
17
  P2PBlockReceivedCallback,
18
+ P2PCheckpointAttestationCallback,
21
19
  P2PCheckpointReceivedCallback,
22
20
  } from '../services/service.js';
23
21
 
@@ -82,7 +80,15 @@ export type P2P = P2PClient & {
82
80
  *
83
81
  * @param handler - A function taking a received checkpoint proposal and producing attestations
84
82
  */
85
- registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
83
+ registerValidatorCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
84
+
85
+ /**
86
+ * Registers a callback that runs for ALL nodes (not just validators) when a checkpoint proposal is received.
87
+ * Used to set the proposed checkpoint number on the archiver so the sequencer can build on top of it.
88
+ *
89
+ * @param handler - A function taking a received checkpoint proposal
90
+ */
91
+ registerAllNodesCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
86
92
 
87
93
  /**
88
94
  * Registers a callback invoked when a duplicate proposal is detected (equivocation).
@@ -92,6 +98,14 @@ export type P2P = P2PClient & {
92
98
  */
93
99
  registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void;
94
100
 
101
+ /**
102
+ * Registers a callback invoked when an oversized block proposal (index at or beyond the consensus
103
+ * per-checkpoint block limit) is stored and re-broadcast as slashing evidence.
104
+ *
105
+ * @param callback - Function called with info about the oversized proposal
106
+ */
107
+ registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void;
108
+
95
109
  /**
96
110
  * Registers a callback invoked when a duplicate attestation is detected (equivocation).
97
111
  * A validator signing attestations for different proposals at the same slot.
@@ -101,6 +115,9 @@ export type P2P = P2PClient & {
101
115
  */
102
116
  registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
103
117
 
118
+ /** Registers a callback invoked when a valid checkpoint attestation is accepted into the pool. */
119
+ registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
120
+
104
121
  /**
105
122
  * Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
106
123
  * @param tx - The transaction.
@@ -116,16 +133,18 @@ export type P2P = P2PClient & {
116
133
  /**
117
134
  * Returns a transaction in the transaction pool by its hash.
118
135
  * @param txHash - Hash of tx to return.
136
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
119
137
  * @returns A single tx or undefined.
120
138
  */
121
- getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined>;
139
+ getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined>;
122
140
 
123
141
  /**
124
142
  * Returns transactions in the transaction pool by hash.
125
143
  * @param txHashes - Hashes of txs to return.
144
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
126
145
  * @returns An array of txs or undefined.
127
146
  */
128
- getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
147
+ getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]>;
129
148
 
130
149
  /**
131
150
  * Checks if transactions exist in the pool
@@ -148,11 +167,17 @@ export type P2P = P2PClient & {
148
167
  */
149
168
  getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
150
169
 
151
- /** Returns an iterator over pending txs on the mempool. */
152
- iteratePendingTxs(): AsyncIterableIterator<Tx>;
170
+ /**
171
+ * Returns an iterator over pending txs on the mempool.
172
+ * Set `includeProof: false` to skip loading tx proofs from the DB.
173
+ */
174
+ iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx>;
153
175
 
154
- /** Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building. */
155
- iterateEligiblePendingTxs(): AsyncIterableIterator<Tx>;
176
+ /**
177
+ * Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building.
178
+ * Set `includeProof: false` to skip loading tx proofs from the DB.
179
+ */
180
+ iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx>;
156
181
 
157
182
  /** Returns the number of pending txs in the mempool. */
158
183
  getPendingTxCount(): Promise<number>;
@@ -216,11 +241,7 @@ export type P2P = P2PClient & {
216
241
  /** Clears the db. */
217
242
  clear(): Promise<void>;
218
243
 
219
- addReqRespSubProtocol(
220
- subProtocol: ReqRespSubProtocol,
221
- handler: ReqRespSubProtocolHandler,
222
- validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
223
- ): Promise<void>;
244
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
224
245
 
225
246
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
226
247
 
@@ -1,12 +1,17 @@
1
- import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
3
- import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import {
3
+ BlockNumber,
4
+ CheckpointNumber,
5
+ type CheckpointProposalHash,
6
+ SlotNumber,
7
+ } from '@aztec/foundation/branded-types';
4
8
  import { createLogger } from '@aztec/foundation/log';
5
- import { RunningPromise } from '@aztec/foundation/promise';
6
9
  import { DateProvider } from '@aztec/foundation/timer';
7
10
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
8
11
  import { L2TipsKVStore } from '@aztec/kv-store/stores';
9
12
  import {
13
+ type BlockData,
14
+ type BlockHash,
10
15
  type CheckpointId,
11
16
  type EthAddress,
12
17
  type L2Block,
@@ -14,11 +19,12 @@ import {
14
19
  type L2BlockSource,
15
20
  L2BlockStream,
16
21
  type L2BlockStreamEvent,
17
- type L2Tips,
18
22
  type L2TipsStore,
23
+ type LocalL2Tips,
19
24
  } from '@aztec/stdlib/block';
20
25
  import type { ContractDataSource } from '@aztec/stdlib/contract';
21
- import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
26
+ import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
27
+ import { type GetTxByHashOptions, type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
22
28
  import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
23
29
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
24
30
  import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
@@ -28,18 +34,15 @@ import type { ENR } from '@nethermindeth/enr';
28
34
 
29
35
  import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
30
36
  import { TxPoolError } from '../errors/tx-pool.error.js';
31
- import type { AttestationPoolApi } from '../mem_pools/attestation_pool/attestation_pool.js';
37
+ import type { AttestationPoolApi, ProposalsForSlot } from '../mem_pools/attestation_pool/attestation_pool.js';
32
38
  import type { MemPools } from '../mem_pools/interface.js';
33
39
  import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
34
40
  import type { AuthRequest, StatusMessage } from '../services/index.js';
35
- import {
36
- ReqRespSubProtocol,
37
- type ReqRespSubProtocolHandler,
38
- type ReqRespSubProtocolValidators,
39
- } from '../services/reqresp/interface.js';
41
+ import { ReqRespSubProtocol, type ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
40
42
  import type {
41
43
  DuplicateAttestationInfo,
42
44
  DuplicateProposalInfo,
45
+ OversizedProposalInfo,
43
46
  P2PBlockReceivedCallback,
44
47
  P2PCheckpointReceivedCallback,
45
48
  P2PService,
@@ -80,9 +83,6 @@ export class P2PClient extends WithTracer implements P2P {
80
83
  /** Tracks the last slot for which we called prepareForSlot */
81
84
  private lastSlotProcessed: SlotNumber = SlotNumber.ZERO;
82
85
 
83
- /** Polls for slot changes and calls prepareForSlot on the tx pool */
84
- private slotMonitor: RunningPromise | undefined;
85
-
86
86
  constructor(
87
87
  private store: AztecAsyncKVStore,
88
88
  private l2BlockSource: L2BlockSource & ContractDataSource,
@@ -95,6 +95,7 @@ export class P2PClient extends WithTracer implements P2P {
95
95
  private _dateProvider: DateProvider = new DateProvider(),
96
96
  private telemetry: TelemetryClient = getTelemetryClient(),
97
97
  private log = createLogger('p2p'),
98
+ initialBlockHash: BlockHash,
98
99
  ) {
99
100
  super(telemetry, 'P2PClient');
100
101
 
@@ -110,7 +111,7 @@ export class P2PClient extends WithTracer implements P2P {
110
111
  this.telemetry,
111
112
  );
112
113
 
113
- this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
114
+ this.l2Tips = new L2TipsKVStore(store, 'p2p_client', initialBlockHash);
114
115
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
115
116
  }
116
117
 
@@ -148,7 +149,7 @@ export class P2PClient extends WithTracer implements P2P {
148
149
  this.p2pService.updateConfig(config);
149
150
  }
150
151
 
151
- public getL2Tips(): Promise<L2Tips> {
152
+ public getL2Tips(): Promise<LocalL2Tips> {
152
153
  return this.l2Tips.getL2Tips();
153
154
  }
154
155
 
@@ -164,7 +165,7 @@ export class P2PClient extends WithTracer implements P2P {
164
165
  const from = BlockNumber(oldFinalizedBlockNum + 1);
165
166
  const limit = event.block.number - from + 1;
166
167
  if (limit > 0) {
167
- const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
168
+ const oldBlocks = await this.l2BlockSource.getBlocksData({ from, limit });
168
169
  await this.handleFinalizedL2Blocks(oldBlocks);
169
170
  }
170
171
  break;
@@ -174,10 +175,12 @@ export class P2PClient extends WithTracer implements P2P {
174
175
  break;
175
176
  case 'chain-pruned':
176
177
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
177
- await this.handlePruneL2Blocks(event.block, event.checkpoint);
178
+ await this.handlePruneL2Blocks(event.block, event.checkpointed.checkpoint);
178
179
  break;
179
180
  case 'chain-checkpointed':
180
181
  break;
182
+ case 'chain-proposed':
183
+ break;
181
184
  default: {
182
185
  const _: never = event;
183
186
  break;
@@ -257,27 +260,18 @@ export class P2PClient extends WithTracer implements P2P {
257
260
  });
258
261
  }
259
262
 
260
- this.blockStream!.start();
261
- await this.txCollection.start();
263
+ // Should never happen: all branches above call initBlockStream()
264
+ if (!this.blockStream) {
265
+ throw new Error('Block stream not initialized');
266
+ }
267
+ this.blockStream.start();
262
268
  this.txFileStore?.start();
263
269
 
264
- // Start slot monitor to call prepareForSlot when the slot changes
265
- this.slotMonitor = new RunningPromise(
266
- () => this.maybeCallPrepareForSlot(),
267
- this.log,
268
- this.config.slotCheckIntervalMS,
269
- );
270
- this.slotMonitor.start();
271
-
272
270
  return this.syncPromise;
273
271
  }
274
272
 
275
- addReqRespSubProtocol(
276
- subProtocol: ReqRespSubProtocol,
277
- handler: ReqRespSubProtocolHandler,
278
- validator: ReqRespSubProtocolValidators[ReqRespSubProtocol],
279
- ): Promise<void> {
280
- return this.p2pService.addReqRespSubProtocol(subProtocol, handler, validator);
273
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
274
+ return this.p2pService.addReqRespSubProtocol(subProtocol, handler);
281
275
  }
282
276
 
283
277
  private initBlockStream(startingBlock?: BlockNumber) {
@@ -299,8 +293,6 @@ export class P2PClient extends WithTracer implements P2P {
299
293
  */
300
294
  public async stop() {
301
295
  this.log.debug('Stopping p2p client...');
302
- await this.slotMonitor?.stop();
303
- this.log.debug('Stopped slot monitor');
304
296
  await tryStop(this.txCollection);
305
297
  this.log.debug('Stopped tx collection service');
306
298
  await this.txFileStore?.stop();
@@ -319,7 +311,11 @@ export class P2PClient extends WithTracer implements P2P {
319
311
  /** Triggers a sync to the archiver. Used for testing. */
320
312
  public async sync() {
321
313
  this.initBlockStream();
322
- await this.blockStream!.sync();
314
+ // Should never happen: initBlockStream() creates blockStream if absent
315
+ if (!this.blockStream) {
316
+ throw new Error('Block stream not initialized');
317
+ }
318
+ await this.blockStream.sync();
323
319
  }
324
320
 
325
321
  @trackSpan('p2pClient.broadcastProposal', async proposal => ({
@@ -357,6 +353,19 @@ export class P2PClient extends WithTracer implements P2P {
357
353
  // Store our own last-block proposal so we can respond to req/resp requests for it.
358
354
  await this.attestationPool.tryAddBlockProposal(blockProposal);
359
355
  }
356
+ const checkpointCore = proposal.toCore();
357
+ const { count } = await this.attestationPool.tryAddCheckpointProposal(checkpointCore);
358
+ if (count > 1) {
359
+ if (this.config.broadcastEquivocatedProposals) {
360
+ this.log.warn(`Broadcasting equivocated checkpoint proposal for slot ${proposal.slotNumber}`, {
361
+ slot: proposal.slotNumber,
362
+ archive: proposal.archive.toString(),
363
+ count,
364
+ });
365
+ } else {
366
+ throw new Error(`Attempted to broadcast a duplicate checkpoint proposal for slot ${proposal.slotNumber}`);
367
+ }
368
+ }
360
369
  return this.p2pService.propagate(proposal);
361
370
  }
362
371
 
@@ -367,10 +376,10 @@ export class P2PClient extends WithTracer implements P2P {
367
376
 
368
377
  public async getCheckpointAttestationsForSlot(
369
378
  slot: SlotNumber,
370
- proposalId?: string,
379
+ proposalPayloadHash?: CheckpointProposalHash,
371
380
  ): Promise<CheckpointAttestation[]> {
372
- return await (proposalId
373
- ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)
381
+ return await (proposalPayloadHash
382
+ ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalPayloadHash)
374
383
  : this.attestationPool.getCheckpointAttestationsForSlot(slot));
375
384
  }
376
385
 
@@ -378,29 +387,49 @@ export class P2PClient extends WithTracer implements P2P {
378
387
  return this.attestationPool.addOwnCheckpointAttestations(attestations);
379
388
  }
380
389
 
390
+ public getProposalsForSlot(slot: SlotNumber): Promise<ProposalsForSlot> {
391
+ return this.attestationPool.getProposalsForSlot(slot);
392
+ }
393
+
381
394
  public hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean> {
382
395
  return this.attestationPool.hasBlockProposalsForSlot(slot);
383
396
  }
384
397
 
398
+ public hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
399
+ return this.attestationPool.hasCheckpointProposalForSlot(slot);
400
+ }
401
+
385
402
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
386
403
  // ^ This pattern is not my favorite (md)
387
404
  public registerBlockProposalHandler(handler: P2PBlockReceivedCallback): void {
388
405
  this.p2pService.registerBlockReceivedCallback(handler);
389
406
  }
390
407
 
391
- public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
392
- this.p2pService.registerCheckpointReceivedCallback(handler);
408
+ public registerValidatorCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
409
+ this.p2pService.registerValidatorCheckpointReceivedCallback(handler);
410
+ }
411
+
412
+ public registerAllNodesCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
413
+ this.p2pService.registerAllNodesCheckpointReceivedCallback(handler);
393
414
  }
394
415
 
395
416
  public registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void {
396
417
  this.p2pService.registerDuplicateProposalCallback(callback);
397
418
  }
398
419
 
420
+ public registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void {
421
+ this.p2pService.registerOversizedProposalCallback(callback);
422
+ }
423
+
399
424
  public registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void {
400
425
  this.p2pService.registerDuplicateAttestationCallback(callback);
401
426
  }
402
427
 
403
- public async getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]> {
428
+ public registerCheckpointAttestationCallback(callback: (attestation: CheckpointAttestation) => void): void {
429
+ this.p2pService.registerCheckpointAttestationCallback(callback);
430
+ }
431
+
432
+ public async getPendingTxs(limit?: number, after?: TxHash, options?: GetTxByHashOptions): Promise<Tx[]> {
404
433
  if (limit !== undefined && limit <= 0) {
405
434
  throw new TypeError('limit must be greater than 0');
406
435
  }
@@ -419,7 +448,9 @@ export class P2PClient extends WithTracer implements P2P {
419
448
  const endIndex = limit !== undefined ? startIndex + limit : undefined;
420
449
  txHashes = txHashes.slice(startIndex, endIndex);
421
450
 
422
- const maybeTxs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash)));
451
+ // This is a public-facing API (exposed via both the node and the p2p RPC), so proofs are opt-in.
452
+ const includeProof = !!options?.includeProof;
453
+ const maybeTxs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash, { includeProof })));
423
454
  return maybeTxs.filter((tx): tx is Tx => !!tx);
424
455
  }
425
456
 
@@ -427,18 +458,18 @@ export class P2PClient extends WithTracer implements P2P {
427
458
  return this.txPool.getPendingTxCount();
428
459
  }
429
460
 
430
- public async *iteratePendingTxs(): AsyncIterableIterator<Tx> {
461
+ public async *iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
431
462
  for (const txHash of await this.txPool.getPendingTxHashes()) {
432
- const tx = await this.txPool.getTxByHash(txHash);
463
+ const tx = await this.txPool.getTxByHash(txHash, opts);
433
464
  if (tx) {
434
465
  yield tx;
435
466
  }
436
467
  }
437
468
  }
438
469
 
439
- public async *iterateEligiblePendingTxs(): AsyncIterableIterator<Tx> {
470
+ public async *iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
440
471
  for (const txHash of await this.txPool.getEligiblePendingTxHashes()) {
441
- const tx = await this.txPool.getTxByHash(txHash);
472
+ const tx = await this.txPool.getTxByHash(txHash, opts);
442
473
  if (tx) {
443
474
  yield tx;
444
475
  }
@@ -448,19 +479,21 @@ export class P2PClient extends WithTracer implements P2P {
448
479
  /**
449
480
  * Returns a transaction in the transaction pool by its hash.
450
481
  * @param txHash - Hash of the transaction to look for in the pool.
482
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
451
483
  * @returns A single tx or undefined.
452
484
  */
453
- getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined> {
454
- return this.txPool.getTxByHash(txHash);
485
+ getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined> {
486
+ return this.txPool.getTxByHash(txHash, opts);
455
487
  }
456
488
 
457
489
  /**
458
490
  * Returns transactions in the transaction pool by hash.
459
491
  * @param txHashes - Hashes of the transactions to look for.
492
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
460
493
  * @returns The txs found, in the same order as the requested hashes. If a tx is not found, it will be undefined.
461
494
  */
462
- getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
463
- return this.txPool.getTxsByHash(txHashes);
495
+ getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]> {
496
+ return this.txPool.getTxsByHash(txHashes, opts);
464
497
  }
465
498
 
466
499
  hasTxsInPool(txHashes: TxHash[]): Promise<boolean[]> {
@@ -570,13 +603,10 @@ export class P2PClient extends WithTracer implements P2P {
570
603
  */
571
604
  public async getStatus(): Promise<P2PSyncState> {
572
605
  const blockNumber = await this.getSyncedLatestBlockNum();
573
- const blockHash =
574
- blockNumber === 0
575
- ? GENESIS_BLOCK_HEADER_HASH.toString()
576
- : await this.l2BlockSource
577
- .getBlockHeader(blockNumber)
578
- .then(header => header?.hash())
579
- .then(hash => hash?.toString());
606
+ const blockHash = await this.l2BlockSource
607
+ .getBlockData({ number: blockNumber })
608
+ .then(data => data?.header.hash())
609
+ .then(hash => hash?.toString());
580
610
 
581
611
  return {
582
612
  state: this.currentState,
@@ -605,15 +635,20 @@ export class P2PClient extends WithTracer implements P2P {
605
635
  return;
606
636
  }
607
637
 
608
- await this.handleMinedBlocks(blocks);
609
- await this.maybeCallPrepareForSlot();
610
- await this.startCollectingMissingTxs(blocks);
611
638
  const lastBlock = blocks.at(-1)!;
612
- await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
639
+ const lastSlot = lastBlock.header.getSlot();
640
+
641
+ // Mark txs mined before releasing protections: a block landing at this slot supersedes any
642
+ // protection for txs it includes, so mined-marking must run first to keep just-landed txs from
643
+ // being unprotected into pending where they could be evicted before they are recorded as mined.
644
+ await this.handleMinedBlocks(blocks);
645
+ await this.maybeCallPrepareForSlot(lastSlot);
646
+ await this.collectingMissingTxs(blocks);
647
+ await this.synchedLatestSlot.set(BigInt(lastSlot));
613
648
  }
614
649
 
615
- /** Request txs for unproven blocks so the prover node has more chances to get them. */
616
- private async startCollectingMissingTxs(blocks: L2Block[]): Promise<void> {
650
+ /** Request txs for unproven blocks so the prover node can prove. */
651
+ private async collectingMissingTxs(blocks: L2Block[]): Promise<void> {
617
652
  try {
618
653
  // TODO(#15435): If the archiver has lagged behind L1, the reported proven block number may
619
654
  // be much lower than the actual one, and it does not update until the pending chain is
@@ -621,7 +656,7 @@ export class P2PClient extends WithTracer implements P2P {
621
656
  // are already proven, but the archiver has not yet updated its state. Until this is properly
622
657
  // fixed, it is mitigated by the expiration date of collection requests, which depends on
623
658
  // the slot number of the block.
624
- const provenBlockNumber = await this.l2BlockSource.getProvenBlockNumber();
659
+ const provenBlockNumber = (await this.l2BlockSource.getBlockNumber({ tag: 'proven' })) ?? BlockNumber.ZERO;
625
660
  const unprovenBlocks = blocks.filter(block => block.number > provenBlockNumber);
626
661
  for (const block of unprovenBlocks) {
627
662
  const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
@@ -633,7 +668,17 @@ export class P2PClient extends WithTracer implements P2P {
633
668
  `Starting collection of ${missingTxHashes.length} missing txs for unproven mined block ${block.number}`,
634
669
  { missingTxHashes, blockNumber: block.number, blockHash: await block.hash().then(h => h.toString()) },
635
670
  );
636
- this.txCollection.startCollecting(block, missingTxHashes);
671
+ // Both `slashDataWithholdingToleranceSlots` and `p2pMissingTxCollectionDeadlineSlots`
672
+ // count *full slots after the block slot* — value N means collection runs until
673
+ // `slotStart(block.slot + N + 1)`. Take the larger of the two so collection never
674
+ // gives up before the data-withholding slash verdict is rendered.
675
+ const blockSlot = block.header.getSlot();
676
+ const toleranceSlots = this.config.slashDataWithholdingToleranceSlots;
677
+ const configuredSlots = this.config.p2pMissingTxCollectionDeadlineSlots ?? 0;
678
+ const deadlineSlot = SlotNumber(blockSlot + Math.max(toleranceSlots, configuredSlots) + 1);
679
+ const deadlineSeconds = getTimestampForSlot(deadlineSlot, this.epochCache.getL1Constants());
680
+ const deadline = new Date(Number(deadlineSeconds) * 1000);
681
+ await this.txCollection.collectFastForBlock(block, missingTxHashes, { deadline });
637
682
  }
638
683
  }
639
684
  } catch (err) {
@@ -646,7 +691,7 @@ export class P2PClient extends WithTracer implements P2P {
646
691
  * @param blocks - A list of finalized L2 blocks.
647
692
  * @returns Empty promise.
648
693
  */
649
- private async handleFinalizedL2Blocks(blocks: L2Block[]): Promise<void> {
694
+ private async handleFinalizedL2Blocks(blocks: BlockData[]): Promise<void> {
650
695
  if (!blocks.length) {
651
696
  return;
652
697
  }
@@ -694,16 +739,13 @@ export class P2PClient extends WithTracer implements P2P {
694
739
  return isEpochPrune;
695
740
  }
696
741
 
697
- /** Checks if the slot has changed and calls prepareForSlot if so. */
698
- private async maybeCallPrepareForSlot(): Promise<void> {
699
- // If we have a pending checkpoint available, we want to prepare the target slot - otherwise we prepare the current slot
700
- // Knowledege of pending checkpoints is in the PR above
701
- const { targetSlot } = this.epochCache.getTargetAndNextSlot();
702
- if (targetSlot <= this.lastSlotProcessed) {
742
+ /** Calls prepareForSlot for the given slot if it advances past the last slot we prepared for. */
743
+ private async maybeCallPrepareForSlot(slot: SlotNumber): Promise<void> {
744
+ if (slot <= this.lastSlotProcessed) {
703
745
  return;
704
746
  }
705
- this.lastSlotProcessed = targetSlot;
706
- await this.txPool.prepareForSlot(targetSlot);
747
+ this.lastSlotProcessed = slot;
748
+ await this.txPool.prepareForSlot(slot);
707
749
  }
708
750
 
709
751
  private async startServiceIfSynched() {