@aztec/p2p 0.0.1-commit.04852196a → 0.0.1-commit.04d373f

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 (406) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +9 -1
  5. package/dest/client/factory.d.ts +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +31 -14
  8. package/dest/client/interface.d.ts +14 -5
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +13 -9
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +94 -26
  13. package/dest/config.d.ts +139 -97
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +70 -5
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -199
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +181 -65
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +1 -1
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +17 -1
  39. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  49. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +10 -5
  50. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +13 -3
  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 +20 -7
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +92 -87
  60. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  61. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  62. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  63. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  64. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  66. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  67. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  68. package/dest/msg_validators/clock_tolerance.js +61 -3
  69. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -2
  70. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  71. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -2
  72. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  73. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +10 -2
  74. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -12
  76. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  77. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  79. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  80. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  81. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  82. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  83. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  84. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  85. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  86. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  87. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  88. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  90. package/dest/msg_validators/tx_validator/factory.d.ts +27 -7
  91. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/factory.js +47 -17
  93. package/dest/msg_validators/tx_validator/gas_validator.d.ts +48 -7
  94. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  96. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  97. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/index.js +2 -0
  99. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  100. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/phases_validator.js +28 -1
  102. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  103. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  105. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  106. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  107. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  108. package/dest/services/data_store.d.ts +1 -1
  109. package/dest/services/data_store.d.ts.map +1 -1
  110. package/dest/services/data_store.js +5 -5
  111. package/dest/services/discv5/discV5_service.d.ts +2 -1
  112. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  113. package/dest/services/discv5/discV5_service.js +35 -8
  114. package/dest/services/dummy_service.d.ts +11 -15
  115. package/dest/services/dummy_service.d.ts.map +1 -1
  116. package/dest/services/dummy_service.js +12 -16
  117. package/dest/services/encoding.d.ts +5 -1
  118. package/dest/services/encoding.d.ts.map +1 -1
  119. package/dest/services/encoding.js +7 -1
  120. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  121. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  122. package/dest/services/gossipsub/topic_score_params.js +21 -4
  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 +36 -46
  127. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  128. package/dest/services/libp2p/libp2p_service.js +282 -236
  129. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  130. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  131. package/dest/services/peer-manager/peer_manager.js +38 -10
  132. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  133. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_scoring.js +32 -10
  135. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -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 +84 -71
  138. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  139. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  141. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  142. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  143. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  144. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  146. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  147. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  149. package/dest/services/reqresp/config.d.ts +3 -3
  150. package/dest/services/reqresp/config.d.ts.map +1 -1
  151. package/dest/services/reqresp/interface.d.ts +16 -18
  152. package/dest/services/reqresp/interface.d.ts.map +1 -1
  153. package/dest/services/reqresp/interface.js +10 -20
  154. package/dest/services/reqresp/metrics.d.ts +1 -1
  155. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  156. package/dest/services/reqresp/metrics.js +0 -1
  157. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  158. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  159. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +4 -2
  160. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  161. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/index.js +0 -1
  163. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  164. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/tx.js +1 -3
  166. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  167. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  168. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  169. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  170. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  171. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  172. package/dest/services/reqresp/reqresp.d.ts +7 -29
  173. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  174. package/dest/services/reqresp/reqresp.js +41 -214
  175. package/dest/services/service.d.ts +9 -12
  176. package/dest/services/service.d.ts.map +1 -1
  177. package/dest/services/tx_collection/config.d.ts +2 -23
  178. package/dest/services/tx_collection/config.d.ts.map +1 -1
  179. package/dest/services/tx_collection/config.js +2 -55
  180. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  181. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  182. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  183. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  184. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  185. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  186. package/dest/services/tx_collection/index.d.ts +2 -3
  187. package/dest/services/tx_collection/index.d.ts.map +1 -1
  188. package/dest/services/tx_collection/index.js +0 -1
  189. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  190. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  191. package/dest/services/tx_collection/instrumentation.js +0 -2
  192. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  193. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  194. package/dest/services/tx_collection/request_tracker.js +84 -0
  195. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  196. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  197. package/dest/services/tx_collection/tx_collection.js +275 -119
  198. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  199. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  200. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  201. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  202. package/dest/services/tx_collection/tx_source.js +9 -7
  203. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  204. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  205. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  206. package/dest/services/tx_provider.d.ts +3 -1
  207. package/dest/services/tx_provider.d.ts.map +1 -1
  208. package/dest/services/tx_provider.js +3 -0
  209. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  210. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  211. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  212. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  213. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  214. package/dest/test-helpers/mock-pubsub.js +44 -44
  215. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  216. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  217. package/dest/test-helpers/reqresp-nodes.js +16 -18
  218. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  219. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  220. package/dest/test-helpers/test_tx_provider.js +3 -0
  221. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  222. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  223. package/dest/test-helpers/testbench-utils.js +42 -15
  224. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  225. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  226. package/dest/testbench/p2p_client_testbench_worker.js +83 -38
  227. package/dest/testbench/worker_client_manager.d.ts +10 -6
  228. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  229. package/dest/testbench/worker_client_manager.js +51 -9
  230. package/dest/util.d.ts +11 -6
  231. package/dest/util.d.ts.map +1 -1
  232. package/dest/util.js +35 -14
  233. package/dest/versioning.d.ts +3 -6
  234. package/dest/versioning.d.ts.map +1 -1
  235. package/dest/versioning.js +3 -24
  236. package/package.json +15 -14
  237. package/src/bootstrap/bootstrap.ts +9 -1
  238. package/src/client/factory.ts +55 -7
  239. package/src/client/interface.ts +15 -11
  240. package/src/client/p2p_client.ts +107 -49
  241. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  242. package/src/config.ts +137 -4
  243. package/src/errors/p2p-service.error.ts +11 -0
  244. package/src/errors/reqresp.error.ts +0 -25
  245. package/src/index.ts +0 -1
  246. package/src/mem_pools/attestation_pool/attestation_pool.ts +316 -241
  247. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  248. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  249. package/src/mem_pools/index.ts +0 -3
  250. package/src/mem_pools/instrumentation.ts +5 -1
  251. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  252. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  253. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  254. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  255. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  256. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +31 -9
  257. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  258. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +93 -93
  259. package/src/msg_validators/attestation_validator/README.md +49 -0
  260. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  261. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  262. package/src/msg_validators/clock_tolerance.ts +79 -3
  263. package/src/msg_validators/proposal_validator/README.md +123 -0
  264. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +12 -2
  265. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +17 -2
  266. package/src/msg_validators/proposal_validator/proposal_validator.ts +54 -10
  267. package/src/msg_validators/tx_validator/README.md +15 -3
  268. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  269. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  270. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  271. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  272. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  273. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  274. package/src/msg_validators/tx_validator/factory.ts +61 -10
  275. package/src/msg_validators/tx_validator/gas_validator.ts +121 -39
  276. package/src/msg_validators/tx_validator/index.ts +2 -0
  277. package/src/msg_validators/tx_validator/phases_validator.ts +31 -1
  278. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  279. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  280. package/src/services/data_store.ts +5 -13
  281. package/src/services/discv5/discV5_service.ts +38 -5
  282. package/src/services/dummy_service.ts +14 -39
  283. package/src/services/encoding.ts +9 -1
  284. package/src/services/gossipsub/topic_score_params.ts +36 -4
  285. package/src/services/libp2p/instrumentation.ts +14 -0
  286. package/src/services/libp2p/libp2p_service.ts +308 -272
  287. package/src/services/peer-manager/peer_manager.ts +44 -10
  288. package/src/services/peer-manager/peer_scoring.ts +27 -5
  289. package/src/services/reqresp/README.md +215 -0
  290. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  291. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +83 -77
  292. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  293. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  294. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  295. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  296. package/src/services/reqresp/config.ts +2 -2
  297. package/src/services/reqresp/interface.ts +21 -47
  298. package/src/services/reqresp/metrics.ts +0 -1
  299. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
  300. package/src/services/reqresp/protocols/index.ts +0 -1
  301. package/src/services/reqresp/protocols/tx.ts +1 -3
  302. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  303. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  304. package/src/services/reqresp/reqresp.ts +45 -260
  305. package/src/services/service.ts +12 -28
  306. package/src/services/tx_collection/config.ts +3 -80
  307. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  308. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  309. package/src/services/tx_collection/index.ts +1 -6
  310. package/src/services/tx_collection/instrumentation.ts +1 -7
  311. package/src/services/tx_collection/request_tracker.ts +127 -0
  312. package/src/services/tx_collection/tx_collection.ts +331 -176
  313. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  314. package/src/services/tx_collection/tx_source.ts +8 -7
  315. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  316. package/src/services/tx_provider.ts +5 -0
  317. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  318. package/src/test-helpers/mock-pubsub.ts +46 -60
  319. package/src/test-helpers/reqresp-nodes.ts +12 -22
  320. package/src/test-helpers/test_tx_provider.ts +5 -0
  321. package/src/test-helpers/testbench-utils.ts +53 -28
  322. package/src/testbench/p2p_client_testbench_worker.ts +87 -54
  323. package/src/testbench/worker_client_manager.ts +59 -20
  324. package/src/util.ts +32 -17
  325. package/src/versioning.ts +3 -33
  326. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  327. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  328. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  329. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  330. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  331. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  332. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  333. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  334. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  335. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  336. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  337. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  338. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  339. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  340. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  341. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  342. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  343. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  344. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  345. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  346. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  347. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  348. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  349. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  350. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  351. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  352. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  353. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  354. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  355. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  356. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  357. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  358. package/dest/mem_pools/tx_pool/index.js +0 -2
  359. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  360. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  361. package/dest/mem_pools/tx_pool/priority.js +0 -15
  362. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  363. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  364. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  365. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  366. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  367. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  368. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  369. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  370. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  371. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  372. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  373. package/dest/services/reqresp/protocols/block.js +0 -32
  374. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  375. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  376. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  377. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  378. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  379. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  380. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  381. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  382. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  383. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  384. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  385. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  386. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  387. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  388. package/src/mem_pools/tx_pool/README.md +0 -270
  389. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  390. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  391. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  392. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  393. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  394. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  395. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  396. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  397. package/src/mem_pools/tx_pool/index.ts +0 -2
  398. package/src/mem_pools/tx_pool/priority.ts +0 -20
  399. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  400. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  401. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  402. package/src/services/reqresp/protocols/block.ts +0 -37
  403. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  404. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  405. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  406. 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.04852196a",
