@aztec/p2p 0.0.1-commit.9ef841308 → 0.0.1-commit.a5db02d

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 (344) 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 +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +33 -24
  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 -46
  13. package/dest/config.d.ts +143 -107
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +72 -26
  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/mem_pools/attestation_pool/attestation_pool.d.ts +98 -56
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool.js +269 -196
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +218 -59
  28. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  31. package/dest/mem_pools/instrumentation.d.ts +9 -4
  32. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  33. package/dest/mem_pools/instrumentation.js +28 -9
  34. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  35. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  37. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  38. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  40. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  44. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  48. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +33 -5
  49. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  52. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +8 -5
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +31 -0
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -3
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +19 -8
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -4
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +208 -118
  63. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  64. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
  66. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  67. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  69. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
  70. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  71. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  72. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
  73. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  75. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
  76. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  77. package/dest/msg_validators/proposal_validator/proposal_validator.js +85 -15
  78. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  79. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  81. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  82. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  83. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  84. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  85. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  86. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  87. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  88. package/dest/msg_validators/tx_validator/data_validator.js +1 -0
  89. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  90. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  91. package/dest/msg_validators/tx_validator/factory.js +29 -16
  92. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  93. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  94. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  95. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  96. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  97. package/dest/msg_validators/tx_validator/index.js +2 -0
  98. package/dest/msg_validators/tx_validator/phases_validator.js +2 -2
  99. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  100. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  102. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  103. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  104. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  105. package/dest/services/data_store.d.ts +1 -1
  106. package/dest/services/data_store.d.ts.map +1 -1
  107. package/dest/services/data_store.js +5 -5
  108. package/dest/services/discv5/discV5_service.d.ts +13 -2
  109. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  110. package/dest/services/discv5/discV5_service.js +119 -25
  111. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  112. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  113. package/dest/services/discv5/persisted_enr_store.js +145 -0
  114. package/dest/services/dummy_service.d.ts +15 -15
  115. package/dest/services/dummy_service.d.ts.map +1 -1
  116. package/dest/services/dummy_service.js +15 -16
  117. package/dest/services/encoding.d.ts +19 -6
  118. package/dest/services/encoding.d.ts.map +1 -1
  119. package/dest/services/encoding.js +25 -15
  120. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  121. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  122. package/dest/services/gossipsub/topic_score_params.js +4 -14
  123. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  124. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  125. package/dest/services/libp2p/instrumentation.js +14 -0
  126. package/dest/services/libp2p/libp2p_service.d.ts +40 -40
  127. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  128. package/dest/services/libp2p/libp2p_service.js +292 -264
  129. package/dest/services/peer-manager/peer_manager.d.ts +15 -2
  130. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  131. package/dest/services/peer-manager/peer_manager.js +59 -17
  132. package/dest/services/peer-manager/peer_scoring.d.ts +30 -1
  133. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_scoring.js +74 -3
  135. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  136. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  137. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +35 -44
  138. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
  139. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  141. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  142. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  143. package/dest/services/reqresp/config.d.ts +15 -3
  144. package/dest/services/reqresp/config.d.ts.map +1 -1
  145. package/dest/services/reqresp/config.js +11 -0
  146. package/dest/services/reqresp/interface.d.ts +16 -18
  147. package/dest/services/reqresp/interface.d.ts.map +1 -1
  148. package/dest/services/reqresp/interface.js +10 -20
  149. package/dest/services/reqresp/metrics.d.ts +1 -1
  150. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  151. package/dest/services/reqresp/metrics.js +0 -1
  152. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  153. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  154. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  155. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  156. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  157. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  158. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  159. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  160. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  161. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  162. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  163. package/dest/services/reqresp/protocols/index.js +0 -1
  164. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  165. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  166. package/dest/services/reqresp/protocols/tx.js +1 -3
  167. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  168. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  169. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  170. package/dest/services/reqresp/reqresp.d.ts +7 -29
  171. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  172. package/dest/services/reqresp/reqresp.js +59 -209
  173. package/dest/services/service.d.ts +23 -16
  174. package/dest/services/service.d.ts.map +1 -1
  175. package/dest/services/tx_collection/config.d.ts +2 -23
  176. package/dest/services/tx_collection/config.d.ts.map +1 -1
  177. package/dest/services/tx_collection/config.js +2 -55
  178. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  179. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  180. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  181. package/dest/services/tx_collection/index.d.ts +2 -3
  182. package/dest/services/tx_collection/index.d.ts.map +1 -1
  183. package/dest/services/tx_collection/index.js +0 -1
  184. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  185. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  186. package/dest/services/tx_collection/instrumentation.js +0 -2
  187. package/dest/services/tx_collection/tx_collection.d.ts +35 -51
  188. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  189. package/dest/services/tx_collection/tx_collection.js +275 -119
  190. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  191. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  192. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  193. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  194. package/dest/services/tx_collection/tx_source.js +4 -1
  195. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  196. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  197. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  198. package/dest/services/tx_provider.d.ts +3 -1
  199. package/dest/services/tx_provider.d.ts.map +1 -1
  200. package/dest/services/tx_provider.js +3 -0
  201. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  202. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  203. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  204. package/dest/test-helpers/mock-pubsub.d.ts +21 -12
  205. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  206. package/dest/test-helpers/mock-pubsub.js +39 -47
  207. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  208. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  209. package/dest/test-helpers/reqresp-nodes.js +16 -18
  210. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  211. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  212. package/dest/test-helpers/test_tx_provider.js +3 -0
  213. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  214. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  215. package/dest/test-helpers/testbench-utils.js +28 -13
  216. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  217. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  218. package/dest/testbench/p2p_client_testbench_worker.js +60 -27
  219. package/dest/testbench/worker_client_manager.d.ts +10 -6
  220. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  221. package/dest/testbench/worker_client_manager.js +51 -8
  222. package/dest/util.d.ts +8 -8
  223. package/dest/util.d.ts.map +1 -1
  224. package/dest/util.js +38 -10
  225. package/dest/versioning.d.ts +3 -6
  226. package/dest/versioning.d.ts.map +1 -1
  227. package/dest/versioning.js +3 -24
  228. package/package.json +16 -16
  229. package/src/bootstrap/bootstrap.ts +17 -3
  230. package/src/client/factory.ts +49 -25
  231. package/src/client/interface.ts +44 -17
  232. package/src/client/p2p_client.ts +125 -79
  233. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  234. package/src/config.ts +146 -34
  235. package/src/errors/p2p-service.error.ts +11 -0
  236. package/src/errors/reqresp.error.ts +13 -19
  237. package/src/mem_pools/attestation_pool/attestation_pool.ts +324 -239
  238. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +238 -63
  239. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  240. package/src/mem_pools/instrumentation.ts +18 -12
  241. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  242. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  243. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
  244. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  245. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  246. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  247. package/src/mem_pools/tx_pool_v2/interfaces.ts +31 -4
  248. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +13 -7
  249. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +35 -0
  250. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +22 -8
  251. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +233 -123
  252. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
  253. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  254. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  255. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  256. package/src/msg_validators/proposal_validator/proposal_validator.ts +94 -12
  257. package/src/msg_validators/tx_validator/README.md +13 -3
  258. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  259. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  260. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  261. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  262. package/src/msg_validators/tx_validator/data_validator.ts +2 -0
  263. package/src/msg_validators/tx_validator/factory.ts +37 -20
  264. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  265. package/src/msg_validators/tx_validator/index.ts +2 -0
  266. package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
  267. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  268. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  269. package/src/services/data_store.ts +5 -13
  270. package/src/services/discv5/discV5_service.ts +126 -16
  271. package/src/services/discv5/persisted_enr_store.ts +158 -0
  272. package/src/services/dummy_service.ts +20 -39
  273. package/src/services/encoding.ts +28 -20
  274. package/src/services/gossipsub/README.md +33 -11
  275. package/src/services/gossipsub/topic_score_params.ts +9 -18
  276. package/src/services/libp2p/instrumentation.ts +14 -0
  277. package/src/services/libp2p/libp2p_service.ts +342 -290
  278. package/src/services/peer-manager/peer_manager.ts +63 -16
  279. package/src/services/peer-manager/peer_scoring.ts +81 -3
  280. package/src/services/reqresp/README.md +2 -37
  281. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +39 -52
  282. package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
  283. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  284. package/src/services/reqresp/config.ts +19 -2
  285. package/src/services/reqresp/interface.ts +21 -47
  286. package/src/services/reqresp/metrics.ts +0 -1
  287. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  288. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  289. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  290. package/src/services/reqresp/protocols/index.ts +0 -1
  291. package/src/services/reqresp/protocols/tx.ts +1 -3
  292. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  293. package/src/services/reqresp/reqresp.ts +69 -252
  294. package/src/services/service.ts +28 -32
  295. package/src/services/tx_collection/config.ts +3 -80
  296. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  297. package/src/services/tx_collection/index.ts +1 -6
  298. package/src/services/tx_collection/instrumentation.ts +1 -7
  299. package/src/services/tx_collection/tx_collection.ts +330 -173
  300. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  301. package/src/services/tx_collection/tx_source.ts +2 -1
  302. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  303. package/src/services/tx_provider.ts +5 -0
  304. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  305. package/src/test-helpers/mock-pubsub.ts +41 -64
  306. package/src/test-helpers/reqresp-nodes.ts +12 -22
  307. package/src/test-helpers/test_tx_provider.ts +5 -0
  308. package/src/test-helpers/testbench-utils.ts +35 -26
  309. package/src/testbench/p2p_client_testbench_worker.ts +68 -44
  310. package/src/testbench/worker_client_manager.ts +59 -19
  311. package/src/util.ts +33 -14
  312. package/src/versioning.ts +3 -33
  313. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  314. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  315. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -315
  316. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  317. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  318. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  319. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  320. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  321. package/dest/msg_validators/clock_tolerance.js +0 -38
  322. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  323. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  324. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  325. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  326. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  327. package/dest/services/reqresp/protocols/block.js +0 -32
  328. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  329. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  330. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  331. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  332. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  333. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  334. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  335. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  336. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  337. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -355
  338. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  339. package/src/msg_validators/clock_tolerance.ts +0 -52
  340. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  341. package/src/services/reqresp/protocols/block.ts +0 -37
  342. package/src/services/tx_collection/fast_tx_collection.ts +0 -361
  343. package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
  344. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
