@aztec/p2p 0.0.1-commit.993d52e → 0.0.1-commit.9a89641

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 (473) hide show
  1. package/README.md +130 -3
  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 +5 -4
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +39 -16
  8. package/dest/client/interface.d.ts +52 -12
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +34 -19
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +120 -73
  13. package/dest/config.d.ts +160 -110
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +139 -49
  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 +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  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 +101 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +274 -197
  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 +224 -65
  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 +12 -5
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +38 -17
  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.d.ts +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +5 -4
  48. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  49. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +3 -1
  51. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  54. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -4
  60. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
  61. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +6 -7
  63. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
  64. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +6 -5
  66. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +41 -9
  67. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
  69. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +17 -8
  70. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +20 -7
  72. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  73. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +55 -41
  75. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +12 -4
  76. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +23 -6
  78. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -3
  79. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  80. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +234 -120
  81. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  82. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
  84. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  85. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  86. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  87. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +11 -5
  88. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
  90. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +11 -5
  91. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
  93. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +35 -10
  94. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/proposal_validator/proposal_validator.js +128 -56
  96. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  97. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  99. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  100. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  102. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  103. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  104. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  105. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  106. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  107. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  108. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  109. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  110. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  112. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  113. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  114. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  115. package/dest/msg_validators/tx_validator/factory.d.ts +25 -7
  116. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/factory.js +55 -16
  118. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  121. package/dest/msg_validators/tx_validator/gas_validator.d.ts +53 -7
  122. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  124. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  125. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/index.js +3 -0
  127. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  128. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  130. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  131. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  132. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  133. package/dest/msg_validators/tx_validator/timestamp_validator.js +1 -1
  134. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  135. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  137. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  138. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  139. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  140. package/dest/services/data_store.d.ts +1 -1
  141. package/dest/services/data_store.d.ts.map +1 -1
  142. package/dest/services/data_store.js +5 -5
  143. package/dest/services/discv5/discV5_service.d.ts +13 -2
  144. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  145. package/dest/services/discv5/discV5_service.js +119 -23
  146. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  147. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  148. package/dest/services/discv5/persisted_enr_store.js +145 -0
  149. package/dest/services/dummy_service.d.ts +15 -15
  150. package/dest/services/dummy_service.d.ts.map +1 -1
  151. package/dest/services/dummy_service.js +15 -16
  152. package/dest/services/encoding.d.ts +23 -6
  153. package/dest/services/encoding.d.ts.map +1 -1
  154. package/dest/services/encoding.js +32 -16
  155. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  156. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  157. package/dest/services/gossipsub/topic_score_params.js +4 -14
  158. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  159. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  160. package/dest/services/libp2p/instrumentation.js +14 -0
  161. package/dest/services/libp2p/libp2p_service.d.ts +46 -47
  162. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  163. package/dest/services/libp2p/libp2p_service.js +460 -320
  164. package/dest/services/peer-manager/metrics.d.ts +3 -1
  165. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  166. package/dest/services/peer-manager/metrics.js +6 -0
  167. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  168. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  169. package/dest/services/peer-manager/peer_manager.js +83 -26
  170. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  171. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  172. package/dest/services/peer-manager/peer_scoring.js +102 -13
  173. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
  174. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  175. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +94 -122
  176. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  177. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  178. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  179. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  180. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  181. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  182. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  183. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  184. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  185. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  186. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  187. package/dest/services/reqresp/config.d.ts +15 -3
  188. package/dest/services/reqresp/config.d.ts.map +1 -1
  189. package/dest/services/reqresp/config.js +11 -0
  190. package/dest/services/reqresp/interface.d.ts +16 -18
  191. package/dest/services/reqresp/interface.d.ts.map +1 -1
  192. package/dest/services/reqresp/interface.js +10 -20
  193. package/dest/services/reqresp/metrics.d.ts +1 -1
  194. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  195. package/dest/services/reqresp/metrics.js +0 -1
  196. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  197. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  198. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  199. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  200. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  201. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  202. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  203. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  204. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  205. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  206. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  207. package/dest/services/reqresp/protocols/index.js +0 -1
  208. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  209. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  210. package/dest/services/reqresp/protocols/tx.js +1 -3
  211. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  212. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  213. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  214. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  215. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  216. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  217. package/dest/services/reqresp/reqresp.d.ts +7 -29
  218. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  219. package/dest/services/reqresp/reqresp.js +75 -216
  220. package/dest/services/service.d.ts +29 -12
  221. package/dest/services/service.d.ts.map +1 -1
  222. package/dest/services/tx_collection/config.d.ts +2 -23
  223. package/dest/services/tx_collection/config.d.ts.map +1 -1
  224. package/dest/services/tx_collection/config.js +2 -55
  225. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  226. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  227. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  228. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  229. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  230. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  231. package/dest/services/tx_collection/index.d.ts +2 -3
  232. package/dest/services/tx_collection/index.d.ts.map +1 -1
  233. package/dest/services/tx_collection/index.js +0 -1
  234. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  235. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  236. package/dest/services/tx_collection/instrumentation.js +0 -2
  237. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  238. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  239. package/dest/services/tx_collection/request_tracker.js +84 -0
  240. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  241. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  242. package/dest/services/tx_collection/tx_collection.js +275 -119
  243. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  244. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  245. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  246. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  247. package/dest/services/tx_collection/tx_source.js +13 -8
  248. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  249. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  250. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  251. package/dest/services/tx_provider.d.ts +3 -1
  252. package/dest/services/tx_provider.d.ts.map +1 -1
  253. package/dest/services/tx_provider.js +3 -0
  254. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  255. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  256. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  257. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  258. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  259. package/dest/test-helpers/mock-pubsub.js +44 -44
  260. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  261. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  262. package/dest/test-helpers/reqresp-nodes.js +16 -18
  263. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  264. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  265. package/dest/test-helpers/test_tx_provider.js +3 -0
  266. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  267. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  268. package/dest/test-helpers/testbench-utils.js +51 -16
  269. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  270. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  271. package/dest/testbench/p2p_client_testbench_worker.js +104 -41
  272. package/dest/testbench/worker_client_manager.d.ts +12 -6
  273. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  274. package/dest/testbench/worker_client_manager.js +57 -11
  275. package/dest/util.d.ts +12 -7
  276. package/dest/util.d.ts.map +1 -1
  277. package/dest/util.js +35 -14
  278. package/dest/versioning.d.ts +3 -6
  279. package/dest/versioning.d.ts.map +1 -1
  280. package/dest/versioning.js +3 -24
  281. package/package.json +15 -16
  282. package/src/bootstrap/bootstrap.ts +17 -3
  283. package/src/client/factory.ts +62 -9
  284. package/src/client/interface.ts +48 -18
  285. package/src/client/p2p_client.ts +140 -106
  286. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  287. package/src/config.ts +241 -57
  288. package/src/errors/p2p-service.error.ts +11 -0
  289. package/src/errors/reqresp.error.ts +13 -19
  290. package/src/index.ts +0 -1
  291. package/src/mem_pools/attestation_pool/attestation_pool.ts +329 -243
  292. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
  293. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  294. package/src/mem_pools/index.ts +0 -3
  295. package/src/mem_pools/instrumentation.ts +27 -17
  296. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  297. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  298. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +4 -5
  299. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -2
  300. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  301. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
  302. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -3
  303. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -7
  304. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +5 -6
  305. package/src/mem_pools/tx_pool_v2/interfaces.ts +40 -8
  306. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +35 -13
  307. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
  308. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +36 -7
  309. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +260 -124
  310. package/src/msg_validators/attestation_validator/README.md +49 -0
  311. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
  312. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  313. package/src/msg_validators/proposal_validator/README.md +123 -0
  314. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
  315. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
  316. package/src/msg_validators/proposal_validator/proposal_validator.ts +150 -58
  317. package/src/msg_validators/tx_validator/README.md +17 -3
  318. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  319. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  320. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  321. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  322. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  323. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  324. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  325. package/src/msg_validators/tx_validator/factory.ts +66 -9
  326. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  327. package/src/msg_validators/tx_validator/gas_validator.ts +117 -39
  328. package/src/msg_validators/tx_validator/index.ts +3 -0
  329. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  330. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  331. package/src/msg_validators/tx_validator/timestamp_validator.ts +1 -1
  332. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  333. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  334. package/src/services/data_store.ts +5 -13
  335. package/src/services/discv5/discV5_service.ts +126 -14
  336. package/src/services/discv5/persisted_enr_store.ts +158 -0
  337. package/src/services/dummy_service.ts +20 -39
  338. package/src/services/encoding.ts +35 -19
  339. package/src/services/gossipsub/README.md +33 -11
  340. package/src/services/gossipsub/topic_score_params.ts +9 -18
  341. package/src/services/libp2p/instrumentation.ts +14 -0
  342. package/src/services/libp2p/libp2p_service.ts +508 -358
  343. package/src/services/peer-manager/metrics.ts +7 -0
  344. package/src/services/peer-manager/peer_manager.ts +91 -25
  345. package/src/services/peer-manager/peer_scoring.ts +102 -8
  346. package/src/services/reqresp/README.md +194 -0
  347. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  348. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +91 -137
  349. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  350. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  351. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  352. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  353. package/src/services/reqresp/config.ts +19 -2
  354. package/src/services/reqresp/interface.ts +21 -47
  355. package/src/services/reqresp/metrics.ts +0 -1
  356. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  357. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  358. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  359. package/src/services/reqresp/protocols/index.ts +0 -1
  360. package/src/services/reqresp/protocols/tx.ts +1 -3
  361. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  362. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  363. package/src/services/reqresp/reqresp.ts +87 -260
  364. package/src/services/service.ts +35 -28
  365. package/src/services/tx_collection/config.ts +3 -80
  366. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  367. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  368. package/src/services/tx_collection/index.ts +1 -6
  369. package/src/services/tx_collection/instrumentation.ts +1 -7
  370. package/src/services/tx_collection/request_tracker.ts +127 -0
  371. package/src/services/tx_collection/tx_collection.ts +331 -176
  372. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  373. package/src/services/tx_collection/tx_source.ts +10 -8
  374. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  375. package/src/services/tx_provider.ts +5 -0
  376. package/src/test-helpers/make-test-p2p-clients.ts +4 -1
  377. package/src/test-helpers/mock-pubsub.ts +46 -60
  378. package/src/test-helpers/reqresp-nodes.ts +13 -23
  379. package/src/test-helpers/test_tx_provider.ts +5 -0
  380. package/src/test-helpers/testbench-utils.ts +64 -28
  381. package/src/testbench/p2p_client_testbench_worker.ts +111 -57
  382. package/src/testbench/worker_client_manager.ts +72 -25
  383. package/src/util.ts +33 -18
  384. package/src/versioning.ts +3 -33
  385. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  386. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  387. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  388. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  389. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  390. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  391. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  392. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  393. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  394. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  395. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  396. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  397. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  398. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  399. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  400. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  401. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  402. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  403. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  404. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  405. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  406. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  407. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  408. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  409. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  410. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  411. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  412. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  413. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  414. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  415. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  416. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  417. package/dest/mem_pools/tx_pool/index.js +0 -2
  418. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  419. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  420. package/dest/mem_pools/tx_pool/priority.js +0 -15
  421. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  422. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  423. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  424. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  425. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  426. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  427. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  428. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  429. package/dest/msg_validators/clock_tolerance.js +0 -37
  430. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
  431. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  432. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
  433. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  434. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  435. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  436. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  437. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  438. package/dest/services/reqresp/protocols/block.js +0 -32
  439. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  440. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  441. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  442. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  443. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  444. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  445. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  446. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  447. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  448. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  449. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  450. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  451. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  452. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  453. package/src/mem_pools/tx_pool/README.md +0 -270
  454. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  455. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  456. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  457. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  458. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  459. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  460. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  461. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  462. package/src/mem_pools/tx_pool/index.ts +0 -2
  463. package/src/mem_pools/tx_pool/priority.ts +0 -20
  464. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  465. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  466. package/src/msg_validators/clock_tolerance.ts +0 -51
  467. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
  468. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  469. package/src/services/reqresp/protocols/block.ts +0 -37
  470. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  471. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  472. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  473. 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,15 +167,27 @@ 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>;