3
+ "version": "0.0.1-commit.04d373f",
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.04852196a",
71
- "@aztec/epoch-cache": "0.0.1-commit.04852196a",
72
- "@aztec/ethereum": "0.0.1-commit.04852196a",
73
- "@aztec/foundation": "0.0.1-commit.04852196a",
74
- "@aztec/kv-store": "0.0.1-commit.04852196a",
75
- "@aztec/noir-contracts.js": "0.0.1-commit.04852196a",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.04852196a",
77
- "@aztec/protocol-contracts": "0.0.1-commit.04852196a",
78
- "@aztec/simulator": "0.0.1-commit.04852196a",
79
- "@aztec/stdlib": "0.0.1-commit.04852196a",
80
- "@aztec/telemetry-client": "0.0.1-commit.04852196a",
70
+ "@aztec/constants": "0.0.1-commit.04d373f",
71
+ "@aztec/epoch-cache": "0.0.1-commit.04d373f",
72
+ "@aztec/ethereum": "0.0.1-commit.04d373f",
73
+ "@aztec/foundation": "0.0.1-commit.04d373f",
74
+ "@aztec/kv-store": "0.0.1-commit.04d373f",
75
+ "@aztec/noir-contracts.js": "0.0.1-commit.04d373f",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.04d373f",
77
+ "@aztec/protocol-contracts": "0.0.1-commit.04d373f",
78
+ "@aztec/simulator": "0.0.1-commit.04d373f",
79
+ "@aztec/standard-contracts": "0.0.1-commit.04d373f",
80
+ "@aztec/stdlib": "0.0.1-commit.04d373f",
81
+ "@aztec/telemetry-client": "0.0.1-commit.04d373f",
81
82
  "@chainsafe/libp2p-gossipsub": "13.0.0",
