@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,3 +1,4 @@
1
+ import { SecretValue } from '@aztec/foundation/config';
1
2
  import { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import type { Logger } from '@aztec/foundation/log';
3
4
  import { sleep } from '@aztec/foundation/sleep';
@@ -17,7 +18,7 @@ const workerPath = path.join(__dirname, '../../dest/testbench/p2p_client_testben
17
18
 
18
19
  const testChainConfig: ChainConfig = {
19
20
  l1ChainId: 31337,
20
- version: 1,
21
+ rollupVersion: 1,
21
22
  l1Contracts: {
22
23
  rollupAddress: EthAddress.random(),
23
24
  },
@@ -44,30 +45,21 @@ class WorkerClientManager {
44
45
  });
45
46
  }
46
47
 
47
- /**
48
- * Creates address strings from a port
49
- */
50
- private getAddresses(port: number) {
51
- return {
52
- addr: `127.0.0.1:${port}`,
53
- listenAddr: `0.0.0.0:${port}`,
54
- };
55
- }
56
-
57
48
  /**
58
49
  * Creates a client configuration object
59
50
  */
60
- private createClientConfig(clientIndex: number, port: number, otherNodes: string[]) {
61
- const { addr, listenAddr } = this.getAddresses(port);
62
-
51
+ private createClientConfig(
52
+ clientIndex: number,
53
+ port: number,
54
+ otherNodes: string[],
55
+ ): P2PConfig & Partial<ChainConfig> {
63
56
  return {
64
57
  ...getP2PDefaultConfig(),
65
58
  p2pEnabled: true,
66
- peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
67
- tcpListenAddress: listenAddr,
68
- udpListenAddress: listenAddr,
69
- tcpAnnounceAddress: addr,
70
- udpAnnounceAddress: addr,
59
+ peerIdPrivateKey: new SecretValue(this.peerIdPrivateKeys[clientIndex]),
60
+ listenAddress: '127.0.0.1',
61
+ p2pIp: '127.0.0.1',
62
+ p2pPort: port,
71
63
  bootstrapNodes: [...otherNodes],
72
64
  ...this.p2pConfig,
73
65
  };
@@ -216,6 +208,8 @@ class WorkerClientManager {
216
208
  (_, ind) => ind !== clientIndex && ind < Math.min(this.peerEnrs.length, 10),
217
209
  );
218
210
 
211
+ this.logger.info(`Changing port for client ${clientIndex} to ${newPort} with other nodes `, otherNodes);
212
+
219
213
  const config = this.createClientConfig(clientIndex, newPort, otherNodes);
220
214
  const [childProcess, readySignal] = this.spawnWorkerProcess(config, clientIndex);
221
215
 
@@ -253,7 +247,7 @@ class WorkerClientManager {
253
247
  } catch (e) {
254
248
  this.logger.error(`Error force killing process ${index}:`, e);
255
249
  }
256
- }, 10000); // 10 second timeout for graceful exit
250
+ }, 5000); // 5 second timeout for graceful exit
257
251
 
258
252
  // Listen for process exit
259
253
  process.once('exit', () => {
@@ -264,7 +258,7 @@ class WorkerClientManager {
264
258
  // Try to gracefully stop the process
265
259
  try {
266
260
  process.send({ type: 'STOP' });
267
- } catch (e) {
261
+ } catch {
268
262
  // If sending the message fails, force kill immediately
269
263
  clearTimeout(forceKillTimeout);
270
264
  try {
@@ -298,12 +292,12 @@ class WorkerClientManager {
298
292
  if (!p.killed) {
299
293
  p.kill('SIGKILL');
300
294
  }
301
- } catch (e) {
295
+ } catch {
302
296
  // Ignore errors when force killing
303
297
  }
304
298
  });
305
299
  resolve();
306
- }, 30000); // 30 second timeout for all processes
300
+ }, 10000); // 10 second timeout for all processes
307
301
  }),
308
302
  ]);