package/dest/util.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SecretValue } from '@aztec/foundation/config';
2
- import type { Logger } from '@aztec/foundation/log';
2
+ import { type Logger } from '@aztec/foundation/log';
3
3
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
4
  import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
5
5
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
@@ -7,15 +7,14 @@ import type { Identify } from '@libp2p/identify';
7
7
  import type { PeerId } from '@libp2p/interface';
8
8
  import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
9
9
  import type { Libp2p } from 'libp2p';
10
- import type { P2PConfig } from './config.js';
10
+ import { type P2PConfig } from './config.js';
11
11
  export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' | 'peerId'> {
12
12
  services: {
13
13
  pubsub: Pick<GossipSub, 'addEventListener' | 'removeEventListener' | 'publish' | 'subscribe' | 'reportMessageValidationResult' | 'direct' | 'getMeshPeers'> & {
14
14
  score: Pick<GossipSub['score'], 'score'>;
15
15
  };
16
16
  components: {
17
- connectionManager: ConnectionManager;
18
- addressManager: AddressManager;
17
+ addressManager: Pick<AddressManager, 'addObservedAddr' | 'confirmObservedAddr' | 'removeObservedAddr'>;
19
18
  };
20
19
  };
21
20
  }
@@ -37,12 +36,13 @@ export type FullLibp2p = Libp2p<{
37
36
  * @returns A multiaddr compliant string. */
38
37
  export declare function convertToMultiaddr(address: string, port: number, protocol: 'tcp' | 'udp'): string;
39
38
  /**
40
- * Queries the public IP address of the machine.
39
+ * Queries the public IP address of the machine, trying multiple services in order.
40
+ * @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
41
41
  */
42
- export declare function getPublicIp(): Promise<string>;
42
+ export declare function getPublicIp(services?: string[]): Promise<string>;
43
43
  export declare function isValidIpAddress(address: string): boolean;
44
44
  export declare function resolveAddressIfNecessary(address: string, port: string): Promise<string>;
45
- export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): P2PConfig & DataStoreConfig;
45
+ export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise<P2PConfig & DataStoreConfig>;
46
46
  /**
47
47
  * Get the peer id private key
48
48
  *
@@ -63,4 +63,4 @@ export declare function getPeerIdPrivateKey(config: {
63
63
  * @returns The peer ID.
64
64
  */
