@aztec/p2p 0.0.1-commit.b6e433891 → 0.0.1-commit.b8a057fa

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 (413) 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 +35 -25
  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/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 +98 -56
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +269 -196
  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 +218 -59
  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 +9 -4
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +28 -9
  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 +33 -5
  54. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  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 +31 -0
  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 +19 -8
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -4
  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 +208 -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 -16
  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/contract_instance_validator.d.ts +9 -0
  92. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  93. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  94. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  95. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  97. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  98. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  99. package/dest/msg_validators/tx_validator/factory.js +36 -17
  100. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  101. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  102. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  103. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  104. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  105. package/dest/msg_validators/tx_validator/index.js +2 -0
  106. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  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 -40
  135. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  136. package/dest/services/libp2p/libp2p_service.js +388 -279
  137. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  138. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  139. package/dest/services/peer-manager/peer_manager.js +79 -23
  140. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  141. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  142. package/dest/services/peer-manager/peer_scoring.js +102 -13
  143. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  144. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +38 -44
  146. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
  147. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  149. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  150. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  151. package/dest/services/reqresp/config.d.ts +15 -3
  152. package/dest/services/reqresp/config.d.ts.map +1 -1
  153. package/dest/services/reqresp/config.js +11 -0
  154. package/dest/services/reqresp/interface.d.ts +16 -18
  155. package/dest/services/reqresp/interface.d.ts.map +1 -1
  156. package/dest/services/reqresp/interface.js +10 -20
  157. package/dest/services/reqresp/metrics.d.ts +1 -1
  158. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  159. package/dest/services/reqresp/metrics.js +0 -1
  160. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  161. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  163. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  166. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  167. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  168. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  169. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  170. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  171. package/dest/services/reqresp/protocols/index.js +0 -1
  172. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  173. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  174. package/dest/services/reqresp/protocols/tx.js +1 -3
  175. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  176. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  177. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  178. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  179. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  180. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  181. package/dest/services/reqresp/reqresp.d.ts +7 -29
  182. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  183. package/dest/services/reqresp/reqresp.js +59 -209
  184. package/dest/services/service.d.ts +25 -12
  185. package/dest/services/service.d.ts.map +1 -1
  186. package/dest/services/tx_collection/config.d.ts +2 -23
  187. package/dest/services/tx_collection/config.d.ts.map +1 -1
  188. package/dest/services/tx_collection/config.js +2 -55
  189. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  190. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  191. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  192. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  193. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  194. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  195. package/dest/services/tx_collection/index.d.ts +2 -3
  196. package/dest/services/tx_collection/index.d.ts.map +1 -1
  197. package/dest/services/tx_collection/index.js +0 -1
  198. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  199. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  200. package/dest/services/tx_collection/instrumentation.js +0 -2
  201. package/dest/services/tx_collection/tx_collection.d.ts +35 -51
  202. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  203. package/dest/services/tx_collection/tx_collection.js +275 -119
  204. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  205. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  206. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  207. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  208. package/dest/services/tx_collection/tx_source.js +13 -8
  209. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  210. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  211. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  212. package/dest/services/tx_provider.d.ts +3 -1
  213. package/dest/services/tx_provider.d.ts.map +1 -1
  214. package/dest/services/tx_provider.js +3 -0
  215. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  216. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  217. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  218. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  219. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  220. package/dest/test-helpers/mock-pubsub.js +44 -44
  221. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  222. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  223. package/dest/test-helpers/reqresp-nodes.js +16 -18
  224. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  225. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  226. package/dest/test-helpers/test_tx_provider.js +3 -0
  227. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  228. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  229. package/dest/test-helpers/testbench-utils.js +28 -13
  230. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  231. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  232. package/dest/testbench/p2p_client_testbench_worker.js +102 -41
  233. package/dest/testbench/worker_client_manager.d.ts +10 -6
  234. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  235. package/dest/testbench/worker_client_manager.js +51 -9
  236. package/dest/util.d.ts +11 -6
  237. package/dest/util.d.ts.map +1 -1
  238. package/dest/util.js +35 -14
  239. package/dest/versioning.d.ts +3 -6
  240. package/dest/versioning.d.ts.map +1 -1
  241. package/dest/versioning.js +3 -24
  242. package/package.json +16 -16
  243. package/src/bootstrap/bootstrap.ts +17 -3
  244. package/src/client/factory.ts +53 -24
  245. package/src/client/interface.ts +44 -17
  246. package/src/client/p2p_client.ts +125 -79
  247. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  248. package/src/config.ts +146 -34
  249. package/src/errors/p2p-service.error.ts +11 -0
  250. package/src/errors/reqresp.error.ts +13 -19
  251. package/src/index.ts +0 -1
  252. package/src/mem_pools/attestation_pool/attestation_pool.ts +324 -239
  253. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +238 -63
  254. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  255. package/src/mem_pools/index.ts +0 -3
  256. package/src/mem_pools/instrumentation.ts +18 -12
  257. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  258. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  259. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
  260. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  261. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  262. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  263. package/src/mem_pools/tx_pool_v2/interfaces.ts +31 -4
  264. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
  265. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +35 -0
  266. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +22 -8
  267. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +233 -123
  268. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
  269. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  270. package/src/msg_validators/proposal_validator/README.md +1 -1
  271. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  272. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  273. package/src/msg_validators/proposal_validator/proposal_validator.ts +94 -12
  274. package/src/msg_validators/tx_validator/README.md +13 -3
  275. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  276. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  277. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  278. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  279. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  280. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  281. package/src/msg_validators/tx_validator/factory.ts +44 -20
  282. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  283. package/src/msg_validators/tx_validator/index.ts +2 -0
  284. package/src/msg_validators/tx_validator/phases_validator.ts +3 -3
  285. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  286. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  287. package/src/services/data_store.ts +5 -13
  288. package/src/services/discv5/discV5_service.ts +126 -14
  289. package/src/services/discv5/persisted_enr_store.ts +158 -0
  290. package/src/services/dummy_service.ts +20 -39
  291. package/src/services/encoding.ts +28 -20
  292. package/src/services/gossipsub/README.md +33 -11
  293. package/src/services/gossipsub/topic_score_params.ts +9 -18
  294. package/src/services/libp2p/instrumentation.ts +14 -0
  295. package/src/services/libp2p/libp2p_service.ts +439 -313
  296. package/src/services/peer-manager/peer_manager.ts +86 -22
  297. package/src/services/peer-manager/peer_scoring.ts +102 -8
  298. package/src/services/reqresp/README.md +2 -37
  299. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +42 -52
  300. package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
  301. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  302. package/src/services/reqresp/config.ts +19 -2
  303. package/src/services/reqresp/interface.ts +21 -47
  304. package/src/services/reqresp/metrics.ts +0 -1
  305. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  306. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  307. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  308. package/src/services/reqresp/protocols/index.ts +0 -1
  309. package/src/services/reqresp/protocols/tx.ts +1 -3
  310. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  311. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  312. package/src/services/reqresp/reqresp.ts +69 -252
  313. package/src/services/service.ts +31 -28
  314. package/src/services/tx_collection/config.ts +3 -80
  315. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  316. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  317. package/src/services/tx_collection/index.ts +1 -6
  318. package/src/services/tx_collection/instrumentation.ts +1 -7
  319. package/src/services/tx_collection/tx_collection.ts +330 -173
  320. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  321. package/src/services/tx_collection/tx_source.ts +10 -8
  322. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  323. package/src/services/tx_provider.ts +5 -0
  324. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  325. package/src/test-helpers/mock-pubsub.ts +46 -60
  326. package/src/test-helpers/reqresp-nodes.ts +12 -22
  327. package/src/test-helpers/test_tx_provider.ts +5 -0
  328. package/src/test-helpers/testbench-utils.ts +35 -26
  329. package/src/testbench/p2p_client_testbench_worker.ts +110 -55
  330. package/src/testbench/worker_client_manager.ts +59 -20
  331. package/src/util.ts +32 -17
  332. package/src/versioning.ts +3 -33
  333. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  334. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  335. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  336. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  337. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  338. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  339. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  340. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  341. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  342. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  343. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  344. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  345. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  346. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  347. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  348. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  349. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  350. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  351. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  352. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  353. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  354. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  355. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  356. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  357. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  358. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  359. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  360. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  361. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  362. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  363. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  364. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  365. package/dest/mem_pools/tx_pool/index.js +0 -2
  366. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  367. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  368. package/dest/mem_pools/tx_pool/priority.js +0 -15
  369. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  370. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  371. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  372. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  373. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  374. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  375. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  376. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  377. package/dest/msg_validators/clock_tolerance.js +0 -38
  378. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  379. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  380. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  381. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  382. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  383. package/dest/services/reqresp/protocols/block.js +0 -32
  384. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  385. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  386. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  387. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  388. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  389. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  390. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  391. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  392. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  393. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -344
  394. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  395. package/src/mem_pools/tx_pool/README.md +0 -270
  396. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  397. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  398. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  399. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  400. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  401. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  402. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  403. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  404. package/src/mem_pools/tx_pool/index.ts +0 -2
  405. package/src/mem_pools/tx_pool/priority.ts +0 -20
  406. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  407. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  408. package/src/msg_validators/clock_tolerance.ts +0 -52
  409. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  410. package/src/services/reqresp/protocols/block.ts +0 -37
  411. package/src/services/tx_collection/fast_tx_collection.ts +0 -361
  412. package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
  413. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -17,9 +17,7 @@ const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
