@aztec/p2p 0.0.1-commit.96dac018d → 0.0.1-commit.993d240

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 (455) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +9 -1
  5. package/dest/client/factory.d.ts +7 -7
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +34 -16
  8. package/dest/client/interface.d.ts +17 -8
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +15 -11
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +93 -49
  13. package/dest/config.d.ts +153 -102
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +134 -35
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +267 -197
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +181 -65
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +4 -2
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +33 -15
  39. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  54. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  55. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  57. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  58. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  60. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
  61. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/index.js +1 -1
  63. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +12 -5
  64. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  66. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +44 -12
  67. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +81 -22
  69. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  70. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -44
  72. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  73. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  75. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  76. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +133 -110
  78. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  79. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  81. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  82. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  84. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  85. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  86. package/dest/msg_validators/clock_tolerance.js +61 -3
  87. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  88. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  90. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  91. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  93. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  94. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
  96. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  97. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  99. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  100. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  102. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  103. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  104. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  105. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  106. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  107. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  108. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  109. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  110. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  112. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  113. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  114. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  115. package/dest/msg_validators/tx_validator/factory.d.ts +27 -7
  116. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/factory.js +47 -17
  118. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  121. package/dest/msg_validators/tx_validator/gas_validator.d.ts +48 -7
  122. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  124. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  125. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/index.js +3 -0
  127. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  128. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  130. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  131. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  132. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  133. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  134. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  136. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  137. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  138. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  139. package/dest/services/data_store.d.ts +1 -1
  140. package/dest/services/data_store.d.ts.map +1 -1
  141. package/dest/services/data_store.js +5 -5
  142. package/dest/services/discv5/discV5_service.d.ts +2 -1
  143. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  144. package/dest/services/discv5/discV5_service.js +35 -8
  145. package/dest/services/dummy_service.d.ts +11 -15
  146. package/dest/services/dummy_service.d.ts.map +1 -1
  147. package/dest/services/dummy_service.js +12 -16
  148. package/dest/services/encoding.d.ts +6 -2
  149. package/dest/services/encoding.d.ts.map +1 -1
  150. package/dest/services/encoding.js +14 -8
  151. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  152. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  153. package/dest/services/gossipsub/topic_score_params.js +21 -4
  154. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  155. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  156. package/dest/services/libp2p/instrumentation.js +14 -0
  157. package/dest/services/libp2p/libp2p_service.d.ts +39 -50
  158. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  159. package/dest/services/libp2p/libp2p_service.js +299 -250
  160. package/dest/services/peer-manager/metrics.d.ts +3 -1
  161. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  162. package/dest/services/peer-manager/metrics.js +6 -0
  163. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  164. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  165. package/dest/services/peer-manager/peer_manager.js +40 -11
  166. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  167. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  168. package/dest/services/peer-manager/peer_scoring.js +32 -10
  169. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  170. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  171. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +84 -71
  172. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  173. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  174. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  175. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  176. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  177. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  178. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  179. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  180. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  181. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  182. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  183. package/dest/services/reqresp/config.d.ts +3 -3
  184. package/dest/services/reqresp/config.d.ts.map +1 -1
  185. package/dest/services/reqresp/interface.d.ts +16 -18
  186. package/dest/services/reqresp/interface.d.ts.map +1 -1
  187. package/dest/services/reqresp/interface.js +10 -20
  188. package/dest/services/reqresp/metrics.d.ts +1 -1
  189. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  190. package/dest/services/reqresp/metrics.js +0 -1
  191. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  192. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  193. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +4 -2
  194. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  195. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  196. package/dest/services/reqresp/protocols/index.js +0 -1
  197. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  198. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  199. package/dest/services/reqresp/protocols/tx.js +1 -3
  200. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  201. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  202. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  203. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  204. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  205. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  206. package/dest/services/reqresp/reqresp.d.ts +7 -29
  207. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  208. package/dest/services/reqresp/reqresp.js +43 -215
  209. package/dest/services/service.d.ts +9 -12
  210. package/dest/services/service.d.ts.map +1 -1
  211. package/dest/services/tx_collection/config.d.ts +2 -23
  212. package/dest/services/tx_collection/config.d.ts.map +1 -1
  213. package/dest/services/tx_collection/config.js +2 -55
  214. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  215. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  216. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  217. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  218. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  219. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  220. package/dest/services/tx_collection/index.d.ts +2 -3
  221. package/dest/services/tx_collection/index.d.ts.map +1 -1
  222. package/dest/services/tx_collection/index.js +0 -1
  223. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  224. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  225. package/dest/services/tx_collection/instrumentation.js +0 -2
  226. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  227. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  228. package/dest/services/tx_collection/request_tracker.js +84 -0
  229. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  230. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  231. package/dest/services/tx_collection/tx_collection.js +275 -119
  232. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  233. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  234. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  235. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  236. package/dest/services/tx_collection/tx_source.js +9 -7
  237. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  238. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  239. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  240. package/dest/services/tx_provider.d.ts +3 -1
  241. package/dest/services/tx_provider.d.ts.map +1 -1
  242. package/dest/services/tx_provider.js +3 -0
  243. package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
  244. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  245. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  246. package/dest/test-helpers/mock-pubsub.d.ts +24 -11
  247. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  248. package/dest/test-helpers/mock-pubsub.js +45 -45
  249. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  250. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  251. package/dest/test-helpers/reqresp-nodes.js +17 -19
  252. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  253. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  254. package/dest/test-helpers/test_tx_provider.js +3 -0
  255. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  256. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  257. package/dest/test-helpers/testbench-utils.js +42 -15
  258. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  259. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  260. package/dest/testbench/p2p_client_testbench_worker.js +88 -42
  261. package/dest/testbench/worker_client_manager.d.ts +12 -6
  262. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  263. package/dest/testbench/worker_client_manager.js +57 -11
  264. package/dest/util.d.ts +12 -7
  265. package/dest/util.d.ts.map +1 -1
  266. package/dest/util.js +35 -14
  267. package/dest/versioning.d.ts +3 -6
  268. package/dest/versioning.d.ts.map +1 -1
  269. package/dest/versioning.js +3 -24
  270. package/package.json +15 -14
  271. package/src/bootstrap/bootstrap.ts +9 -1
  272. package/src/client/factory.ts +65 -21
  273. package/src/client/interface.ts +18 -20
  274. package/src/client/p2p_client.ts +108 -82
  275. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  276. package/src/config.ts +226 -36
  277. package/src/errors/p2p-service.error.ts +11 -0
  278. package/src/errors/reqresp.error.ts +0 -25
  279. package/src/index.ts +0 -1
  280. package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
  281. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  282. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  283. package/src/mem_pools/index.ts +0 -3
  284. package/src/mem_pools/instrumentation.ts +22 -14
  285. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  286. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  287. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
  288. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  289. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  290. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  291. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  292. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  293. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  294. package/src/mem_pools/tx_pool_v2/index.ts +1 -1
  295. package/src/mem_pools/tx_pool_v2/interfaces.ts +12 -4
  296. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +121 -27
  297. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  298. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  299. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +141 -114
  300. package/src/msg_validators/attestation_validator/README.md +49 -0
  301. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  302. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  303. package/src/msg_validators/clock_tolerance.ts +79 -3
  304. package/src/msg_validators/proposal_validator/README.md +123 -0
  305. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  306. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  307. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  308. package/src/msg_validators/tx_validator/README.md +15 -3
  309. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  310. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  311. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  312. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  313. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  314. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  315. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  316. package/src/msg_validators/tx_validator/factory.ts +61 -10
  317. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  318. package/src/msg_validators/tx_validator/gas_validator.ts +121 -39
  319. package/src/msg_validators/tx_validator/index.ts +3 -0
  320. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  321. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  322. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  323. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  324. package/src/services/data_store.ts +5 -13
  325. package/src/services/discv5/discV5_service.ts +38 -5
  326. package/src/services/dummy_service.ts +14 -39
  327. package/src/services/encoding.ts +14 -7
  328. package/src/services/gossipsub/topic_score_params.ts +36 -4
  329. package/src/services/libp2p/instrumentation.ts +14 -0
  330. package/src/services/libp2p/libp2p_service.ts +326 -287
  331. package/src/services/peer-manager/metrics.ts +7 -0
  332. package/src/services/peer-manager/peer_manager.ts +46 -11
  333. package/src/services/peer-manager/peer_scoring.ts +27 -5
  334. package/src/services/reqresp/README.md +215 -0
  335. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  336. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +83 -77
  337. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  338. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  339. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  340. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  341. package/src/services/reqresp/config.ts +2 -2
  342. package/src/services/reqresp/interface.ts +21 -47
  343. package/src/services/reqresp/metrics.ts +0 -1
  344. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
  345. package/src/services/reqresp/protocols/index.ts +0 -1
  346. package/src/services/reqresp/protocols/tx.ts +1 -3
  347. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  348. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  349. package/src/services/reqresp/reqresp.ts +48 -261
  350. package/src/services/service.ts +12 -28
  351. package/src/services/tx_collection/config.ts +3 -80
  352. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  353. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  354. package/src/services/tx_collection/index.ts +1 -6
  355. package/src/services/tx_collection/instrumentation.ts +1 -7
  356. package/src/services/tx_collection/request_tracker.ts +127 -0
  357. package/src/services/tx_collection/tx_collection.ts +331 -176
  358. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  359. package/src/services/tx_collection/tx_source.ts +8 -7
  360. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  361. package/src/services/tx_provider.ts +5 -0
  362. package/src/test-helpers/make-test-p2p-clients.ts +4 -3
  363. package/src/test-helpers/mock-pubsub.ts +49 -66
  364. package/src/test-helpers/reqresp-nodes.ts +15 -28
  365. package/src/test-helpers/test_tx_provider.ts +5 -0
  366. package/src/test-helpers/testbench-utils.ts +53 -28
  367. package/src/testbench/p2p_client_testbench_worker.ts +91 -61
  368. package/src/testbench/worker_client_manager.ts +72 -25
  369. package/src/util.ts +33 -18
  370. package/src/versioning.ts +3 -33
  371. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  372. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  373. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  374. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  375. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  376. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  377. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  378. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  379. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  380. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  381. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  382. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  383. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  384. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  385. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  386. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  387. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  388. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  389. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  390. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  391. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  392. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  393. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  394. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  395. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  396. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  397. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  398. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  399. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  400. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  401. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  402. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  403. package/dest/mem_pools/tx_pool/index.js +0 -2
  404. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  405. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  406. package/dest/mem_pools/tx_pool/priority.js +0 -15
  407. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  408. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  409. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  410. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  411. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  412. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  413. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  414. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  415. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  416. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  417. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  418. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  419. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  420. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  421. package/dest/services/reqresp/protocols/block.js +0 -32
  422. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  423. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  424. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  425. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  426. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  427. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  428. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  429. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  430. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  431. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  432. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  433. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  434. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -346
  435. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  436. package/src/mem_pools/tx_pool/README.md +0 -270
  437. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  438. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  439. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  440. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  441. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  442. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  443. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  444. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  445. package/src/mem_pools/tx_pool/index.ts +0 -2
  446. package/src/mem_pools/tx_pool/priority.ts +0 -20
  447. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  448. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  449. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  450. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  451. package/src/services/reqresp/protocols/block.ts +0 -37
  452. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  453. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  454. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  455. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,12 +1,18 @@