65
65
  export declare function createLibP2PPeerIdFromPrivateKey(privateKey: string): Promise<PeerId>;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSXBGLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUlyQyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJN0MsTUFBTSxXQUFXLFlBQWEsU0FBUSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUN4RixRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsSUFBSSxDQUNWLFNBQVMsRUFDUCxrQkFBa0IsR0FDbEIscUJBQXFCLEdBQ3JCLFNBQVMsR0FDVCxXQUFXLEdBQ1gsK0JBQStCLEdBQy9CLFFBQVEsR0FDUixjQUFjLENBQ2pCLEdBQUc7WUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUFFLENBQUM7UUFDakQsVUFBVSxFQUFFO1lBQ1YsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUM7WUFDckMsY0FBYyxFQUFFLGNBQWMsQ0FBQztTQUNoQyxDQUFDO0tBQ0gsQ0FBQztDQUNIO0FBRUQsTUFBTSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDOUIsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNuQixNQUFNLEVBQUUsU0FBUyxDQUFDO0lBQ2xCLFVBQVUsRUFBRTtRQUNWLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDO1FBQ3JDLGNBQWMsRUFBRSxjQUFjLENBQUM7S0FDaEMsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVIOzs7Ozs7OzZDQU82QztBQUM3Qyx3QkFBZ0Isa0JBQWtCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FPakc7QUFFRDs7R0FFRztBQUNILHdCQUFzQixXQUFXLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQVFuRDtBQUVELHdCQUFnQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FHekQ7QUFFRCx3QkFBc0IseUJBQXlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FXOUY7QUFjRCx3QkFBZ0IsMkJBQTJCLENBQUMsT0FBTyxFQUFFLFNBQVMsR0FBRyxlQUFlLEdBQUcsU0FBUyxHQUFHLGVBQWUsQ0FZN0c7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsTUFBTSxFQUFFO0lBQUUsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFBQyxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUFFLEVBQ3pHLEtBQUssRUFBRSxpQkFBaUIsRUFDeEIsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBMkQ5QjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBc0IsZ0NBQWdDLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBUzFGIn0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUlwRixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFJckMsT0FBTyxFQUE4QixLQUFLLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl6RSxNQUFNLFdBQVcsWUFBYSxTQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ3hGLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxJQUFJLENBQ1YsU0FBUyxFQUNQLGtCQUFrQixHQUNsQixxQkFBcUIsR0FDckIsU0FBUyxHQUNULFdBQVcsR0FDWCwrQkFBK0IsR0FDL0IsUUFBUSxHQUNSLGNBQWMsQ0FDakIsR0FBRztZQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQUUsQ0FBQztRQUNqRCxVQUFVLEVBQUU7WUFDVixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsR0FBRyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3hHLENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRCxNQUFNLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUM5QixRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ25CLE1BQU0sRUFBRSxTQUFTLENBQUM7SUFDbEIsVUFBVSxFQUFFO1FBQ1YsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUM7UUFDckMsY0FBYyxFQUFFLGNBQWMsQ0FBQztLQUNoQyxDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7NkNBTzZDO0FBQzdDLHdCQUFnQixrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxDQU9qRztBQUVEOzs7R0FHRztBQUNILHdCQUFzQixXQUFXLENBQUMsUUFBUSxHQUFFLE1BQU0sRUFBK0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBZ0JsRztBQUVELHdCQUFnQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FHekQ7QUFFRCx3QkFBc0IseUJBQXlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FXOUY7QUFjRCx3QkFBc0IsMkJBQTJCLENBQy9DLE9BQU8sRUFBRSxTQUFTLEdBQUcsZUFBZSxHQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQXFCdEM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsTUFBTSxFQUFFO0lBQUUsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFBQyxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUFFLEVBQ3pHLEtBQUssRUFBRSxpQkFBaUIsRUFDeEIsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBMkQ5QjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBc0IsZ0NBQWdDLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBUzFGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxF,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI,CACV,SAAS,EACP,kBAAkB,GAClB,qBAAqB,GACrB,SAAS,GACT,WAAW,GACX,+BAA+B,GAC/B,QAAQ,GACR,cAAc,CACjB,GAAG;YAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QACjD,UAAU,EAAE;YACV,iBAAiB,EAAE,iBAAiB,CAAC;YACrC,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;KACH,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE;QACV,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC;CACH,CAAC,CAAC;AAEH;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAOjG;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAQnD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9F;AAcD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS,GAAG,eAAe,CAY7G;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EACzG,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CA2D9B;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAIzE,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxF,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI,CACV,SAAS,EACP,kBAAkB,GAClB,qBAAqB,GACrB,SAAS,GACT,WAAW,GACX,+BAA+B,GAC/B,QAAQ,GACR,cAAc,CACjB,GAAG;YAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QACjD,UAAU,EAAE;YACV,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,GAAG,qBAAqB,GAAG,oBAAoB,CAAC,CAAC;SACxG,CAAC;KACH,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE;QACV,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC;CACH,CAAC,CAAC;AAEH;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAOjG;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,QAAQ,GAAE,MAAM,EAA+B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlG;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9F;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CAqBtC;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EACzG,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CA2D9B;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