17
17
  const testChainConfig = {
18
18
  l1ChainId: 31337,
19
19
  rollupVersion: 1,
20
- l1Contracts: {
21
- rollupAddress: EthAddress.random()
22
- }
20
+ rollupAddress: EthAddress.random()
23
21
  };
24
22
  class WorkerClientManager {
25
23
  processes = [];
@@ -37,7 +35,6 @@ class WorkerClientManager {
37
35
  destroy() {
38
36
  this.cleanup().catch((error)=>{
39
37
  this.logger.error('Failed to cleanup worker client manager', error);
40
- process.exit(1);
41
38
  });
42
39
  }
43
40
  /**
@@ -318,6 +315,55 @@ class WorkerClientManager {
318
315
  this.logger.info('All worker processes cleaned up');
319
316
  }
320
317
  /**
318
+ * Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
319
+ * This prevents benchmark cases from starting with degraded connectivity after a previous case
320
+ * caused connection failures.
321
+ */ async waitForConnectivity(minPeers, timeoutMs = 15_000) {
322
+ const waitInterval = 1000;
323
+ let waited = 0;
324
+ while(waited < timeoutMs){
325
+ const count = await this.getPeerCount(0, 5000);
326
+ if (count >= minPeers) {
327
+ this.logger.info(`Connectivity check passed: ${count}/${minPeers} peers connected`);
328
+ return count;
329
+ }
330
+ this.logger.debug(`Waiting for connectivity: ${count}/${minPeers} (waited ${waited}ms)`);
331
+ await sleep(waitInterval);
332
+ waited += waitInterval;
333
+ }
334
+ const finalCount = await this.getPeerCount(0, 5000);
335
+ this.logger.warn(`Connectivity check: only ${finalCount}/${minPeers} peers after ${timeoutMs}ms`);
336
+ return finalCount;
337
+ }
338
+ getPeerCount(clientIndex, timeoutMs) {
339
+ return new Promise((resolve)=>{
340
+ let resolved = false;
341
+ const handler = (msg)=>{
342
+ if (resolved) {
343
+ return;
344
+ }
345
+ if (msg.type === 'PEER_COUNT') {
346
+ resolved = true;
347
+ clearTimeout(timeout);
348
+ this.processes[clientIndex].off('message', handler);
349
+ resolve(msg.count);
350
+ }
351
+ };
352
+ const timeout = setTimeout(()=>{
353
+ if (resolved) {
354
+ return;
355
+ }
356
+ resolved = true;
357
+ this.processes[clientIndex].off('message', handler);
358
+ resolve(0);
359
+ }, timeoutMs);
360
+ this.processes[clientIndex].on('message', handler);
361
+ this.processes[clientIndex].send({
362
+ type: 'GET_PEER_COUNT'
363
+ });
364
+ });
365
+ }
366
+ /**
321
367
  * Run a req/resp benchmark across all worker clients.
322
368
  *
323
369
  * This sends a BENCH_REQRESP command to all workers:
@@ -334,7 +380,7 @@ class WorkerClientManager {
334
380
  const seed = config.seed ?? Date.now();
335
381
  const blockNumber = config.blockNumber ?? 1;
336
382
  const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
337
- this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`);
383
+ this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}`);
338
384
  const readyPromises = [];
339
385
  for(let i = 1; i < peerCount; i++){
340
386
  const cmd = {
@@ -342,7 +388,6 @@ class WorkerClientManager {
342
388
  txCount: config.txCount,
343
389
  peerCount,
344
390
  distribution: config.distribution,
345
- collectorType: config.collectorType,
346
391
  timeoutMs: config.timeoutMs,
347
392
  isAggregator: false,
348
393
  peerIndex: i,
@@ -361,7 +406,6 @@ class WorkerClientManager {
361
406
  txCount: config.txCount,
362
407
  peerCount,
363
408
  distribution: config.distribution,
364
- collectorType: config.collectorType,
365
409
  timeoutMs: config.timeoutMs,
366
410
  isAggregator: true,
367
411
  peerIndex: 0,
@@ -377,7 +421,6 @@ class WorkerClientManager {
377
421
  return {
378
422
  txCount: config.txCount,
379
423
  distribution: config.distribution,
380
- collector: config.collectorType,
381
424
  durationMs: result.durationMs,
382
425
  fetchedCount: result.fetchedCount,
383
426
  success: result.success,
@@ -446,4 +489,3 @@ class WorkerClientManager {
446
489
  }
447
490
  }
448
491
  export { WorkerClientManager, testChainConfig };
449
- export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
package/dest/util.d.ts CHANGED
@@ -1,18 +1,21 @@
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';
6
6
  import type { Identify } from '@libp2p/identify';
7
7
  import type { PeerId } from '@libp2p/interface';
8
- import type { ConnectionManager } from '@libp2p/interface-internal';
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
+ components: {
17
+ addressManager: Pick<AddressManager, 'addObservedAddr' | 'confirmObservedAddr' | 'removeObservedAddr'>;
18
+ };
16
19
  };
17
20
  }
18
21
  export type FullLibp2p = Libp2p<{
@@ -20,6 +23,7 @@ export type FullLibp2p = Libp2p<{
20
23
  pubsub: GossipSub;
21
24
  components: {
22
25
  connectionManager: ConnectionManager;
26
+ addressManager: AddressManager;
23
27
  };
24
28
  }>;
25
29
  /**
@@ -32,9 +36,10 @@ export type FullLibp2p = Libp2p<{
32
36
  * @returns A multiaddr compliant string. */
33
37
  export declare function convertToMultiaddr(address: string, port: number, protocol: 'tcp' | 'udp'): string;
34
38
  /**
35
- * 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}.
36
41
  */
37
- export declare function getPublicIp(): Promise<string>;
42
+ export declare function getPublicIp(services?: string[]): Promise<string>;
38
43
  export declare function isValidIpAddress(address: string): boolean;
39
44
  export declare function resolveAddressIfNecessary(address: string, port: string): Promise<string>;
40
45
  export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise<P2PConfig & DataStoreConfig>;
@@ -58,4 +63,4 @@ export declare function getPeerIdPrivateKey(config: {
58
63
  * @returns The peer ID.
59
64
  */
60
65
  export declare function createLibP2PPeerIdFromPrivateKey(privateKey: string): Promise<PeerId>;
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJcEUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSXJDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUk3QyxNQUFNLFdBQVcsWUFBYSxTQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ3hGLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxJQUFJLENBQ1YsU0FBUyxFQUNQLGtCQUFrQixHQUNsQixxQkFBcUIsR0FDckIsU0FBUyxHQUNULFdBQVcsR0FDWCwrQkFBK0IsR0FDL0IsUUFBUSxHQUNSLGNBQWMsQ0FDakIsR0FBRztZQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQUUsQ0FBQztLQUNsRCxDQUFDO0NBQ0g7QUFFRCxNQUFNLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUM5QixRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ25CLE1BQU0sRUFBRSxTQUFTLENBQUM7SUFDbEIsVUFBVSxFQUFFO1FBQ1YsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUM7S0FDdEMsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVIOzs7Ozs7OzZDQU82QztBQUM3Qyx3QkFBZ0Isa0JBQWtCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FPakc7QUFFRDs7R0FFRztBQUNILHdCQUFzQixXQUFXLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQVFuRDtBQUVELHdCQUFnQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FHekQ7QUFFRCx3QkFBc0IseUJBQXlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FXOUY7QUFjRCx3QkFBc0IsMkJBQTJCLENBQy9DLE9BQU8sRUFBRSxTQUFTLEdBQUcsZUFBZSxHQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQW1CdEM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsTUFBTSxFQUFFO0lBQUUsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFBQyxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUFFLEVBQ3pHLEtBQUssRUFBRSxpQkFBaUIsRUFDeEIsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBMkQ5QjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBc0IsZ0NBQWdDLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBUzFGIn0=
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,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpE,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;KAClD,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;KACtC,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,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CAmBtC;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);
@@ -63,16 +76,24 @@ export async function configureP2PClientAddresses(_config) {
63
76
  ..._config
64
77
  };
65
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
  }
70
- // check if no announce IP was provided
71
- if (!p2pIp) {
72
- if (queryForIp) {
73
- const publicIp = await getPublicIp();
74
- config.p2pIp = publicIp;
75
- }
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
+ });
76
97
  }
