@aztec/p2p 0.0.0-test.0 → 0.0.1-commit.24de95ac

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 (339) hide show
  1. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  2. package/dest/bootstrap/bootstrap.js +22 -9
  3. package/dest/client/factory.d.ts +13 -3
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +60 -24
  6. package/dest/client/index.d.ts +1 -0
  7. package/dest/client/index.d.ts.map +1 -1
  8. package/dest/client/index.js +1 -0
  9. package/dest/client/interface.d.ts +155 -0
  10. package/dest/client/interface.d.ts.map +1 -0
  11. package/dest/client/interface.js +9 -0
  12. package/dest/client/p2p_client.d.ts +72 -169
  13. package/dest/client/p2p_client.d.ts.map +1 -1
  14. package/dest/client/p2p_client.js +365 -174
  15. package/dest/config.d.ts +123 -103
  16. package/dest/config.d.ts.map +1 -1
  17. package/dest/config.js +173 -34
  18. package/dest/enr/generate-enr.d.ts +10 -2
  19. package/dest/enr/generate-enr.d.ts.map +1 -1
  20. package/dest/enr/generate-enr.js +27 -5
  21. package/dest/index.d.ts +3 -0
  22. package/dest/index.d.ts.map +1 -1
  23. package/dest/index.js +2 -0
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +42 -4
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +204 -54
  28. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +10 -2
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +93 -15
  31. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +10 -2
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +86 -18
  34. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -2
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/mocks.js +9 -15
  37. package/dest/mem_pools/instrumentation.d.ts +7 -11
  38. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  39. package/dest/mem_pools/instrumentation.js +25 -37
  40. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +93 -9
  41. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +469 -97
  43. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +33 -9
  44. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
  45. package/dest/mem_pools/tx_pool/memory_tx_pool.js +133 -36
  46. package/dest/mem_pools/tx_pool/priority.js +1 -1
  47. package/dest/mem_pools/tx_pool/tx_pool.d.ts +64 -8
  48. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +264 -39
  51. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -0
  52. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  53. package/dest/msg_validators/attestation_validator/attestation_validator.js +45 -9
  54. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +5 -1
  55. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
  56. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +61 -12
  57. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  58. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  59. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  60. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
  61. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  62. package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
  63. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  64. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  65. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  66. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  67. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -4
  68. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/tx_validator/data_validator.js +56 -86
  70. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +0 -2
  71. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/tx_validator/double_spend_validator.js +21 -27
  73. package/dest/msg_validators/tx_validator/factory.d.ts +15 -0
  74. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  75. package/dest/msg_validators/tx_validator/factory.js +74 -0
  76. package/dest/msg_validators/tx_validator/gas_validator.d.ts +11 -0
  77. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  78. package/dest/msg_validators/tx_validator/gas_validator.js +115 -0
  79. package/dest/msg_validators/tx_validator/index.d.ts +7 -0
  80. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/index.js +7 -0
  82. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +7 -3
  83. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/metadata_validator.js +39 -20
  85. package/dest/msg_validators/tx_validator/phases_validator.d.ts +14 -0
  86. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  87. package/dest/msg_validators/tx_validator/phases_validator.js +91 -0
  88. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  89. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  90. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  91. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +12 -0
  92. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  93. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  94. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +8 -0
  95. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  96. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  97. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/tx_proof_validator.js +6 -5
  99. package/dest/services/discv5/discV5_service.d.ts +9 -8
  100. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  101. package/dest/services/discv5/discV5_service.js +63 -36
  102. package/dest/services/dummy_service.d.ts +49 -10
  103. package/dest/services/dummy_service.d.ts.map +1 -1
  104. package/dest/services/dummy_service.js +88 -5
  105. package/dest/services/encoding.d.ts +25 -6
  106. package/dest/services/encoding.d.ts.map +1 -1
  107. package/dest/services/encoding.js +73 -5
  108. package/dest/services/index.d.ts +4 -0
  109. package/dest/services/index.d.ts.map +1 -1
  110. package/dest/services/index.js +4 -0
  111. package/dest/services/libp2p/instrumentation.d.ts +18 -0
  112. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  113. package/dest/services/libp2p/instrumentation.js +157 -0
  114. package/dest/services/libp2p/libp2p_service.d.ts +87 -42
  115. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  116. package/dest/services/libp2p/libp2p_service.js +500 -218
  117. package/dest/services/peer-manager/interface.d.ts +23 -0
  118. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  119. package/dest/services/peer-manager/interface.js +1 -0
  120. package/dest/services/peer-manager/metrics.d.ts +3 -1
  121. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  122. package/dest/services/peer-manager/metrics.js +11 -2
  123. package/dest/services/peer-manager/peer_manager.d.ts +126 -15
  124. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  125. package/dest/services/peer-manager/peer_manager.js +547 -72
  126. package/dest/services/reqresp/config.d.ts +10 -8
  127. package/dest/services/reqresp/config.d.ts.map +1 -1
  128. package/dest/services/reqresp/config.js +18 -4
  129. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
  130. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  131. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +10 -6
  132. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +30 -13
  133. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  134. package/dest/services/reqresp/connection-sampler/connection_sampler.js +142 -84
  135. package/dest/services/reqresp/index.d.ts +2 -1
  136. package/dest/services/reqresp/index.d.ts.map +1 -1
  137. package/dest/services/reqresp/index.js +2 -1
  138. package/dest/services/reqresp/interface.d.ts +72 -23
  139. package/dest/services/reqresp/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/interface.js +45 -26
  141. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  142. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  143. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  144. package/dest/services/reqresp/protocols/auth.js +71 -0
  145. package/dest/services/reqresp/protocols/block.d.ts +5 -0
  146. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  147. package/dest/services/reqresp/protocols/block.js +28 -5
  148. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +30 -0
  149. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  150. package/dest/services/reqresp/protocols/block_txs/bitvector.js +75 -0
  151. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
  152. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  153. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +39 -0
  154. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +49 -0
  155. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  156. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +75 -0
  157. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  158. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  159. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  160. package/dest/services/reqresp/protocols/goodbye.d.ts +2 -4
  161. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  163. package/dest/services/reqresp/protocols/index.d.ts +2 -0
  164. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/index.js +2 -0
  166. package/dest/services/reqresp/protocols/ping.d.ts +0 -2
  167. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  168. package/dest/services/reqresp/protocols/status.d.ts +38 -6
  169. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  170. package/dest/services/reqresp/protocols/status.js +72 -5
  171. package/dest/services/reqresp/protocols/tx.d.ts +12 -1
  172. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  173. package/dest/services/reqresp/protocols/tx.js +34 -6
  174. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +4 -2
  175. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  176. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  177. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  178. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  179. package/dest/services/reqresp/reqresp.d.ts +45 -47
  180. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  181. package/dest/services/reqresp/reqresp.js +298 -207
  182. package/dest/services/reqresp/status.d.ts +9 -3
  183. package/dest/services/reqresp/status.d.ts.map +1 -1
  184. package/dest/services/reqresp/status.js +9 -2
  185. package/dest/services/service.d.ts +22 -18
  186. package/dest/services/service.d.ts.map +1 -1
  187. package/dest/services/tx_collection/config.d.ts +25 -0
  188. package/dest/services/tx_collection/config.d.ts.map +1 -0
  189. package/dest/services/tx_collection/config.js +58 -0
  190. package/dest/services/tx_collection/fast_tx_collection.d.ts +56 -0
  191. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  192. package/dest/services/tx_collection/fast_tx_collection.js +300 -0
  193. package/dest/services/tx_collection/index.d.ts +3 -0
  194. package/dest/services/tx_collection/index.d.ts.map +1 -0
  195. package/dest/services/tx_collection/index.js +2 -0
  196. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  197. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  198. package/dest/services/tx_collection/instrumentation.js +34 -0
  199. package/dest/services/tx_collection/slow_tx_collection.d.ts +54 -0
  200. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  201. package/dest/services/tx_collection/slow_tx_collection.js +176 -0
  202. package/dest/services/tx_collection/tx_collection.d.ts +110 -0
  203. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  204. package/dest/services/tx_collection/tx_collection.js +128 -0
  205. package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
  206. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  207. package/dest/services/tx_collection/tx_collection_sink.js +111 -0
  208. package/dest/services/tx_collection/tx_source.d.ts +18 -0
  209. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  210. package/dest/services/tx_collection/tx_source.js +31 -0
  211. package/dest/services/tx_provider.d.ts +49 -0
  212. package/dest/services/tx_provider.d.ts.map +1 -0
  213. package/dest/services/tx_provider.js +210 -0
  214. package/dest/services/tx_provider_instrumentation.d.ts +13 -0
  215. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  216. package/dest/services/tx_provider_instrumentation.js +34 -0
  217. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  218. package/dest/test-helpers/index.d.ts +1 -0
  219. package/dest/test-helpers/index.d.ts.map +1 -1
  220. package/dest/test-helpers/index.js +1 -0
  221. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  222. package/dest/test-helpers/make-enrs.js +4 -5
  223. package/dest/test-helpers/make-test-p2p-clients.d.ts +32 -4
  224. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  225. package/dest/test-helpers/make-test-p2p-clients.js +86 -16
  226. package/dest/test-helpers/mock-pubsub.d.ts +59 -0
  227. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  228. package/dest/test-helpers/mock-pubsub.js +130 -0
  229. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  230. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  231. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  232. package/dest/test-helpers/reqresp-nodes.d.ts +14 -10
  233. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  234. package/dest/test-helpers/reqresp-nodes.js +62 -28
  235. package/dest/testbench/p2p_client_testbench_worker.js +96 -25
  236. package/dest/testbench/parse_log_file.js +4 -4
  237. package/dest/testbench/testbench.js +4 -4
  238. package/dest/testbench/worker_client_manager.d.ts +0 -5
  239. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  240. package/dest/testbench/worker_client_manager.js +11 -19
  241. package/dest/types/index.d.ts +3 -1
  242. package/dest/types/index.d.ts.map +1 -1
  243. package/dest/types/index.js +2 -0
  244. package/dest/util.d.ts +22 -15
  245. package/dest/util.d.ts.map +1 -1
  246. package/dest/util.js +64 -67
  247. package/dest/versioning.d.ts +3 -3
  248. package/dest/versioning.d.ts.map +1 -1
  249. package/dest/versioning.js +8 -3
  250. package/package.json +28 -24
  251. package/src/bootstrap/bootstrap.ts +27 -11
  252. package/src/client/factory.ts +136 -45
  253. package/src/client/index.ts +1 -0
  254. package/src/client/interface.ts +195 -0
  255. package/src/client/p2p_client.ts +460 -327
  256. package/src/config.ts +288 -134
  257. package/src/enr/generate-enr.ts +39 -6
  258. package/src/index.ts +4 -0
  259. package/src/mem_pools/attestation_pool/attestation_pool.ts +48 -4
  260. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -55
  261. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +117 -20
  262. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +114 -22
  263. package/src/mem_pools/attestation_pool/mocks.ts +11 -10
  264. package/src/mem_pools/instrumentation.ts +32 -46
  265. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +549 -108
  266. package/src/mem_pools/tx_pool/memory_tx_pool.ts +153 -44
  267. package/src/mem_pools/tx_pool/priority.ts +1 -1
  268. package/src/mem_pools/tx_pool/tx_pool.ts +67 -8
  269. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +217 -34
  270. package/src/msg_validators/attestation_validator/attestation_validator.ts +55 -10
  271. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +66 -14
  272. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  273. package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
  274. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  275. package/src/msg_validators/tx_validator/block_header_validator.ts +4 -4
  276. package/src/msg_validators/tx_validator/data_validator.ts +81 -69
  277. package/src/msg_validators/tx_validator/double_spend_validator.ts +19 -17
  278. package/src/msg_validators/tx_validator/factory.ts +109 -0
  279. package/src/msg_validators/tx_validator/gas_validator.ts +134 -0
  280. package/src/msg_validators/tx_validator/index.ts +7 -0
  281. package/src/msg_validators/tx_validator/metadata_validator.ts +58 -21
  282. package/src/msg_validators/tx_validator/phases_validator.ts +114 -0
  283. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  284. package/src/msg_validators/tx_validator/timestamp_validator.ts +46 -0
  285. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +17 -0
  286. package/src/msg_validators/tx_validator/tx_proof_validator.ts +6 -5
  287. package/src/services/discv5/discV5_service.ts +84 -38
  288. package/src/services/dummy_service.ts +147 -9
  289. package/src/services/encoding.ts +80 -5
  290. package/src/services/index.ts +4 -0
  291. package/src/services/libp2p/instrumentation.ts +158 -0
  292. package/src/services/libp2p/libp2p_service.ts +646 -263
  293. package/src/services/peer-manager/interface.ts +29 -0
  294. package/src/services/peer-manager/metrics.ts +16 -1
  295. package/src/services/peer-manager/peer_manager.ts +652 -78
  296. package/src/services/reqresp/config.ts +26 -9
  297. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +12 -6
  298. package/src/services/reqresp/connection-sampler/connection_sampler.ts +148 -95
  299. package/src/services/reqresp/index.ts +2 -0
  300. package/src/services/reqresp/interface.ts +91 -36
  301. package/src/services/reqresp/metrics.ts +4 -1
  302. package/src/services/reqresp/protocols/auth.ts +83 -0
  303. package/src/services/reqresp/protocols/block.ts +24 -3
  304. package/src/services/reqresp/protocols/block_txs/bitvector.ts +90 -0
  305. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +53 -0
  306. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +79 -0
  307. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  308. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  309. package/src/services/reqresp/protocols/index.ts +2 -0
  310. package/src/services/reqresp/protocols/status.ts +117 -5
  311. package/src/services/reqresp/protocols/tx.ts +35 -6
  312. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  313. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  314. package/src/services/reqresp/reqresp.ts +387 -256
  315. package/src/services/reqresp/status.ts +12 -3
  316. package/src/services/service.ts +45 -21
  317. package/src/services/tx_collection/config.ts +84 -0
  318. package/src/services/tx_collection/fast_tx_collection.ts +340 -0
  319. package/src/services/tx_collection/index.ts +2 -0
  320. package/src/services/tx_collection/instrumentation.ts +43 -0
  321. package/src/services/tx_collection/slow_tx_collection.ts +232 -0
  322. package/src/services/tx_collection/tx_collection.ts +215 -0
  323. package/src/services/tx_collection/tx_collection_sink.ts +129 -0
  324. package/src/services/tx_collection/tx_source.ts +37 -0
  325. package/src/services/tx_provider.ts +216 -0
  326. package/src/services/tx_provider_instrumentation.ts +44 -0
  327. package/src/test-helpers/index.ts +1 -0
  328. package/src/test-helpers/make-enrs.ts +4 -5
  329. package/src/test-helpers/make-test-p2p-clients.ts +111 -21
  330. package/src/test-helpers/mock-pubsub.ts +188 -0
  331. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  332. package/src/test-helpers/reqresp-nodes.ts +86 -35
  333. package/src/testbench/p2p_client_testbench_worker.ts +145 -22
  334. package/src/testbench/parse_log_file.ts +4 -4
  335. package/src/testbench/testbench.ts +4 -4
  336. package/src/testbench/worker_client_manager.ts +17 -23
  337. package/src/types/index.ts +2 -0
  338. package/src/util.ts +93 -89
  339. package/src/versioning.ts +11 -4
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;QAClB,UAAU,EAAE;YACV,iBAAiB,EAAE,iBAAiB,CAAC;SACtC,CAAC;KACH,CAAC;CACH;AAED;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAiBjB;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,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;AAGrC,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,EACT,kBAAkB,GAAG,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,+BAA+B,GAAG,QAAQ,CAClH,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,CAInD;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"}
package/dest/util.js CHANGED
@@ -1,6 +1,10 @@
1
+ import { SecretValue } from '@aztec/foundation/config';
1
2
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
2
3
  import { createFromPrivKey } from '@libp2p/peer-id-factory';
