@aztec/p2p 0.0.1-commit.a89ec08 → 0.0.1-commit.aa0c64f

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 (427) hide show
  1. package/README.md +7 -6
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +22 -6
  5. package/dest/client/factory.d.ts +5 -4
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +33 -23
  8. package/dest/client/interface.d.ts +48 -11
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +34 -19
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +105 -44
  13. package/dest/config.d.ts +147 -111
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +78 -32
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +101 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +274 -197
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +224 -65
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +12 -5
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +38 -17
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  42. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  53. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +39 -9
  54. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +9 -7
  57. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +55 -41
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -3
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +20 -6
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -3
  66. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +225 -118
  68. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  69. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  70. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
  71. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  72. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  73. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  74. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
  75. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  77. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
  78. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  79. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  80. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
  81. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  82. package/dest/msg_validators/proposal_validator/proposal_validator.js +85 -15
  83. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  84. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  85. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  86. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  87. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  88. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  89. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  90. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  91. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  92. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  93. package/dest/msg_validators/tx_validator/data_validator.js +1 -0
  94. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  95. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  96. package/dest/msg_validators/tx_validator/factory.js +29 -16
  97. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  98. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  99. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  100. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  101. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  102. package/dest/msg_validators/tx_validator/index.js +2 -0
  103. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  104. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  105. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  106. package/dest/msg_validators/tx_validator/phases_validator.js +2 -2
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  108. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  109. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  110. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  111. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  112. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  113. package/dest/services/data_store.d.ts +1 -1
  114. package/dest/services/data_store.d.ts.map +1 -1
  115. package/dest/services/data_store.js +5 -5
  116. package/dest/services/discv5/discV5_service.d.ts +13 -2
  117. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  118. package/dest/services/discv5/discV5_service.js +119 -23
  119. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  120. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  121. package/dest/services/discv5/persisted_enr_store.js +145 -0
  122. package/dest/services/dummy_service.d.ts +15 -15
  123. package/dest/services/dummy_service.d.ts.map +1 -1
  124. package/dest/services/dummy_service.js +15 -16
  125. package/dest/services/encoding.d.ts +19 -6
  126. package/dest/services/encoding.d.ts.map +1 -1
  127. package/dest/services/encoding.js +25 -15
  128. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  129. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  130. package/dest/services/gossipsub/topic_score_params.js +4 -14
  131. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  132. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  133. package/dest/services/libp2p/instrumentation.js +14 -0
  134. package/dest/services/libp2p/libp2p_service.d.ts +45 -47
  135. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  136. package/dest/services/libp2p/libp2p_service.js +409 -303
  137. package/dest/services/peer-manager/metrics.d.ts +3 -1
  138. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  139. package/dest/services/peer-manager/metrics.js +6 -0
  140. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  141. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  142. package/dest/services/peer-manager/peer_manager.js +83 -26
  143. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  144. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  145. package/dest/services/peer-manager/peer_scoring.js +102 -13
  146. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
  147. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +94 -122
  149. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  150. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  151. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  152. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  153. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  154. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  155. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  156. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  157. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  158. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  159. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  160. package/dest/services/reqresp/config.d.ts +15 -3
  161. package/dest/services/reqresp/config.d.ts.map +1 -1
  162. package/dest/services/reqresp/config.js +11 -0
  163. package/dest/services/reqresp/interface.d.ts +16 -18
  164. package/dest/services/reqresp/interface.d.ts.map +1 -1
  165. package/dest/services/reqresp/interface.js +10 -20
  166. package/dest/services/reqresp/metrics.d.ts +1 -1
  167. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  168. package/dest/services/reqresp/metrics.js +0 -1
  169. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  170. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  171. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  172. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  173. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  174. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  175. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  176. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  177. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  178. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  179. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  180. package/dest/services/reqresp/protocols/index.js +0 -1
  181. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  182. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  183. package/dest/services/reqresp/protocols/tx.js +1 -3
  184. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  185. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  186. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  187. package/dest/services/reqresp/reqresp.d.ts +7 -29
  188. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  189. package/dest/services/reqresp/reqresp.js +60 -209
  190. package/dest/services/service.d.ts +25 -12
  191. package/dest/services/service.d.ts.map +1 -1
  192. package/dest/services/tx_collection/config.d.ts +2 -23
  193. package/dest/services/tx_collection/config.d.ts.map +1 -1
  194. package/dest/services/tx_collection/config.js +2 -55
  195. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  196. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  197. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  198. package/dest/services/tx_collection/index.d.ts +2 -3
  199. package/dest/services/tx_collection/index.d.ts.map +1 -1
  200. package/dest/services/tx_collection/index.js +0 -1
  201. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  202. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  203. package/dest/services/tx_collection/instrumentation.js +0 -2
  204. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  205. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  206. package/dest/services/tx_collection/request_tracker.js +84 -0
  207. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  208. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  209. package/dest/services/tx_collection/tx_collection.js +275 -119
  210. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  211. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  212. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  213. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  214. package/dest/services/tx_collection/tx_source.js +4 -1
  215. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  216. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  217. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  218. package/dest/services/tx_provider.d.ts +3 -1
  219. package/dest/services/tx_provider.d.ts.map +1 -1
  220. package/dest/services/tx_provider.js +3 -0
  221. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  222. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  223. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  224. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  225. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  226. package/dest/test-helpers/mock-pubsub.js +44 -44
  227. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  228. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  229. package/dest/test-helpers/reqresp-nodes.js +16 -18
  230. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  231. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  232. package/dest/test-helpers/test_tx_provider.js +3 -0
  233. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  234. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  235. package/dest/test-helpers/testbench-utils.js +47 -14
  236. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  237. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  238. package/dest/testbench/p2p_client_testbench_worker.js +102 -40
  239. package/dest/testbench/worker_client_manager.d.ts +10 -6
  240. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  241. package/dest/testbench/worker_client_manager.js +53 -10
  242. package/dest/util.d.ts +12 -7
  243. package/dest/util.d.ts.map +1 -1
  244. package/dest/util.js +35 -14
  245. package/dest/versioning.d.ts +3 -6
  246. package/dest/versioning.d.ts.map +1 -1
  247. package/dest/versioning.js +3 -24
  248. package/package.json +16 -16
  249. package/src/bootstrap/bootstrap.ts +17 -3
  250. package/src/client/factory.ts +50 -25
  251. package/src/client/interface.ts +44 -17
  252. package/src/client/p2p_client.ts +125 -77
  253. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  254. package/src/config.ts +156 -44
  255. package/src/errors/p2p-service.error.ts +11 -0
  256. package/src/errors/reqresp.error.ts +13 -19
  257. package/src/index.ts +0 -1
  258. package/src/mem_pools/attestation_pool/attestation_pool.ts +329 -243
  259. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
  260. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  261. package/src/mem_pools/index.ts +0 -3
  262. package/src/mem_pools/instrumentation.ts +27 -17
  263. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  264. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  265. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
  266. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  267. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  268. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  269. package/src/mem_pools/tx_pool_v2/interfaces.ts +38 -8
  270. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +24 -12
  271. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
  272. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +23 -6
  273. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +250 -122
  274. package/src/msg_validators/attestation_validator/README.md +1 -1
  275. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
  276. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  277. package/src/msg_validators/proposal_validator/README.md +4 -4
  278. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  279. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  280. package/src/msg_validators/proposal_validator/proposal_validator.ts +95 -12
  281. package/src/msg_validators/tx_validator/README.md +13 -3
  282. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  283. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  284. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  285. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  286. package/src/msg_validators/tx_validator/data_validator.ts +2 -0
  287. package/src/msg_validators/tx_validator/factory.ts +37 -20
  288. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  289. package/src/msg_validators/tx_validator/index.ts +2 -0
  290. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  291. package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
  292. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  293. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  294. package/src/services/data_store.ts +5 -13
  295. package/src/services/discv5/discV5_service.ts +126 -14
  296. package/src/services/discv5/persisted_enr_store.ts +158 -0
  297. package/src/services/dummy_service.ts +20 -39
  298. package/src/services/encoding.ts +28 -20
  299. package/src/services/gossipsub/README.md +33 -11
  300. package/src/services/gossipsub/topic_score_params.ts +9 -18
  301. package/src/services/libp2p/instrumentation.ts +14 -0
  302. package/src/services/libp2p/libp2p_service.ts +457 -341
  303. package/src/services/peer-manager/metrics.ts +7 -0
  304. package/src/services/peer-manager/peer_manager.ts +91 -25
  305. package/src/services/peer-manager/peer_scoring.ts +102 -8
  306. package/src/services/reqresp/README.md +2 -37
  307. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  308. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +91 -137
  309. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  310. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  311. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  312. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  313. package/src/services/reqresp/config.ts +19 -2
  314. package/src/services/reqresp/interface.ts +21 -47
  315. package/src/services/reqresp/metrics.ts +0 -1
  316. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  317. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  318. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  319. package/src/services/reqresp/protocols/index.ts +0 -1
  320. package/src/services/reqresp/protocols/tx.ts +1 -3
  321. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  322. package/src/services/reqresp/reqresp.ts +71 -252
  323. package/src/services/service.ts +31 -28
  324. package/src/services/tx_collection/config.ts +3 -80
  325. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  326. package/src/services/tx_collection/index.ts +1 -6
  327. package/src/services/tx_collection/instrumentation.ts +1 -7
  328. package/src/services/tx_collection/request_tracker.ts +127 -0
  329. package/src/services/tx_collection/tx_collection.ts +331 -176
  330. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  331. package/src/services/tx_collection/tx_source.ts +2 -1
  332. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  333. package/src/services/tx_provider.ts +5 -0
  334. package/src/test-helpers/make-test-p2p-clients.ts +4 -1
  335. package/src/test-helpers/mock-pubsub.ts +46 -60
  336. package/src/test-helpers/reqresp-nodes.ts +13 -23
  337. package/src/test-helpers/test_tx_provider.ts +5 -0
  338. package/src/test-helpers/testbench-utils.ts +62 -28
  339. package/src/testbench/p2p_client_testbench_worker.ts +110 -57
  340. package/src/testbench/worker_client_manager.ts +61 -21
  341. package/src/util.ts +33 -18
  342. package/src/versioning.ts +3 -33
  343. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  344. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  345. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  346. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  347. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  348. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  349. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  350. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  351. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  352. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  353. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  354. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  355. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  356. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  358. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  359. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  360. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  361. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  362. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  363. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  364. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  365. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  366. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  367. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  368. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  369. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  370. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  371. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  372. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  373. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  374. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  375. package/dest/mem_pools/tx_pool/index.js +0 -2
  376. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  377. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  378. package/dest/mem_pools/tx_pool/priority.js +0 -15
  379. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  380. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  381. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  382. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  383. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  384. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  385. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  386. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  387. package/dest/msg_validators/clock_tolerance.js +0 -37
  388. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  389. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  390. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  391. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  392. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  393. package/dest/services/reqresp/protocols/block.js +0 -32
  394. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  395. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  396. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  397. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  398. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  399. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  400. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  401. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  402. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  403. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  404. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  405. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  406. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  407. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  408. package/src/mem_pools/tx_pool/README.md +0 -270
  409. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  410. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  411. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  412. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  413. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  414. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  415. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  416. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  417. package/src/mem_pools/tx_pool/index.ts +0 -2
  418. package/src/mem_pools/tx_pool/priority.ts +0 -20
  419. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  420. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  421. package/src/msg_validators/clock_tolerance.ts +0 -51
  422. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  423. package/src/services/reqresp/protocols/block.ts +0 -37
  424. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  425. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  426. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  427. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