159
184
 
185
+ /**
186
+ * Returns whether at least `minCount` pending txs have been in the pool long enough to be eligible for block
187
+ * building. Early-exits once the threshold is met instead of counting every eligible tx.
188
+ */
189
+ hasEligiblePendingTxs(minCount: number): Promise<boolean>;
190
+
160
191
  /**
161
192
  * Protects existing transactions by hash for a given slot.
162
193
  * Returns hashes of transactions that weren't found in the pool.
@@ -210,17 +241,16 @@ export type P2P = P2PClient & {
210
241
 
211
242
  updateP2PConfig(config: Partial<P2PConfig>): Promise<void>;
212
243
 
213
- /** Validates a set of txs received in a block proposal. */
244
+ /**
245
+ * Validates a set of txs received in a block proposal.
246
+ * @throws InvalidBlockProposalTxsError - If any tx fails minimum integrity validation.
247
+ */
214
248
  validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
215
249
 
216
250
  /** Clears the db. */
217
251
  clear(): Promise<void>;
218
252
 
219
- addReqRespSubProtocol(
220
- subProtocol: ReqRespSubProtocol,
221
- handler: ReqRespSubProtocolHandler,
222
- validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
223
- ): Promise<void>;
253
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
224
254
 
225
255
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
226
256
 