77
98
  // TODO(md): guard against setting a local ip address as the announce ip
78
99
  return config;
@@ -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.b6e433891",
3
+ "version": "0.0.1-commit.b8a057fa",
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.b6e433891",
71
- "@aztec/epoch-cache": "0.0.1-commit.b6e433891",
72
- "@aztec/ethereum": "0.0.1-commit.b6e433891",
73
- "@aztec/foundation": "0.0.1-commit.b6e433891",
74
- "@aztec/kv-store": "0.0.1-commit.b6e433891",
75
- "@aztec/noir-contracts.js": "0.0.1-commit.b6e433891",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.b6e433891",
77
- "@aztec/protocol-contracts": "0.0.1-commit.b6e433891",
78
- "@aztec/simulator": "0.0.1-commit.b6e433891",
79
- "@aztec/stdlib": "0.0.1-commit.b6e433891",
80
- "@aztec/telemetry-client": "0.0.1-commit.b6e433891",
70
+ "@aztec/constants": "0.0.1-commit.b8a057fa",
71
+ "@aztec/epoch-cache": "0.0.1-commit.b8a057fa",
72
+ "@aztec/ethereum": "0.0.1-commit.b8a057fa",
73
+ "@aztec/foundation": "0.0.1-commit.b8a057fa",
74
+ "@aztec/kv-store": "0.0.1-commit.b8a057fa",
75
+ "@aztec/noir-contracts.js": "0.0.1-commit.b8a057fa",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.b8a057fa",
77
+ "@aztec/protocol-contracts": "0.0.1-commit.b8a057fa",
78
+ "@aztec/simulator": "0.0.1-commit.b8a057fa",
79
+ "@aztec/standard-contracts": "0.0.1-commit.b8a057fa",
80
+ "@aztec/stdlib": "0.0.1-commit.b8a057fa",
81
+ "@aztec/telemetry-client": "0.0.1-commit.b8a057fa",
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.b6e433891",
108
- "@aztec/world-state": "0.0.1-commit.b6e433891",
107
+ "@aztec/archiver": "0.0.1-commit.b8a057fa",
108
+ "@aztec/world-state": "0.0.1-commit.b8a057fa",
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,9 +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,
23
+ createTxValidatorForOnDemandReceivedTxs,
22
24
  createTxValidatorForTransactionsEnteringPendingTxPool,