3
4
  import { resolve } from 'dns/promises';
5
+ import { promises as fs } from 'fs';
6
+ import path from 'path';
7
+ const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
4
8
  /**
5
9
  * Converts an address string to a multiaddr string.
6
10
  * Example usage:
@@ -8,38 +12,12 @@ import { resolve } from 'dns/promises';
8
12
  * const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
9
13
  * @param address - The address string to convert. Has to be in the format <addr>:<port>.
10
14
  * @param protocol - The protocol to use in the multiaddr string.
11
- * @returns A multiaddr compliant string. */ export function convertToMultiaddr(address, protocol) {
12
- const [addr, port] = splitAddressPort(address, false);
13
- const multiaddrPrefix = addressToMultiAddressType(addr);
15
+ * @returns A multiaddr compliant string. */ export function convertToMultiaddr(address, port, protocol) {
16
+ const multiaddrPrefix = addressToMultiAddressType(address);
14
17
  if (multiaddrPrefix === 'dns') {
15
18
  throw new Error('Invalid address format. Expected an IPv4 or IPv6 address.');
16
19
  }
17
- return `/${multiaddrPrefix}/${addr}/${protocol}/${port}`;
18
- }
19
- /**
20
- * Splits an <address>:<port> string into its components.
21
- * @returns The ip6 or ip4 address & port separately
22
- */ export function splitAddressPort(address, allowEmptyAddress) {
23
- let addr;
24
- let port;
25
- if (address.startsWith('[')) {
26
- // IPv6 address enclosed in square brackets
27
- const match = address.match(/^\[([^\]]+)\]:(\d+)$/);
28
- if (!match) {
29
- throw new Error(`Invalid IPv6 address format:${address}. Expected format: [<addr>]:<port>`);
30
- }
31
- [, addr, port] = match;
32
- } else {
33
- // IPv4 address
34
- [addr, port] = address.split(':');
35
- if (!addr && !allowEmptyAddress || !port) {
36
- throw new Error(`Invalid address format: ${address}. Expected format: <addr>:<port>`);
37
- }
38
- }
39
- return [
40
- addr,
41
- port
42
- ];
20
+ return `/${multiaddrPrefix}/${address}/${protocol}/${port}`;
43
21
  }