package/dest/util.js CHANGED
@@ -1,10 +1,12 @@
1
1
  import { SecretValue } from '@aztec/foundation/config';
2
+ import { createLogger } from '@aztec/foundation/log';
2
3
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
3
4
  import { createFromPrivKey } from '@libp2p/peer-id-factory';
4
5
  import { resolve } from 'dns/promises';
5
6
  import { promises as fs } from 'fs';
6
7
  import net from 'net';
7
8
  import path from 'path';
9
+ import { DEFAULT_PUBLIC_IP_SERVICES } from './config.js';
8
10
  const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
9
11
  /**
10
12
  * Converts an address string to a multiaddr string.
@@ -21,15 +23,26 @@ const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
21
23
  return `/${multiaddrPrefix}/${address}/${protocol}/${port}`;
22
24
  }
23
25
  /**
24
- * Queries the public IP address of the machine.
25
- */ export async function getPublicIp() {
26
- const resp = await fetch('https://checkip.amazonaws.com/');
27
- const text = await resp.text();
28
- const address = text.trim();
29
- if (!isValidIpAddress(address)) {
30
- throw new Error(`Received invalid IP address from checkip service: ${address}`);
26
+ * Queries the public IP address of the machine, trying multiple services in order.
27
+ * @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
28
+ */ export async function getPublicIp(services = DEFAULT_PUBLIC_IP_SERVICES) {
29
+ const errors = [];
30
+ for (const url of services){
31
+ try {
32
+ const resp = await fetch(url, {
33
+ signal: AbortSignal.timeout(5000)
34
+ });
35
+ const text = await resp.text();
36
+ const address = text.trim();
37
+ if (isValidIpAddress(address)) {
38
+ return address;
39
+ }
40
+ errors.push(`${url}: invalid IP "${address}"`);
41
+ } catch (err) {
42
+ errors.push(`${url}: ${err.message ?? err}`);
43
+ }
31
44
  }
32
- return address;
45
+ throw new Error(`Failed to determine public IP from all services:\n${errors.join('\n')}`);
33
46
  }
34
47
  export function isValidIpAddress(address) {
35
48
  const netType = net.isIP(address);
@@ -58,15 +71,30 @@ function addressToMultiAddressType(address) {
58
71
  return 'dns';
59
72
  }
60
73
  }
61
- export function configureP2PClientAddresses(_config) {
74
+ export async function configureP2PClientAddresses(_config) {
62
75
  const config = {
63
76
  ..._config
64
77
  };
65
- const { p2pBroadcastPort, p2pPort } = config;
78
+ const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
79
+ const logger = createLogger('p2p:config');
66
80
  // If no broadcast port is provided, use the given p2p port as the broadcast port
67
81
  if (!p2pBroadcastPort) {
68
82
  config.p2pBroadcastPort = p2pPort;
69
83
  }
84
+ // Resolve the initial public IP so the ENR and announce address are set at startup.
85
+ // If queryForIp is enabled, discv5 will also track IP changes at runtime via enrUpdate.
86
+ if (!p2pIp && queryForIp) {
87
+ config.p2pIp = await getPublicIp(config.publicIpServices);
88
+ logger.info('Resolved initial public IP for P2P', {
89
+ ip: config.p2pIp,
90
+ queryForIp
91
+ });
92
+ } else if (p2pIp) {
93
+ logger.info('Using configured static P2P IP', {
94
+ ip: p2pIp,
95
+ queryForIp
96
+ });
97
+ }
70
98
  // TODO(md): guard against setting a local ip address as the announce ip
71
99
  return config;
72
100
  }
@@ -1,12 +1,9 @@
1
1
  import type { ChainConfig } from '@aztec/stdlib/config';
2
- import { type ComponentsVersions } from '@aztec/stdlib/versioning';
3
2
  import type { SignableENR } from '@nethermindeth/enr';
4
3
  /** Returns the component versions based on config and this build. */
5
- export declare function getVersions(config: ChainConfig): ComponentsVersions;
4
+ export declare function getVersions(config: ChainConfig): import("@aztec/stdlib/versioning").ComponentsVersions;
6
5
  /** Sets the aztec key on the ENR record with versioning info. */
7
- export declare function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash?: boolean): ComponentsVersions;
6
+ export declare function setAztecEnrKey(enr: SignableENR, config: ChainConfig): import("@aztec/stdlib/versioning").ComponentsVersions;
8
7
  /** Sets the Aztec client version on ENR record **/
9
8
  export declare function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: string): void;
10
- /** Checks the given value from an ENR record against the expected versions. */
11
- export declare function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions): void;
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlcnNpb25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBSXhCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTdEQscUVBQXFFO0FBQ3JFLHdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsc0JBRTlDO0FBRUQsaUVBQWlFO0FBQ2pFLHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsVUFBYyxzQkFLNUY7QUFFRCxtREFBbUQ7QUFDbkQsd0JBQWdCLDJCQUEyQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFJbEY7QUFFRCwrRUFBK0U7QUFDL0Usd0JBQWdCLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLFFBVTFGIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlcnNpb25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHeEQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJdEQscUVBQXFFO0FBQ3JFLHdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcseURBRTlDO0FBRUQsaUVBQWlFO0FBQ2pFLHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyx5REFJbkU7QUFFRCxtREFBbUQ7QUFDbkQsd0JBQWdCLDJCQUEyQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFJbEYifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAStD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,sBAE9C;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,UAAc,sBAK5F;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,QAIlF;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,QAU1F"}
1
+ {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,yDAE9C;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,yDAInE;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,QAIlF"}
@@ -1,19 +1,13 @@
1
- import { toBufferBE } from '@aztec/foundation/bigint-buffer';
2
1
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
2
  import { protocolContractsHash } from '@aztec/protocol-contracts';
4
- import { checkCompressedComponentVersion, compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
5
- import xxhashFactory from 'xxhash-wasm';
3
+ import { compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
6
4
  import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
7
- const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
8
- const XX_HASH_LEN = 8;
9
- const xxhash = await xxhashFactory();
10
5
  /** Returns the component versions based on config and this build. */ export function getVersions(config) {
11
6
  return getComponentsVersionsFromConfig(config, protocolContractsHash, getVKTreeRoot());
12
7
  }
13
- /** Sets the aztec key on the ENR record with versioning info. */ export function setAztecEnrKey(enr, config, useXxHash = USE_XX_HASH) {
8
+ /** Sets the aztec key on the ENR record with versioning info. */ export function setAztecEnrKey(enr, config) {
14
9
  const versions = getVersions(config);
15
- const value = versionsToEnrValue(versions, useXxHash);
16
- enr.set(AZTEC_ENR_KEY, value);
10
+ enr.set(AZTEC_ENR_KEY, Buffer.from(compressComponentVersions(versions)));
17
11
  return versions;
18
12
  }
19
13
  /** Sets the Aztec client version on ENR record **/ export function setAztecClientVersionEnrKey(enr, clientVersion) {
@@ -21,18 +15,3 @@ const xxhash = await xxhashFactory();
21
15
  enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
22
16
  }
23
17
  }
24
- /** Checks the given value from an ENR record against the expected versions. */ export function checkAztecEnrVersion(enrValue, expectedVersions) {
25
- if (enrValue.length === XX_HASH_LEN) {
26
- const expected = versionsToEnrValue(expectedVersions, true);
27
- if (!Buffer.from(enrValue).equals(expected)) {
28
- throw new Error(`Expected ENR version ${expected.toString('hex')} but received ${enrValue.toString('hex')}`);
29
- }
30
- } else {
31
- const actual = Buffer.from(enrValue).toString();
32
- checkCompressedComponentVersion(actual, expectedVersions);
33
- }
34
- }
35
- function versionsToEnrValue(versions, useXxHash) {
36
- const compressed = compressComponentVersions(versions);
37
- return useXxHash ? toBufferBE(xxhash.h64(compressed), XX_HASH_LEN) : Buffer.from(compressed);
38
- }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "0.0.1-commit.9ef841308",
3
+ "version": "0.0.1-commit.a5db02d",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -67,17 +67,18 @@
67
67
  ]
68
68
  },
69
69
  "dependencies": {
70
- "@aztec/constants": "0.0.1-commit.9ef841308",
71
- "@aztec/epoch-cache": "0.0.1-commit.9ef841308",
72
- "@aztec/ethereum": "0.0.1-commit.9ef841308",
73
- "@aztec/foundation": "0.0.1-commit.9ef841308",
74
- "@aztec/kv-store": "0.0.1-commit.9ef841308",
75
- "@aztec/noir-contracts.js": "0.0.1-commit.9ef841308",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.9ef841308",
77
- "@aztec/protocol-contracts": "0.0.1-commit.9ef841308",
78
- "@aztec/simulator": "0.0.1-commit.9ef841308",
79
- "@aztec/stdlib": "0.0.1-commit.9ef841308",
80
- "@aztec/telemetry-client": "0.0.1-commit.9ef841308",
70
+ "@aztec/constants": "0.0.1-commit.a5db02d",
71
+ "@aztec/epoch-cache": "0.0.1-commit.a5db02d",
72
+ "@aztec/ethereum": "0.0.1-commit.a5db02d",
73
+ "@aztec/foundation": "0.0.1-commit.a5db02d",
74
+ "@aztec/kv-store": "0.0.1-commit.a5db02d",
75
+ "@aztec/noir-contracts.js": "0.0.1-commit.a5db02d",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.a5db02d",
77
+ "@aztec/protocol-contracts": "0.0.1-commit.a5db02d",
78
+ "@aztec/simulator": "0.0.1-commit.a5db02d",
79
+ "@aztec/standard-contracts": "0.0.1-commit.a5db02d",
80
+ "@aztec/stdlib": "0.0.1-commit.a5db02d",
81
+ "@aztec/telemetry-client": "0.0.1-commit.a5db02d",
81
82
  "@chainsafe/libp2p-gossipsub": "13.0.0",
82
83
  "@chainsafe/libp2p-noise": "^15.0.0",
83
84
  "@chainsafe/libp2p-yamux": "^6.0.2",
@@ -100,12 +101,11 @@
100
101
  "semver": "^7.6.0",
101
102
  "sha3": "^2.1.4",
102
103
  "snappy": "^7.2.2",
103
- "tslib": "^2.4.0",
104
- "xxhash-wasm": "^1.1.0"
104
+ "tslib": "^2.4.0"
105
105
  },
106
106
  "devDependencies": {
107
- "@aztec/archiver": "0.0.1-commit.9ef841308",
108
- "@aztec/world-state": "0.0.1-commit.9ef841308",
107
+ "@aztec/archiver": "0.0.1-commit.a5db02d",
108
+ "@aztec/world-state": "0.0.1-commit.a5db02d",
109
109
  "@jest/globals": "^30.0.0",
110
110
  "@types/jest": "^30.0.0",
111
111
  "@types/node": "^22.15.17",
@@ -40,7 +40,7 @@ export class BootstrapNode implements P2PBootstrapApi {
40
40
  if (!p2pIp) {
41
41
  if (queryForIp) {
42
42
  this.logger.info('Querying for public IP address...');
43
- const publicIp = await getPublicIp();
43
+ const publicIp = await getPublicIp(config.publicIpServices);
44
44
  p2pIp = publicIp;
45
45
  this.logger.info(`Found public IP address: ${publicIp}`);
46
46
  }
@@ -84,8 +84,22 @@ export class BootstrapNode implements P2PBootstrapApi {
84
84
  this.logger.info('Advertised socket address updated', { addr: addr.toString() });
85
85
  });
86
86
  this.node.on('discovered', async (enr: SignableENR) => {
87
- const addr = await enr.getFullMultiaddr('udp');
88
- this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
87
+ try {
88
+ const addr = await enr.getFullMultiaddr('udp');
89
+ this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
90
+ // discv5's discovered() only updates routing table entries that already exist. Nodes that
91
+ // established a session with an empty-IP ENR are never inserted, so even after their ENR
92
+ // gains a valid socket address the routing table stays empty and FINDNODE always returns 0
93
+ // peers. Calling addEnr() here does an insertOrUpdate regardless of prior state, fixing
94
+ // the routing table so these nodes become discoverable to other peers.
95
+ if (addr) {
96
+ this.node.addEnr(enr);
97
+ }
98
+ } catch (err) {
99
+ // A malformed ENR address field makes the parser throw. As an async listener this would crash
100
+ // the bootnode on an unhandled rejection — catch, log, and drop the ENR instead.
101
+ this.logger.warn(`Dropping discovered ENR with unparseable address`, { err });
102
+ }
89
103
  });
90
104
 
91
105
  try {
@@ -4,9 +4,10 @@ import { type Logger, createLogger } from '@aztec/foundation/log';
4
4
  import { DateProvider } from '@aztec/foundation/timer';
5
5
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
6
6
  import { AztecLMDBStoreV2, createStore } from '@aztec/kv-store/lmdb-v2';
7
- import type { L2BlockSource } from '@aztec/stdlib/block';
7
+ import type { BlockHash, L2BlockSource } from '@aztec/stdlib/block';
8
8
  import type { ChainConfig } from '@aztec/stdlib/config';
9
9
  import type { ContractDataSource } from '@aztec/stdlib/contract';
10
+ import { type BlockMinFeesProvider, getNetworkTxGasLimits } from '@aztec/stdlib/gas';
10
11
  import type { AztecNode, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
11
12
  import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
12
13
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
@@ -19,10 +20,11 @@ import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
19
20
  import { AztecKVTxPoolV2 } from '../mem_pools/tx_pool_v2/tx_pool_v2.js';
20
21
  import {
21
22
  createCheckAllowedSetupCalls,
22
- createTxValidatorForReqResponseReceivedTxs,
23
+ createTxValidatorForOnDemandReceivedTxs,
23
24
  createTxValidatorForTransactionsEnteringPendingTxPool,
24
25
  getDefaultAllowedSetupFunctions,
25
26
  } from '../msg_validators/index.js';
27
+ import { TxValidationCache } from '../msg_validators/tx_validator/tx_validation_cache.js';
26
28
  import { DummyP2PService } from '../services/dummy_service.js';
27
29
  import { LibP2PService } from '../services/index.js';
28
30
  import { createFileStoreTxSources } from '../services/tx_collection/file_store_tx_source.js';
@@ -52,12 +54,14 @@ export async function createP2PClient(
52
54
  proofVerifier: ClientProtocolCircuitVerifier,
53
55
  worldStateSynchronizer: WorldStateSynchronizer,
54
56
  epochCache: EpochCacheInterface,
57
+ blockMinFeesProvider: BlockMinFeesProvider,
55
58
  packageVersion: string,
56
59
  dateProvider: DateProvider = new DateProvider(),
57
60
  telemetry: TelemetryClient = getTelemetryClient(),
58
61
  deps: P2PClientDeps = {},
62
+ initialBlockHash: BlockHash,
59
63
  ) {
60
- const config = configureP2PClientAddresses({
64
+ const config = await configureP2PClientAddresses({
61
65
  ...inputConfig,
62
66
  dataStoreMapSizeKb: inputConfig.p2pStoreMapSizeKb ?? inputConfig.dataStoreMapSizeKb,
63
67
  });
@@ -71,13 +75,16 @@ export async function createP2PClient(
71
75
  }
72
76
 
73
77
  const bindings = logger.getBindings();
74
- const store = deps.store ?? (await createStore(P2P_STORE_NAME, 2, config, bindings));
78
+ // Schema version 4: L2 tips store resolves checkpoint tips from per-tip ids in l2_tip_checkpoints; the
79
+ // block->checkpoint mapping and checkpoint maps were dropped. Bumped to wipe stores whose tips predate
80
+ // per-tip ids, which would otherwise make getL2Tips throw on every read.
81
+ const store = deps.store ?? (await createStore(P2P_STORE_NAME, 4, config, bindings));
75
82
  const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, bindings);
76
83
  const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, bindings);
77
- const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 1, config, bindings);
84
+ const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 2, config, bindings);
78
85
  const l1Constants = await archiver.getL1Constants();
79
86
 
80
- const rollupAddress = inputConfig.l1Contracts.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
87
+ const rollupAddress = inputConfig.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
81
88
  const txFileStoreBasePath = `aztec-${inputConfig.l1ChainId}-${inputConfig.rollupVersion}-0x${rollupAddress}`;
82
89
 
83
90
  const allowedInSetup = [
@@ -90,23 +97,6 @@ export async function createP2PClient(
90
97
  () => epochCache.getEpochAndSlotInNextL1Slot().ts,
91
98
  );
92
99
 
93
- const createTxValidator = async () => {
94
- // We accept transactions if they are not expired by the next slot and block number (checked based on the ExpirationTimestamp field)
95
- const currentBlockNumber = await archiver.getBlockNumber();
96
- const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
97
- const l1Constants = await archiver.getL1Constants();
98
- return createTxValidatorForTransactionsEnteringPendingTxPool(
99
- worldStateSynchronizer,
100
- nextSlotTimestamp,
101
- BlockNumber(currentBlockNumber + 1),
102
- {
103
- rollupManaLimit: l1Constants.rollupManaLimit,
104
- maxBlockL2Gas: config.validateMaxL2BlockGas,
105
- maxBlockDAGas: config.validateMaxDABlockGas,
106
- },
107
- );
108
- };
109
-
110
100
  const txPool =
111
101
  deps.txPool ??
112
102
  new AztecKVTxPoolV2(
@@ -116,7 +106,24 @@ export async function createP2PClient(
116
106
  l2BlockSource: archiver,
117
107
  worldStateSynchronizer,
118
108
  checkAllowedSetupCalls,
119
- createTxValidator,
109
+ createTxValidator: async () => {
110
+ const currentBlockNumber = await archiver.getBlockNumber();
111
+ const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
112
+ const l1Constants = await archiver.getL1Constants();
113
+ const gasFees = await blockMinFeesProvider.getCurrentMinFees();
114
+ const networkTxGasLimits = getNetworkTxGasLimits(config, l1Constants);
115
+ return createTxValidatorForTransactionsEnteringPendingTxPool(
116
+ worldStateSynchronizer,
117
+ nextSlotTimestamp,
118
+ BlockNumber(currentBlockNumber + 1),
119
+ {
120
+ maxTxL2Gas: networkTxGasLimits.l2Gas,
121
+ maxTxDAGas: networkTxGasLimits.daGas,
122
+ },
123
+ gasFees,
124
+ );
125
+ },
126
+ blockMinFeesProvider,
120
127
  },
121
128
  telemetry,
122
129
  {
@@ -125,6 +132,7 @@ export async function createP2PClient(
125
132
  minTxPoolAgeMs: config.minTxPoolAgeMs,
126
133
  dropTransactionsProbability: config.dropTransactionsProbability,
127
134
  priceBumpPercentage: config.priceBumpPercentage,
135
+ keepFinalizedTxsForSlots: config.keepFinalizedTxsForSlots,
128
136
  },
129
137
  dateProvider,
130
138
  );
@@ -134,12 +142,16 @@ export async function createP2PClient(
134
142
  attestationPool: deps.attestationPool ?? new AttestationPool(attestationStore, telemetry),
135
143
  };
136
144
 
145
+ const txValidationCache =
146
+ config.txValidationCacheSize > 0 ? new TxValidationCache(config.txValidationCacheSize) : undefined;
147
+
137
148
  const p2pService = await createP2PService(
138
149
  config,
139
150
  archiver,
140
151
  proofVerifier,
141
152
  worldStateSynchronizer,
142
153
  epochCache,
154
+ blockMinFeesProvider,
143
155
  store,
144
156
  peerStore,
145
157
  mempools,
@@ -147,9 +159,15 @@ export async function createP2PClient(
147
159
  packageVersion,
148
160
  logger.createChild('libp2p_service'),
149
161
  telemetry,
162
+ txValidationCache,
150
163
  );
151
164
 
152
- const txValidatorForTxCollection = createTxValidatorForReqResponseReceivedTxs(proofVerifier, config);
165
+ const txValidatorForTxCollection = createTxValidatorForOnDemandReceivedTxs(
166
+ proofVerifier,
167
+ config,
168
+ /*bindings=*/ undefined,
169
+ txValidationCache,
170
+ );
153
171
  const nodeSources = [
154
172
  ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, txValidatorForTxCollection, config),
155
173
  ...(deps.rpcTxProviders ?? []).map(
@@ -207,6 +225,8 @@ export async function createP2PClient(
207
225
  config,
208
226
  dateProvider,
209
227
  telemetry,
228
+ undefined,
229
+ initialBlockHash,
210
230
  );
211
231
  }
212
232
 
@@ -216,6 +236,7 @@ async function createP2PService(
216
236
  proofVerifier: ClientProtocolCircuitVerifier,
217
237
  worldStateSynchronizer: WorldStateSynchronizer,
218
238
  epochCache: EpochCacheInterface,
239
+ blockMinFeesProvider: BlockMinFeesProvider,
219
240
  store: AztecAsyncKVStore,
220
241
  peerStore: AztecLMDBStoreV2,
221
242
  mempools: MemPools,
@@ -223,6 +244,7 @@ async function createP2PService(
223
244
  packageVersion: string,
224
245
  logger: Logger,
225
246
  telemetry: TelemetryClient,
247
+ txValidationCache?: TxValidationCache,
226
248
  ) {
227
249
  if (!config.p2pEnabled) {
228
250
  logger.verbose('P2P is disabled. Using dummy P2P service.');
@@ -243,8 +265,10 @@ async function createP2PService(
243
265
  proofVerifier,
244
266
  worldStateSynchronizer,
245
267
  peerStore,
268
+ blockMinFeesProvider,
246
269
  telemetry,
247
270
  logger: logger.createChild(`libp2p_service`),
271
+ txValidationCache,
248
272
  });
249
273
 
250
274
  return p2pService;
@@ -9,15 +9,13 @@ import type { ENR } from '@nethermindeth/enr';
9
9
 
10
10
  import type { P2PConfig } from '../config.js';
11
11
  import type { AuthRequest, StatusMessage } from '../services/index.js';
12
- import type {
13
- ReqRespSubProtocol,
14
- ReqRespSubProtocolHandler,
15
- ReqRespSubProtocolValidators,
16
- } from '../services/reqresp/interface.js';
12
+ import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
17
13
  import type {
18
14
  DuplicateAttestationInfo,
19
15
  DuplicateProposalInfo,
16
+ OversizedProposalInfo,
20
17
  P2PBlockReceivedCallback,
18
+ P2PCheckpointAttestationCallback,
21
19
  P2PCheckpointReceivedCallback,
22
20
  } from '../services/service.js';
23
21
 
@@ -82,7 +80,15 @@ export type P2P = P2PClient & {
82
80
  *
83
81
  * @param handler - A function taking a received checkpoint proposal and producing attestations
84
82
  */
85
- registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
83
+ registerValidatorCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
84
+
85
+ /**
86
+ * Registers a callback that runs for ALL nodes (not just validators) when a checkpoint proposal is received.
87
+ * Used to set the proposed checkpoint number on the archiver so the sequencer can build on top of it.
88
+ *
89
+ * @param handler - A function taking a received checkpoint proposal
90
+ */
91
+ registerAllNodesCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
86
92
 
87
93
  /**
88
94
  * Registers a callback invoked when a duplicate proposal is detected (equivocation).
@@ -92,6 +98,14 @@ export type P2P = P2PClient & {
92
98
  */
93
99
  registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void;
94
100
 
101
+ /**
102
+ * Registers a callback invoked when an oversized block proposal (index at or beyond the consensus
103
+ * per-checkpoint block limit) is stored and re-broadcast as slashing evidence.
104
+ *
105
+ * @param callback - Function called with info about the oversized proposal
106
+ */
107
+ registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void;
108
+
95
109
  /**
96
110
  * Registers a callback invoked when a duplicate attestation is detected (equivocation).
97
111
  * A validator signing attestations for different proposals at the same slot.
@@ -101,6 +115,9 @@ export type P2P = P2PClient & {
101
115
  */
102
116
  registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
103
117
 
118
+ /** Registers a callback invoked when a valid checkpoint attestation is accepted into the pool. */
119
+ registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
120
+
104
121
  /**
105
122
  * Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
106
123
  * @param tx - The transaction.
@@ -116,16 +133,18 @@ export type P2P = P2PClient & {
116
133
  /**
117
134
  * Returns a transaction in the transaction pool by its hash.
118
135
  * @param txHash - Hash of tx to return.
136
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
119
137
  * @returns A single tx or undefined.
120
138
  */
121
- getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined>;
139
+ getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined>;
122
140
 
123
141
  /**
124
142
  * Returns transactions in the transaction pool by hash.
125
143
  * @param txHashes - Hashes of txs to return.
144
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
126
145
  * @returns An array of txs or undefined.
127
146
  */
128
- getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
147
+ getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]>;
129
148
 
130
149
  /**
131
150
  * Checks if transactions exist in the pool
@@ -148,15 +167,27 @@ export type P2P = P2PClient & {
148
167
  */
149
168
  getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
150
169
 
151
- /** Returns an iterator over pending txs on the mempool. */
152
- iteratePendingTxs(): AsyncIterableIterator<Tx>;
170
+ /**
171
+ * Returns an iterator over pending txs on the mempool.
172
+ * Set `includeProof: false` to skip loading tx proofs from the DB.
173
+ */
174
+ iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx>;
153
175
 
154
- /** Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building. */
155
- iterateEligiblePendingTxs(): AsyncIterableIterator<Tx>;
176
+ /**
177
+ * Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building.
178
+ * Set `includeProof: false` to skip loading tx proofs from the DB.
179
+ */
180
+ iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx>;
156
181
 
157
182
  /** Returns the number of pending txs in the mempool. */
158
183
  getPendingTxCount(): Promise<number>;
159
184
 
185
+ /**
186
+ * Returns whether at least `minCount` pending txs have been in the pool long enough to be eligible for block
187
+ * building. Early-exits once the threshold is met instead of counting every eligible tx.
188
+ */
189
+ hasEligiblePendingTxs(minCount: number): Promise<boolean>;
190
+
160
191
  /**
161
192
  * Protects existing transactions by hash for a given slot.
162
193
  * Returns hashes of transactions that weren't found in the pool.
@@ -216,11 +247,7 @@ export type P2P = P2PClient & {
216
247
  /** Clears the db. */
217
248
  clear(): Promise<void>;
218
249
 
219
- addReqRespSubProtocol(
220
- subProtocol: ReqRespSubProtocol,
221
- handler: ReqRespSubProtocolHandler,
222
- validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
223
- ): Promise<void>;
250
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
224
251
 
225
252
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
226
253