1
- import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
3
- import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import {
3
+ BlockNumber,
4
+ CheckpointNumber,
5
+ type CheckpointProposalHash,
6
+ SlotNumber,
7
+ } from '@aztec/foundation/branded-types';
4
8
  import { createLogger } from '@aztec/foundation/log';
5
9
  import { RunningPromise } from '@aztec/foundation/promise';
6
10
  import { DateProvider } from '@aztec/foundation/timer';
7
11
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
8
12
  import { L2TipsKVStore } from '@aztec/kv-store/stores';
9
13
  import {
14
+ type BlockData,
15
+ type BlockHash,
10
16
  type CheckpointId,
11
17
  type EthAddress,
12
18
  type L2Block,
@@ -20,13 +26,7 @@ import {
20
26
  import type { ContractDataSource } from '@aztec/stdlib/contract';
21
27
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
22
28
  import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
23
- import {
24
- type BlockProposal,
25
- CheckpointAttestation,
26
- type CheckpointProposal,
27
- type P2PClientType,
28
- type TopicType,
29
- } from '@aztec/stdlib/p2p';
29
+ import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
30
30
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
31
31
  import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
32
32
 
@@ -35,15 +35,11 @@ import type { ENR } from '@nethermindeth/enr';
35
35
 
36
36
  import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
37
37
  import { TxPoolError } from '../errors/tx-pool.error.js';
38
- import type { AttestationPoolApi } from '../mem_pools/attestation_pool/attestation_pool.js';
38
+ import type { AttestationPoolApi, ProposalsForSlot } from '../mem_pools/attestation_pool/attestation_pool.js';
39
39
  import type { MemPools } from '../mem_pools/interface.js';
40
40
  import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
41
41
  import type { AuthRequest, StatusMessage } from '../services/index.js';
42
- import {
43
- ReqRespSubProtocol,
44
- type ReqRespSubProtocolHandler,
45
- type ReqRespSubProtocolValidators,
46
- } from '../services/reqresp/interface.js';
42
+ import { ReqRespSubProtocol, type ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
47
43
  import type {
48
44
  DuplicateAttestationInfo,
49
45
  DuplicateProposalInfo,
@@ -59,10 +55,7 @@ import { type P2P, P2PClientState, type P2PSyncState } from './interface.js';
59
55
  /**
60
56
  * The P2P client implementation.
61
57
  */
62
- export class P2PClient<T extends P2PClientType = P2PClientType.Full>
63
- extends WithTracer
64
- implements P2P, P2P<P2PClientType.Prover>
65
- {
58
+ export class P2PClient extends WithTracer implements P2P {
66
59
  /** The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped. */
67
60
  private runningPromise!: Promise<void>;
68
61
 
@@ -94,7 +87,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
94
87
  private slotMonitor: RunningPromise | undefined;
95
88
 
96
89
  constructor(
97
- _clientType: T,
98
90
  private store: AztecAsyncKVStore,
99
91
  private l2BlockSource: L2BlockSource & ContractDataSource,
100
92
  mempools: MemPools,
@@ -106,6 +98,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
106
98
  private _dateProvider: DateProvider = new DateProvider(),
107
99
  private telemetry: TelemetryClient = getTelemetryClient(),
108
100
  private log = createLogger('p2p'),
101
+ initialBlockHash: BlockHash,
109
102
  ) {
110
103
  super(telemetry, 'P2PClient');
111
104
 
@@ -121,28 +114,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
121
114
  this.telemetry,
122
115
  );
123
116
 
124
- // Default to collecting all txs when we see a valid proposal
125
- // This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
126
- // Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
127
- // TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
128
- // validator-client code into here so we can validate a proposal is reasonable.
129
- this.registerBlockProposalHandler(async (block, sender) => {
130
- this.log.debug(`Received block proposal from ${sender.toString()}`);
131
- // TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
132
- const constants = this.txCollection.getConstants();
133
- const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
134
- const deadline = new Date(nextSlotTimestampSeconds * 1000);
135
- const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
136
- if (!parentBlock) {
137
- this.log.debug(`Cannot collect txs for proposal as parent block not found`);
138
- return false;
139
- }
140
- const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
141
- await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
142
- return true;
143
- });
144
-
145
- this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
117
+ this.l2Tips = new L2TipsKVStore(store, 'p2p_client', initialBlockHash);
146
118
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
147
119
  }
148
120
 
@@ -196,7 +168,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
196
168
  const from = BlockNumber(oldFinalizedBlockNum + 1);
197
169
  const limit = event.block.number - from + 1;
198
170
  if (limit > 0) {
199
- const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
171
+ const oldBlocks = await this.l2BlockSource.getBlocksData({ from, limit });
200
172
  await this.handleFinalizedL2Blocks(oldBlocks);
201
173
  }
202
174
  break;
@@ -289,8 +261,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
289
261
  });
290
262
  }
291
263
 
292
- this.blockStream!.start();
293
- await this.txCollection.start();
264
+ // Should never happen: all branches above call initBlockStream()
265
+ if (!this.blockStream) {
266
+ throw new Error('Block stream not initialized');
267
+ }
268
+ this.blockStream.start();
294
269
  this.txFileStore?.start();
295
270
 
296
271
  // Start slot monitor to call prepareForSlot when the slot changes
@@ -304,12 +279,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
304
279
  return this.syncPromise;
305
280
  }
306
281
 
307
- addReqRespSubProtocol(
308
- subProtocol: ReqRespSubProtocol,
309
- handler: ReqRespSubProtocolHandler,
310
- validator: ReqRespSubProtocolValidators[ReqRespSubProtocol],
311
- ): Promise<void> {
312
- return this.p2pService.addReqRespSubProtocol(subProtocol, handler, validator);
282
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
283
+ return this.p2pService.addReqRespSubProtocol(subProtocol, handler);
313
284
  }
314
285
 
315
286
  private initBlockStream(startingBlock?: BlockNumber) {
@@ -351,7 +322,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
351
322
  /** Triggers a sync to the archiver. Used for testing. */
352
323
  public async sync() {
353
324
  this.initBlockStream();
354
- await this.blockStream!.sync();
325
+ // Should never happen: initBlockStream() creates blockStream if absent
326
+ if (!this.blockStream) {
327
+ throw new Error('Block stream not initialized');
328
+ }
329
+ await this.blockStream.sync();
355
330
  }
356
331
 
357
332
  @trackSpan('p2pClient.broadcastProposal', async proposal => ({
@@ -389,6 +364,19 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
389
364
  // Store our own last-block proposal so we can respond to req/resp requests for it.
390
365
  await this.attestationPool.tryAddBlockProposal(blockProposal);
391
366
  }
367
+ const checkpointCore = proposal.toCore();
368
+ const { count } = await this.attestationPool.tryAddCheckpointProposal(checkpointCore);
369
+ if (count > 1) {
370
+ if (this.config.broadcastEquivocatedProposals) {
371
+ this.log.warn(`Broadcasting equivocated checkpoint proposal for slot ${proposal.slotNumber}`, {
372
+ slot: proposal.slotNumber,
373
+ archive: proposal.archive.toString(),
374
+ count,
375
+ });
376
+ } else {
377
+ throw new Error(`Attempted to broadcast a duplicate checkpoint proposal for slot ${proposal.slotNumber}`);
378
+ }
379
+ }
392
380
  return this.p2pService.propagate(proposal);
393
381
  }
394
382
 
@@ -399,10 +387,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
399
387
 
400
388
  public async getCheckpointAttestationsForSlot(
401
389
  slot: SlotNumber,
402
- proposalId?: string,
390
+ proposalPayloadHash?: CheckpointProposalHash,
403
391
  ): Promise<CheckpointAttestation[]> {
404
- return await (proposalId
405
- ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)
392
+ return await (proposalPayloadHash
393
+ ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalPayloadHash)
406
394
  : this.attestationPool.getCheckpointAttestationsForSlot(slot));
407
395
  }
408
396
 
@@ -410,6 +398,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
410
398
  return this.attestationPool.addOwnCheckpointAttestations(attestations);
411
399
  }
412
400
 
401
+ public getProposalsForSlot(slot: SlotNumber): Promise<ProposalsForSlot> {
402
+ return this.attestationPool.getProposalsForSlot(slot);
403
+ }
404
+
413
405
  public hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean> {
414
406
  return this.attestationPool.hasBlockProposalsForSlot(slot);
415
407
  }
@@ -420,8 +412,12 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
420
412
  this.p2pService.registerBlockReceivedCallback(handler);
421
413
  }