23
25
  getDefaultAllowedSetupFunctions,
24
26
  } from '../msg_validators/index.js';
27
+ import { TxValidationCache } from '../msg_validators/tx_validator/tx_validation_cache.js';
25
28
  import { DummyP2PService } from '../services/dummy_service.js';
26
29
  import { LibP2PService } from '../services/index.js';
27
30
  import { createFileStoreTxSources } from '../services/tx_collection/file_store_tx_source.js';
@@ -51,10 +54,12 @@ export async function createP2PClient(
51
54
  proofVerifier: ClientProtocolCircuitVerifier,
52
55
  worldStateSynchronizer: WorldStateSynchronizer,
53
56
  epochCache: EpochCacheInterface,
57
+ blockMinFeesProvider: BlockMinFeesProvider,
54
58
  packageVersion: string,
55
59
  dateProvider: DateProvider = new DateProvider(),
56
60
  telemetry: TelemetryClient = getTelemetryClient(),
57
61
  deps: P2PClientDeps = {},
62
+ initialBlockHash: BlockHash,
58
63
  ) {
59
64
  const config = await configureP2PClientAddresses({
60
65
  ...inputConfig,
@@ -70,13 +75,16 @@ export async function createP2PClient(
70
75
  }
71
76
 
72
77
  const bindings = logger.getBindings();
73
- 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));
74
82
  const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, bindings);
