@aztec/p2p 0.0.1-commit.9b94fc1 → 0.0.1-commit.b468ad8

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