44
22
  /**
45
23
  * Queries the public IP address of the machine.
@@ -48,13 +26,12 @@ import { resolve } from 'dns/promises';
48
26
  const text = await resp.text();
49
27
  return text.trim();
50
28
  }
51
- export async function resolveAddressIfNecessary(address) {
52
- const [addr, port] = splitAddressPort(address, false);
53
- const multiaddrPrefix = addressToMultiAddressType(addr);
29
+ export async function resolveAddressIfNecessary(address, port) {
30
+ const multiaddrPrefix = addressToMultiAddressType(address);
54
31
  if (multiaddrPrefix === 'dns') {
55
- const resolvedAddresses = await resolve(addr);
32
+ const resolvedAddresses = await resolve(address);
56
33
  if (resolvedAddresses.length === 0) {
57
- throw new Error(`Could not resolve address: ${addr}`);
34
+ throw new Error(`Could not resolve address: ${address}`);
58
35
  }
59
36
  return `${resolvedAddresses[0]}:${port}`;
60
37
  } else {
@@ -76,56 +53,76 @@ export async function configureP2PClientAddresses(_config) {
76
53
  const config = {
77
54
  ..._config
78
55
  };
79
- const { tcpAnnounceAddress: configTcpAnnounceAddress, udpAnnounceAddress: configUdpAnnounceAddress, queryForIp } = config;
80
- config.tcpAnnounceAddress = configTcpAnnounceAddress ? await resolveAddressIfNecessary(configTcpAnnounceAddress) : undefined;
81
- config.udpAnnounceAddress = configUdpAnnounceAddress ? await resolveAddressIfNecessary(configUdpAnnounceAddress) : undefined;
82
- // create variable for re-use if needed
83
- let publicIp;
56
+ const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
57
+ // If no broadcast port is provided, use the given p2p port as the broadcast port
58
+ if (!p2pBroadcastPort) {
59
+ config.p2pBroadcastPort = p2pPort;
60
+ }
84
61
  // check if no announce IP was provided
85
- const splitTcpAnnounceAddress = splitAddressPort(configTcpAnnounceAddress || '', true);
86
- if (splitTcpAnnounceAddress.length == 2 && splitTcpAnnounceAddress[0] === '') {
62
+ if (!p2pIp) {
87
63
  if (queryForIp) {
88
- publicIp = await getPublicIp();
89
- const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`;
90
- config.tcpAnnounceAddress = tcpAnnounceAddress;
91
- } else {
92
- throw new Error(`Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: <addr>:<port>`);
93
- }
94
- }
95
- const splitUdpAnnounceAddress = splitAddressPort(configUdpAnnounceAddress || '', true);
96
- if (splitUdpAnnounceAddress.length == 2 && splitUdpAnnounceAddress[0] === '') {
97
- // If announceUdpAddress is not provided, use announceTcpAddress
98
- if (!queryForIp && config.tcpAnnounceAddress) {
99
- config.udpAnnounceAddress = config.tcpAnnounceAddress;
100
- } else if (queryForIp) {
101
- const udpPublicIp = publicIp || await getPublicIp();
102
- const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`;
103
- config.udpAnnounceAddress = udpAnnounceAddress;
64
+ const publicIp = await getPublicIp();
65
+ config.p2pIp = publicIp;
104
66
  }
105
67
  }
68
+ // TODO(md): guard against setting a local ip address as the announce ip
106
69
  return config;
107
70
  }
108
71
  /**
109
72
  * Get the peer id private key
110
73
  *
111
74
  * 1. Check if we have a peer id private key in the config
112
- * 2. If not, check we have a peer id private key persisted in the node
113
- * 3. If not, create a new one, then persist it in the node
75
+ * 2. If not, check if we have a peer id private key persisted in a file
76
+ * 3. If no file path or data directory is provided, check if we have a peer id private key in the node's store
77
+ * 4. If not, create a new one, then persist it in a file if a file path or data directory is provided or in the node's store otherwise
114
78
  *
115
- */ export async function getPeerIdPrivateKey(config, store) {
116
- const peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
117
- if (config.peerIdPrivateKey) {
118
- await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
79
+ */ export async function getPeerIdPrivateKey(config, store, logger) {
80
+ const peerIdPrivateKeyFilePath = config.peerIdPrivateKeyPath ?? (config.dataDirectory ? path.join(config.dataDirectory, PEER_ID_DATA_DIR_FILE) : undefined);
81
+ let peerIdPrivateKeySingleton;
82
+ const writePrivateKeyToFile = async (filePath, privateKey)=>{
83
+ await fs.mkdir(path.dirname(filePath), {
84
+ recursive: true
85
+ });
86
+ await fs.writeFile(filePath, privateKey);
87
+ };
88
+ // If the peerIdPrivateKey is provided in the config, we use it and persist it in either a file or the node's store
89
+ if (config.peerIdPrivateKey && config.peerIdPrivateKey.getValue().trim()) {
90
+ if (peerIdPrivateKeyFilePath) {
91
+ await writePrivateKeyToFile(peerIdPrivateKeyFilePath, config.peerIdPrivateKey.getValue());
92
+ } else {
93
+ peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
94
+ await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey.getValue());
95
+ }
119
96
  return config.peerIdPrivateKey;
120
97
  }
121
- const storedPeerIdPrivateKey = await peerIdPrivateKeySingleton.getAsync();
98
+ // Check to see if we have a peer id private key stored in a file or the node's store
99
+ let storedPeerIdPrivateKey;
100
+ const privateKeyFileExists = peerIdPrivateKeyFilePath && await fs.access(peerIdPrivateKeyFilePath).then(()=>true).catch(()=>false);
101
+ if (peerIdPrivateKeyFilePath && privateKeyFileExists) {
102
+ await fs.access(peerIdPrivateKeyFilePath);
103
+ storedPeerIdPrivateKey = await fs.readFile(peerIdPrivateKeyFilePath, 'utf8');
104
+ } else {
105
+ peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
106
+ storedPeerIdPrivateKey = await peerIdPrivateKeySingleton.getAsync();
107
+ }
122
108
  if (storedPeerIdPrivateKey) {
123
- return storedPeerIdPrivateKey;
109
+ if (peerIdPrivateKeyFilePath && !privateKeyFileExists) {
110
+ logger.verbose(`Peer ID private key found in the node's store, persisting it to ${peerIdPrivateKeyFilePath}`);
111
+ await writePrivateKeyToFile(peerIdPrivateKeyFilePath, storedPeerIdPrivateKey);
112
+ }
113
+ return new SecretValue(storedPeerIdPrivateKey);
124
114
  }
115
+ // Generate and persist a new private key
125
116
  const newPeerIdPrivateKey = await generateKeyPair('secp256k1');
126
117
  const privateKeyString = Buffer.from(marshalPrivateKey(newPeerIdPrivateKey)).toString('hex');
127
- await peerIdPrivateKeySingleton.set(privateKeyString);
128
- return privateKeyString;
118
+ if (peerIdPrivateKeyFilePath) {
119
+ logger.verbose(`Creating new peer ID private key and persisting it to ${peerIdPrivateKeyFilePath}`);
120
+ await writePrivateKeyToFile(peerIdPrivateKeyFilePath, privateKeyString);
121
+ } else {
122
+ logger.warn('Creating new peer ID private key and persisting it to the lmdb store. Key will be lost on rollup upgrade, specify the peer id private key path and restart the node to persist the peer id private key to a file');
123
+ await peerIdPrivateKeySingleton.set(privateKeyString);
124
+ }
125
+ return new SecretValue(privateKeyString);
129
126
  }
130
127
  /**
131
128
  * Create a libp2p peer ID from the private key.
@@ -1,12 +1,12 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import type { ChainConfig } from '@aztec/stdlib/config';
4
2
  import { type ComponentsVersions } from '@aztec/stdlib/versioning';
5
- import type { SignableENR } from '@chainsafe/enr';
3
+ import type { SignableENR } from '@nethermindeth/enr';
6
4
  /** Returns the component versions based on config and this build. */
7
5
  export declare function getVersions(config: ChainConfig): ComponentsVersions;
8
6
  /** Sets the aztec key on the ENR record with versioning info. */
9
7
  export declare function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash?: boolean): ComponentsVersions;