package/README.md CHANGED
@@ -8,7 +8,7 @@ This package implements the P2P networking layer for Aztec nodes using libp2p. I
8
8
  - **LibP2PService** is the core networking layer. Subscribes to gossipsub topics, registers req/resp handlers, runs message validation pipelines. It composes:
9
9
  - **PeerManager** — peer scoring (gossipsub + application-level), authentication (STATUS/AUTH handshakes), connection gating.
10
10
  - **DiscV5Service** — UDP-based peer discovery using Ethereum's discv5 protocol and ENR records.
11
- - **ReqResp** — request-response protocols: BLOCK, BLOCK_TXS, TX, STATUS, AUTH, PING, GOODBYE.
11
+ - **ReqResp** — request-response protocols: BLOCK_TXS, TX, STATUS, AUTH, PING, GOODBYE.
12
12
  - **TxCollection** — coordinates transaction fetching: fast collection for proposals/proving (deadline-driven, falls back to `BatchTxRequester`) and slow background collection for unproven blocks.
13
13
  - **Mempools** sit below the service layer:
14
14
  - **TxPoolV2** — transaction mempool with explicit state machine (pending, protected, mined, soft-deleted, hard-deleted) and pluggable eviction rules.
@@ -51,7 +51,7 @@ Connection gating: peers with too many failed AUTH attempts (`p2pMaxFailedAuthAt
51
51
  | [Transaction Validation](src/msg_validators/tx_validator/README.md) | Validator factories per entry point, individual validator descriptions with benchmarks, coverage table |
52
52
  | [Proposal Validation](src/msg_validators/proposal_validator/README.md) | BlockProposal and CheckpointProposal gossipsub validation, pool admission, validator-client processing, slashing |
53
53
  | [Attestation Validation](src/msg_validators/attestation_validator/README.md) | CheckpointAttestation gossipsub validation, pool admission, equivocation detection, L1 submission validation |
54
- | [ReqResp Protocols](src/services/reqresp/README.md) | Handshake protocols (STATUS, AUTH, PING, GOODBYE), block data protocols (BLOCK, BLOCK_TXS, TX), rate limits, transport validation |
54
+ | [ReqResp Protocols](src/services/reqresp/README.md) | Handshake protocols (STATUS, AUTH, PING, GOODBYE), block data protocols (BLOCK_TXS, TX), rate limits, transport validation |
55
55
  | [BatchTxRequester](src/services/reqresp/batch-tx-requester/README.md) | Peer classification (pinned/dumb/smart), worker architecture, BLOCK_TXS wire protocol |
56
56
  | [TxPool Interface](src/mem_pools/tx_pool/README.md) | TxPool contract, storage structure, priority system, nullifier deduplication, eviction rules |
57
57
  | [TxPoolV2](src/mem_pools/tx_pool_v2/README.md) | State machine, soft deletion (slot-based vs prune-based), pre-add vs post-event rules |
@@ -104,9 +104,8 @@ See [ReqResp Protocols](src/services/reqresp/README.md) for full protocol detail
104
104
  | STATUS | 5/s | 10/s |
105
105
  | AUTH | 5/s | 10/s |
106
106
  | GOODBYE | 5/s | 10/s |
107
- | BLOCK | 2/s | 5/s |
108
107
  | BLOCK_TXS | 10/s | 200/s |
109
- | TX | (see config) | (see config) |
108
+ | TX | 10/s | 200/s |
110
109
 
111
110
  Per-peer limit exceeded: `HighToleranceError` + `RATE_LIMIT_EXCEEDED` status. Global limit exceeded: `RATE_LIMIT_EXCEEDED` status only (no peer penalty).
112
111
 
@@ -116,7 +115,10 @@ Per-peer limit exceeded: `HighToleranceError` + `RATE_LIMIT_EXCEEDED` status. Gl
116
115
  |-------|-------|--------|
117
116
  | > -50 | Healthy | Normal |
118
117
  | -100 < score <= -50 | Disconnect | GOODBYE sent + disconnect on next heartbeat |
119
- | <= -100 | Banned | GOODBYE sent + disconnect on next heartbeat |
118
+ | <= -100 | Banned | GOODBYE sent + disconnect on next heartbeat; banned for `P2P_PEER_BAN_DURATION_SECONDS` (default 24h) |
119
+
120
+ Once a peer is banned its score is pinned at the ban level for the configured duration (it does not decay-recover),
121
+ and only lifts when the window expires. See [Gossipsub Scoring](src/services/gossipsub/README.md#ban-duration) for details.
120
122
 
121
123
  ### Protocol Summary
122
124
 
@@ -126,7 +128,6 @@ Per-peer limit exceeded: `HighToleranceError` + `RATE_LIMIT_EXCEEDED` status. Gl
126
128
  | AUTH | Random challenge (`Fr`) | Signed challenge response | Validator identity verification on connect |
127
129
  | PING | (empty) | `pong` | Liveness check |
128
130
  | GOODBYE | Reason byte | (none meaningful) | Graceful disconnect |
129
- | BLOCK | Block number (`Fr`) | Block data (3 MB snappy) | Block sync |
130
131
  | BLOCK_TXS | Archive root + tx hashes + BitVector | Txs + BitVector of availability | Batch tx fetching for proposals/proving |
131
132
  | TX | `TxHashArray` | Matching txs | Individual tx fetching |
132
133
 
@@ -36,4 +36,4 @@ export declare class BootstrapNode implements P2PBootstrapApi {
36
36
  getEncodedEnr(): Promise<any>;
37
37
  getRoutingTable(): Promise<any>;
38
38
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYm9vdHN0cmFwL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQXNCLEtBQUssZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLaEQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSW5EOztHQUVHO0FBQ0gscUJBQWEsYUFBYyxZQUFXLGVBQWU7SUFNakQsT0FBTyxDQUFDLEtBQUs7SUFDYixPQUFPLENBQUMsU0FBUztJQU5uQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQWlDO0lBQzlDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBUztJQUN4QixPQUFPLENBQUMsTUFBTSxDQUFTO0lBRXZCLFlBQ1UsS0FBSyxFQUFFLGlCQUFpQixFQUN4QixTQUFTLEVBQUUsZUFBZSxFQUNsQyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBRzFCO0lBRUQ7Ozs7T0FJRztJQUNVLEtBQUssQ0FBQyxNQUFNLEVBQUUsY0FBYyxpQkFpRnhDO0lBRUQ7OztPQUdHO0lBQ1UsSUFBSSxrQkFLaEI7SUFFRCxPQUFPLENBQUMsaUJBQWlCO0lBTXpCLE9BQU8sQ0FBQyxZQUFZO0lBTXBCOzs7T0FHRztJQUNJLFNBQVMsV0FHZjtJQUVNLE1BQU0sUUFHWjtJQUVNLGFBQWEsaUJBR25CO0lBRU0sZUFBZSxpQkFHckI7Q0FDRiJ9
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYm9vdHN0cmFwL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQXNCLEtBQUssZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLaEQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSW5EOztHQUVHO0FBQ0gscUJBQWEsYUFBYyxZQUFXLGVBQWU7SUFNakQsT0FBTyxDQUFDLEtBQUs7SUFDYixPQUFPLENBQUMsU0FBUztJQU5uQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQWlDO0lBQzlDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBUztJQUN4QixPQUFPLENBQUMsTUFBTSxDQUFTO0lBRXZCLFlBQ1UsS0FBSyxFQUFFLGlCQUFpQixFQUN4QixTQUFTLEVBQUUsZUFBZSxFQUNsQyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBRzFCO0lBRUQ7Ozs7T0FJRztJQUNVLEtBQUssQ0FBQyxNQUFNLEVBQUUsY0FBYyxpQkErRnhDO0lBRUQ7OztPQUdHO0lBQ1UsSUFBSSxrQkFLaEI7SUFFRCxPQUFPLENBQUMsaUJBQWlCO0lBTXpCLE9BQU8sQ0FBQyxZQUFZO0lBTXBCOzs7T0FHRztJQUNJLFNBQVMsV0FHZjtJQUVNLE1BQU0sUUFHWjtJQUVNLGFBQWEsaUJBR25CO0lBRU0sZUFBZSxpQkFHckI7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD;;GAEG;AACH,qBAAa,aAAc,YAAW,eAAe;IAMjD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,IAAI,CAAC,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IAEvB,YACU,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,eAAe,EAClC,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED;;;;OAIG;IACU,KAAK,CAAC,MAAM,EAAE,cAAc,iBAiFxC;IAED;;;OAGG;IACU,IAAI,kBAKhB;IAED,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,YAAY;IAMpB;;;OAGG;IACI,SAAS,WAGf;IAEM,MAAM,QAGZ;IAEM,aAAa,iBAGnB;IAEM,eAAe,iBAGrB;CACF"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD;;GAEG;AACH,qBAAa,aAAc,YAAW,eAAe;IAMjD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,IAAI,CAAC,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IAEvB,YACU,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,eAAe,EAClC,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED;;;;OAIG;IACU,KAAK,CAAC,MAAM,EAAE,cAAc,iBA+FxC;IAED;;;OAGG;IACU,IAAI,kBAKhB;IAED,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,YAAY;IAMpB;;;OAGG;IACI,SAAS,WAGf;IAEM,MAAM,QAGZ;IAEM,aAAa,iBAGnB;IAEM,eAAe,iBAGrB;CACF"}
@@ -30,7 +30,7 @@ import { convertToMultiaddr, getPeerIdPrivateKey, getPublicIp } from '../util.js
30
30
  if (!p2pIp) {
31
31
  if (queryForIp) {
32
32
  this.logger.info('Querying for public IP address...');
33
- const publicIp = await getPublicIp();
33
+ const publicIp = await getPublicIp(config.publicIpServices);
34
34
  p2pIp = publicIp;
35
35
  this.logger.info(`Found public IP address: ${publicIp}`);
36
36
  }
@@ -65,11 +65,27 @@ import { convertToMultiaddr, getPeerIdPrivateKey, getPublicIp } from '../util.js
65
65
  });
66
66
  });
67
67
  this.node.on('discovered', async (enr)=>{
68
- const addr = await enr.getFullMultiaddr('udp');
69
- this.logger.verbose(`Discovered new peer`, {
70
- enr: enr.encodeTxt(),
71
- addr: addr?.toString()
72
- });
68
+ try {
69
+ const addr = await enr.getFullMultiaddr('udp');
70
+ this.logger.verbose(`Discovered new peer`, {
71
+ enr: enr.encodeTxt(),
72
+ addr: addr?.toString()
73
+ });
74
+ // discv5's discovered() only updates routing table entries that already exist. Nodes that
75
+ // established a session with an empty-IP ENR are never inserted, so even after their ENR
76
+ // gains a valid socket address the routing table stays empty and FINDNODE always returns 0
77
+ // peers. Calling addEnr() here does an insertOrUpdate regardless of prior state, fixing
78
+ // the routing table so these nodes become discoverable to other peers.
79
+ if (addr) {
80
+ this.node.addEnr(enr);
81
+ }
82
+ } catch (err) {
83
+ // A malformed ENR address field makes the parser throw. As an async listener this would crash
84
+ // the bootnode on an unhandled rejection — catch, log, and drop the ENR instead.
85
+ this.logger.warn(`Dropping discovered ENR with unparseable address`, {
86
+ err
87
+ });
88
+ }
73
89
  });
74
90
  try {
75
91
  this.logger.info('Starting bootnode');
@@ -2,11 +2,12 @@ import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { type Logger } from '@aztec/foundation/log';
3
3
  import { DateProvider } from '@aztec/foundation/timer';
4
4
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
5
- import type { DataStoreConfig } from '@aztec/kv-store/config';
6
- import type { L2BlockSource } from '@aztec/stdlib/block';
5
+ import type { BlockHash, L2BlockSource } from '@aztec/stdlib/block';
7
6
  import type { ChainConfig } from '@aztec/stdlib/config';
8
7
  import type { ContractDataSource } from '@aztec/stdlib/contract';
8
+ import { type BlockMinFeesProvider } from '@aztec/stdlib/gas';
9
9
  import type { AztecNode, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
10
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
10
11
  import { type TelemetryClient } from '@aztec/telemetry-client';
11
12
  import { P2PClient } from '../client/p2p_client.js';
12
13
  import type { P2PConfig } from '../config.js';
@@ -27,5 +28,5 @@ export declare const P2P_STORE_NAME = "p2p";
27
28
  export declare const P2P_ARCHIVE_STORE_NAME = "p2p-archive";
28
29
  export declare const P2P_PEER_STORE_NAME = "p2p-peers";
29
30
  export declare const P2P_ATTESTATION_STORE_NAME = "p2p-attestation";
30
- export declare function createP2PClient(inputConfig: P2PConfig & DataStoreConfig & ChainConfig, archiver: L2BlockSource & ContractDataSource, proofVerifier: ClientProtocolCircuitVerifier, worldStateSynchronizer: WorldStateSynchronizer, epochCache: EpochCacheInterface, packageVersion: string, dateProvider?: DateProvider, telemetry?: TelemetryClient, deps?: P2PClientDeps): Promise<P2PClient>;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUQsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLDZCQUE2QixFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLHlCQUF5QixDQUFDO0FBRW5GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFtQixLQUFLLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFN0csT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFTdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3JELE9BQU8sRUFBbUIsS0FBSyxRQUFRLEVBQTBCLE1BQU0sd0NBQXdDLENBQUM7QUFJaEgsTUFBTSxNQUFNLGFBQWEsR0FBRztJQUMxQixNQUFNLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDbEIsS0FBSyxDQUFDLEVBQUUsaUJBQWlCLENBQUM7SUFDMUIsZUFBZSxDQUFDLEVBQUUsa0JBQWtCLENBQUM7SUFDckMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLHVCQUF1QixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDckMsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDN0IsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7Q0FDcEcsQ0FBQztBQUVGLGVBQU8sTUFBTSxjQUFjLFFBQVEsQ0FBQztBQUNwQyxlQUFPLE1BQU0sc0JBQXNCLGdCQUFnQixDQUFDO0FBQ3BELGVBQU8sTUFBTSxtQkFBbUIsY0FBYyxDQUFDO0FBQy9DLGVBQU8sTUFBTSwwQkFBMEIsb0JBQW9CLENBQUM7QUFFNUQsd0JBQXNCLGVBQWUsQ0FDbkMsV0FBVyxFQUFFLFNBQVMsR0FBRyxlQUFlLEdBQUcsV0FBVyxFQUN0RCxRQUFRLEVBQUUsYUFBYSxHQUFHLGtCQUFrQixFQUM1QyxhQUFhLEVBQUUsNkJBQTZCLEVBQzVDLHNCQUFzQixFQUFFLHNCQUFzQixFQUM5QyxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLGNBQWMsRUFBRSxNQUFNLEVBQ3RCLFlBQVksR0FBRSxZQUFpQyxFQUMvQyxTQUFTLEdBQUUsZUFBc0MsRUFDakQsSUFBSSxHQUFFLGFBQWtCLHNCQXdKekIifQ==
31
+ export declare function createP2PClient(inputConfig: P2PConfig & DataStoreConfig & ChainConfig, archiver: L2BlockSource & ContractDataSource, proofVerifier: ClientProtocolCircuitVerifier, worldStateSynchronizer: WorldStateSynchronizer, epochCache: EpochCacheInterface, blockMinFeesProvider: BlockMinFeesProvider, packageVersion: string, dateProvider: DateProvider | undefined, telemetry: TelemetryClient | undefined, deps: P2PClientDeps | undefined, initialBlockHash: BlockHash): Promise<P2PClient>;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUQsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLG9CQUFvQixFQUF5QixNQUFNLG1CQUFtQixDQUFDO0FBQ3JGLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSw2QkFBNkIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hILE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBbUIsS0FBSyxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRTdHLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBVXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdyRCxPQUFPLEVBQW1CLEtBQUssUUFBUSxFQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBSWhILE1BQU0sTUFBTSxhQUFhLEdBQUc7SUFDMUIsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ2xCLEtBQUssQ0FBQyxFQUFFLGlCQUFpQixDQUFDO0lBQzFCLGVBQWUsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNoQix1QkFBdUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzdCLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0NBQ3BHLENBQUM7QUFFRixlQUFPLE1BQU0sY0FBYyxRQUFRLENBQUM7QUFDcEMsZUFBTyxNQUFNLHNCQUFzQixnQkFBZ0IsQ0FBQztBQUNwRCxlQUFPLE1BQU0sbUJBQW1CLGNBQWMsQ0FBQztBQUMvQyxlQUFPLE1BQU0sMEJBQTBCLG9CQUFvQixDQUFDO0FBRTVELHdCQUFzQixlQUFlLENBQ25DLFdBQVcsRUFBRSxTQUFTLEdBQUcsZUFBZSxHQUFHLFdBQVcsRUFDdEQsUUFBUSxFQUFFLGFBQWEsR0FBRyxrQkFBa0IsRUFDNUMsYUFBYSxFQUFFLDZCQUE2QixFQUM1QyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsVUFBVSxFQUFFLG1CQUFtQixFQUMvQixvQkFBb0IsRUFBRSxvQkFBb0IsRUFDMUMsY0FBYyxFQUFFLE1BQU0sRUFDdEIsWUFBWSwwQkFBbUMsRUFDL0MsU0FBUyw2QkFBd0MsRUFDakQsSUFBSSwyQkFBb0IsRUFDeEIsZ0JBQWdCLEVBQUUsU0FBUyxzQkF5SzVCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/client/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACxH,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAE7G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAStE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAmB,KAAK,QAAQ,EAA0B,MAAM,wCAAwC,CAAC;AAIhH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CACpG,CAAC;AAEF,eAAO,MAAM,cAAc,QAAQ,CAAC;AACpC,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AACpD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAE5D,wBAAsB,eAAe,CACnC,WAAW,EAAE,SAAS,GAAG,eAAe,GAAG,WAAW,EACtD,QAAQ,EAAE,aAAa,GAAG,kBAAkB,EAC5C,aAAa,EAAE,6BAA6B,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,UAAU,EAAE,mBAAmB,EAC/B,cAAc,EAAE,MAAM,EACtB,YAAY,GAAE,YAAiC,EAC/C,SAAS,GAAE,eAAsC,EACjD,IAAI,GAAE,aAAkB,sBAwJzB"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/client/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,oBAAoB,EAAyB,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACxH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAE7G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAUtE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAmB,KAAK,QAAQ,EAA0B,MAAM,wCAAwC,CAAC;AAIhH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CACpG,CAAC;AAEF,eAAO,MAAM,cAAc,QAAQ,CAAC;AACpC,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AACpD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAE5D,wBAAsB,eAAe,CACnC,WAAW,EAAE,SAAS,GAAG,eAAe,GAAG,WAAW,EACtD,QAAQ,EAAE,aAAa,GAAG,kBAAkB,EAC5C,aAAa,EAAE,6BAA6B,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,UAAU,EAAE,mBAAmB,EAC/B,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,MAAM,EACtB,YAAY,0BAAmC,EAC/C,SAAS,6BAAwC,EACjD,IAAI,2BAAoB,EACxB,gBAAgB,EAAE,SAAS,sBAyK5B"}
@@ -2,11 +2,13 @@ import { BlockNumber } from '@aztec/foundation/branded-types';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { DateProvider } from '@aztec/foundation/timer';
4
4
  import { createStore } from '@aztec/kv-store/lmdb-v2';
5
+ import { getNetworkTxGasLimits } from '@aztec/stdlib/gas';
5
6
  import { getTelemetryClient } from '@aztec/telemetry-client';
6
7
  import { P2PClient } from '../client/p2p_client.js';
7
8
  import { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
8
9
  import { AztecKVTxPoolV2 } from '../mem_pools/tx_pool_v2/tx_pool_v2.js';
9
- import { createCheckAllowedSetupCalls, createTxValidatorForReqResponseReceivedTxs, createTxValidatorForTransactionsEnteringPendingTxPool, getDefaultAllowedSetupFunctions } from '../msg_validators/index.js';
10
+ import { createCheckAllowedSetupCalls, createTxValidatorForOnDemandReceivedTxs, createTxValidatorForTransactionsEnteringPendingTxPool, getDefaultAllowedSetupFunctions } from '../msg_validators/index.js';
11
+ import { TxValidationCache } from '../msg_validators/tx_validator/tx_validation_cache.js';
10
12
  import { DummyP2PService } from '../services/dummy_service.js';
11
13
  import { LibP2PService } from '../services/index.js';
12
14
  import { createFileStoreTxSources } from '../services/tx_collection/file_store_tx_source.js';
@@ -18,7 +20,7 @@ export const P2P_STORE_NAME = 'p2p';
18
20
  export const P2P_ARCHIVE_STORE_NAME = 'p2p-archive';
19
21
  export const P2P_PEER_STORE_NAME = 'p2p-peers';
20
22
  export const P2P_ATTESTATION_STORE_NAME = 'p2p-attestation';
21
- export async function createP2PClient(inputConfig, archiver, proofVerifier, worldStateSynchronizer, epochCache, packageVersion, dateProvider = new DateProvider(), telemetry = getTelemetryClient(), deps = {}) {
23
+ export async function createP2PClient(inputConfig, archiver, proofVerifier, worldStateSynchronizer, epochCache, blockMinFeesProvider, packageVersion, dateProvider = new DateProvider(), telemetry = getTelemetryClient(), deps = {}, initialBlockHash) {
22
24
  const config = await configureP2PClientAddresses({
23
25
  ...inputConfig,
24
26
  dataStoreMapSizeKb: inputConfig.p2pStoreMapSizeKb ?? inputConfig.dataStoreMapSizeKb
@@ -28,46 +30,52 @@ export async function createP2PClient(inputConfig, archiver, proofVerifier, worl
28
30
  logger.warn('No bootstrap nodes have been provided. Set the BOOTSTRAP_NODES environment variable in order to join the P2P network');
29
31
  }
30
32
  const bindings = logger.getBindings();
31
- const store = deps.store ?? await createStore(P2P_STORE_NAME, 2, config, bindings);
33
+ // Schema version 4: L2 tips store resolves checkpoint tips from per-tip ids in l2_tip_checkpoints; the
34
+ // block->checkpoint mapping and checkpoint maps were dropped. Bumped to wipe stores whose tips predate
35
+ // per-tip ids, which would otherwise make getL2Tips throw on every read.
36
+ const store = deps.store ?? await createStore(P2P_STORE_NAME, 4, config, bindings);
32
37
  const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, bindings);
33
38
  const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, bindings);
34
- const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 1, config, bindings);
39
+ const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 2, config, bindings);
35
40
  const l1Constants = await archiver.getL1Constants();
36
- const rollupAddress = inputConfig.l1Contracts.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
41
+ const rollupAddress = inputConfig.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
37
42
  const txFileStoreBasePath = `aztec-${inputConfig.l1ChainId}-${inputConfig.rollupVersion}-0x${rollupAddress}`;
38
43
  const allowedInSetup = [
39
44
  ...await getDefaultAllowedSetupFunctions(),
40
45
  ...inputConfig.txPublicSetupAllowListExtend ?? []
41
46
  ];
42
47
  const checkAllowedSetupCalls = createCheckAllowedSetupCalls(archiver, allowedInSetup, ()=>epochCache.getEpochAndSlotInNextL1Slot().ts);
43
- const createTxValidator = async ()=>{
44
- // We accept transactions if they are not expired by the next slot and block number (checked based on the ExpirationTimestamp field)
45
- const currentBlockNumber = await archiver.getBlockNumber();
46
- const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
47
- const l1Constants = await archiver.getL1Constants();
48
- return createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer, nextSlotTimestamp, BlockNumber(currentBlockNumber + 1), {
49
- rollupManaLimit: l1Constants.rollupManaLimit,
50
- maxBlockL2Gas: config.validateMaxL2BlockGas,
51
- maxBlockDAGas: config.validateMaxDABlockGas
52
- });
53
- };
54
48
  const txPool = deps.txPool ?? new AztecKVTxPoolV2(store, archive, {
55
49
  l2BlockSource: archiver,
56
50
  worldStateSynchronizer,
57
51
  checkAllowedSetupCalls,
58
- createTxValidator
52
+ createTxValidator: async ()=>{
53
+ const currentBlockNumber = await archiver.getBlockNumber();
54
+ const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
55
+ const l1Constants = await archiver.getL1Constants();
56
+ const gasFees = await blockMinFeesProvider.getCurrentMinFees();
57
+ const networkTxGasLimits = getNetworkTxGasLimits(config, l1Constants);
58
+ return createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer, nextSlotTimestamp, BlockNumber(currentBlockNumber + 1), {
59
+ maxTxL2Gas: networkTxGasLimits.l2Gas,
60
+ maxTxDAGas: networkTxGasLimits.daGas
61
+ }, gasFees);
62
+ },
63
+ blockMinFeesProvider
59
64
  }, telemetry, {
60
65
  maxPendingTxCount: config.maxPendingTxCount,
61
66
  archivedTxLimit: config.archivedTxLimit,
62
67
  minTxPoolAgeMs: config.minTxPoolAgeMs,
63
- priceBumpPercentage: config.priceBumpPercentage
68
+ dropTransactionsProbability: config.dropTransactionsProbability,
69
+ priceBumpPercentage: config.priceBumpPercentage,
70
+ keepFinalizedTxsForSlots: config.keepFinalizedTxsForSlots
64
71
  }, dateProvider);
65
72
  const mempools = {
66
73
  txPool,
67
74
  attestationPool: deps.attestationPool ?? new AttestationPool(attestationStore, telemetry)
68
75
  };
69
- const p2pService = await createP2PService(config, archiver, proofVerifier, worldStateSynchronizer, epochCache, store, peerStore, mempools, deps.p2pServiceFactory, packageVersion, logger.createChild('libp2p_service'), telemetry);
70
- const txValidatorForTxCollection = createTxValidatorForReqResponseReceivedTxs(proofVerifier, config);
76
+ const txValidationCache = config.txValidationCacheSize > 0 ? new TxValidationCache(config.txValidationCacheSize) : undefined;
77
+ const p2pService = await createP2PService(config, archiver, proofVerifier, worldStateSynchronizer, epochCache, blockMinFeesProvider, store, peerStore, mempools, deps.p2pServiceFactory, packageVersion, logger.createChild('libp2p_service'), telemetry, txValidationCache);
78
+ const txValidatorForTxCollection = createTxValidatorForOnDemandReceivedTxs(proofVerifier, config, /*bindings=*/ undefined, txValidationCache);
71
79
  const nodeSources = [
72
80
  ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, txValidatorForTxCollection, config),
73
81
  ...(deps.rpcTxProviders ?? []).map((node, i)=>new NodeRpcTxSource(node, txValidatorForTxCollection, `node-rpc-provider-${i}`)),
@@ -86,9 +94,9 @@ export async function createP2PClient(inputConfig, archiver, proofVerifier, worl
86
94
  }
87
95
  const txCollection = new TxCollection(p2pService.getBatchTxRequesterService(), nodeSources, l1Constants, mempools.txPool, config, fileStoreSources, dateProvider, telemetry, logger.createChild('tx-collection'));
88
96
  const txFileStore = await TxFileStore.create(mempools.txPool, config, txFileStoreBasePath, logger.createChild('tx-file-store'), telemetry);
89
- return new P2PClient(store, archiver, mempools, p2pService, txCollection, txFileStore, epochCache, config, dateProvider, telemetry);
97
+ return new P2PClient(store, archiver, mempools, p2pService, txCollection, txFileStore, epochCache, config, dateProvider, telemetry, undefined, initialBlockHash);
90
98
  }
91
- async function createP2PService(config, archiver, proofVerifier, worldStateSynchronizer, epochCache, store, peerStore, mempools, p2pServiceFactory, packageVersion, logger, telemetry) {
99
+ async function createP2PService(config, archiver, proofVerifier, worldStateSynchronizer, epochCache, blockMinFeesProvider, store, peerStore, mempools, p2pServiceFactory, packageVersion, logger, telemetry, txValidationCache) {
92
100
  if (!config.p2pEnabled) {
93
101
  logger.verbose('P2P is disabled. Using dummy P2P service.');
94
102
  return new DummyP2PService();
@@ -105,8 +113,10 @@ async function createP2PService(config, archiver, proofVerifier, worldStateSynch
105
113
  proofVerifier,
106
114
  worldStateSynchronizer,
107
115
  peerStore,
116
+ blockMinFeesProvider,
108
117
  telemetry,
109
- logger: logger.createChild(`libp2p_service`)
118
+ logger: logger.createChild(`libp2p_service`),
119
+ txValidationCache
110
120
  });
111
121
  return p2pService;
112
122
  }
@@ -7,8 +7,8 @@ import type { PeerId } from '@libp2p/interface';
7
7
  import type { ENR } from '@nethermindeth/enr';
8
8
  import type { P2PConfig } from '../config.js';
9
9
  import type { AuthRequest, StatusMessage } from '../services/index.js';
10
- import type { ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators } from '../services/reqresp/interface.js';
11
- import type { DuplicateAttestationInfo, DuplicateProposalInfo, P2PBlockReceivedCallback, P2PCheckpointReceivedCallback } from '../services/service.js';
10
+ import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
11
+ import type { DuplicateAttestationInfo, DuplicateProposalInfo, OversizedProposalInfo, P2PBlockReceivedCallback, P2PCheckpointAttestationCallback, P2PCheckpointReceivedCallback } from '../services/service.js';
12
12
  /**
13
13
  * Enum defining the possible states of the p2p client.
14
14
  */
@@ -62,7 +62,14 @@ export type P2P = P2PClient & {
62
62
  *
63
63
  * @param handler - A function taking a received checkpoint proposal and producing attestations
64
64
  */
65
- registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
65
+ registerValidatorCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
66
+ /**
67
+ * Registers a callback that runs for ALL nodes (not just validators) when a checkpoint proposal is received.
68
+ * Used to set the proposed checkpoint number on the archiver so the sequencer can build on top of it.
69
+ *
70
+ * @param handler - A function taking a received checkpoint proposal
71
+ */
72
+ registerAllNodesCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
66
73
  /**
67
74
  * Registers a callback invoked when a duplicate proposal is detected (equivocation).
68
75
  * The callback is triggered on the first duplicate (when count goes from 1 to 2).
@@ -70,6 +77,13 @@ export type P2P = P2PClient & {
70
77
  * @param callback - Function called with info about the duplicate proposal
71
78
  */
72
79
  registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void;
80
+ /**
81
+ * Registers a callback invoked when an oversized block proposal (index at or beyond the consensus
82
+ * per-checkpoint block limit) is stored and re-broadcast as slashing evidence.
83
+ *
84
+ * @param callback - Function called with info about the oversized proposal
85
+ */
86
+ registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void;
73
87
  /**
74
88
  * Registers a callback invoked when a duplicate attestation is detected (equivocation).
75
89
  * A validator signing attestations for different proposals at the same slot.
@@ -78,6 +92,8 @@ export type P2P = P2PClient & {
78
92
  * @param callback - Function called with info about the duplicate attestation
79
93
  */
80
94
  registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
95
+ /** Registers a callback invoked when a valid checkpoint attestation is accepted into the pool. */
96
+ registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
81
97
  /**
82
98
  * Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
83
99
  * @param tx - The transaction.
@@ -91,15 +107,21 @@ export type P2P = P2PClient & {
91
107
  /**
92
108
  * Returns a transaction in the transaction pool by its hash.
93
109
  * @param txHash - Hash of tx to return.
110
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
94
111
  * @returns A single tx or undefined.
95
112
  */
96
- getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined>;
113
+ getTxByHashFromPool(txHash: TxHash, opts?: {
114
+ includeProof?: boolean;
115
+ }): Promise<Tx | undefined>;
97
116
  /**
98
117
  * Returns transactions in the transaction pool by hash.
99
118
  * @param txHashes - Hashes of txs to return.
119
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
100
120
  * @returns An array of txs or undefined.
101
121
  */
102
- getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
122
+ getTxsByHashFromPool(txHashes: TxHash[], opts?: {
123
+ includeProof?: boolean;
124
+ }): Promise<(Tx | undefined)[]>;
103
125
  /**
104
126
  * Checks if transactions exist in the pool
105
127
  * @param txHashes - The hashes of the transactions to check for
@@ -118,12 +140,27 @@ export type P2P = P2PClient & {
118
140
  * @returns Pending, mined, or deleted depending on its status, or undefined if not found.
119
141
  */
120
142
  getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
121
- /** Returns an iterator over pending txs on the mempool. */
122
- iteratePendingTxs(): AsyncIterableIterator<Tx>;
123
- /** Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building. */
124
- iterateEligiblePendingTxs(): AsyncIterableIterator<Tx>;
143
+ /**
144
+ * Returns an iterator over pending txs on the mempool.
145
+ * Set `includeProof: false` to skip loading tx proofs from the DB.
146
+ */
147
+ iteratePendingTxs(opts?: {
148
+ includeProof?: boolean;
149
+ }): AsyncIterableIterator<Tx>;
150
+ /**
151
+ * Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building.
152
+ * Set `includeProof: false` to skip loading tx proofs from the DB.
153
+ */
154
+ iterateEligiblePendingTxs(opts?: {
155
+ includeProof?: boolean;
156
+ }): AsyncIterableIterator<Tx>;
125
157
  /** Returns the number of pending txs in the mempool. */
126
158
  getPendingTxCount(): Promise<number>;
159
+ /**
160
+ * Returns whether at least `minCount` pending txs have been in the pool long enough to be eligible for block
161
+ * building. Early-exits once the threshold is met instead of counting every eligible tx.
162
+ */
163
+ hasEligiblePendingTxs(minCount: number): Promise<boolean>;
127
164
  /**
128
165
  * Protects existing transactions by hash for a given slot.
129
166
  * Returns hashes of transactions that weren't found in the pool.
@@ -171,7 +208,7 @@ export type P2P = P2PClient & {
171
208
  validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
172
209
  /** Clears the db. */
173
210
  clear(): Promise<void>;
174
- addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler, validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol]): Promise<void>;
211
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
175
212
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
176
213
  /** Checks if any block proposals exist for the given slot. */
177
214
  hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean>;
@@ -180,4 +217,4 @@ export type P2P = P2PClient & {
180
217
  /** Returns the number of peers in the GossipSub mesh for a given topic type. */
181
218
  getGossipMeshPeerCount(topicType: TopicType): Promise<number>;
182
219
  };
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkUsT0FBTyxLQUFLLEVBQ1Ysa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDN0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFDVix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4Qiw2QkFBNkIsRUFDOUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQzs7R0FFRztBQUNILG9CQUFZLGNBQWM7SUFDeEIsSUFBSSxJQUFBO0lBQ0osUUFBUSxJQUFBO0lBQ1IsT0FBTyxJQUFBO0lBQ1AsT0FBTyxJQUFBO0NBQ1I7QUFFRDs7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
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RyxPQUFPLEtBQUssRUFDVix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsZ0NBQWdDLEVBQ2hDLDZCQUE2QixFQUM5QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDOztHQUVHO0FBQ0gsb0JBQVksY0FBYztJQUN4QixJQUFJLElBQUE7SUFDSixRQUFRLElBQUE7SUFDUixPQUFPLElBQUE7SUFDUCxPQUFPLElBQUE7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
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/client/interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/client/interface.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,21 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { BlockNumber, type CheckpointProposalHash, SlotNumber } from '@aztec/foundation/branded-types';
3
3
  import { DateProvider } from '@aztec/foundation/timer';
4
4
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
5
- import { type EthAddress, type L2BlockSource, type L2BlockStreamEvent, type L2Tips } from '@aztec/stdlib/block';
5
+ import { type BlockHash, type EthAddress, type L2BlockSource, type L2BlockStreamEvent, type LocalL2Tips } from '@aztec/stdlib/block';
6
6
  import type { ContractDataSource } from '@aztec/stdlib/contract';
7
- import { type PeerInfo } from '@aztec/stdlib/interfaces/server';
7
+ import { type GetTxByHashOptions, type PeerInfo } from '@aztec/stdlib/interfaces/server';
8
8
  import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
9
9
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
10
10
  import { type TelemetryClient, WithTracer } from '@aztec/telemetry-client';
11
11
  import type { PeerId } from '@libp2p/interface';
12
12
  import type { ENR } from '@nethermindeth/enr';
13
13
  import { type P2PConfig } from '../config.js';
14
+ import type { ProposalsForSlot } from '../mem_pools/attestation_pool/attestation_pool.js';
14
15
  import type { MemPools } from '../mem_pools/interface.js';
15
16
  import type { AuthRequest, StatusMessage } from '../services/index.js';
16
- import { ReqRespSubProtocol, type ReqRespSubProtocolHandler, type ReqRespSubProtocolValidators } from '../services/reqresp/interface.js';
17
- import type { DuplicateAttestationInfo, DuplicateProposalInfo, P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PService } from '../services/service.js';
17
+ import { ReqRespSubProtocol, type ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
18
+ import type { DuplicateAttestationInfo, DuplicateProposalInfo, OversizedProposalInfo, P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PService } from '../services/service.js';
18
19
  import { TxCollection } from '../services/tx_collection/tx_collection.js';
19
20
  import type { TxFileStore } from '../services/tx_file_store/tx_file_store.js';
20
21
  import { TxProvider } from '../services/tx_provider.js';
@@ -51,9 +52,7 @@ export declare class P2PClient extends WithTracer implements P2P {
51
52
  private validatorAddresses;
52
53
  /** Tracks the last slot for which we called prepareForSlot */
53
54
  private lastSlotProcessed;
54
- /** Polls for slot changes and calls prepareForSlot on the tx pool */
55
- private slotMonitor;
56
- constructor(store: AztecAsyncKVStore, l2BlockSource: L2BlockSource & ContractDataSource, mempools: MemPools, p2pService: P2PService, txCollection: TxCollection, txFileStore: TxFileStore | undefined, epochCache: EpochCacheInterface, config?: Partial<P2PConfig>, _dateProvider?: DateProvider, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
55
+ constructor(store: AztecAsyncKVStore, l2BlockSource: L2BlockSource & ContractDataSource, mempools: MemPools, p2pService: P2PService, txCollection: TxCollection, txFileStore: TxFileStore | undefined, epochCache: EpochCacheInterface, config: Partial<P2PConfig> | undefined, _dateProvider: DateProvider | undefined, telemetry: TelemetryClient | undefined, log: import("@aztec/foundation/log").Logger | undefined, initialBlockHash: BlockHash);
57
56
  registerThisValidatorAddresses(addresses: EthAddress[]): void;
58
57
  clear(): Promise<void>;
59
58
  isP2PClient(): true;
@@ -62,14 +61,14 @@ export declare class P2PClient extends WithTracer implements P2P {
62
61
  getGossipMeshPeerCount(topicType: TopicType): Promise<number>;
63
62
  getL2BlockHash(number: BlockNumber): Promise<string | undefined>;
64
63
  updateP2PConfig(config: Partial<P2PConfig>): Promise<void>;
65
- getL2Tips(): Promise<L2Tips>;
64
+ getL2Tips(): Promise<LocalL2Tips>;
66
65
  handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
67
66
  /**
68
67
  * Starts the P2P client.
69
68
  * @returns An empty promise signalling the synching process.
70
69
  */
71
70
  start(): Promise<void>;
72
- addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler, validator: ReqRespSubProtocolValidators[ReqRespSubProtocol]): Promise<void>;
71
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
73
72
  private initBlockStream;
74
73
  /**
75
74
  * Allows consumers to stop the instance of the P2P client.
@@ -81,29 +80,45 @@ export declare class P2PClient extends WithTracer implements P2P {
81
80
  broadcastProposal(proposal: BlockProposal): Promise<void>;
82
81
  broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void>;
83
82
  broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
84
- getCheckpointAttestationsForSlot(slot: SlotNumber, proposalId?: string): Promise<CheckpointAttestation[]>;
83
+ getCheckpointAttestationsForSlot(slot: SlotNumber, proposalPayloadHash?: CheckpointProposalHash): Promise<CheckpointAttestation[]>;
85
84
  addOwnCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
85
+ getProposalsForSlot(slot: SlotNumber): Promise<ProposalsForSlot>;
86
86
  hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean>;
87
+ hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean>;
87
88
  registerBlockProposalHandler(handler: P2PBlockReceivedCallback): void;
88
- registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void;
89
+ registerValidatorCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void;
90
+ registerAllNodesCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void;
89
91
  registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void;
92
+ registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void;
90
93
  registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
91
- getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]>;
94
+ registerCheckpointAttestationCallback(callback: (attestation: CheckpointAttestation) => void): void;
95
+ getPendingTxs(limit?: number, after?: TxHash, options?: GetTxByHashOptions): Promise<Tx[]>;
92
96
  getPendingTxCount(): Promise<number>;
93
- iteratePendingTxs(): AsyncIterableIterator<Tx>;
94
- iterateEligiblePendingTxs(): AsyncIterableIterator<Tx>;
97
+ hasEligiblePendingTxs(minCount: number): Promise<boolean>;
98
+ iteratePendingTxs(opts?: {
99
+ includeProof?: boolean;
100
+ }): AsyncIterableIterator<Tx>;
101
+ iterateEligiblePendingTxs(opts?: {
102
+ includeProof?: boolean;
103
+ }): AsyncIterableIterator<Tx>;
95
104
  /**
96
105
  * Returns a transaction in the transaction pool by its hash.
97
106
  * @param txHash - Hash of the transaction to look for in the pool.
107
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
98
108
  * @returns A single tx or undefined.
99
109
  */
100
- getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined>;
110
+ getTxByHashFromPool(txHash: TxHash, opts?: {
111
+ includeProof?: boolean;
112
+ }): Promise<Tx | undefined>;
101
113
  /**
102
114
  * Returns transactions in the transaction pool by hash.
103
115
  * @param txHashes - Hashes of the transactions to look for.
116
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
104
117
  * @returns The txs found, in the same order as the requested hashes. If a tx is not found, it will be undefined.
105
118
  */
106
- getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
119
+ getTxsByHashFromPool(txHashes: TxHash[], opts?: {
120
+ includeProof?: boolean;
121
+ }): Promise<(Tx | undefined)[]>;
107
122
  hasTxsInPool(txHashes: TxHash[]): Promise<boolean[]>;
108
123
  /**
109
124
  * Returns an archived transaction in the transaction pool by its hash.
@@ -155,7 +170,7 @@ export declare class P2PClient extends WithTracer implements P2P {
155
170
  getStatus(): Promise<P2PSyncState>;
156
171
  private handleMinedBlocks;
157
172
  private handleLatestL2Blocks;
158
- private startCollectingMissingTxs;
173
+ private collectingMissingTxs;
159
174
  private handleFinalizedL2Blocks;
160
175
  private handlePruneL2Blocks;
161
176
  private isEpochPrune;
@@ -183,4 +198,4 @@ export declare class P2PClient extends WithTracer implements P2P {
183
198
  prepareForSlot(slotNumber: SlotNumber): Promise<void>;
184
199
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
185
200
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9wMnBfY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBb0IsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHNUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBRTlFLE9BQU8sRUFFTCxLQUFLLFVBQVUsRUFHZixLQUFLLGFBQWEsRUFFbEIsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxNQUFNLEVBRVosTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBVyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLGtCQUFrQixFQUFFLEtBQUssU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkgsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRSxPQUFPLEVBQWMsS0FBSyxlQUFlLEVBQUUsVUFBVSxFQUFpQyxNQUFNLHlCQUF5QixDQUFDO0FBRXRILE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBdUIsTUFBTSxjQUFjLENBQUM7QUFHbkUsT0FBTyxLQUFLLEVBQUUsUUFB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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9wMnBfY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUNMLFdBQVcsRUFFWCxLQUFLLHNCQUFzQixFQUMzQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQXVCLE1BQU0saUJBQWlCLENBQUM7QUFFOUUsT0FBTyxFQUVMLEtBQUssU0FBUyxFQUVkLEtBQUssVUFBVSxFQUlmLEtBQUssYUFBYSxFQUNsQixLQUFLLGtCQUFrQixFQUV2QixLQUFLLFdBQVcsRUFDakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFFLEtBQUssUUFBUSxFQUFXLE1BQU0saUNBQWlDLENBQUM7QUFDbEcsT0FBTyxFQUFFLEtBQUssYUFBYSxFQUFFLHFCQUFxQixFQUFFLEtBQUssa0JBQWtCLEVBQUUsS0FBSyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2SCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBYyxLQUFLLGVBQWUsRUFBRSxVQUFVLEVBQWlDLE1BQU0seUJBQXlCLENBQUM7QUFFdEgsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLEtBQUss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