75
83
  const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, bindings);
76
- const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 1, config, bindings);
84
+ const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 2, config, bindings);
77
85
  const l1Constants = await archiver.getL1Constants();
78
86
 
79
- const rollupAddress = inputConfig.l1Contracts.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
87
+ const rollupAddress = inputConfig.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
80
88
  const txFileStoreBasePath = `aztec-${inputConfig.l1ChainId}-${inputConfig.rollupVersion}-0x${rollupAddress}`;
81
89
 
82
90
  const allowedInSetup = [
@@ -89,23 +97,6 @@ export async function createP2PClient(
89
97
  () => epochCache.getEpochAndSlotInNextL1Slot().ts,
90
98
  );
91
99
 
92
- const createTxValidator = async () => {
93
- // We accept transactions if they are not expired by the next slot and block number (checked based on the ExpirationTimestamp field)
94
- const currentBlockNumber = await archiver.getBlockNumber();
95
- const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
96
- const l1Constants = await archiver.getL1Constants();
97
- return createTxValidatorForTransactionsEnteringPendingTxPool(
98
- worldStateSynchronizer,
99
- nextSlotTimestamp,
100
- BlockNumber(currentBlockNumber + 1),
101
- {
102
- rollupManaLimit: l1Constants.rollupManaLimit,
103
- maxBlockL2Gas: config.validateMaxL2BlockGas,
104
- maxBlockDAGas: config.validateMaxDABlockGas,
105
- },
106
- );
107
- };
108
-
109
100
  const txPool =
110
101
  deps.txPool ??
111
102
  new AztecKVTxPoolV2(
@@ -115,7 +106,24 @@ export async function createP2PClient(
115
106
  l2BlockSource: archiver,
116
107
  worldStateSynchronizer,
117
108
  checkAllowedSetupCalls,
118
- 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,
119
127
  },
120
128
  telemetry,
121
129
  {
@@ -124,6 +132,7 @@ export async function createP2PClient(
124
132
  minTxPoolAgeMs: config.minTxPoolAgeMs,
125
133
  dropTransactionsProbability: config.dropTransactionsProbability,
126
134
  priceBumpPercentage: config.priceBumpPercentage,
135
+ keepFinalizedTxsForSlots: config.keepFinalizedTxsForSlots,
127
136
  },
128
137
  dateProvider,
129
138
  );
@@ -133,12 +142,16 @@ export async function createP2PClient(
133
142
  attestationPool: deps.attestationPool ?? new AttestationPool(attestationStore, telemetry),
134
143
  };
135
144
 
145
+ const txValidationCache =
146
+ config.txValidationCacheSize > 0 ? new TxValidationCache(config.txValidationCacheSize) : undefined;
147
+
136
148
  const p2pService = await createP2PService(
137
149
  config,
138
150
  archiver,
139
151
  proofVerifier,
140
152
  worldStateSynchronizer,
141
153
  epochCache,
154
+ blockMinFeesProvider,
142
155
  store,
143
156
  peerStore,
144
157
  mempools,
@@ -146,11 +159,20 @@ export async function createP2PClient(
146
159
  packageVersion,
147
160
  logger.createChild('libp2p_service'),
148
161
  telemetry,
162
+ txValidationCache,
149
163
  );
150
164
 
165
+ const txValidatorForTxCollection = createTxValidatorForOnDemandReceivedTxs(
166
+ proofVerifier,
167
+ config,
168
+ /*bindings=*/ undefined,
169
+ txValidationCache,
170
+ );
151
171
  const nodeSources = [
152
- ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, config),
153
- ...(deps.rpcTxProviders ?? []).map((node, i) => new NodeRpcTxSource(node, `node-rpc-provider-${i}`)),
172
+ ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, txValidatorForTxCollection, config),
173
+ ...(deps.rpcTxProviders ?? []).map(
174
+ (node, i) => new NodeRpcTxSource(node, txValidatorForTxCollection, `node-rpc-provider-${i}`),
175
+ ),
154
176
  ...(deps.txCollectionNodeSources ?? []),
155
177
  ];
156
178
  if (nodeSources.length > 0) {
@@ -162,6 +184,7 @@ export async function createP2PClient(
162
184
  const fileStoreSources = await createFileStoreTxSources(
163
185
  config.txCollectionFileStoreUrls,
164
186
  txFileStoreBasePath,
187
+ txValidatorForTxCollection,
165
188
  logger.createChild('file-store-tx-source'),
166
189
  telemetry,
167
190
  );
@@ -202,6 +225,8 @@ export async function createP2PClient(
202
225
  config,
203
226
  dateProvider,
204
227
  telemetry,
228
+ undefined,
229
+ initialBlockHash,
205
230
  );
206
231
  }
207
232
 
@@ -211,6 +236,7 @@ async function createP2PService(
211
236
  proofVerifier: ClientProtocolCircuitVerifier,
212
237
  worldStateSynchronizer: WorldStateSynchronizer,
213
238
  epochCache: EpochCacheInterface,
239
+ blockMinFeesProvider: BlockMinFeesProvider,
214
240
  store: AztecAsyncKVStore,
215
241
  peerStore: AztecLMDBStoreV2,
216
242
  mempools: MemPools,
@@ -218,6 +244,7 @@ async function createP2PService(
218
244
  packageVersion: string,
219
245
  logger: Logger,
220
246
  telemetry: TelemetryClient,
247
+ txValidationCache?: TxValidationCache,
221
248
  ) {
222
249
  if (!config.p2pEnabled) {
223
250
  logger.verbose('P2P is disabled. Using dummy P2P service.');
@@ -238,8 +265,10 @@ async function createP2PService(
238
265
  proofVerifier,
239
266
  worldStateSynchronizer,
240
267
  peerStore,
268
+ blockMinFeesProvider,
241
269
  telemetry,
242
270
  logger: logger.createChild(`libp2p_service`),
271
+ txValidationCache,
243
272
  });
244
273
 
245
274
  return p2pService;