@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.c2595eba

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 (444) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +2 -2
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +8 -8
  7. package/dest/client/index.d.ts +1 -1
  8. package/dest/client/interface.d.ts +18 -3
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +16 -37
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +464 -126
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  19. package/dest/config.d.ts +69 -60
  20. package/dest/config.d.ts.map +1 -1
  21. package/dest/config.js +23 -14
  22. package/dest/enr/generate-enr.d.ts +1 -1
  23. package/dest/enr/index.d.ts +1 -1
  24. package/dest/errors/attestation-pool.error.d.ts +7 -0
  25. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  26. package/dest/errors/attestation-pool.error.js +12 -0
  27. package/dest/errors/reqresp.error.d.ts +1 -1
  28. package/dest/errors/reqresp.error.d.ts.map +1 -1
  29. package/dest/index.d.ts +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
  31. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +241 -266
  35. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  36. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
  37. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
  39. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
  40. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  41. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
  42. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  43. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  44. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  45. package/dest/mem_pools/index.d.ts +1 -1
  46. package/dest/mem_pools/instrumentation.d.ts +9 -1
  47. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  48. package/dest/mem_pools/instrumentation.js +37 -10
  49. package/dest/mem_pools/interface.d.ts +3 -4
  50. package/dest/mem_pools/interface.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
  52. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  54. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  55. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  57. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  58. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  60. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  61. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  66. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  67. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  69. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  70. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  72. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  73. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  75. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  76. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool/index.js +0 -1
  78. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  79. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  80. package/dest/mem_pools/tx_pool/priority.js +6 -1
  81. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  82. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  83. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  84. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  85. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  86. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
  87. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  88. package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
  89. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  90. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  91. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
  92. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  93. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  94. package/dest/msg_validators/attestation_validator/index.js +1 -0
  95. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  96. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  97. package/dest/msg_validators/clock_tolerance.js +37 -0
  98. package/dest/msg_validators/index.d.ts +2 -2
  99. package/dest/msg_validators/index.d.ts.map +1 -1
  100. package/dest/msg_validators/index.js +1 -1
  101. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  102. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  103. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  104. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  105. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  106. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  107. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  108. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  109. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  110. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  111. package/dest/msg_validators/proposal_validator/index.js +3 -0
  112. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  113. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  114. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  115. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  116. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  117. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  118. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  121. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  122. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  124. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  125. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
  127. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  128. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  130. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  131. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  132. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  133. package/dest/msg_validators/tx_validator/factory.d.ts +10 -4
  134. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  135. package/dest/msg_validators/tx_validator/factory.js +22 -12
  136. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  137. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  138. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  139. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  140. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  141. package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
  142. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  143. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/index.js +1 -0
  145. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
  146. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  147. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  148. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  149. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  150. package/dest/msg_validators/tx_validator/phases_validator.js +6 -4
  151. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  152. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  153. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  154. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  155. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +5 -3
  157. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  158. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  159. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  160. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  161. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  162. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  163. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  164. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  165. package/dest/services/data_store.d.ts +1 -1
  166. package/dest/services/data_store.d.ts.map +1 -1
  167. package/dest/services/discv5/discV5_service.d.ts +1 -1
  168. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  169. package/dest/services/discv5/discV5_service.js +1 -1
  170. package/dest/services/dummy_service.d.ts +18 -2
  171. package/dest/services/dummy_service.d.ts.map +1 -1
  172. package/dest/services/dummy_service.js +42 -0
  173. package/dest/services/encoding.d.ts +1 -1
  174. package/dest/services/encoding.d.ts.map +1 -1
  175. package/dest/services/encoding.js +7 -6
  176. package/dest/services/gossipsub/scoring.d.ts +1 -1
  177. package/dest/services/index.d.ts +1 -1
  178. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  179. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  180. package/dest/services/libp2p/instrumentation.js +36 -71
  181. package/dest/services/libp2p/libp2p_service.d.ts +48 -81
  182. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  183. package/dest/services/libp2p/libp2p_service.js +926 -193
  184. package/dest/services/peer-manager/interface.d.ts +1 -1
  185. package/dest/services/peer-manager/metrics.d.ts +9 -2
  186. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  187. package/dest/services/peer-manager/metrics.js +39 -16
  188. package/dest/services/peer-manager/peer_manager.d.ts +2 -33
  189. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  190. package/dest/services/peer-manager/peer_manager.js +6 -12
  191. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  192. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  193. package/dest/services/peer-manager/peer_scoring.js +43 -2
  194. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  195. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  196. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  197. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  198. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  199. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  200. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  201. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  202. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  203. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  204. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  205. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  206. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  207. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  208. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  209. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  210. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  211. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  212. package/dest/services/reqresp/config.d.ts +1 -1
  213. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  214. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  215. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  216. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -4
  217. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  218. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  219. package/dest/services/reqresp/constants.d.ts +12 -0
  220. package/dest/services/reqresp/constants.d.ts.map +1 -0
  221. package/dest/services/reqresp/constants.js +7 -0
  222. package/dest/services/reqresp/index.d.ts +1 -1
  223. package/dest/services/reqresp/interface.d.ts +4 -2
  224. package/dest/services/reqresp/interface.d.ts.map +1 -1
  225. package/dest/services/reqresp/interface.js +1 -1
  226. package/dest/services/reqresp/metrics.d.ts +6 -5
  227. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  228. package/dest/services/reqresp/metrics.js +17 -21
  229. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  230. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  231. package/dest/services/reqresp/protocols/auth.js +2 -2
  232. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  233. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  234. package/dest/services/reqresp/protocols/block.js +3 -2
  235. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  236. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  237. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  238. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  239. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  240. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +14 -1
  241. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +17 -7
  242. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  243. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +34 -4
  244. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  245. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  246. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  247. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  248. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  249. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  250. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  251. package/dest/services/reqresp/protocols/status.js +7 -3
  252. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  253. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  254. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  255. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  256. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  257. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  258. package/dest/services/reqresp/reqresp.d.ts +6 -41
  259. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  260. package/dest/services/reqresp/reqresp.js +460 -46
  261. package/dest/services/reqresp/status.d.ts +2 -2
  262. package/dest/services/reqresp/status.d.ts.map +1 -1
  263. package/dest/services/service.d.ts +19 -3
  264. package/dest/services/service.d.ts.map +1 -1
  265. package/dest/services/tx_collection/config.d.ts +4 -1
  266. package/dest/services/tx_collection/config.d.ts.map +1 -1
  267. package/dest/services/tx_collection/config.js +10 -2
  268. package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -12
  269. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  270. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  271. package/dest/services/tx_collection/index.d.ts +2 -1
  272. package/dest/services/tx_collection/index.d.ts.map +1 -1
  273. package/dest/services/tx_collection/index.js +1 -0
  274. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  275. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  276. package/dest/services/tx_collection/instrumentation.js +10 -13
  277. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  278. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  279. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  280. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
  281. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  282. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  283. package/dest/services/tx_collection/tx_collection.d.ts +10 -10
  284. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  285. package/dest/services/tx_collection/tx_collection.js +5 -5
  286. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  287. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  288. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  289. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  290. package/dest/services/tx_provider.d.ts +4 -2
  291. package/dest/services/tx_provider.d.ts.map +1 -1
  292. package/dest/services/tx_provider.js +11 -2
  293. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  294. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  295. package/dest/services/tx_provider_instrumentation.js +14 -14
  296. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  297. package/dest/test-helpers/get-ports.d.ts +1 -1
  298. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  299. package/dest/test-helpers/index.d.ts +3 -1
  300. package/dest/test-helpers/index.d.ts.map +1 -1
  301. package/dest/test-helpers/index.js +2 -0
  302. package/dest/test-helpers/make-enrs.d.ts +1 -1
  303. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  304. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  305. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  306. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  307. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  308. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  309. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  310. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  311. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  312. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  313. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  314. package/dest/test-helpers/test_tx_provider.js +41 -0
  315. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  316. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  317. package/dest/test-helpers/testbench-utils.js +297 -0
  318. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  319. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  320. package/dest/testbench/p2p_client_testbench_worker.js +218 -120
  321. package/dest/testbench/parse_log_file.d.ts +1 -1
  322. package/dest/testbench/testbench.d.ts +1 -1
  323. package/dest/testbench/worker_client_manager.d.ts +51 -6
  324. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  325. package/dest/testbench/worker_client_manager.js +226 -39
  326. package/dest/types/index.d.ts +1 -1
  327. package/dest/util.d.ts +2 -1
  328. package/dest/util.d.ts.map +1 -1
  329. package/dest/util.js +11 -2
  330. package/dest/versioning.d.ts +1 -1
  331. package/package.json +19 -18
  332. package/src/bootstrap/bootstrap.ts +7 -4
  333. package/src/client/factory.ts +11 -20
  334. package/src/client/interface.ts +20 -2
  335. package/src/client/p2p_client.ts +108 -155
  336. package/src/client/test/tx_proposal_collector/README.md +227 -0
  337. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  338. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  339. package/src/config.ts +36 -20
  340. package/src/errors/attestation-pool.error.ts +13 -0
  341. package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
  342. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
  343. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
  344. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
  345. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  346. package/src/mem_pools/instrumentation.ts +48 -10
  347. package/src/mem_pools/interface.ts +2 -4
  348. package/src/mem_pools/tx_pool/README.md +270 -0
  349. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  350. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  351. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  352. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  353. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  354. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  355. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  356. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  357. package/src/mem_pools/tx_pool/index.ts +0 -1
  358. package/src/mem_pools/tx_pool/priority.ts +8 -1
  359. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  360. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  361. package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
  362. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
  363. package/src/msg_validators/attestation_validator/index.ts +1 -0
  364. package/src/msg_validators/clock_tolerance.ts +51 -0
  365. package/src/msg_validators/index.ts +1 -1
  366. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  367. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  368. package/src/msg_validators/proposal_validator/index.ts +3 -0
  369. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  370. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  371. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  372. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  373. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  374. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  375. package/src/msg_validators/tx_validator/factory.ts +67 -25
  376. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  377. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  378. package/src/msg_validators/tx_validator/index.ts +1 -0
  379. package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
  380. package/src/msg_validators/tx_validator/phases_validator.ts +8 -4
  381. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  382. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  383. package/src/msg_validators/tx_validator/timestamp_validator.ts +11 -5
  384. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  385. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  386. package/src/services/discv5/discV5_service.ts +1 -1
  387. package/src/services/dummy_service.ts +51 -0
  388. package/src/services/encoding.ts +6 -5
  389. package/src/services/libp2p/instrumentation.ts +39 -71
  390. package/src/services/libp2p/libp2p_service.ts +628 -194
  391. package/src/services/peer-manager/metrics.ts +44 -16
  392. package/src/services/peer-manager/peer_manager.ts +7 -4
  393. package/src/services/peer-manager/peer_scoring.ts +45 -3
  394. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  395. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  396. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  397. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  398. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  399. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  400. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  401. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  402. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  403. package/src/services/reqresp/constants.ts +14 -0
  404. package/src/services/reqresp/interface.ts +4 -1
  405. package/src/services/reqresp/metrics.ts +36 -27
  406. package/src/services/reqresp/protocols/auth.ts +2 -2
  407. package/src/services/reqresp/protocols/block.ts +3 -2
  408. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  409. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +16 -2
  410. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -5
  411. package/src/services/reqresp/protocols/status.ts +16 -12
  412. package/src/services/reqresp/protocols/tx.ts +1 -2
  413. package/src/services/reqresp/reqresp.ts +66 -19
  414. package/src/services/service.ts +23 -4
  415. package/src/services/tx_collection/config.ts +16 -2
  416. package/src/services/tx_collection/fast_tx_collection.ts +39 -15
  417. package/src/services/tx_collection/index.ts +5 -0
  418. package/src/services/tx_collection/instrumentation.ts +5 -13
  419. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  420. package/src/services/tx_collection/slow_tx_collection.ts +5 -4
  421. package/src/services/tx_collection/tx_collection.ts +10 -9
  422. package/src/services/tx_provider.ts +19 -3
  423. package/src/services/tx_provider_instrumentation.ts +24 -14
  424. package/src/test-helpers/index.ts +2 -0
  425. package/src/test-helpers/mock-pubsub.ts +1 -1
  426. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  427. package/src/test-helpers/reqresp-nodes.ts +1 -1
  428. package/src/test-helpers/test_tx_provider.ts +64 -0
  429. package/src/test-helpers/testbench-utils.ts +374 -0
  430. package/src/testbench/p2p_client_testbench_worker.ts +338 -116
  431. package/src/testbench/worker_client_manager.ts +304 -42
  432. package/src/util.ts +12 -2
  433. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  434. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  435. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  436. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  437. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  438. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  439. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  440. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  441. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  442. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  443. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  444. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,6 +1,6 @@