309
303
  } catch (error) {
@@ -17,6 +17,7 @@ export enum PeerEvent {
17
17
  export enum Discv5Event {
18
18
  DISCOVERED = 'discovered',
19
19
  ENR_ADDED = 'enrAdded',
20
+ MULTIADDR_UPDATED = 'multiaddrUpdated',
20
21
  }
21
22
 
22
23
  /**
@@ -34,3 +35,4 @@ export enum GossipSubEvent {
34
35
  * Aztec network specific types
35
36
  */
36
37
  export const AZTEC_ENR_KEY = 'aztec';
38
+ export const AZTEC_ENR_CLIENT_VERSION_KEY = 'ver';
package/src/util.ts CHANGED
@@ -1,25 +1,40 @@
1
- import type { AztecAsyncKVStore } from '@aztec/kv-store';
1
+ import { SecretValue } from '@aztec/foundation/config';
2
+ import type { Logger } from '@aztec/foundation/log';
3
+ import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
2
4
  import type { DataStoreConfig } from '@aztec/kv-store/config';
3
5
 
4
6
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
5
7
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
8
+ import type { Identify } from '@libp2p/identify';
6
9
  import type { PeerId, PrivateKey } from '@libp2p/interface';
7
10
  import type { ConnectionManager } from '@libp2p/interface-internal';
8
11
  import { createFromPrivKey } from '@libp2p/peer-id-factory';
9
12
  import { resolve } from 'dns/promises';
13
+ import { promises as fs } from 'fs';
10
14
  import type { Libp2p } from 'libp2p';
15
+ import path from 'path';
11
16
 
12
17
  import type { P2PConfig } from './config.js';
13
18
 
14
- export interface PubSubLibp2p extends Libp2p {
19
+ const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
20
+
21
+ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' | 'peerId'> {
15
22
  services: {
16
- pubsub: GossipSub;
17
- components: {
18
- connectionManager: ConnectionManager;
19
- };
23
+ pubsub: Pick<
24
+ GossipSub,
25
+ 'addEventListener' | 'removeEventListener' | 'publish' | 'subscribe' | 'reportMessageValidationResult' | 'direct'
26
+ > & { score: Pick<GossipSub['score'], 'score'> };
20
27
  };
21
28
  }
22
29
 
30
+ export type FullLibp2p = Libp2p<{
31
+ identify: Identify;
32
+ pubsub: GossipSub;
33
+ components: {
34
+ connectionManager: ConnectionManager;
35
+ };
36
+ }>;
37
+
23
38
  /**
24
39
  * Converts an address string to a multiaddr string.
25
40
  * Example usage:
@@ -28,41 +43,13 @@ export interface PubSubLibp2p extends Libp2p {
28
43
  * @param address - The address string to convert. Has to be in the format <addr>:<port>.
29
44
  * @param protocol - The protocol to use in the multiaddr string.
30
45
  * @returns A multiaddr compliant string. */
31
- export function convertToMultiaddr(address: string, protocol: 'tcp' | 'udp'): string {
32
- const [addr, port] = splitAddressPort(address, false);
33
-
34
- const multiaddrPrefix = addressToMultiAddressType(addr);
46
+ export function convertToMultiaddr(address: string, port: number, protocol: 'tcp' | 'udp'): string {
47
+ const multiaddrPrefix = addressToMultiAddressType(address);
35
48
  if (multiaddrPrefix === 'dns') {
36
49
  throw new Error('Invalid address format. Expected an IPv4 or IPv6 address.');
37
50
  }
38
51
 
39
- return `/${multiaddrPrefix}/${addr}/${protocol}/${port}`;
40
- }
41
-
42
- /**
43
- * Splits an <address>:<port> string into its components.
44
- * @returns The ip6 or ip4 address & port separately
45
- */
46
- export function splitAddressPort(address: string, allowEmptyAddress: boolean): [string, string] {
47
- let addr: string;
48
- let port: string;
49
-
50
- if (address.startsWith('[')) {
51
- // IPv6 address enclosed in square brackets
52
- const match = address.match(/^\[([^\]]+)\]:(\d+)$/);
53
- if (!match) {
54
- throw new Error(`Invalid IPv6 address format:${address}. Expected format: [<addr>]:<port>`);
55
- }
56
- [, addr, port] = match;
57
- } else {
58
- // IPv4 address
59
- [addr, port] = address.split(':');
60
- if ((!addr && !allowEmptyAddress) || !port) {
61
- throw new Error(`Invalid address format: ${address}. Expected format: <addr>:<port>`);
62
- }
63
- }
64
-
65
- return [addr, port];
52
+ return `/${multiaddrPrefix}/${address}/${protocol}/${port}`;
66
53
  }
67
54
 
68
55
  /**
@@ -74,13 +61,12 @@ export async function getPublicIp(): Promise<string> {
74
61
  return text.trim();
75
62
  }
76
63
 
77
- export async function resolveAddressIfNecessary(address: string): Promise<string> {
78
- const [addr, port] = splitAddressPort(address, false);
79
- const multiaddrPrefix = addressToMultiAddressType(addr);
64
+ export async function resolveAddressIfNecessary(address: string, port: string): Promise<string> {
65
+ const multiaddrPrefix = addressToMultiAddressType(address);
80
66
  if (multiaddrPrefix === 'dns') {
81
- const resolvedAddresses = await resolve(addr);
67
+ const resolvedAddresses = await resolve(address);
82
68
  if (resolvedAddresses.length === 0) {
83
- throw new Error(`Could not resolve address: ${addr}`);
69
+ throw new Error(`Could not resolve address: ${address}`);
84
70
  }
85
71
  return `${resolvedAddresses[0]}:${port}`;
86
72
  } else {
@@ -104,47 +90,21 @@ export async function configureP2PClientAddresses(
104
90
  _config: P2PConfig & DataStoreConfig,
105
91
  ): Promise<P2PConfig & DataStoreConfig> {
106
92
  const config = { ..._config };
107
- const {
108
- tcpAnnounceAddress: configTcpAnnounceAddress,
109
- udpAnnounceAddress: configUdpAnnounceAddress,
110
- queryForIp,
111
- } = config;
112
-
113
- config.tcpAnnounceAddress = configTcpAnnounceAddress
114
- ? await resolveAddressIfNecessary(configTcpAnnounceAddress)
115
- : undefined;
116
- config.udpAnnounceAddress = configUdpAnnounceAddress
117
- ? await resolveAddressIfNecessary(configUdpAnnounceAddress)
118
- : undefined;
119
-
120
- // create variable for re-use if needed
121
- let publicIp;
93
+ const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
122
94
 
123
- // check if no announce IP was provided
124
- const splitTcpAnnounceAddress = splitAddressPort(configTcpAnnounceAddress || '', true);
125
- if (splitTcpAnnounceAddress.length == 2 && splitTcpAnnounceAddress[0] === '') {
126
- if (queryForIp) {
127
- publicIp = await getPublicIp();
128
- const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`;
129
- config.tcpAnnounceAddress = tcpAnnounceAddress;
130
- } else {
131
- throw new Error(
132
- `Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: <addr>:<port>`,
133
- );
134
- }
95
+ // If no broadcast port is provided, use the given p2p port as the broadcast port
96
+ if (!p2pBroadcastPort) {
97
+ config.p2pBroadcastPort = p2pPort;
135
98
  }
136
99
 
137
- const splitUdpAnnounceAddress = splitAddressPort(configUdpAnnounceAddress || '', true);
138
- if (splitUdpAnnounceAddress.length == 2 && splitUdpAnnounceAddress[0] === '') {
139
- // If announceUdpAddress is not provided, use announceTcpAddress
140
- if (!queryForIp && config.tcpAnnounceAddress) {
141
- config.udpAnnounceAddress = config.tcpAnnounceAddress;
142
- } else if (queryForIp) {
143
- const udpPublicIp = publicIp || (await getPublicIp());
144
- const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`;
145
- config.udpAnnounceAddress = udpAnnounceAddress;
100
+ // check if no announce IP was provided
101
+ if (!p2pIp) {
102
+ if (queryForIp) {
103
+ const publicIp = await getPublicIp();
104
+ config.p2pIp = publicIp;
146
105
  }
147
106
  }
107
+ // TODO(md): guard against setting a local ip address as the announce ip
148
108
 
149
109
  return config;
150
110
  }
@@ -153,30 +113,74 @@ export async function configureP2PClientAddresses(
153
113
  * Get the peer id private key
154
114
  *
155
115
  * 1. Check if we have a peer id private key in the config
156
- * 2. If not, check we have a peer id private key persisted in the node
157
- * 3. If not, create a new one, then persist it in the node
116
+ * 2. If not, check if we have a peer id private key persisted in a file
117
+ * 3. If no file path or data directory is provided, check if we have a peer id private key in the node's store
118
+ * 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
158
119
  *
159
120
  */
160
121
  export async function getPeerIdPrivateKey(
161
- config: { peerIdPrivateKey?: string },
122
+ config: { peerIdPrivateKey?: SecretValue<string>; peerIdPrivateKeyPath?: string; dataDirectory?: string },
162
123
  store: AztecAsyncKVStore,
163
- ): Promise<string> {
164
- const peerIdPrivateKeySingleton = store.openSingleton<string>('peerIdPrivateKey');
165
- if (config.peerIdPrivateKey) {
166
- await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
124
+ logger: Logger,
125
+ ): Promise<SecretValue<string>> {
126
+ const peerIdPrivateKeyFilePath =
127
+ config.peerIdPrivateKeyPath ??
128
+ (config.dataDirectory ? path.join(config.dataDirectory, PEER_ID_DATA_DIR_FILE) : undefined);
129
+ let peerIdPrivateKeySingleton: AztecAsyncSingleton<string> | undefined;
130
+
131
+ const writePrivateKeyToFile = async (filePath: string, privateKey: string) => {
132
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
133
+ await fs.writeFile(filePath, privateKey);
134
+ };
135
+
136
+ // If the peerIdPrivateKey is provided in the config, we use it and persist it in either a file or the node's store
137
+ if (config.peerIdPrivateKey && config.peerIdPrivateKey.getValue().trim()) {
138
+ if (peerIdPrivateKeyFilePath) {
139
+ await writePrivateKeyToFile(peerIdPrivateKeyFilePath, config.peerIdPrivateKey.getValue());
140
+ } else {
141
+ peerIdPrivateKeySingleton = store.openSingleton<string>('peerIdPrivateKey');
142
+ await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey.getValue());
143
+ }
167
144
  return config.peerIdPrivateKey;
168
145
  }
169
146
 
170
- const storedPeerIdPrivateKey = await peerIdPrivateKeySingleton.getAsync();
147
+ // Check to see if we have a peer id private key stored in a file or the node's store
148
+ let storedPeerIdPrivateKey: string | undefined;
149
+ const privateKeyFileExists =
150
+ peerIdPrivateKeyFilePath &&
151
+ (await fs
152
+ .access(peerIdPrivateKeyFilePath)
153
+ .then(() => true)
154
+ .catch(() => false));
155
+ if (peerIdPrivateKeyFilePath && privateKeyFileExists) {
156
+ await fs.access(peerIdPrivateKeyFilePath);
157
+ storedPeerIdPrivateKey = await fs.readFile(peerIdPrivateKeyFilePath, 'utf8');
158
+ } else {
159
+ peerIdPrivateKeySingleton = store.openSingleton<string>('peerIdPrivateKey');
160
+ storedPeerIdPrivateKey = await peerIdPrivateKeySingleton.getAsync();
161
+ }
171
162
  if (storedPeerIdPrivateKey) {
172
- return storedPeerIdPrivateKey;
163
+ if (peerIdPrivateKeyFilePath && !privateKeyFileExists) {
164
+ logger.verbose(`Peer ID private key found in the node's store, persisting it to ${peerIdPrivateKeyFilePath}`);
165
+ await writePrivateKeyToFile(peerIdPrivateKeyFilePath, storedPeerIdPrivateKey);
166
+ }
167
+ return new SecretValue(storedPeerIdPrivateKey);
173
168
  }
174
169
 
170
+ // Generate and persist a new private key
175
171
  const newPeerIdPrivateKey = await generateKeyPair('secp256k1');
176
172
  const privateKeyString = Buffer.from(marshalPrivateKey(newPeerIdPrivateKey)).toString('hex');
173
+ if (peerIdPrivateKeyFilePath) {
174
+ logger.verbose(`Creating new peer ID private key and persisting it to ${peerIdPrivateKeyFilePath}`);
175
+ await writePrivateKeyToFile(peerIdPrivateKeyFilePath, privateKeyString);
176
+ } else {
177
+ logger.warn(
178
+ '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',
179
+ );
180
+ await peerIdPrivateKeySingleton!.set(privateKeyString);
181
+ }
177
182
 
178
- await peerIdPrivateKeySingleton.set(privateKeyString);
179
- return privateKeyString;
183
+ return new SecretValue(privateKeyString);
180
184
  }
181
185
 
182
186
  /**
package/src/versioning.ts CHANGED
@@ -1,6 +1,6 @@
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 type { ChainConfig } from '@aztec/stdlib/config';
5
5
  import {
6
6
  type ComponentsVersions,
@@ -9,10 +9,10 @@ import {
9
9
  getComponentsVersionsFromConfig,
10
10
  } from '@aztec/stdlib/versioning';
11
11
 
12
- import type { SignableENR } from '@chainsafe/enr';
12
+ import type { SignableENR } from '@nethermindeth/enr';
13
13
  import xxhashFactory from 'xxhash-wasm';
14
14
 
15
- import { AZTEC_ENR_KEY } from './types/index.js';
15
+ import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
16
16
 
17
17
  const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
18
18
  const XX_HASH_LEN = 8;
@@ -20,7 +20,7 @@ const xxhash = await xxhashFactory();
20
20
 
21
21
  /** Returns the component versions based on config and this build. */
22
22
  export function getVersions(config: ChainConfig) {
23
- return getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot());
23
+ return getComponentsVersionsFromConfig(config, protocolContractsHash, getVKTreeRoot());
24
24
  }
25
25
 
26
26
  /** Sets the aztec key on the ENR record with versioning info. */
@@ -31,6 +31,13 @@ export function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash
31
31
  return versions;
32
32
  }
33
33
 
34
+ /** Sets the Aztec client version on ENR record **/
35
+ export function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: string) {
36
+ if (clientVersion) {
37
+ enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
38
+ }
39
+ }
40
+
34
41
  /** Checks the given value from an ENR record against the expected versions. */
35
42
  export function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions) {
36
43
  if (enrValue.length === XX_HASH_LEN) {