82
83
  "@chainsafe/libp2p-noise": "^15.0.0",
83
84
  "@chainsafe/libp2p-yamux": "^6.0.2",
@@ -104,8 +105,8 @@
104
105
  "xxhash-wasm": "^1.1.0"
105
106
  },
106
107
  "devDependencies": {
107
- "@aztec/archiver": "0.0.1-commit.04852196a",
108
- "@aztec/world-state": "0.0.1-commit.04852196a",
108
+ "@aztec/archiver": "0.0.1-commit.04d373f",
109
+ "@aztec/world-state": "0.0.1-commit.04d373f",
109
110
  "@jest/globals": "^30.0.0",
110
111
  "@types/jest": "^30.0.0",
111
112
  "@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
  }
@@ -86,6 +86,14 @@ export class BootstrapNode implements P2PBootstrapApi {
86
86
  this.node.on('discovered', async (enr: SignableENR) => {
87
87
  const addr = await enr.getFullMultiaddr('udp');
88
88
  this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
89
+ // discv5's discovered() only updates routing table entries that already exist. Nodes that
90
+ // established a session with an empty-IP ENR are never inserted, so even after their ENR
91
+ // gains a valid socket address the routing table stays empty and FINDNODE always returns 0
92
+ // peers. Calling addEnr() here does an insertOrUpdate regardless of prior state, fixing
93
+ // the routing table so these nodes become discoverable to other peers.
94
+ if (addr) {
95
+ this.node.addEnr(enr);
96
+ }
89
97
  });
90
98
 
91
99
  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 } 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';