1
1
  import type { EthAddress, L2BlockId } from '@aztec/stdlib/block';
2
2
  import type { P2PApiFull } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockProposal, P2PClientType } from '@aztec/stdlib/p2p';
3
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PClientType } from '@aztec/stdlib/p2p';
4
4
  import type { Tx, TxHash } from '@aztec/stdlib/tx';
5
5
 
6
6
  import type { PeerId } from '@libp2p/interface';
@@ -13,7 +13,7 @@ import type {
13
13
  ReqRespSubProtocolHandler,
14
14
  ReqRespSubProtocolValidators,
15
15
  } from '../services/reqresp/interface.js';
16
- import type { P2PBlockReceivedCallback } from '../services/service.js';
16
+ import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback } from '../services/service.js';
17
17
 
18
18
  /**
19
19
  * Enum defining the possible states of the p2p client.
@@ -50,6 +50,16 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
50
50
  */
51
51
  broadcastProposal(proposal: BlockProposal): Promise<void>;
52
52
 
53
+ /**
54
+ * Broadcasts a checkpoint proposal (last block in a checkpoint) to other peers.
55
+ *
56
+ * @param proposal - the checkpoint proposal
57
+ */
58
+ broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void>;
59
+
60
+ /** Broadcasts checkpoint attestations to other peers. */
61
+ broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
62
+
53
63
  /**
54
64
  * Registers a callback from the validator client that determines how to behave when
55
65
  * foreign block proposals are received
@@ -60,6 +70,14 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
60
70
  // ^ This pattern is not my favorite (md)
61
71
  registerBlockProposalHandler(callback: P2PBlockReceivedCallback): void;
62
72
 
73
+ /**
74
+ * Registers a callback from the validator client that determines how to behave when
75
+ * foreign checkpoint proposals are received
76
+ *
77
+ * @param handler - A function taking a received checkpoint proposal and producing attestations
78
+ */
79
+ registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
80
+
63
81
  /**
64
82
  * Request a list of transactions from another peer by their tx hashes.
65
83
  * @param txHashes - Hashes of the txs to query.
@@ -1,30 +1,29 @@
1
- import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
1
+ import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
+ import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { DateProvider } from '@aztec/foundation/timer';
4
- import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncSingleton } from '@aztec/kv-store';
5
- import type {
6
- EthAddress,
7
- L2Block,
8
- L2BlockId,
9
- L2BlockSource,
5
+ import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
6
+ import { L2TipsKVStore } from '@aztec/kv-store/stores';
7
+ import {
8
+ type EthAddress,
9
+ type L2Block,
10
+ type L2BlockSource,
10
11
  L2BlockStream,
11
- L2BlockStreamEvent,
12
- L2Tips,
13
- PublishedL2Block,
12
+ type L2BlockStreamEvent,
13
+ type L2Tips,
14
+ type L2TipsStore,
14
15
  } from '@aztec/stdlib/block';
15
16
  import type { ContractDataSource } from '@aztec/stdlib/contract';
16
17
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
17
18
  import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
18
- import { BlockAttestation, type BlockProposal, type P2PClientType } from '@aztec/stdlib/p2p';
19
- import type { Tx, TxHash } from '@aztec/stdlib/tx';
20
19
  import {
21
- Attributes,
22
- type TelemetryClient,
23
- TraceableL2BlockStream,
24
- WithTracer,
25
- getTelemetryClient,
26
- trackSpan,
27
- } from '@aztec/telemetry-client';
20
+ type BlockProposal,
21
+ CheckpointAttestation,
22
+ type CheckpointProposal,
23
+ type P2PClientType,
24
+ } from '@aztec/stdlib/p2p';
25
+ import type { Tx, TxHash } from '@aztec/stdlib/tx';
26
+ import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
28
27
 
29
28
  import type { PeerId } from '@libp2p/interface';
30
29
  import type { ENR } from '@nethermindeth/enr';
@@ -40,7 +39,7 @@ import {
40
39
  type ReqRespSubProtocolValidators,
41
40
  } from '../services/reqresp/interface.js';
42
41
  import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
43
- import type { P2PBlockReceivedCallback, P2PService } from '../services/service.js';
42
+ import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PService } from '../services/service.js';
44
43
  import { TxCollection } from '../services/tx_collection/tx_collection.js';
45
44
  import { TxProvider } from '../services/tx_provider.js';
46
45
  import { type P2P, P2PClientState, type P2PSyncState } from './interface.js';
@@ -62,14 +61,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
62
61
  private provenBlockNumberAtStart = -1;
63
62
  private finalizedBlockNumberAtStart = -1;
64
63
 
65
- private synchedBlockHashes: AztecAsyncMap<number, string>;
66
- private synchedLatestBlockNumber: AztecAsyncSingleton<number>;
67
- private synchedProvenBlockNumber: AztecAsyncSingleton<number>;
68
- private synchedFinalizedBlockNumber: AztecAsyncSingleton<number>;
64
+ private l2Tips: L2TipsStore;
69
65
  private synchedLatestSlot: AztecAsyncSingleton<bigint>;
70
66
 
71
67
  private txPool: TxPool;
72
- private attestationPool: T extends P2PClientType.Full ? AttestationPool : undefined;
68
+ private attestationPool: AttestationPool;
73
69
 
74
70
  private config: P2PConfig;
75
71
 
@@ -91,7 +87,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
91
87
  _clientType: T,
92
88
  private store: AztecAsyncKVStore,
93
89
  private l2BlockSource: L2BlockSource & ContractDataSource,
94
- mempools: MemPools<T>,
90
+ mempools: MemPools,
95
91
  private p2pService: P2PService,
96
92
  private txCollection: TxCollection,
97
93
  config: Partial<P2PConfig> = {},
@@ -103,7 +99,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
103
99
 
104
100
  this.config = { ...getP2PDefaultConfig(), ...config };
105
101
  this.txPool = mempools.txPool;
106
- this.attestationPool = mempools.attestationPool!;
102
+ this.attestationPool = mempools.attestationPool;
107
103
 
108
104
  this.txProvider = new TxProvider(
109
105
  this.txCollection,
@@ -114,30 +110,27 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
114
110
  );
115
111
 
116
112
  // Default to collecting all txs when we see a valid proposal
117
- // This can be overridden by the validator client to attest, and it will call getTxsForBlockProposal on its own
113
+ // This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
114
+ // Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
118
115
  // TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
119
116
  // validator-client code into here so we can validate a proposal is reasonable.
120
117
  this.registerBlockProposalHandler(async (block, sender) => {
121
118
  this.log.debug(`Received block proposal from ${sender.toString()}`);
122
119
  // TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
123
120
  const constants = this.txCollection.getConstants();
124
- const nextSlotTimestampSeconds = Number(getTimestampForSlot(block.slotNumber.toBigInt() + 1n, constants));
121
+ const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
125
122
  const deadline = new Date(nextSlotTimestampSeconds * 1000);
126
- const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.payload.header.lastArchiveRoot);
123
+ const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
127
124
  if (!parentBlock) {
128
125
  this.log.debug(`Cannot collect txs for proposal as parent block not found`);
129
- return;
126
+ return false;
130
127
  }
131
- const blockNumber = parentBlock.getBlockNumber() + 1;
128
+ const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
132
129
  await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
133
- return undefined;
130
+ return true;
134
131
  });
135
132
 
136
- // REFACTOR: Try replacing these with an L2TipsStore
137
- this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
138
- this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
139
- this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
140
- this.synchedFinalizedBlockNumber = store.openSingleton('p2p_pool_last_finalized_l2_block');
133
+ this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
141
134
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
142
135
  }
143
136
 
@@ -162,8 +155,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
162
155
  return Promise.resolve(this.p2pService.getPeers(includePending));
163
156
  }
164
157
 
165
- public getL2BlockHash(number: number): Promise<string | undefined> {
166
- return this.synchedBlockHashes.getAsync(number);
158
+ public getL2BlockHash(number: BlockNumber): Promise<string | undefined> {
159
+ return this.l2Tips.getL2BlockHash(number);
167
160
  }
168
161
 
169
162
  public updateP2PConfig(config: Partial<P2PConfig>): Promise<void> {
@@ -172,82 +165,45 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
172
165
  return Promise.resolve();
173
166
  }
174
167
 
175
- public async getL2Tips(): Promise<L2Tips> {
176
- const latestBlockNumber = await this.getSyncedLatestBlockNum();
177
- let latestBlockHash: string | undefined;
178
-
179
- const provenBlockNumber = await this.getSyncedProvenBlockNum();
180
- let provenBlockHash: string | undefined;
181
-
182
- const finalizedBlockNumber = await this.getSyncedFinalizedBlockNum();
183
- let finalizedBlockHash: string | undefined;
184
-
185
- if (latestBlockNumber > 0) {
186
- latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
187
- if (typeof latestBlockHash === 'undefined') {
188
- throw new Error(`Block hash for latest block ${latestBlockNumber} not found in p2p client`);
189
- }
190
- }
191
-
192
- if (provenBlockNumber > 0) {
193
- provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
194
- if (typeof provenBlockHash === 'undefined') {
195
- throw new Error(`Block hash for proven block ${provenBlockNumber} not found in p2p client`);
196
- }
197
- }
198
-
199
- if (finalizedBlockNumber > 0) {
200
- finalizedBlockHash = await this.synchedBlockHashes.getAsync(finalizedBlockNumber);
201
- if (typeof finalizedBlockHash === 'undefined') {
202
- throw new Error(`Block hash for finalized block ${finalizedBlockNumber} not found in p2p client`);
203
- }
204
- }
205
-
206
- return {
207
- latest: { hash: latestBlockHash!, number: latestBlockNumber },
208
- proven: { hash: provenBlockHash!, number: provenBlockNumber },
209
- finalized: { hash: finalizedBlockHash!, number: finalizedBlockNumber },
210
- };
168
+ public getL2Tips(): Promise<L2Tips> {
169
+ return this.l2Tips.getL2Tips();
211
170
  }
212
171
 
213
172
  public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
214
173
  this.log.debug(`Handling block stream event ${event.type}`);
174
+
215
175
  switch (event.type) {
216
176
  case 'blocks-added':
217
177
  await this.handleLatestL2Blocks(event.blocks);
218
178
  break;
219
179
  case 'chain-finalized': {
220
- // TODO (alexg): I think we can prune the block hashes map here
221
- await this.setBlockHash(event.block);
222
- const from = (await this.getSyncedFinalizedBlockNum()) + 1;
180
+ const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
181
+ const from = BlockNumber(oldFinalizedBlockNum + 1);
223
182
  const limit = event.block.number - from + 1;
224
183
  if (limit > 0) {
225
- await this.handleFinalizedL2Blocks(await this.l2BlockSource.getBlocks(from, limit));
184
+ const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
185
+ await this.handleFinalizedL2Blocks(oldBlocks);
226
186
  }
227
187
  break;
228
188
  }
229
- case 'chain-proven': {
230
- await this.setBlockHash(event.block);
189
+ case 'chain-proven':
231
190
  this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
232
- await this.synchedProvenBlockNumber.set(event.block.number);
233
191
  break;
234
- }
235
192
  case 'chain-pruned':
236
- await this.setBlockHash(event.block);
237
193
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
238
194
  await this.handlePruneL2Blocks(event.block.number);
239
195
  break;
196
+ case 'chain-checkpointed':
197
+ break;
240
198
  default: {
241
199
  const _: never = event;
242
200
  break;
243
201
  }
244
202
  }
245
- }
246
203
 
247
- private async setBlockHash(block: L2BlockId): Promise<void> {
248
- if (block.hash !== undefined) {
249
- await this.synchedBlockHashes.set(block.number, block.hash.toString());
250
- }
204
+ // Pass the event through to our l2 tips store
205
+ await this.l2Tips.handleBlockStreamEvent(event);
206
+ await this.startServiceIfSynched();
251
207
  }
252
208
 
253
209
  #assertIsReady() {
@@ -271,20 +227,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
271
227
 
272
228
  // get the current latest block numbers
273
229
  const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
274
- this.latestBlockNumberAtStart = latestBlockNumbers.latest.number;
275
- this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
276
- this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.number;
230
+ this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
231
+ this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
232
+ this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
277
233
 
278
234
  const syncedLatestBlock = (await this.getSyncedLatestBlockNum()) + 1;
279
235
  const syncedProvenBlock = (await this.getSyncedProvenBlockNum()) + 1;
280
236
  const syncedFinalizedBlock = (await this.getSyncedFinalizedBlockNum()) + 1;
281
237
 
282
- if (
283
- (await this.txPool.isEmpty()) &&
284
- (this.attestationPool === undefined || (await this.attestationPool?.isEmpty()))
285
- ) {
238
+ if ((await this.txPool.isEmpty()) && (await this.attestationPool.isEmpty())) {
286
239
  // if mempools are empty, we don't care about syncing prior blocks
287
- this.initBlockStream(this.latestBlockNumberAtStart);
240
+ this.initBlockStream(BlockNumber(this.latestBlockNumberAtStart));
288
241
  this.setCurrentState(P2PClientState.RUNNING);
289
242
  this.syncPromise = Promise.resolve();
290
243
  await this.p2pService.start();
@@ -332,15 +285,13 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
332
285
  return this.p2pService.addReqRespSubProtocol(subProtocol, handler, validator);
333
286
  }
334
287
 
335
- private initBlockStream(startingBlock?: number) {
288
+ private initBlockStream(startingBlock?: BlockNumber) {
336
289
  if (!this.blockStream) {
337
290
  const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
338
- this.blockStream = new TraceableL2BlockStream(
291
+ this.blockStream = new L2BlockStream(
339
292
  this.l2BlockSource,
340
293
  this,
341
294
  this,
342
- this.telemetry.getTracer('P2PL2BlockStream'),
343
- 'P2PL2BlockStream',
344
295
  createLogger(`${this.log.module}:l2-block-stream`),
345
296
  { batchSize, pollIntervalMS, startingBlock },
346
297
  );
@@ -371,29 +322,41 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
371
322
  }
372
323
 
373
324
  @trackSpan('p2pClient.broadcastProposal', async proposal => ({
374
- [Attributes.SLOT_NUMBER]: proposal.slotNumber.toNumber(),
325
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
375
326
  [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
376
- [Attributes.P2P_ID]: (await proposal.p2pMessageIdentifier()).toString(),
327
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
377
328
  }))
378
329
  public broadcastProposal(proposal: BlockProposal): Promise<void> {
379
- this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber.toNumber()} to peers`);
330
+ this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
380
331
  return this.p2pService.propagate(proposal);
381
332
  }
382
333
 
383
- public async getAttestationsForSlot(slot: bigint, proposalId?: string): Promise<BlockAttestation[]> {
384
- return (
385
- (await (proposalId
386
- ? this.attestationPool?.getAttestationsForSlotAndProposal(slot, proposalId)
387
- : this.attestationPool?.getAttestationsForSlot(slot))) ?? []
388
- );
334
+ @trackSpan('p2pClient.broadcastCheckpointProposal', async proposal => ({
335
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
336
+ [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
337
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
338
+ }))
339
+ public broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void> {
340
+ this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
341
+ return this.p2pService.propagate(proposal);
342
+ }
343
+
344
+ public async broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
345
+ this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
346
+ await Promise.all(attestations.map(att => this.p2pService.propagate(att)));
389
347
  }
390
348
 
391
- public addAttestations(attestations: BlockAttestation[]): Promise<void> {
392
- return this.attestationPool?.addAttestations(attestations) ?? Promise.resolve();
349
+ public async getCheckpointAttestationsForSlot(
350
+ slot: SlotNumber,
351
+ proposalId?: string,
352
+ ): Promise<CheckpointAttestation[]> {
353
+ return await (proposalId
354
+ ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)
355
+ : this.attestationPool.getCheckpointAttestationsForSlot(slot));
393
356
  }
394
357
 
395
- public deleteAttestation(attestation: BlockAttestation): Promise<void> {
396
- return this.attestationPool?.deleteAttestations([attestation]) ?? Promise.resolve();
358
+ public addCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
359
+ return this.attestationPool.addCheckpointAttestations(attestations);
397
360
  }
398
361
 
399
362
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
@@ -402,6 +365,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
402
365
  this.p2pService.registerBlockReceivedCallback(handler);
403
366
  }
404
367
 
368
+ public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
369
+ this.p2pService.registerCheckpointReceivedCallback(handler);
370
+ }
371
+
405
372
  /**
406
373
  * Uses the batched Request Response protocol to request a set of transactions from the network.
407
374
  */