@@ -1,25 +1,30 @@
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,
17
+ EventDrivenL2BlockStream,
12
18
  type L2Block,
13
19
  type L2BlockId,
14
20
  type L2BlockSource,
15
- 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
26
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
22
- import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
27
+ import { type GetTxByHashOptions, type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
23
28
  import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
24
29
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
25
30
  import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
@@ -29,18 +34,15 @@ import type { ENR } from '@nethermindeth/enr';
29
34
 
30
35
  import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
31
36
  import { TxPoolError } from '../errors/tx-pool.error.js';
32
- import type { AttestationPoolApi } from '../mem_pools/attestation_pool/attestation_pool.js';
37
+ import type { AttestationPoolApi, ProposalsForSlot } from '../mem_pools/attestation_pool/attestation_pool.js';
33
38
  import type { MemPools } from '../mem_pools/interface.js';
34
39
  import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
35
40
  import type { AuthRequest, StatusMessage } from '../services/index.js';
36
- import {
37
- ReqRespSubProtocol,
38
- type ReqRespSubProtocolHandler,
39
- type ReqRespSubProtocolValidators,
40
- } from '../services/reqresp/interface.js';
41
+ import { ReqRespSubProtocol, type ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
41
42
  import type {
42
43
  DuplicateAttestationInfo,
43
44
  DuplicateProposalInfo,
45
+ OversizedProposalInfo,
44
46
  P2PBlockReceivedCallback,
45
47
  P2PCheckpointReceivedCallback,
46
48
  P2PService,
@@ -72,7 +74,7 @@ export class P2PClient extends WithTracer implements P2P {
72
74
 
73
75
  private config: P2PConfig;
74
76
 
75
- private blockStream: L2BlockStream | undefined;
77
+ private blockStream: EventDrivenL2BlockStream | undefined;
76
78
 
77
79
  private txProvider: TxProvider;
78
80
 
@@ -81,9 +83,6 @@ export class P2PClient extends WithTracer implements P2P {
81
83
  /** Tracks the last slot for which we called prepareForSlot */
82
84
  private lastSlotProcessed: SlotNumber = SlotNumber.ZERO;
83
85
 
84
- /** Polls for slot changes and calls prepareForSlot on the tx pool */
85
- private slotMonitor: RunningPromise | undefined;
86
-
87
86
  constructor(
88
87
  private store: AztecAsyncKVStore,
89
88
  private l2BlockSource: L2BlockSource & ContractDataSource,
@@ -96,6 +95,7 @@ export class P2PClient extends WithTracer implements P2P {
96
95
  private _dateProvider: DateProvider = new DateProvider(),
97
96
  private telemetry: TelemetryClient = getTelemetryClient(),
98
97
  private log = createLogger('p2p'),
98
+ initialBlockHash: BlockHash,
99
99
  ) {
100
100
  super(telemetry, 'P2PClient');
101
101
 
@@ -111,28 +111,7 @@ export class P2PClient extends WithTracer implements P2P {
111
111
  this.telemetry,
112
112
  );
113
113
 
114
- // Default to collecting all txs when we see a valid proposal
115
- // This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
116
- // Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
117
- // TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
118
- // validator-client code into here so we can validate a proposal is reasonable.
119
- this.registerBlockProposalHandler(async (block, sender) => {
120
- this.log.debug(`Received block proposal from ${sender.toString()}`);
121
- // TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
122
- const constants = this.txCollection.getConstants();
123
- const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
124
- const deadline = new Date(nextSlotTimestampSeconds * 1000);
125
- const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
126
- if (!parentBlock) {
127
- this.log.debug(`Cannot collect txs for proposal as parent block not found`);
128
- return false;
129
- }
130
- const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
131
- await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
132
- return true;
133
- });
134
-
135
- this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
114
+ this.l2Tips = new L2TipsKVStore(store, 'p2p_client', initialBlockHash);
136
115
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
137
116
  }
138
117
 
@@ -170,7 +149,7 @@ export class P2PClient extends WithTracer implements P2P {
170
149
  this.p2pService.updateConfig(config);
171
150
  }
172
151
 
173
- public getL2Tips(): Promise<L2Tips> {
152
+ public getL2Tips(): Promise<LocalL2Tips> {
174
153
  return this.l2Tips.getL2Tips();
175
154
  }
176
155
 
@@ -186,7 +165,7 @@ export class P2PClient extends WithTracer implements P2P {
186
165
  const from = BlockNumber(oldFinalizedBlockNum + 1);
187
166
  const limit = event.block.number - from + 1;
188
167
  if (limit > 0) {
189
- const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
168
+ const oldBlocks = await this.l2BlockSource.getBlocksData({ from, limit });
190
169
  await this.handleFinalizedL2Blocks(oldBlocks);
191
170
  }
192
171
  break;
@@ -196,10 +175,12 @@ export class P2PClient extends WithTracer implements P2P {
196
175
  break;
197
176
  case 'chain-pruned':
198
177
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
199
- await this.handlePruneL2Blocks(event.block, event.checkpoint);
178
+ await this.handlePruneL2Blocks(event.block, event.checkpointed.checkpoint);
200
179
  break;
201
180
  case 'chain-checkpointed':
202
181
  break;
182
+ case 'chain-proposed':
183
+ break;
203
184
  default: {
204
185
  const _: never = event;
205
186
  break;
@@ -279,33 +260,24 @@ export class P2PClient extends WithTracer implements P2P {
279
260
  });
280
261
  }
281
262
 
282
- this.blockStream!.start();
283
- 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();
284
268
  this.txFileStore?.start();
285
269
 
286
- // Start slot monitor to call prepareForSlot when the slot changes
287
- this.slotMonitor = new RunningPromise(
288
- () => this.maybeCallPrepareForSlot(),
289
- this.log,
290
- this.config.slotCheckIntervalMS,
291
- );
292
- this.slotMonitor.start();
293
-
294
270
  return this.syncPromise;
295
271
  }
296
272
 
297
- addReqRespSubProtocol(
298
- subProtocol: ReqRespSubProtocol,
299
- handler: ReqRespSubProtocolHandler,
300
- validator: ReqRespSubProtocolValidators[ReqRespSubProtocol],
301
- ): Promise<void> {
302
- return this.p2pService.addReqRespSubProtocol(subProtocol, handler, validator);
273
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
274
+ return this.p2pService.addReqRespSubProtocol(subProtocol, handler);
303
275
  }
304
276
 
305
277
  private initBlockStream(startingBlock?: BlockNumber) {
306
278
  if (!this.blockStream) {
307
279
  const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
308
- this.blockStream = new L2BlockStream(
280
+ this.blockStream = new EventDrivenL2BlockStream(
309
281
  this.l2BlockSource,
310
282
  this,
311
283
  this,
@@ -321,8 +293,6 @@ export class P2PClient extends WithTracer implements P2P {
321
293
  */
322
294
  public async stop() {
323
295
  this.log.debug('Stopping p2p client...');
324
- await this.slotMonitor?.stop();
325
- this.log.debug('Stopped slot monitor');
326
296
  await tryStop(this.txCollection);
327
297
  this.log.debug('Stopped tx collection service');
328
298
  await this.txFileStore?.stop();
@@ -341,7 +311,11 @@ export class P2PClient extends WithTracer implements P2P {
341
311
  /** Triggers a sync to the archiver. Used for testing. */
342
312
  public async sync() {
343
313
  this.initBlockStream();
344
- 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();
345
319
  }
346
320
 
347
321
  @trackSpan('p2pClient.broadcastProposal', async proposal => ({
@@ -379,6 +353,19 @@ export class P2PClient extends WithTracer implements P2P {
379
353
  // Store our own last-block proposal so we can respond to req/resp requests for it.
380
354
  await this.attestationPool.tryAddBlockProposal(blockProposal);
381
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
+ }
382
369
  return this.p2pService.propagate(proposal);
383
370
  }
384
371
 
@@ -389,10 +376,10 @@ export class P2PClient extends WithTracer implements P2P {
389
376
 
390
377
  public async getCheckpointAttestationsForSlot(
391
378
  slot: SlotNumber,
392
- proposalId?: string,
379
+ proposalPayloadHash?: CheckpointProposalHash,
393
380
  ): Promise<CheckpointAttestation[]> {
394
- return await (proposalId
395
- ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)
381
+ return await (proposalPayloadHash
382
+ ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalPayloadHash)
396
383
  : this.attestationPool.getCheckpointAttestationsForSlot(slot));
397
384
  }
398
385
 
@@ -400,29 +387,49 @@ export class P2PClient extends WithTracer implements P2P {
400
387
  return this.attestationPool.addOwnCheckpointAttestations(attestations);
401
388
  }
402
389
 
390
+ public getProposalsForSlot(slot: SlotNumber): Promise<ProposalsForSlot> {
391
+ return this.attestationPool.getProposalsForSlot(slot);
392
+ }
393
+
403
394
  public hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean> {
404
395
  return this.attestationPool.hasBlockProposalsForSlot(slot);
405
396
  }
406
397
 
398
+ public hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
399
+ return this.attestationPool.hasCheckpointProposalForSlot(slot);
400
+ }
401
+
407
402
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
408
403
  // ^ This pattern is not my favorite (md)
409
404
  public registerBlockProposalHandler(handler: P2PBlockReceivedCallback): void {
410
405
  this.p2pService.registerBlockReceivedCallback(handler);
411
406
  }
412
407
 
413
- public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
414
- 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);
415
414
  }
416
415
 
417
416
  public registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void {
418
417
  this.p2pService.registerDuplicateProposalCallback(callback);
419
418
  }
420
419
 
420
+ public registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void {
421
+ this.p2pService.registerOversizedProposalCallback(callback);
422
+ }
423
+
421
424
  public registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void {
422
425
  this.p2pService.registerDuplicateAttestationCallback(callback);
423
426
  }
424
427
 
425
- 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[]> {
426
433
  if (limit !== undefined && limit <= 0) {
427
434
  throw new TypeError('limit must be greater than 0');
428
435
  }
@@ -441,7 +448,9 @@ export class P2PClient extends WithTracer implements P2P {
441
448
  const endIndex = limit !== undefined ? startIndex + limit : undefined;
442
449
  txHashes = txHashes.slice(startIndex, endIndex);
443
450
 
444
- 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 })));
445
454
  return maybeTxs.filter((tx): tx is Tx => !!tx);
446
455
  }
447
456
 
@@ -449,18 +458,22 @@ export class P2PClient extends WithTracer implements P2P {
449
458
  return this.txPool.getPendingTxCount();
450
459
  }
451
460
 
452
- public async *iteratePendingTxs(): AsyncIterableIterator<Tx> {
461
+ public hasEligiblePendingTxs(minCount: number): Promise<boolean> {
462
+ return this.txPool.hasEligiblePendingTxs(minCount);
463
+ }
464
+
465
+ public async *iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
453
466
  for (const txHash of await this.txPool.getPendingTxHashes()) {
454
- const tx = await this.txPool.getTxByHash(txHash);
467
+ const tx = await this.txPool.getTxByHash(txHash, opts);
455
468
  if (tx) {
456
469
  yield tx;
457
470
  }
458
471
  }
459
472
  }
460
473
 
461
- public async *iterateEligiblePendingTxs(): AsyncIterableIterator<Tx> {
474
+ public async *iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
462
475
  for (const txHash of await this.txPool.getEligiblePendingTxHashes()) {
463
- const tx = await this.txPool.getTxByHash(txHash);
476
+ const tx = await this.txPool.getTxByHash(txHash, opts);
464
477
  if (tx) {
465
478
  yield tx;
466
479
  }
@@ -470,19 +483,21 @@ export class P2PClient extends WithTracer implements P2P {
470
483
  /**
471
484
  * Returns a transaction in the transaction pool by its hash.
472
485
  * @param txHash - Hash of the transaction to look for in the pool.
486
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
473
487
  * @returns A single tx or undefined.
474
488
  */
475
- getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined> {
476
- return this.txPool.getTxByHash(txHash);
489
+ getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined> {
490
+ return this.txPool.getTxByHash(txHash, opts);
477
491
  }
478
492
 
479
493
  /**
480
494
  * Returns transactions in the transaction pool by hash.
481
495
  * @param txHashes - Hashes of the transactions to look for.
496
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
482
497
  * @returns The txs found, in the same order as the requested hashes. If a tx is not found, it will be undefined.
483
498
  */
484
- getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
485
- return this.txPool.getTxsByHash(txHashes);
499
+ getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]> {
500
+ return this.txPool.getTxsByHash(txHashes, opts);
486
501
  }
487
502
 
488
503
  hasTxsInPool(txHashes: TxHash[]): Promise<boolean[]> {
@@ -592,13 +607,10 @@ export class P2PClient extends WithTracer implements P2P {
592
607
  */
593
608
  public async getStatus(): Promise<P2PSyncState> {
594
609
  const blockNumber = await this.getSyncedLatestBlockNum();
595
- const blockHash =
596
- blockNumber === 0
597
- ? GENESIS_BLOCK_HEADER_HASH.toString()
598
- : await this.l2BlockSource
599
- .getBlockHeader(blockNumber)
600
- .then(header => header?.hash())
601
- .then(hash => hash?.toString());
610
+ const blockHash = await this.l2BlockSource
611
+ .getBlockData({ number: blockNumber })
612
+ .then(data => data?.header.hash())
613
+ .then(hash => hash?.toString());
602
614
 
603
615
  return {
604
616
  state: this.currentState,
@@ -627,15 +639,20 @@ export class P2PClient extends WithTracer implements P2P {
627
639
  return;
628
640
  }
629
641
 
630
- await this.handleMinedBlocks(blocks);
631
- await this.maybeCallPrepareForSlot();
632
- await this.startCollectingMissingTxs(blocks);
633
642
  const lastBlock = blocks.at(-1)!;
634
- await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
643
+ const lastSlot = lastBlock.header.getSlot();
644
+
645
+ // Mark txs mined before releasing protections: a block landing at this slot supersedes any
646
+ // protection for txs it includes, so mined-marking must run first to keep just-landed txs from
647
+ // being unprotected into pending where they could be evicted before they are recorded as mined.
648
+ await this.handleMinedBlocks(blocks);
649
+ await this.maybeCallPrepareForSlot(lastSlot);
650
+ await this.collectingMissingTxs(blocks);
651
+ await this.synchedLatestSlot.set(BigInt(lastSlot));
635
652
  }
636
653
 
637
- /** Request txs for unproven blocks so the prover node has more chances to get them. */
638
- private async startCollectingMissingTxs(blocks: L2Block[]): Promise<void> {
654
+ /** Request txs for unproven blocks so the prover node can prove. */
655
+ private async collectingMissingTxs(blocks: L2Block[]): Promise<void> {
639
656
  try {
640
657
  // TODO(#15435): If the archiver has lagged behind L1, the reported proven block number may
641
658
  // be much lower than the actual one, and it does not update until the pending chain is
@@ -643,7 +660,7 @@ export class P2PClient extends WithTracer implements P2P {
643
660
  // are already proven, but the archiver has not yet updated its state. Until this is properly
644
661
  // fixed, it is mitigated by the expiration date of collection requests, which depends on
645
662
  // the slot number of the block.
646
- const provenBlockNumber = await this.l2BlockSource.getProvenBlockNumber();
663
+ const provenBlockNumber = (await this.l2BlockSource.getBlockNumber({ tag: 'proven' })) ?? BlockNumber.ZERO;
647
664
  const unprovenBlocks = blocks.filter(block => block.number > provenBlockNumber);
648
665
  for (const block of unprovenBlocks) {
649
666
  const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
@@ -655,7 +672,17 @@ export class P2PClient extends WithTracer implements P2P {
655
672
  `Starting collection of ${missingTxHashes.length} missing txs for unproven mined block ${block.number}`,
656
673
  { missingTxHashes, blockNumber: block.number, blockHash: await block.hash().then(h => h.toString()) },
657
674
  );
658
- this.txCollection.startCollecting(block, missingTxHashes);
675
+ // Both `slashDataWithholdingToleranceSlots` and `p2pMissingTxCollectionDeadlineSlots`
676
+ // count *full slots after the block slot* — value N means collection runs until
677
+ // `slotStart(block.slot + N + 1)`. Take the larger of the two so collection never
678
+ // gives up before the data-withholding slash verdict is rendered.
679
+ const blockSlot = block.header.getSlot();
680
+ const toleranceSlots = this.config.slashDataWithholdingToleranceSlots;
681
+ const configuredSlots = this.config.p2pMissingTxCollectionDeadlineSlots ?? 0;
682
+ const deadlineSlot = SlotNumber(blockSlot + Math.max(toleranceSlots, configuredSlots) + 1);
683
+ const deadlineSeconds = getTimestampForSlot(deadlineSlot, this.epochCache.getL1Constants());
684
+ const deadline = new Date(Number(deadlineSeconds) * 1000);
685
+ await this.txCollection.collectFastForBlock(block, missingTxHashes, { deadline });
659
686
  }
660
687
  }
661
688
  } catch (err) {
@@ -668,7 +695,7 @@ export class P2PClient extends WithTracer implements P2P {
668
695
  * @param blocks - A list of finalized L2 blocks.
669
696
  * @returns Empty promise.
670
697
  */
671
- private async handleFinalizedL2Blocks(blocks: L2Block[]): Promise<void> {
698
+ private async handleFinalizedL2Blocks(blocks: BlockData[]): Promise<void> {
672
699
  if (!blocks.length) {
673
700
  return;
674
701
  }
@@ -691,31 +718,38 @@ export class P2PClient extends WithTracer implements P2P {
691
718
  }
692
719
 
693
720
  /**
694
- * Returns true if the prune crossed a checkpoint boundary.
695
- * If the old and new checkpoint numbers are the same, the prune is within a single checkpoint.
696
- * If they differ, the prune spans across checkpoints (epoch prune).
721
+ * Returns true if the prune is an epoch prune (new checkpoint number is less than old).
722
+ * If the checkpoint number stays the same or increases, the prune is within a checkpoint.
697
723
  */
698
724
  private async isEpochPrune(newCheckpoint: CheckpointId): Promise<boolean> {
699
725
  const tips = await this.l2Tips.getL2Tips();
700
726
  const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
701
- if (oldCheckpointNumber <= CheckpointNumber.ZERO) {
727
+ if (oldCheckpointNumber <= CheckpointNumber.INITIAL) {
702
728
  return false;
703
729
  }
704
- const isEpochPrune = oldCheckpointNumber !== newCheckpoint.number;
705
- this.log.info(
706
- `Detected epoch prune: ${isEpochPrune}. Old checkpoint: ${oldCheckpointNumber}, new checkpoint: ${newCheckpoint.number}`,
707
- );
730
+ const newCheckpointNumber = newCheckpoint.number;
731
+ // We check that the new checkpoint number is less than the old checkpoint number in order to consider it an epoch prune.
732
+ // To be more certain that it is an epoch prune, we will check that at least 2 checkpoints were removed.
733
+ // This means we should avoid thinking checkpoints removed by L1 re-orgs are epoch prunes
734
+ const thresholdForEpochPrune = CheckpointNumber(oldCheckpointNumber - 2);
735
+ const isEpochPrune = newCheckpointNumber <= thresholdForEpochPrune;
736
+ if (isEpochPrune) {
737
+ this.log.info(`Detected epoch prune to ${newCheckpointNumber}`, {
738
+ oldCheckpointNumber,
739
+ newCheckpointNumber,
740
+ thresholdForEpochPrune,
741
+ });
742
+ }
708
743
  return isEpochPrune;
709
744
  }
710
745
 
711
- /** Checks if the slot has changed and calls prepareForSlot if so. */
712
- private async maybeCallPrepareForSlot(): Promise<void> {
713
- const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
714
- if (currentSlot <= this.lastSlotProcessed) {
746
+ /** Calls prepareForSlot for the given slot if it advances past the last slot we prepared for. */
747
+ private async maybeCallPrepareForSlot(slot: SlotNumber): Promise<void> {
748
+ if (slot <= this.lastSlotProcessed) {
715
749
  return;
716
750
  }
717
- this.lastSlotProcessed = currentSlot;
718
- await this.txPool.prepareForSlot(currentSlot);
751
+ this.lastSlotProcessed = slot;
752
+ await this.txPool.prepareForSlot(slot);
719
753
  }
720
754
 
721
755
  private async startServiceIfSynched() {