@@ -17,7 +18,13 @@ import { AttestationPool, type AttestationPoolApi } from '../mem_pools/attestati
17
18
  import type { MemPools } from '../mem_pools/interface.js';
18
19
  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
- import { createTxValidatorForTransactionsEnteringPendingTxPool } from '../msg_validators/index.js';
21
+ import {
22
+ createCheckAllowedSetupCalls,
23
+ createTxValidatorForOnDemandReceivedTxs,
24
+ createTxValidatorForTransactionsEnteringPendingTxPool,
25
+ getDefaultAllowedSetupFunctions,
26
+ } from '../msg_validators/index.js';
27
+ import { TxValidationCache } from '../msg_validators/tx_validator/tx_validation_cache.js';
21
28
  import { DummyP2PService } from '../services/dummy_service.js';
22
29
  import { LibP2PService } from '../services/index.js';
23
30
  import { createFileStoreTxSources } from '../services/tx_collection/file_store_tx_source.js';
@@ -47,10 +54,12 @@ export async function createP2PClient(
47
54
  proofVerifier: ClientProtocolCircuitVerifier,
48
55
  worldStateSynchronizer: WorldStateSynchronizer,
49
56
  epochCache: EpochCacheInterface,
57
+ blockMinFeesProvider: BlockMinFeesProvider,
50
58
  packageVersion: string,
51
59
  dateProvider: DateProvider = new DateProvider(),
52
60
  telemetry: TelemetryClient = getTelemetryClient(),
53
61
  deps: P2PClientDeps = {},
62
+ initialBlockHash: BlockHash,
54
63
  ) {
55
64
  const config = await configureP2PClientAddresses({
56
65
  ...inputConfig,
@@ -69,12 +78,22 @@ export async function createP2PClient(
69
78
  const store = deps.store ?? (await createStore(P2P_STORE_NAME, 2, config, bindings));
70
79
  const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, bindings);
71
80
  const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, bindings);
72
- const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 1, config, bindings);
81
+ const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 2, config, bindings);
73
82
  const l1Constants = await archiver.getL1Constants();