@@ -643,20 +610,23 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
643
610
  * Public function to check the latest block number that the P2P client is synced to.
644
611
  * @returns Block number of latest L2 Block we've synced with.
645
612
  */
646
- public async getSyncedLatestBlockNum(): Promise<number> {
647
- return (await this.synchedLatestBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
613
+ public async getSyncedLatestBlockNum(): Promise<BlockNumber> {
614
+ const tips = await this.l2Tips.getL2Tips();
615
+ return tips.proposed.number;
648
616
  }
649
617
 
650
618
  /**
651
619
  * Public function to check the latest proven block number that the P2P client is synced to.
652
620
  * @returns Block number of latest proven L2 Block we've synced with.
653
621
  */
654
- public async getSyncedProvenBlockNum(): Promise<number> {
655
- return (await this.synchedProvenBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
622
+ public async getSyncedProvenBlockNum(): Promise<BlockNumber> {
623
+ const tips = await this.l2Tips.getL2Tips();
624
+ return tips.proven.block.number;
656
625
  }
657
626
 
658
- public async getSyncedFinalizedBlockNum(): Promise<number> {
659
- return (await this.synchedFinalizedBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
627
+ public async getSyncedFinalizedBlockNum(): Promise<BlockNumber> {
628
+ const tips = await this.l2Tips.getL2Tips();
629
+ return tips.finalized.block.number;
660
630
  }
661
631
 
662
632
  /** Returns latest L2 slot for which we have seen an L2 block. */
@@ -672,7 +642,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
672
642
  const blockNumber = await this.getSyncedLatestBlockNum();
673
643
  const blockHash =
674
644
  blockNumber === 0
675
- ? ''
645
+ ? GENESIS_BLOCK_HEADER_HASH.toString()
676
646
  : await this.l2BlockSource
677
647
  .getBlockHeader(blockNumber)
678
648
  .then(header => header?.hash())
@@ -680,8 +650,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
680
650
 
681
651
  return {
682
652
  state: this.currentState,
683
- syncedToL2Block: { number: blockNumber, hash: blockHash },
684
- } as P2PSyncState;
653
+ syncedToL2Block: { number: blockNumber, hash: blockHash! },
654
+ };
685
655
  }
686
656
 
687
657
  /**
@@ -692,7 +662,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
692
662
  private async markTxsAsMinedFromBlocks(blocks: L2Block[]): Promise<void> {
693
663
  for (const block of blocks) {
694
664
  const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
695
- await this.txPool.markAsMined(txHashes, block.getBlockHeader());
665
+ await this.txPool.markAsMined(txHashes, block.header);
696
666
  }
697
667
  }
698
668
 
@@ -701,29 +671,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
701
671
  * @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
702
672
  * @returns Empty promise.
703
673
  */
704
- private async handleLatestL2Blocks(blocks: PublishedL2Block[]): Promise<void> {
674
+ private async handleLatestL2Blocks(blocks: L2Block[]): Promise<void> {
705
675
  if (!blocks.length) {
706
676
  return Promise.resolve();
707
677
  }
708
678
 
709
- await this.markTxsAsMinedFromBlocks(blocks.map(b => b.block));
710
- await this.startCollectingMissingTxs(blocks.map(b => b.block));
711
-
712
- const lastBlock = blocks.at(-1)!.block;
713
-
714
- await Promise.all(
715
- blocks.map(async block =>
716
- this.setBlockHash({
717
- number: block.block.number,
718
- hash: await block.block.hash().then(h => h.toString()),
719
- }),
720
- ),
721
- );
679
+ await this.markTxsAsMinedFromBlocks(blocks);
680
+ await this.txPool.clearNonEvictableTxs();
681
+ await this.startCollectingMissingTxs(blocks);
722
682
 
723
- await this.synchedLatestBlockNumber.set(lastBlock.number);
724
- await this.synchedLatestSlot.set(lastBlock.header.getSlot());
683
+ const lastBlock = blocks.at(-1)!;
684
+ await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
725
685
  this.log.verbose(`Synched to latest block ${lastBlock.number}`);
726
- await this.startServiceIfSynched();
727
686
  }
728
687
 
729
688
  /** Request txs for unproven blocks so the prover node has more chances to get them. */
@@ -774,19 +733,16 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
774
733
  await this.txPool.deleteTxs(txHashes, { permanently: true });
775
734
  await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
776
735
 
777
- await this.attestationPool?.deleteAttestationsOlderThan(lastBlockSlot);
736
+ await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
778
737
 
779
- await this.synchedFinalizedBlockNumber.set(lastBlockNum);
780
738
  this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
781
-
782
- await this.startServiceIfSynched();
783
739
  }
784
740
 
785
741
  /**
786
742
  * Updates the tx pool after a chain prune.
787
743
  * @param latestBlock - The block number the chain was pruned to.
788
744
  */
789
- private async handlePruneL2Blocks(latestBlock: number): Promise<void> {
745
+ private async handlePruneL2Blocks(latestBlock: BlockNumber): Promise<void> {
790
746
  const txsToDelete = new Map<string, TxHash>();
791
747
  const minedTxs = await this.txPool.getMinedTxHashes();
792
748
 
@@ -825,21 +781,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
825
781
  this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
826
782
  await this.txPool.deleteTxs(minedTxsFromReorg);
827
783
  } else {
828
- this.log.info(`Moving ${minedTxsFromReorg.length} mined txs from reorg back to pending`);
829
- await this.txPool.markMinedAsPending(minedTxsFromReorg);
784
+ await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
830
785
  }
831
-
832
- await this.synchedLatestBlockNumber.set(latestBlock);
833
- // no need to update block hashes, as they will be updated as new blocks are added
834
786
  }
835
787
 
836
788
  private async startServiceIfSynched() {
837
789
  if (this.currentState !== P2PClientState.SYNCHING) {
838
790
  return;
839
791
  }
840
- const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum();
841
- const syncedProvenBlock = await this.getSyncedProvenBlockNum();
842
- const syncedLatestBlock = await this.getSyncedLatestBlockNum();
792
+ const tips = await this.l2Tips.getL2Tips();
793
+ const syncedFinalizedBlock = tips.finalized.block.number;
794
+ const syncedProvenBlock = tips.proven.block.number;
795
+ const syncedLatestBlock = tips.proposed.number;
843
796
 
844
797
  if (
845
798
  syncedLatestBlock >= this.latestBlockNumberAtStart &&