8
+ /** Sets the Aztec client version on ENR record **/
9
+ export declare function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: string): void;
10
10
  /** Checks the given value from an ENR record against the expected versions. */
11
11
  export declare function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions): void;
12
12
  //# sourceMappingURL=versioning.d.ts.map
@@ -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,gBAAgB,CAAC;AASlD,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,+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":"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,14 +1,14 @@
1
1
  import { toBufferBE } from '@aztec/foundation/bigint-buffer';
2
2
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
- import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
3
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
4
4
  import { checkCompressedComponentVersion, compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
5
5
  import xxhashFactory from 'xxhash-wasm';
6
- import { AZTEC_ENR_KEY } from './types/index.js';
6
+ import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
7
7
  const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
8
8
  const XX_HASH_LEN = 8;
9
9
  const xxhash = await xxhashFactory();
10
10
  /** Returns the component versions based on config and this build. */ export function getVersions(config) {
11
- return getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot());
11
+ return getComponentsVersionsFromConfig(config, protocolContractsHash, getVKTreeRoot());
12
12
  }
13
13
  /** Sets the aztec key on the ENR record with versioning info. */ export function setAztecEnrKey(enr, config, useXxHash = USE_XX_HASH) {
14
14
  const versions = getVersions(config);
@@ -16,6 +16,11 @@ const xxhash = await xxhashFactory();
16
16
  enr.set(AZTEC_ENR_KEY, value);
17
17
  return versions;
18
18
  }