422
414
 
423
- public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
424
- this.p2pService.registerCheckpointReceivedCallback(handler);
415
+ public registerValidatorCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
416
+ this.p2pService.registerValidatorCheckpointReceivedCallback(handler);
417
+ }
418
+
419
+ public registerAllNodesCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
420
+ this.p2pService.registerAllNodesCheckpointReceivedCallback(handler);
425
421
  }
426
422
 
427
423
  public registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void {
@@ -432,6 +428,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
432
428
  this.p2pService.registerDuplicateAttestationCallback(callback);
433
429
  }
434
430
 
431
+ public registerCheckpointAttestationCallback(callback: (attestation: CheckpointAttestation) => void): void {
432
+ this.p2pService.registerCheckpointAttestationCallback(callback);
433
+ }
434
+
435
435
  public async getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]> {
436
436
  if (limit !== undefined && limit <= 0) {
437
437
  throw new TypeError('limit must be greater than 0');
@@ -602,13 +602,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
602
602
  */
603
603
  public async getStatus(): Promise<P2PSyncState> {
604
604
  const blockNumber = await this.getSyncedLatestBlockNum();
605
- const blockHash =
606
- blockNumber === 0
607
- ? GENESIS_BLOCK_HEADER_HASH.toString()
608
- : await this.l2BlockSource
609
- .getBlockHeader(blockNumber)
610
- .then(header => header?.hash())
611
- .then(hash => hash?.toString());
605
+ const blockHash = await this.l2BlockSource
606
+ .getBlockData({ number: blockNumber })
607
+ .then(data => data?.header.hash())
608
+ .then(hash => hash?.toString());
612
609
 
613
610
  return {
614
611
  state: this.currentState,
@@ -639,13 +636,13 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
639
636
 
640
637
  await this.handleMinedBlocks(blocks);
641
638
  await this.maybeCallPrepareForSlot();
642
- await this.startCollectingMissingTxs(blocks);
639
+ await this.collectingMissingTxs(blocks);
643
640
  const lastBlock = blocks.at(-1)!;
644
641
  await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
645
642
  }
646
643
 
647
- /** Request txs for unproven blocks so the prover node has more chances to get them. */
648
- private async startCollectingMissingTxs(blocks: L2Block[]): Promise<void> {
644
+ /** Request txs for unproven blocks so the prover node can prove. */
645
+ private async collectingMissingTxs(blocks: L2Block[]): Promise<void> {
649
646
  try {
650
647
  // TODO(#15435): If the archiver has lagged behind L1, the reported proven block number may
651
648
  // be much lower than the actual one, and it does not update until the pending chain is
@@ -653,7 +650,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
653
650
  // are already proven, but the archiver has not yet updated its state. Until this is properly
654
651
  // fixed, it is mitigated by the expiration date of collection requests, which depends on
655
652
  // the slot number of the block.
656
- const provenBlockNumber = await this.l2BlockSource.getProvenBlockNumber();
653
+ const provenBlockNumber = (await this.l2BlockSource.getBlockNumber({ tag: 'proven' })) ?? BlockNumber.ZERO;
657
654
  const unprovenBlocks = blocks.filter(block => block.number > provenBlockNumber);
658
655
  for (const block of unprovenBlocks) {
659
656
  const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
@@ -665,7 +662,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
665
662
  `Starting collection of ${missingTxHashes.length} missing txs for unproven mined block ${block.number}`,
666
663
  { missingTxHashes, blockNumber: block.number, blockHash: await block.hash().then(h => h.toString()) },
667
664
  );
668
- this.txCollection.startCollecting(block, missingTxHashes);
665
+ // Both `slashDataWithholdingToleranceSlots` and `p2pMissingTxCollectionDeadlineSlots`
666
+ // count *full slots after the block slot* — value N means collection runs until
667
+ // `slotStart(block.slot + N + 1)`. Take the larger of the two so collection never
668
+ // gives up before the data-withholding slash verdict is rendered.
669
+ const blockSlot = block.header.getSlot();
670
+ const toleranceSlots = this.config.slashDataWithholdingToleranceSlots;
671
+ const configuredSlots = this.config.p2pMissingTxCollectionDeadlineSlots ?? 0;
672
+ const deadlineSlot = SlotNumber(blockSlot + Math.max(toleranceSlots, configuredSlots) + 1);
673
+ const deadlineSeconds = getTimestampForSlot(deadlineSlot, this.epochCache.getL1Constants());
674
+ const deadline = new Date(Number(deadlineSeconds) * 1000);
675
+ await this.txCollection.collectFastForBlock(block, missingTxHashes, { deadline });
669
676
  }
670
677
  }
671
678
  } catch (err) {
@@ -678,7 +685,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
678
685
  * @param blocks - A list of finalized L2 blocks.
679
686
  * @returns Empty promise.
680
687
  */
681
- private async handleFinalizedL2Blocks(blocks: L2Block[]): Promise<void> {
688
+ private async handleFinalizedL2Blocks(blocks: BlockData[]): Promise<void> {
682
689
  if (!blocks.length) {
683
690
  return;
684
691
  }
@@ -701,31 +708,50 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
701
708
  }
702
709
 
703
710
  /**
704
- * Returns true if the prune crossed a checkpoint boundary.
705
- * If the old and new checkpoint numbers are the same, the prune is within a single checkpoint.
706
- * If they differ, the prune spans across checkpoints (epoch prune).
711
+ * Returns true if the prune is an epoch prune (new checkpoint number is less than old).
712
+ * If the checkpoint number stays the same or increases, the prune is within a checkpoint.
707
713
  */
708
714
  private async isEpochPrune(newCheckpoint: CheckpointId): Promise<boolean> {
709
715
  const tips = await this.l2Tips.getL2Tips();
710
716
  const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
711
- if (oldCheckpointNumber <= CheckpointNumber.ZERO) {
717
+ if (oldCheckpointNumber <= CheckpointNumber.INITIAL) {
712
718
  return false;
713
719
  }
714
- const isEpochPrune = oldCheckpointNumber !== newCheckpoint.number;
715
- this.log.info(
716
- `Detected epoch prune: ${isEpochPrune}. Old checkpoint: ${oldCheckpointNumber}, new checkpoint: ${newCheckpoint.number}`,
717
- );
720
+ const newCheckpointNumber = newCheckpoint.number;
721
+ // We check that the new checkpoint number is less than the old checkpoint number in order to consider it an epoch prune.
722
+ // To be more certain that it is an epoch prune, we will check that at least 2 checkpoints were removed.
723
+ // This means we should avoid thinking checkpoints removed by L1 re-orgs are epoch prunes
724
+ const thresholdForEpochPrune = CheckpointNumber(oldCheckpointNumber - 2);
725
+ const isEpochPrune = newCheckpointNumber <= thresholdForEpochPrune;
726
+ if (isEpochPrune) {
727
+ this.log.info(`Detected epoch prune to ${newCheckpointNumber}`, {
728
+ oldCheckpointNumber,
729
+ newCheckpointNumber,
730
+ thresholdForEpochPrune,
731
+ });
732
+ }
718
733
  return isEpochPrune;
719
734
  }
720
735
 
721
736
  /** Checks if the slot has changed and calls prepareForSlot if so. */
722
737
  private async maybeCallPrepareForSlot(): Promise<void> {
723
- const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
724
- if (currentSlot <= this.lastSlotProcessed) {
738
+ // If we have a proposed checkpoint available, we want to prepare the target slot - otherwise we prepare the current slot
739
+ const l2Tips = await this.l2Tips.getL2Tips();
740
+ const hasProposedCheckpoint = l2Tips.proposedCheckpoint.checkpoint.number > l2Tips.checkpointed.checkpoint.number;
741
+
742
+ let slot;
743
+ if (this.epochCache.isProposerPipeliningEnabled() && hasProposedCheckpoint) {
744
+ const { targetSlot } = this.epochCache.getTargetAndNextSlot();
745
+ slot = targetSlot;
746
+ } else {
747
+ const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
748
+ slot = currentSlot;
749
+ }
750
+ if (slot <= this.lastSlotProcessed) {
725
751
  return;
726
752
  }
727
- this.lastSlotProcessed = currentSlot;
728
- await this.txPool.prepareForSlot(currentSlot);
753
+ this.lastSlotProcessed = slot;
754
+ await this.txPool.prepareForSlot(slot);
729
755
  }
730
756
 
731
757
  private async startServiceIfSynched() {
@@ -1,6 +1,6 @@
1
- # ProposalTxCollector Benchmarks
1
+ # BatchTxRequester Benchmarks
2
2
 
3
- This benchmark suite measures **how quickly a proposer node can fetch missing transactions from P2P peers** when building a block proposal. It compares two alternative transaction-collection implementations under several controlled "who-has-which-txs" distributions.
3
+ This benchmark suite measures **how quickly a proposer node can fetch missing transactions from P2P peers** when building a block proposal under several controlled "who-has-which-txs" distributions.
4
4
 
5
5
  ## Purpose
6
6
 
@@ -10,12 +10,6 @@ This benchmark answers:
10
10
 
11
11
  - How long does it take to fetch **N missing txs** (N ∈ **{10, 50, 100, 500}**)?
12
12
  - How do different **peer availability patterns** affect performance?
13
- - Which collector strategy performs better under each pattern?
14
-
15
- The suite compares two collectors:
16
-
17
- - **`BatchTxRequesterCollector`** (collector type: `batch-requester`)
18
- - **`SendBatchRequestCollector`** (collector type: `send-batch-request`)
19
13
 
20
14
  ## Architecture
21
15
 
@@ -24,7 +18,7 @@ The benchmark runs a small simulated network on localhost:
24
18
  ```
25
19
  ┌─────────────────────────────────────────────────────────────────────┐
26
20
  │ Test Process (Driver) │
27
- │ p2p_client.proposal_tx_collector.bench.test.ts
21
+ │ p2p_client.batch_tx_requester.bench.test.ts
28
22
  │ ┌─────────────────────────────────────────────────────────────┐ │
29
23
  │ │ WorkerClientManager │ │
30
24
  │ │ (src/testbench/worker_client_manager.ts) │ │
@@ -34,7 +28,7 @@ The benchmark runs a small simulated network on localhost:
34
28
  │ ▼ ▼ ▼ │
35
29
  │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
36
30
  │ │ Worker 0 │◄──────►│ Worker 1 │◄──────►│ Worker N-1│ │
37
- │ │ (Collector│ P2P │(Responder)│ P2P │(Responder)│ │
31
+ │ │(Aggregator│ P2P │(Responder)│ P2P │(Responder)│ │
38
32
  │ │ Node) │ │ │ │ │ │
39
33
  │ │ TxPool:[] │ │ TxPool: │ │ TxPool: │ │
40
34
  │ │ │ │ [txs...] │ │ [txs...] │ │
@@ -54,12 +48,12 @@ Using separate OS processes makes the setup closer to real networking behavior (
54
48
 
55
49
  The network is intentionally asymmetric:
56
50
 
57
- - **Worker 0 is the collector/proposer node**
51
+ - **Worker 0 is the aggregator/proposer node**
58
52
  - Starts with an **empty tx pool** (`[]`)
59
- - Is the only worker instructed to run the collector for each `BENCH_REQRESP` command
53
+ - Is the only worker instructed to run `BatchTxRequester` for each `BENCH_REQRESP` command
60
54
  - **Workers 1..N-1 are responder peers**
61
55
  - Locally generate and filter txs according to the distribution pattern
62
- - Respond to req/resp queries made by Worker 0's collector
56
+ - Respond to req/resp queries made by Worker 0's `BatchTxRequester`
63
57
 
64
58
  This models a proposer that has only `txHashes` in a proposal and must fetch the full tx bodies from the network.
65
59
 
@@ -72,7 +66,7 @@ Each benchmark case generates `missingTxCount` mock txs and assigns them to peer
72
66
  **Every responder peer has every transaction.**
73
67
 
74
68
  - Simulates the best-case: high replication / high gossip success
75
- - Expectation: collector should quickly succeed; differences mostly reflect collector overhead and batching strategy
69
+ - Expectation: the requester should quickly succeed; differences mostly reflect requester overhead and batching strategy
76
70
 
77
71
  ### `sparse`
78
72
 
@@ -81,7 +75,7 @@ Each benchmark case generates `missingTxCount` mock txs and assigns them to peer
81
75
  Each responder is bucketed and holds txs whose index falls into its bucket or the "next" bucket (striped by tx index).
82
76
 
83
77
  - Simulates partial propagation, churn, or uneven mempool convergence
84
- - Expectation: collector must query multiple peers and cope with "misses"
78
+ - Expectation: the requester must query multiple peers and cope with "misses"
85
79
 
86
80
  ### `pinned-only`
87
81
 
@@ -92,33 +86,13 @@ Each responder is bucketed and holds txs whose index falls into its bucket or th
92
86
 
93
87
  > **Guardrail:** the pinned peer index must be within `(0, numberOfPeers)` (Worker 0 cannot be pinned).
94
88
 
95
- ## Collectors Under Test
96
-
97
- ### `BatchTxRequesterCollector` (`batch-requester`)
98
-
99
- ```typescript
100
- new BatchTxRequesterCollector(p2pService, logger, new DateProvider())
101
- ```
102
-
103
- Uses the P2P service plus internal logic to fetch missing txs, coordinating requests in a batched or staged way.
104
-
105
- ### `SendBatchRequestCollector` (`send-batch-request`)
106
-
107
- ```typescript
108
- const maxPeers = 10;
109
- const maxRetryAttempts = Math.max(peerIds.length, 3);
110
- new SendBatchRequestCollector(p2pService, maxPeers, maxRetryAttempts)
111
- ```
112
-
113
- Explicitly caps the number of peers it will involve (`maxPeers`) and uses a retry budget derived from peer count.
114
-
115
89
  ## Test Parameters
116
90
 
117
91
  | Parameter | Value | Description |
118
92
  |-----------|-------|-------------|
119
93
  | `PEERS_PER_RUN` | 30 | Number of worker processes spawned |
120
94
  | `MISSING_TX_COUNTS` | 10, 50, 100, 500 | Number of missing transactions to fetch |
121
- | `TIMEOUT_MS` | 30,000 ms | Collector timeout per case |
95
+ | `TIMEOUT_MS` | 30,000 ms | Per-case timeout for the requester |
122
96
  | `TEST_TIMEOUT_MS` | 600,000 ms | Overall Jest timeout (10 minutes) |
123
97
 
124
98
  ## Running
@@ -127,13 +101,13 @@ From the p2p package:
127
101
 
128
102
  ```bash
129
103
  cd yarn-project/p2p
130
- yarn test src/client/test/tx_proposal_collector/p2p_client.proposal_tx_collector.bench.test.ts
104
+ yarn test src/client/test/p2p_client.batch_tx_requester.bench.test.ts
131
105
  ```
132
106
 
133
107
  Or from repo root:
134
108
 
135
109
  ```bash
136
- yarn test p2p_client.proposal_tx_collector.bench.test.ts
110
+ yarn test p2p_client.batch_tx_requester.bench.test.ts
137
111
  ```
138
112
 
139
113
  The benchmark is intentionally long due to spawning many processes and running multiple cases.
@@ -145,14 +119,12 @@ The benchmark is intentionally long due to spawning many processes and running m
145
119
  If no env vars are set, the suite prints a table:
146
120
 
147
121
  ```
148
- | Collector | Distribution | Missing | Duration (ms) | Fetched | Success |
149
- |---------------------|--------------|---------|---------------|---------|---------|
150
- | batch-requester | pinned-only | 10 | 123 | 10 | Yes |
151
- | send-batch-request | pinned-only | 10 | 145 | 10 | Yes |
122
+ | Distribution | Missing | Duration (ms) | Fetched | Success |
123
+ |--------------|---------|---------------|---------|---------|
124
+ | pinned-only | 10 | 123 | 10 | Yes |
125
+ | pinned-only | 50 | 145 | 50 | Yes |
152
126
  ```
153
127
 
154
- Plus a comparison summary stating which collector was faster per `(distribution, missing)` pair.
155
-
156
128
  ### JSON metrics (for CI/dashboards)
157
129
 
158
130
  ```bash
@@ -160,8 +132,8 @@ BENCH_OUTPUT=/path/results.json yarn test ...
160
132
  ```
161
133
 
162
134
  Writes JSON metrics like:
163
- - `ProposalTxCollector/<collector>/<distribution>/missing_<N>/duration` (ms)
164
- - `ProposalTxCollector/<collector>/<distribution>/missing_<N>/fetched` (txs)
135
+ - `BatchTxRequester/<distribution>/missing_<N>/duration` (ms)
136
+ - `BatchTxRequester/<distribution>/missing_<N>/fetched` (txs)
165
137
 
166
138
  ### Markdown file output
167
139
 
@@ -175,14 +147,14 @@ Writes the pretty table + summary to disk.
175
147
 
176
148
  For each case the benchmark records:
177
149
 
178
- - `durationMs`: wall-clock time spent inside the collector call
179
- - `fetchedCount`: how many txs were returned by the collector
150
+ - `durationMs`: wall-clock time spent inside the requester call
151
+ - `fetchedCount`: how many txs were returned by the requester
180
152
  - `success`: `fetchedCount === missingTxCount`
181
153
 
182
154
  **Guidelines:**
183
155
 
184
156
  - **Always check `Success` first.** A faster run that fetched fewer txs is not a win.
185
- - Compare collectors **within the same distribution + missing count** only.
157
+ - Compare runs **within the same distribution + missing count** only.
186
158
  - Expect `pinned-only` to highlight pinned-peer behavior (fast if pinned peer is used effectively; slow if the algorithm wastes time sampling other peers).
187
159
  - Expect `sparse` to be the most "network-like" stress case, since many peers won't have each requested tx.
188
160
 
@@ -193,7 +165,7 @@ Inside each worker, the benchmark intentionally reduces variability:
193
165
  - **Unlimited rate limits** are installed so the req/resp rate limiter doesn't dominate results
194
166
  - **Deterministic tx generation** ensures all workers see the same tx set without large IPC payloads
195
167
 
196
- This makes the benchmark better for *comparing collectors* (A vs B), but it is **not** a perfect model of production networking conditions.
168
+ This makes the benchmark better for tracking regressions, but it is **not** a perfect model of production networking conditions.
197
169
 
198
170
  ## Limitations
199
171
 
@@ -207,9 +179,7 @@ This benchmark does **not** measure:
207
179
 
208
180
  | File | Purpose |
209
181
  |------|---------|
210
- | `p2p_client.proposal_tx_collector.bench.test.ts` | Test suite (cases, distributions, output formatting) |
211
- | `proposal_tx_collector_worker.ts` | Collector-specific worker implementation |
212
- | `proposal_tx_collector_worker_protocol.ts` | IPC message types and serialization |
182
+ | `p2p_client.batch_tx_requester.bench.test.ts` | Test suite (cases, distributions, output formatting) |
213
183
  | `src/testbench/worker_client_manager.ts` | Worker process manager (forking, IPC, orchestration) |
214
184
  | `src/testbench/p2p_client_testbench_worker.ts` | General testbench worker implementation |
215
185
  | `src/test-helpers/testbench-utils.ts` | Shared mocks and utilities (InMemoryTxPool, InMemoryAttestationPool, etc.) |