74
83
 
75
- const rollupAddress = inputConfig.l1Contracts.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
84
+ const rollupAddress = inputConfig.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
76
85
  const txFileStoreBasePath = `aztec-${inputConfig.l1ChainId}-${inputConfig.rollupVersion}-0x${rollupAddress}`;
77
86
 
87
+ const allowedInSetup = [
88
+ ...(await getDefaultAllowedSetupFunctions()),
89
+ ...(inputConfig.txPublicSetupAllowListExtend ?? []),
90
+ ];
91
+ const checkAllowedSetupCalls = createCheckAllowedSetupCalls(
92
+ archiver,
93
+ allowedInSetup,
94
+ () => epochCache.getEpochAndSlotInNextL1Slot().ts,
95
+ );
96
+
78
97
  const txPool =
79
98
  deps.txPool ??
80
99
  new AztecKVTxPoolV2(
@@ -83,16 +102,25 @@ export async function createP2PClient(
83
102
  {
84
103
  l2BlockSource: archiver,
85
104
  worldStateSynchronizer,
105
+ checkAllowedSetupCalls,
86
106
  createTxValidator: async () => {
87
- // We accept transactions if they are not expired by the next slot and block number (checked based on the ExpirationTimestamp field)
88
107
  const currentBlockNumber = await archiver.getBlockNumber();
89
108
  const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
109
+ const l1Constants = await archiver.getL1Constants();
110
+ const gasFees = await blockMinFeesProvider.getCurrentMinFees();
90
111
  return createTxValidatorForTransactionsEnteringPendingTxPool(
91
112
  worldStateSynchronizer,
92
113
  nextSlotTimestamp,
93
114
  BlockNumber(currentBlockNumber + 1),
115
+ {
116
+ rollupManaLimit: l1Constants.rollupManaLimit,
117
+ maxBlockL2Gas: config.validateMaxL2BlockGas,
118
+ maxBlockDAGas: config.validateMaxDABlockGas,
119
+ },
120
+ gasFees,
94
121
  );
95
122
  },
123
+ blockMinFeesProvider,
96
124
  },
97
125
  telemetry,
98
126
  {
@@ -110,12 +138,16 @@ export async function createP2PClient(
110
138
  attestationPool: deps.attestationPool ?? new AttestationPool(attestationStore, telemetry),
111
139
  };
112
140
 
141
+ const txValidationCache =
142
+ config.txValidationCacheSize > 0 ? new TxValidationCache(config.txValidationCacheSize) : undefined;
143
+
113
144
  const p2pService = await createP2PService(
114
145
  config,
115
146
  archiver,
116
147
  proofVerifier,
117
148
  worldStateSynchronizer,
118
149
  epochCache,
150
+ blockMinFeesProvider,
119
151
  store,
120
152
  peerStore,
121
153
  mempools,
@@ -123,11 +155,20 @@ export async function createP2PClient(
123
155
  packageVersion,
124
156
  logger.createChild('libp2p_service'),
125
157
  telemetry,
158
+ txValidationCache,
126
159
  );
127
160
 
161
+ const txValidatorForTxCollection = createTxValidatorForOnDemandReceivedTxs(
162
+ proofVerifier,
163
+ config,
164
+ /*bindings=*/ undefined,
165
+ txValidationCache,
166
+ );
128
167
  const nodeSources = [
129
- ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, config),
130
- ...(deps.rpcTxProviders ?? []).map((node, i) => new NodeRpcTxSource(node, `node-rpc-provider-${i}`)),
168
+ ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, txValidatorForTxCollection, config),
169
+ ...(deps.rpcTxProviders ?? []).map(
170
+ (node, i) => new NodeRpcTxSource(node, txValidatorForTxCollection, `node-rpc-provider-${i}`),
171
+ ),
131
172
  ...(deps.txCollectionNodeSources ?? []),
132
173
  ];
133
174
  if (nodeSources.length > 0) {
@@ -139,6 +180,7 @@ export async function createP2PClient(
139
180
  const fileStoreSources = await createFileStoreTxSources(
140
181
  config.txCollectionFileStoreUrls,
141
182
  txFileStoreBasePath,
183
+ txValidatorForTxCollection,
142
184
  logger.createChild('file-store-tx-source'),
143
185
  telemetry,
144
186
  );
@@ -179,6 +221,8 @@ export async function createP2PClient(
179
221
  config,
180
222
  dateProvider,
181
223
  telemetry,
224
+ undefined,
225
+ initialBlockHash,
182
226
  );
183
227
  }
184
228
 
@@ -188,6 +232,7 @@ async function createP2PService(
188
232
  proofVerifier: ClientProtocolCircuitVerifier,
189
233
  worldStateSynchronizer: WorldStateSynchronizer,
190
234
  epochCache: EpochCacheInterface,
235
+ blockMinFeesProvider: BlockMinFeesProvider,
191
236
  store: AztecAsyncKVStore,
192
237
  peerStore: AztecLMDBStoreV2,
193
238
  mempools: MemPools,
@@ -195,6 +240,7 @@ async function createP2PService(
195
240
  packageVersion: string,
196
241
  logger: Logger,
197
242
  telemetry: TelemetryClient,
243
+ txValidationCache?: TxValidationCache,
198
244
  ) {
199
245
  if (!config.p2pEnabled) {
200
246
  logger.verbose('P2P is disabled. Using dummy P2P service.');
@@ -215,8 +261,10 @@ async function createP2PService(
215
261
  proofVerifier,
216
262
  worldStateSynchronizer,
217
263
  peerStore,
264
+ blockMinFeesProvider,
218
265
  telemetry,
219
266
  logger: logger.createChild(`libp2p_service`),
267
+ txValidationCache,
220
268
  });
221
269
 
222
270
  return p2pService;
@@ -9,15 +9,12 @@ 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,
20
16
  P2PBlockReceivedCallback,
17
+ P2PCheckpointAttestationCallback,
21
18
  P2PCheckpointReceivedCallback,
22
19
  } from '../services/service.js';
23
20
 
@@ -82,7 +79,15 @@ export type P2P = P2PClient & {
82
79
  *
83
80
  * @param handler - A function taking a received checkpoint proposal and producing attestations
84
81
  */
85
- registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
82
+ registerValidatorCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
83
+
84
+ /**
85
+ * Registers a callback that runs for ALL nodes (not just validators) when a checkpoint proposal is received.
86
+ * Used to set the proposed checkpoint number on the archiver so the sequencer can build on top of it.
87
+ *
88
+ * @param handler - A function taking a received checkpoint proposal
89
+ */
90
+ registerAllNodesCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
86
91
 
87
92
  /**
88
93
  * Registers a callback invoked when a duplicate proposal is detected (equivocation).
@@ -101,6 +106,9 @@ export type P2P = P2PClient & {
101
106
  */
102
107
  registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
103
108
 
109
+ /** Registers a callback invoked when a valid checkpoint attestation is accepted into the pool. */
110
+ registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
111
+
104
112
  /**
105
113
  * Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
106
114
  * @param tx - The transaction.
@@ -216,11 +224,7 @@ export type P2P = P2PClient & {
216
224
  /** Clears the db. */
217
225
  clear(): Promise<void>;
218
226
 
219
- addReqRespSubProtocol(
220
- subProtocol: ReqRespSubProtocol,
221
- handler: ReqRespSubProtocolHandler,
222
- validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
223
- ): Promise<void>;
227
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
224
228
 
225
229
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
226
230