19
+ /** Sets the Aztec client version on ENR record **/ export function setAztecClientVersionEnrKey(enr, clientVersion) {
20
+ if (clientVersion) {
21
+ enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
22
+ }
23
+ }
19
24
  /** Checks the given value from an ENR record against the expected versions. */ export function checkAztecEnrVersion(enrValue, expectedVersions) {
20
25
  if (enrValue.length === XX_HASH_LEN) {
21
26
  const expected = versionsToEnrValue(expectedVersions, true);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "0.0.0-test.0",
3
+ "version": "0.0.1-commit.24de95ac",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -22,8 +22,6 @@
22
22
  "build": "yarn clean && tsc -b",
23
23
  "build:dev": "tsc -b --watch",
24
24
  "clean": "rm -rf ./dest .tsbuildinfo",
25
- "formatting": "run -T prettier --check ./src && run -T eslint ./src",
26
- "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
27
25
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
28
26
  "start": "node ./dest",
29
27
  "start:dev": "tsc-watch -p tsconfig.json --onSuccess 'yarn start'"
@@ -62,19 +60,24 @@
62
60
  "testTimeout": 120000,
63
61
  "setupFiles": [
64
62
  "../../foundation/src/jest/setup.mjs"
63
+ ],
64
+ "testEnvironment": "../../foundation/src/jest/env.mjs",
65
+ "setupFilesAfterEnv": [
66
+ "../../foundation/src/jest/setupAfterEnv.mjs"
65
67
  ]
66
68
  },
67
69
  "dependencies": {
68
- "@aztec/constants": "0.0.0-test.0",
69
- "@aztec/epoch-cache": "0.0.0-test.0",
70
- "@aztec/foundation": "0.0.0-test.0",
71
- "@aztec/kv-store": "0.0.0-test.0",
72
- "@aztec/noir-protocol-circuits-types": "0.0.0-test.0",
73
- "@aztec/protocol-contracts": "0.0.0-test.0",
74
- "@aztec/stdlib": "0.0.0-test.0",
75
- "@aztec/telemetry-client": "0.0.0-test.0",
76
- "@chainsafe/discv5": "9.0.0",
77
- "@chainsafe/enr": "3.0.0",
70
+ "@aztec/constants": "0.0.1-commit.24de95ac",
71
+ "@aztec/epoch-cache": "0.0.1-commit.24de95ac",
72
+ "@aztec/ethereum": "0.0.1-commit.24de95ac",
73
+ "@aztec/foundation": "0.0.1-commit.24de95ac",
74
+ "@aztec/kv-store": "0.0.1-commit.24de95ac",
75
+ "@aztec/noir-contracts.js": "0.0.1-commit.24de95ac",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.24de95ac",
77
+ "@aztec/protocol-contracts": "0.0.1-commit.24de95ac",
78
+ "@aztec/simulator": "0.0.1-commit.24de95ac",
79
+ "@aztec/stdlib": "0.0.1-commit.24de95ac",
80
+ "@aztec/telemetry-client": "0.0.1-commit.24de95ac",
78
81
  "@chainsafe/libp2p-gossipsub": "13.0.0",
79
82
  "@chainsafe/libp2p-noise": "^15.0.0",
80
83
  "@chainsafe/libp2p-yamux": "^6.0.2",
@@ -82,7 +85,6 @@
82
85
  "@libp2p/crypto": "4.0.3",
83
86
  "@libp2p/identify": "1.0.18",
84
87
  "@libp2p/interface": "1.3.1",
85
- "@libp2p/kad-dht": "10.0.4",
86
88
  "@libp2p/mplex": "10.0.16",
87
89
  "@libp2p/peer-id": "4.0.7",
88
90
  "@libp2p/peer-id-factory": "4.1.1",
@@ -90,9 +92,10 @@
90
92
  "@libp2p/prometheus-metrics": "^4.2.4",
91
93
  "@libp2p/tcp": "9.0.24",
92
94
  "@multiformats/multiaddr": "12.1.14",
95
+ "@nethermindeth/discv5": "9.0.0-backport-306-v4",
96
+ "@nethermindeth/enr": "3.0.0-backport-306-v4",
93
97
  "interface-datastore": "^8.2.11",
94
98
  "interface-store": "^5.1.8",
95
- "it-pipe": "^3.0.1",
96
99
  "libp2p": "1.5.0",
97
100
  "semver": "^7.6.0",
98
101
  "sha3": "^2.1.4",
@@ -101,19 +104,20 @@
101
104
  "xxhash-wasm": "^1.1.0"
102
105
  },
103
106
  "devDependencies": {
104
- "@aztec/archiver": "0.0.0-test.0",
105
- "@jest/globals": "^29.5.0",
106
- "@types/jest": "^29.5.0",
107
- "@types/node": "^18.14.6",
107
+ "@aztec/archiver": "0.0.1-commit.24de95ac",
108
+ "@aztec/world-state": "0.0.1-commit.24de95ac",
109
+ "@jest/globals": "^30.0.0",
110
+ "@types/jest": "^30.0.0",
111
+ "@types/node": "^22.15.17",
108
112
  "get-port": "^7.1.0",
109
113
  "it-drain": "^3.0.5",
110
114
  "it-length": "^3.0.6",
111
- "jest": "^29.5.0",
112
- "jest-mock-extended": "^3.0.4",
115
+ "jest": "^30.0.0",
116
+ "jest-mock-extended": "^4.0.0",
113
117
  "ts-node": "^10.9.1",
114
- "typescript": "^5.0.4",
118
+ "typescript": "^5.3.3",
115
119
  "uint8arrays": "^5.0.3",
116
- "viem": "2.22.8"
120
+ "viem": "npm:@spalladino/viem@2.38.2-eip7594.0"
117
121
  },
118
122
  "files": [
119
123
  "dest",
@@ -122,6 +126,6 @@
122
126
  ],
123
127
  "types": "./dest/index.d.ts",
124
128
  "engines": {
125
- "node": ">=18"
129
+ "node": ">=20.10"
126
130
  }
127
131
  }
@@ -3,20 +3,20 @@ import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
3
  import type { P2PBootstrapApi } from '@aztec/stdlib/interfaces/server';
4
4
  import { OtelMetricsAdapter, type TelemetryClient } from '@aztec/telemetry-client';
5
5
 
6
- import { Discv5, type Discv5EventEmitter } from '@chainsafe/discv5';
7
- import { ENR, type SignableENR } from '@chainsafe/enr';
8
6
  import type { PeerId } from '@libp2p/interface';
9
7
  import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
8
+ import { Discv5, type Discv5EventEmitter } from '@nethermindeth/discv5';
9
+ import { ENR, type SignableENR } from '@nethermindeth/enr';
10
10
 
11
11
  import type { BootnodeConfig } from '../config.js';
12
12
  import { createBootnodeENRandPeerId } from '../enr/generate-enr.js';
13
- import { convertToMultiaddr, getPeerIdPrivateKey } from '../util.js';
13
+ import { convertToMultiaddr, getPeerIdPrivateKey, getPublicIp } from '../util.js';
14
14
 
15
15
  /**
16
16
  * Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
17
17
  */
18
18
  export class BootstrapNode implements P2PBootstrapApi {
19
- private node?: Discv5 & Discv5EventEmitter = undefined;
19
+ private node?: Discv5EventEmitter = undefined;
20
20
  private peerId?: PeerId;
21
21
 
22
22
  constructor(
@@ -31,18 +31,34 @@ export class BootstrapNode implements P2PBootstrapApi {
31
31
  * @returns An empty promise.
32
32
  */
33
33
  public async start(config: BootnodeConfig) {
34
- const { udpListenAddress, udpAnnounceAddress } = config;
35
- const listenAddrUdp = multiaddr(convertToMultiaddr(udpListenAddress, 'udp'));
34
+ const { p2pPort, listenAddress, p2pBroadcastPort, queryForIp } = config;
35
+ let p2pIp = config.p2pIp;
36
+ this.logger.info(`Starting bootstrap node with config: ${JSON.stringify(config)}`);
37
+ if (!p2pIp) {
38
+ if (queryForIp) {
39
+ this.logger.info('Querying for public IP address...');
40
+ const publicIp = await getPublicIp();
41
+ p2pIp = publicIp;
42
+ this.logger.info(`Found public IP address: ${publicIp}`);
43
+ }
44
+ }
36
45
 
37
- if (!udpAnnounceAddress) {
38
- throw new Error('You need to provide a UDP announce address.');
46
+ if (!p2pIp) {
47
+ throw new Error('You need to provide a P2P IP address.');
39
48
  }
40
49
 
41
- const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store);
50
+ if (!p2pBroadcastPort) {
51
+ config.p2pBroadcastPort = p2pPort;
52
+ }
53
+
54
+ const listenAddrUdp = multiaddr(convertToMultiaddr(listenAddress, config.p2pBroadcastPort!, 'udp'));
55
+
56
+ const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store, this.logger);
42
57
 
43
58
  const { enr: ourEnr, peerId } = await createBootnodeENRandPeerId(
44
- peerIdPrivateKey,
45
- udpAnnounceAddress,
59
+ peerIdPrivateKey.getValue(),
60
+ p2pIp,
61
+ config.p2pBroadcastPort!,
46
62
  config.l1ChainId,
47
63
  );
48
64
  this.peerId = peerId;
@@ -1,9 +1,12 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import { DateProvider } from '@aztec/foundation/timer';
3
4
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
5
  import type { DataStoreConfig } from '@aztec/kv-store/config';
5
- import { createStore } from '@aztec/kv-store/lmdb-v2';
6
+ import { AztecLMDBStoreV2, createStore } from '@aztec/kv-store/lmdb-v2';
6
7
  import type { L2BlockSource } from '@aztec/stdlib/block';
8
+ import type { ChainConfig } from '@aztec/stdlib/config';
9
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
7
10
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
8
11
  import { P2PClientType } from '@aztec/stdlib/p2p';
9
12
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
@@ -11,79 +14,167 @@ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-clien
11
14
  import { P2PClient } from '../client/p2p_client.js';
12
15
  import type { P2PConfig } from '../config.js';
13
16
  import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
14
- import { InMemoryAttestationPool } from '../mem_pools/attestation_pool/memory_attestation_pool.js';
17
+ import { KvAttestationPool } from '../mem_pools/attestation_pool/kv_attestation_pool.js';
15
18
  import type { MemPools } from '../mem_pools/interface.js';
16
19
  import { AztecKVTxPool, type TxPool } from '../mem_pools/tx_pool/index.js';
17
- import { DiscV5Service } from '../services/discv5/discV5_service.js';
18
20
  import { DummyP2PService } from '../services/dummy_service.js';
19
21
  import { LibP2PService } from '../services/index.js';
22
+ import { TxCollection } from '../services/tx_collection/tx_collection.js';
23
+ import { type TxSource, createNodeRpcTxSources } from '../services/tx_collection/tx_source.js';
20
24
  import { configureP2PClientAddresses, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
21
25
 
22
- type P2PClientDeps<T extends P2PClientType> = {
26
+ export type P2PClientDeps<T extends P2PClientType> = {
23
27
  txPool?: TxPool;
24
28
  store?: AztecAsyncKVStore;
25
29
  attestationPool?: T extends P2PClientType.Full ? AttestationPool : undefined;
26
30
  logger?: Logger;
31
+ txCollectionNodeSources?: TxSource[];
32
+ p2pServiceFactory?: (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService<T>>;
27
33
  };
28
34
 
29
- export const createP2PClient = async <T extends P2PClientType>(
35
+ export const P2P_STORE_NAME = 'p2p';
36
+ export const P2P_ARCHIVE_STORE_NAME = 'p2p-archive';
37
+ export const P2P_PEER_STORE_NAME = 'p2p-peers';
38
+ export const P2P_ATTESTATION_STORE_NAME = 'p2p-attestation';
39
+
40
+ export async function createP2PClient<T extends P2PClientType>(
30
41
  clientType: T,
31
- _config: P2PConfig & DataStoreConfig,
32
- l2BlockSource: L2BlockSource,
42
+ inputConfig: P2PConfig & DataStoreConfig & ChainConfig,
43
+ archiver: L2BlockSource & ContractDataSource,
33
44
  proofVerifier: ClientProtocolCircuitVerifier,
34
45
  worldStateSynchronizer: WorldStateSynchronizer,
35
46
  epochCache: EpochCacheInterface,
47
+ packageVersion: string,
48
+ dateProvider: DateProvider = new DateProvider(),
36
49
  telemetry: TelemetryClient = getTelemetryClient(),
37
50
  deps: P2PClientDeps<T> = {},
38
- ) => {
39
- let config = { ..._config };
51
+ ) {
52
+ const config = await configureP2PClientAddresses({
53
+ ...inputConfig,
54
+ dataStoreMapSizeKb: inputConfig.p2pStoreMapSizeKb ?? inputConfig.dataStoreMapSizeKb,
55
+ });
56
+
40
57
  const logger = deps.logger ?? createLogger('p2p');
41
- const store = deps.store ?? (await createStore('p2p', 1, config, createLogger('p2p:lmdb-v2')));
42
- const archive = await createStore('p2p-archive', 1, config, createLogger('p2p-archive:lmdb-v2'));
58
+
59
+ if (config.bootstrapNodes.length === 0) {
60
+ logger.warn(
61
+ 'No bootstrap nodes have been provided. Set the BOOTSTRAP_NODES environment variable in order to join the P2P network',
62
+ );
63
+ }
64
+
65
+ const store = deps.store ?? (await createStore(P2P_STORE_NAME, 2, config, createLogger('p2p:lmdb-v2')));
66
+ const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, createLogger('p2p-archive:lmdb-v2'));
67
+ const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, createLogger('p2p-peer:lmdb-v2'));
68
+ const attestationStore = await createStore(
69
+ P2P_ATTESTATION_STORE_NAME,
70
+ 1,
71
+ config,
72
+ createLogger('p2p-attestation:lmdb-v2'),
73
+ );
74
+ const l1Constants = await archiver.getL1Constants();
43
75
 
44
76
  const mempools: MemPools<T> = {
45
- txPool: deps.txPool ?? new AztecKVTxPool(store, archive, telemetry, config.archivedTxLimit),
77
+ txPool:
78
+ deps.txPool ??
79
+ new AztecKVTxPool(store, archive, worldStateSynchronizer, telemetry, {
80
+ maxTxPoolSize: config.maxTxPoolSize,
81
+ archivedTxLimit: config.archivedTxLimit,
82
+ }),
46
83
  attestationPool:
47
84
  clientType === P2PClientType.Full
48
- ? ((deps.attestationPool ?? new InMemoryAttestationPool(telemetry)) as T extends P2PClientType.Full
85
+ ? ((deps.attestationPool ?? new KvAttestationPool(attestationStore, telemetry)) as T extends P2PClientType.Full
49
86
  ? AttestationPool
50
87
  : undefined)
51
88
  : undefined,
52
89
  };
53
90
 
54
- let p2pService;
91
+ const p2pService = await createP2PService<T>(
92
+ config,
93
+ clientType,
94
+ archiver,
95
+ proofVerifier,
96
+ worldStateSynchronizer,
97
+ epochCache,
98
+ store,
99
+ peerStore,
100
+ mempools,
101
+ deps.p2pServiceFactory,
102
+ packageVersion,
103
+ logger.createChild('libp2p_service'),
104
+ telemetry,
105
+ );
55
106
 
56
- if (_config.p2pEnabled) {
57
- logger.verbose('P2P is enabled. Using LibP2P service.');
58
- config = await configureP2PClientAddresses(_config);
107
+ const nodeSources = [
108
+ ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, config),
109
+ ...(deps.txCollectionNodeSources ?? []),
110
+ ];
111
+ if (nodeSources.length > 0) {
112
+ logger.info(`Using ${nodeSources.length} node RPC sources for tx collection.`, {
113
+ nodes: nodeSources.map(n => n.getInfo()),
114
+ });
115
+ }
59
116
 
60
- // Create peer discovery service
61
- const peerIdPrivateKey = await getPeerIdPrivateKey(config, store);
62
- const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey);
63
- const discoveryService = new DiscV5Service(
64
- peerId,
65
- config,
66
- telemetry,
67
- createLogger(`${logger.module}:discv5_service`),
68
- );
117
+ const txCollection = new TxCollection(
118
+ p2pService,
119
+ nodeSources,
120
+ l1Constants,
121
+ mempools.txPool,
122
+ config,
123
+ dateProvider,
124
+ telemetry,
125
+ logger.createChild('tx-collection'),
126
+ );
69
127
 
70
- p2pService = await LibP2PService.new<T>(
71
- clientType,
72
- config,
73
- discoveryService,
74
- peerId,
75
- mempools,
76
- l2BlockSource,
77
- epochCache,
78
- proofVerifier,
79
- worldStateSynchronizer,
80
- store,
81
- telemetry,
82
- createLogger(`${logger.module}:libp2p_service`),
83
- );
84
- } else {
85
- logger.verbose('P2P is disabled. Using dummy P2P service');
86
- p2pService = new DummyP2PService();
128
+ return new P2PClient(
129
+ clientType,
130
+ store,
131
+ archiver,
132
+ mempools,
133
+ p2pService,
134
+ txCollection,
135
+ config,
136
+ dateProvider,
137
+ telemetry,
138
+ );
139
+ }
140
+
141
+ async function createP2PService<T extends P2PClientType>(
142
+ config: P2PConfig & DataStoreConfig,
143
+ clientType: T,
144
+ archiver: L2BlockSource & ContractDataSource,
145
+ proofVerifier: ClientProtocolCircuitVerifier,
146
+ worldStateSynchronizer: WorldStateSynchronizer,
147
+ epochCache: EpochCacheInterface,
148
+ store: AztecAsyncKVStore,
149
+ peerStore: AztecLMDBStoreV2,
150
+ mempools: MemPools<T>,
151
+ p2pServiceFactory: P2PClientDeps<T>['p2pServiceFactory'],
152
+ packageVersion: string,
153
+ logger: Logger,
154
+ telemetry: TelemetryClient,
155
+ ) {
156
+ if (!config.p2pEnabled) {
157
+ logger.verbose('P2P is disabled. Using dummy P2P service.');
158
+ return new DummyP2PService();
87
159
  }
88
- return new P2PClient(clientType, store, l2BlockSource, mempools, p2pService, config, telemetry);
89
- };
160
+
161
+ logger.verbose('P2P is enabled. Using LibP2P service.');
162
+
163
+ // Create peer discovery service
164
+ const peerIdPrivateKey = await getPeerIdPrivateKey(config, store, logger);
165
+ const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey.getValue());
166
+
167
+ const p2pService = await (p2pServiceFactory ?? LibP2PService.new<T>)(clientType, config, peerId, {
168
+ packageVersion,
169
+ mempools,
170
+ l2BlockSource: archiver,
171
+ epochCache,
172
+ proofVerifier,
173
+ worldStateSynchronizer,
174
+ peerStore,
175
+ telemetry,
176
+ logger: logger.createChild(`libp2p_service`),
177
+ });
178
+
179
+ return p2pService;
180
+ }