@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,8 +1,10 @@
1
1
  import { timesParallel } from '@aztec/foundation/collection';
2
+ import { SecretValue } from '@aztec/foundation/config';
3
+ import { createLogger } from '@aztec/foundation/log';
2
4
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
3
5
  import { emptyChainConfig } from '@aztec/stdlib/config';
6
+ import { compressComponentVersions } from '@aztec/stdlib/versioning';
4
7
  import { getTelemetryClient } from '@aztec/telemetry-client';
5
- import { SignableENR } from '@chainsafe/enr';
6
8
  import { gossipsub } from '@chainsafe/libp2p-gossipsub';
7
9
  import { noise } from '@chainsafe/libp2p-noise';
8
10
  import { yamux } from '@chainsafe/libp2p-yamux';
@@ -11,15 +13,19 @@ import { identify } from '@libp2p/identify';
11
13
  import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
12
14
  import { tcp } from '@libp2p/tcp';
13
15
  import { multiaddr } from '@multiformats/multiaddr';
16
+ import { SignableENR } from '@nethermindeth/enr';
14
17
  import getPort from 'get-port';
15
18
  import { createLibp2p } from 'libp2p';
16
19
  import { BootstrapNode } from '../bootstrap/bootstrap.js';
17
20
  import { DiscV5Service } from '../services/discv5/discV5_service.js';
18
21
  import { LibP2PService } from '../services/libp2p/libp2p_service.js';
22
+ import { PeerManager } from '../services/peer-manager/peer_manager.js';
23
+ import { PeerScoring } from '../services/peer-manager/peer_scoring.js';
19
24
  import { ReqRespSubProtocol, noopValidator } from '../services/reqresp/interface.js';
20
- import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
25
+ import { pingHandler } from '../services/reqresp/protocols/index.js';
21
26
  import { ReqResp } from '../services/reqresp/reqresp.js';
22
27
  import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
28
+ import { getVersions } from '../versioning.js';
23
29
  /**
24
30
  * Creates a libp2p node, pre configured.
25
31
  * @param boostrapAddrs - an optional list of bootstrap addresses
@@ -30,10 +36,10 @@ import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js
30
36
  start,
31
37
  addresses: {
32
38
  listen: [
33
- `/ip4/0.0.0.0/tcp/${port}`
39
+ `/ip4/127.0.0.1/tcp/${port}`
34
40
  ],
35
41
  announce: [
36
- `/ip4/0.0.0.0/tcp/${port}`
42
+ `/ip4/127.0.0.1/tcp/${port}`
37
43
  ]
38
44
  },
39
45
  connectionEncryption: [
@@ -73,34 +79,42 @@ import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js
73
79
  * P2P functionality is operational, however everything else is default
74
80
  *
75
81
  *
76
- */ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2BlockSource, worldStateSynchronizer, epochCache, mempools, telemetry, port = 0, peerId, chainConfig = emptyChainConfig) {
82
+ */ export async function createTestLibP2PService(clientType, boostrapAddrs = [], archiver, worldStateSynchronizer, epochCache, mempools, telemetry, port = 0, peerId, chainConfig = emptyChainConfig) {
77
83
  peerId = peerId ?? await createSecp256k1PeerId();
78
84
  const config = {
79
- tcpAnnounceAddress: `127.0.0.1:${port}`,
80
- udpAnnounceAddress: `127.0.0.1:${port}`,
81
- tcpListenAddress: `0.0.0.0:${port}`,
82
- udpListenAddress: `0.0.0.0:${port}`,
85
+ p2pIp: `127.0.0.1`,
86
+ p2pPort: port,
83
87
  bootstrapNodes: boostrapAddrs,
84
88
  peerCheckIntervalMS: 1000,
85
89
  maxPeerCount: 5,
86
90
  p2pEnabled: true,
87
- peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex'),
91
+ peerIdPrivateKey: new SecretValue(Buffer.from(peerId.privateKey).toString('hex')),
88
92
  bootstrapNodeEnrVersionCheck: false,
89
93
  ...chainConfig
90
94
  };
91
- const discoveryService = new DiscV5Service(peerId, config, telemetry);
95
+ const discoveryService = new DiscV5Service(peerId, config, 'test-reqresp-node', telemetry);
92
96
  const proofVerifier = new AlwaysTrueCircuitVerifier();
93
97
  // No bootstrap nodes provided as the libp2p service will register them in the constructor
94
98
  const p2pNode = await createLibp2pNode([], peerId, port, /*enable gossip */ true, /**start */ false);
95
- return new LibP2PService(clientType, config, p2pNode, discoveryService, mempools, l2BlockSource, epochCache, proofVerifier, worldStateSynchronizer, telemetry);
99
+ // Duplicated setup code from Libp2pService.new
100
+ const peerScoring = new PeerScoring(config);
101
+ const reqresp = new ReqResp(config, p2pNode, peerScoring);
102
+ const versions = getVersions(config);
103
+ const protocolVersion = compressComponentVersions(versions);
104
+ const peerManager = new PeerManager(p2pNode, discoveryService, config, telemetry, createLogger(`p2p:peer_manager`), peerScoring, reqresp, worldStateSynchronizer, protocolVersion, epochCache);
105
+ p2pNode.services.pubsub.score.params.appSpecificWeight = 10;
106
+ p2pNode.services.pubsub.score.params.appSpecificScore = (peerId)=>peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
107
+ return new LibP2PService(clientType, config, p2pNode, discoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry);
96
108
  }
97
109
  // Mock sub protocol handlers
98
110
  export const MOCK_SUB_PROTOCOL_HANDLERS = {
99
111
  [ReqRespSubProtocol.PING]: pingHandler,
100
- [ReqRespSubProtocol.STATUS]: statusHandler,
112
+ [ReqRespSubProtocol.STATUS]: (_msg)=>Promise.resolve(Buffer.from('status')),
101
113
  [ReqRespSubProtocol.TX]: (_msg)=>Promise.resolve(Buffer.from('tx')),
102
114
  [ReqRespSubProtocol.GOODBYE]: (_msg)=>Promise.resolve(Buffer.from('goodbye')),
103
- [ReqRespSubProtocol.BLOCK]: (_msg)=>Promise.resolve(Buffer.from('block'))
115
+ [ReqRespSubProtocol.BLOCK]: (_msg)=>Promise.resolve(Buffer.from('block')),
116
+ [ReqRespSubProtocol.AUTH]: (_msg)=>Promise.resolve(Buffer.from('auth')),
117
+ [ReqRespSubProtocol.BLOCK_TXS]: (_msg)=>Promise.resolve(Buffer.from('block_txs'))
104
118
  };
105
119
  // By default, all requests are valid
106
120
  // If you want to test an invalid response, you can override the validator
@@ -109,13 +123,15 @@ export const MOCK_SUB_PROTOCOL_VALIDATORS = {
109
123
  [ReqRespSubProtocol.STATUS]: noopValidator,
110
124
  [ReqRespSubProtocol.TX]: noopValidator,
111
125
  [ReqRespSubProtocol.GOODBYE]: noopValidator,
112
- [ReqRespSubProtocol.BLOCK]: noopValidator
126
+ [ReqRespSubProtocol.BLOCK]: noopValidator,
127
+ [ReqRespSubProtocol.AUTH]: noopValidator,
128
+ [ReqRespSubProtocol.BLOCK_TXS]: noopValidator
113
129
  };
114
130
  /**
115
131
  * @param numberOfNodes - the number of nodes to create
116
132
  * @returns An array of the created nodes
117
- */ export const createNodes = (peerScoring, numberOfNodes)=>{
118
- return timesParallel(numberOfNodes, ()=>createReqResp(peerScoring));
133
+ */ export const createNodes = (peerScoring, numberOfNodes, rateLimits = {})=>{
134
+ return timesParallel(numberOfNodes, ()=>createReqResp(peerScoring, rateLimits));
119
135
  };
120
136
  export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS)=>{
121
137
  for (const node of nodes){
@@ -130,13 +146,15 @@ export const stopNodes = async (nodes)=>{
130
146
  await Promise.all(stopPromises);
131
147
  };
132
148
  // Create a req resp node, exposing the underlying p2p node
133
- export const createReqResp = async (peerScoring)=>{
149
+ export const createReqResp = async (peerScoring, rateLimits = {})=>{
134
150
  const p2p = await createLibp2pNode();
135
151
  const config = {
136
152
  overallRequestTimeoutMs: 4000,
137
- individualRequestTimeoutMs: 2000
153
+ individualRequestTimeoutMs: 2000,
154
+ dialTimeoutMs: 1000,
155
+ p2pOptimisticNegotiation: false
138
156
  };
139
- const req = new ReqResp(config, p2p, peerScoring);
157
+ const req = new ReqResp(config, p2p, peerScoring, undefined, rateLimits);
140
158
  return {
141
159
  p2p,
142
160
  req
@@ -156,25 +174,41 @@ export const connectToPeers = async (nodes)=>{
156
174
  };
157
175
  // Mock circuit verifier for testing - reimplementation from bb to avoid dependency
158
176
  export class AlwaysTrueCircuitVerifier {
177
+ stop() {
178
+ return Promise.resolve();
179
+ }
159
180
  verifyProof(_tx) {
160
- return Promise.resolve(true);
181
+ return Promise.resolve({
182
+ valid: true,
183
+ durationMs: 0,
184
+ totalDurationMs: 0
185
+ });
161
186
  }
162
187
  }
163
188
  export class AlwaysFalseCircuitVerifier {
189
+ stop() {
190
+ return Promise.resolve();
191
+ }
164
192
  verifyProof(_tx) {
165
- return Promise.resolve(false);
193
+ return Promise.resolve({
194
+ valid: false,
195
+ durationMs: 0,
196
+ totalDurationMs: 0
197
+ });
166
198
  }
167
199
  }
168
200
  // Bootnodes
169
201
  export function createBootstrapNodeConfig(privateKey, port, chainConfig) {
170
202
  return {
171
203
  l1ChainId: chainConfig.l1ChainId,
172
- udpListenAddress: `0.0.0.0:${port}`,
173
- udpAnnounceAddress: `127.0.0.1:${port}`,
174
- peerIdPrivateKey: privateKey,
204
+ p2pIp: '127.0.0.1',
205
+ p2pPort: port,
206
+ peerIdPrivateKey: new SecretValue(privateKey),
175
207
  dataDirectory: undefined,
176
- dataStoreMapSizeKB: 0,
177
- bootstrapNodes: []
208
+ dataStoreMapSizeKb: 0,
209
+ bootstrapNodes: [],
210
+ listenAddress: '127.0.0.1',
211
+ queryForIp: false
178
212
  };
179
213
  }
180
214
  export function createBootstrapNodeFromPrivateKey(privateKey, port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
@@ -189,7 +223,7 @@ export function createBootstrapNodeFromPrivateKey(privateKey, port, telemetry =
189
223
  */ export async function getBootstrapNodeEnr(privateKey, port) {
190
224
  const peerId = await createLibP2PPeerIdFromPrivateKey(privateKey);
191
225
  const enr = SignableENR.createFromPeerId(peerId);
192
- const listenAddrUdp = multiaddr(convertToMultiaddr(`127.0.0.1:${port}`, 'udp'));
226
+ const listenAddrUdp = multiaddr(convertToMultiaddr('127.0.0.1', port, 'udp'));
193
227
  enr.setLocationMultiaddr(listenAddrUdp);
194
228
  return enr;
195
229
  }
@@ -7,15 +7,20 @@ import { EthAddress } from '@aztec/foundation/eth-address';
7
7
  import { createLogger } from '@aztec/foundation/log';
8
8
  import { sleep } from '@aztec/foundation/sleep';
9
9
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
10
- import { P2PClientType } from '@aztec/stdlib/p2p';
10
+ import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
11
11
  import { Tx, TxStatus } from '@aztec/stdlib/tx';
12
+ import { getTelemetryClient } from '@aztec/telemetry-client';
13
+ import { TopicValidatorResult } from '@libp2p/interface';
14
+ import EventEmitter from 'events';
12
15
  import { createP2PClient } from '../index.js';
16
+ import { LibP2PService } from '../services/libp2p/libp2p_service.js';
13
17
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
14
18
  // Simple mock implementation
15
19
  function mockTxPool() {
16
20
  // Mock all methods
17
- return {
18
- addTxs: ()=>Promise.resolve(),
21
+ const pool = {
22
+ isEmpty: ()=>Promise.resolve(false),
23
+ addTxs: ()=>Promise.resolve(1),
19
24
  getTxByHash: ()=>Promise.resolve(undefined),
20
25
  getArchivedTxByHash: ()=>Promise.resolve(undefined),
21
26
  markAsMined: ()=>Promise.resolve(),
@@ -24,23 +29,41 @@ function mockTxPool() {
24
29
  getAllTxs: ()=>Promise.resolve([]),
25
30
  getAllTxHashes: ()=>Promise.resolve([]),
26
31
  getPendingTxHashes: ()=>Promise.resolve([]),
32
+ getPendingTxCount: ()=>Promise.resolve(0),
27
33
  getMinedTxHashes: ()=>Promise.resolve([]),
28
- getTxStatus: ()=>Promise.resolve(TxStatus.PENDING)
34
+ getTxStatus: ()=>Promise.resolve(TxStatus.PENDING),
35
+ getTxsByHash: ()=>Promise.resolve([]),
36
+ hasTxs: ()=>Promise.resolve([]),
37
+ hasTx: ()=>Promise.resolve(false),
38
+ updateConfig: ()=>{},
39
+ markTxsAsNonEvictable: ()=>Promise.resolve(),
40
+ cleanupDeletedMinedTxs: ()=>Promise.resolve(0)
29
41
  };
42
+ return Object.assign(new EventEmitter(), pool);
30
43
  }
31
44
  function mockAttestationPool() {
32
45
  return {
46
+ isEmpty: ()=>Promise.resolve(false),
33
47
  addAttestations: ()=>Promise.resolve(),
34
48
  deleteAttestations: ()=>Promise.resolve(),
35
49
  deleteAttestationsOlderThan: ()=>Promise.resolve(),
36
50
  deleteAttestationsForSlot: ()=>Promise.resolve(),
37
51
  deleteAttestationsForSlotAndProposal: ()=>Promise.resolve(),
38
- getAttestationsForSlot: ()=>Promise.resolve([])
52
+ getAttestationsForSlot: ()=>Promise.resolve([]),
53
+ getAttestationsForSlotAndProposal: ()=>Promise.resolve([]),
54
+ addBlockProposal: ()=>Promise.resolve(),
55
+ getBlockProposal: ()=>Promise.resolve(undefined),
56
+ hasBlockProposal: ()=>Promise.resolve(false),
57
+ hasAttestation: ()=>Promise.resolve(false)
39
58
  };
40
59
  }
41
60
  function mockEpochCache() {
42
61
  return {
43
- getCommittee: ()=>Promise.resolve([]),
62
+ getCommittee: ()=>Promise.resolve({
63
+ committee: [],
64
+ seed: 1n,
65
+ epoch: 0n
66
+ }),
44
67
  getProposerIndexEncoding: ()=>'0x',
45
68
  getEpochAndSlotNow: ()=>({
46
69
  epoch: 0n,
@@ -48,15 +71,73 @@ function mockEpochCache() {
48
71
  ts: 0n
49
72
  }),
50
73
  computeProposerIndex: ()=>0n,
51
- getProposerInCurrentOrNextSlot: ()=>Promise.resolve({
74
+ getProposerAttesterAddressInCurrentOrNextSlot: ()=>Promise.resolve({
52
75
  currentProposer: EthAddress.ZERO,
53
76
  nextProposer: EthAddress.ZERO,
54
77
  currentSlot: 0n,
55
78
  nextSlot: 0n
56
79
  }),
57
- isInCommittee: ()=>Promise.resolve(false)
80
+ getEpochAndSlotInNextL1Slot: ()=>({
81
+ epoch: 0n,
82
+ slot: 0n,
83
+ ts: 0n,
84
+ now: 0n
85
+ }),
86
+ isInCommittee: ()=>Promise.resolve(false),
87
+ getRegisteredValidators: ()=>Promise.resolve([]),
88
+ filterInCommittee: ()=>Promise.resolve([])
58
89
  };
59
90
  }
91
+ function mockWorldStateSynchronizer() {
92
+ return {
93
+ status: ()=>Promise.resolve({
94
+ syncSummary: {
95
+ latestBlockNumber: 0,
96
+ latestBlockHash: '',
97
+ finalizedBlockNumber: 0,
98
+ treesAreSynched: false,
99
+ oldestHistoricBlockNumber: 0
100
+ }
101
+ })
102
+ };
103
+ }
104
+ class TestLibP2PService extends LibP2PService {
105
+ disableTxValidation;
106
+ gossipMessageCount = 0;
107
+ constructor(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:test:libp2p_service'), disableTxValidation = true){
108
+ super(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger);
109
+ this.disableTxValidation = disableTxValidation;
110
+ }
111
+ getGossipMessageCount() {
112
+ return this.gossipMessageCount;
113
+ }
114
+ setDisableTxValidation(disable) {
115
+ this.disableTxValidation = disable;
116
+ }
117
+ async handleGossipedTx(payload, msgId, source) {
118
+ if (this.disableTxValidation) {
119
+ const p2pMessage = P2PMessage.fromMessageData(payload);
120
+ const tx = Tx.fromBuffer(p2pMessage.payload);
121
+ this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Accept);
122
+ const txHash = tx.getTxHash();
123
+ const txHashString = txHash.toString();
124
+ this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
125
+ await this.mempools.txPool.addTxs([
126
+ tx
127
+ ]);
128
+ } else {
129
+ await super.handleGossipedTx(payload, msgId, source);
130
+ }
131
+ }
132
+ async handleNewGossipMessage(msg, msgId, source) {
133
+ this.gossipMessageCount++;
134
+ process.send({
135
+ type: 'GOSSIP_RECEIVED',
136
+ count: this.gossipMessageCount
137
+ });
138
+ await super.handleNewGossipMessage(msg, msgId, source);
139
+ }
140
+ }
60
141
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
61
142
  process.on('message', async (msg)=>{
62
143
  const { type, config, clientIndex } = msg;
@@ -65,33 +146,23 @@ process.on('message', async (msg)=>{
65
146
  const txPool = mockTxPool();
66
147
  const attestationPool = mockAttestationPool();
67
148
  const epochCache = mockEpochCache();
68
- const worldState = {};
149
+ const worldState = mockWorldStateSynchronizer();
69
150
  const l2BlockSource = new MockL2BlockSource();
70
- await l2BlockSource.createBlocks(100);
71
151
  const proofVerifier = new AlwaysTrueCircuitVerifier();
72
152
  const kvStore = await openTmpStore(`test-${clientIndex}`);
73
153
  const logger = createLogger(`p2p:${clientIndex}`);
154
+ const telemetry = getTelemetryClient();
74
155
  const deps = {
75
156
  txPool,
76
157
  attestationPool,
77
158
  store: kvStore,
78
159
  logger
79
160
  };
80
- const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, undefined, deps);
81
- // Create spy for gossip messages
82
- let gossipMessageCount = 0;
83
- client.p2pService.handleNewGossipMessage = (msg, msgId, source)=>{
84
- gossipMessageCount++;
85
- process.send({
86
- type: 'GOSSIP_RECEIVED',
87
- count: gossipMessageCount
88
- });
89
- return client.p2pService.constructor.prototype.handleNewGossipMessage.apply(client.p2pService, [
90
- msg,
91
- msgId,
92
- source
93
- ]);
94
- };
161
+ const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
162
+ // Create test service with validation disabled
163
+ const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.mempools, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, logger, true);
164
+ // Replace the existing p2pService with our test version
165
+ client.p2pService = testService;
95
166
  await client.start();
96
167
  // Wait until the client is ready
97
168
  for(let i = 0; i < 100; i++){
@@ -14,7 +14,7 @@ function getTimestamp(line) {
14
14
  return parseInt(timestampMatch[1], 10);
15
15
  }
16
16
  /**
17
- * Parses a single log line. If the line contains an "rpc.from" event,
17
+ * Parses a single log line. If the line contains an "Received tx" event,
18
18
  * it extracts the timestamp and the peer ID.
19
19
  */ function parseReceivedTx(line) {
20
20
  if (!line.includes('Received tx')) {
@@ -26,9 +26,9 @@ function getTimestamp(line) {
26
26
  logger.error('No timestamp found in received tx log');
27
27
  return null;
28
28
  }
29
- // TODO: this is not correct - it is just the tx hash for now
30
- // Extract the peer ID after "Received tx"
31
- const peerIdMatch = line.match(/p2p:(\d+):/);
29
+ // Extract the peer ID from the log line
30
+ // Example format: "module":"p2p:1","msg":"Received tx 0x0feeafa65f25fd8d613fe4aca44fd65fe41c149ef1941e2019d40925c40748f9 from external peer 16Uiu2HAm8w4oxXF3TwDKoGL9U66thMXWqCgPnb2CgkYwmUqFCWbC."
31
+ const peerIdMatch = line.match(/"module":"p2p:(\d+)"/);
32
32
  if (!peerIdMatch) {
33
33
  logger.error('No peer Number found in received tx log');
34
34
  return null;
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
2
  import { sleep } from '@aztec/foundation/sleep';
3
- import { ClientIvcProof } from '@aztec/stdlib/proofs';
3
+ import { ChonkProof } from '@aztec/stdlib/proofs';
4
4
  import { mockTx } from '@aztec/stdlib/testing';
5
5
  import assert from 'assert';
6
6
  import path from 'path';
@@ -17,7 +17,7 @@ async function main() {
17
17
  }
18
18
  const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
19
19
  const config = await import(configPath, {
20
- assert: {
20
+ with: {
21
21
  type: 'json'
22
22
  }
23
23
  });
@@ -34,7 +34,7 @@ async function main() {
34
34
  logger.info('Workers Ready');
35
35
  // Send tx from client 0
36
36
  const tx = await mockTx(1, {
37
- clientIvcProof: ClientIvcProof.random()
37
+ chonkProof: ChonkProof.random()
38
38
  });
39
39
  workerClientManager.processes[0].send({
40
40
  type: 'SEND_TX',
@@ -42,7 +42,7 @@ async function main() {
42
42
  });
43
43
  logger.info('Transaction sent from client 0');
44
44
  // Give time for message propagation
45
- await sleep(30000);
45
+ await sleep(10000);
46
46
  logger.info('Checking message propagation results');
47
47
  // Check message propagation results
48
48
  const numberOfClientsThatReceivedMessage = workerClientManager.numberOfClientsThatReceivedMessage();
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import type { Logger } from '@aztec/foundation/log';
3
2
  import type { ChainConfig } from '@aztec/stdlib/config';
4
3
  import { type ChildProcess } from 'child_process';
@@ -14,10 +13,6 @@ declare class WorkerClientManager {
14
13
  private messageReceivedByClient;
15
14
  constructor(logger: Logger, p2pConfig: Partial<P2PConfig>);
16
15
  destroy(): void;
17
- /**
18
- * Creates address strings from a port
19
- */
20
- private getAddresses;
21
16
  /**
22
17
  * Creates a client configuration object
23
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAQnE,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;gBAEnC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;IAKzD,OAAO;IAOP;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoD1B;;;;;;OAMG;IACG,iBAAiB,CAAC,eAAe,EAAE,MAAM;IA2C/C,4BAA4B;IAI5B,kCAAkC;IAIlC;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IA4CrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACG,OAAO;CAiCd;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAQnE,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;gBAEnC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;IAKzD,OAAO;IAOP;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoD1B;;;;;;OAMG;IACG,iBAAiB,CAAC,eAAe,EAAE,MAAM;IA2C/C,4BAA4B;IAI5B,kCAAkC;IAIlC;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IA8CrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACG,OAAO;CAiCd;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { SecretValue } from '@aztec/foundation/config';
1
2
  import { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import { sleep } from '@aztec/foundation/sleep';
3
4
  import { fork } from 'child_process';
@@ -11,7 +12,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
11
12
  const workerPath = path.join(__dirname, '../../dest/testbench/p2p_client_testbench_worker.js');
12
13
  const testChainConfig = {
13
14
  l1ChainId: 31337,
14
- version: 1,
15
+ rollupVersion: 1,
15
16
  l1Contracts: {
16
17
  rollupAddress: EthAddress.random()
17
18
  }
@@ -35,25 +36,15 @@ class WorkerClientManager {
35
36
  });
36
37
  }
37
38
  /**
38
- * Creates address strings from a port
39
- */ getAddresses(port) {
40
- return {
41
- addr: `127.0.0.1:${port}`,
42
- listenAddr: `0.0.0.0:${port}`
43
- };
44
- }
45
- /**
46
39
  * Creates a client configuration object
47
40
  */ createClientConfig(clientIndex, port, otherNodes) {
48
- const { addr, listenAddr } = this.getAddresses(port);
49
41
  return {
50
42
  ...getP2PDefaultConfig(),
51
43
  p2pEnabled: true,
52
- peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
53
- tcpListenAddress: listenAddr,
54
- udpListenAddress: listenAddr,
55
- tcpAnnounceAddress: addr,
56
- udpAnnounceAddress: addr,
44
+ peerIdPrivateKey: new SecretValue(this.peerIdPrivateKeys[clientIndex]),
45
+ listenAddress: '127.0.0.1',
46
+ p2pIp: '127.0.0.1',
47
+ p2pPort: port,
57
48
  bootstrapNodes: [
58
49
  ...otherNodes
59
50
  ],
@@ -177,6 +168,7 @@ class WorkerClientManager {
177
168
  this.peerEnrs[clientIndex] = await makeEnr(this.peerIdPrivateKeys[clientIndex], newPort, testChainConfig);
178
169
  // Maximum seed with 10 other peers to allow peer discovery to connect them at a smoother rate
179
170
  const otherNodes = this.peerEnrs.filter((_, ind)=>ind !== clientIndex && ind < Math.min(this.peerEnrs.length, 10));
171
+ this.logger.info(`Changing port for client ${clientIndex} to ${newPort} with other nodes `, otherNodes);
180
172
  const config = this.createClientConfig(clientIndex, newPort, otherNodes);
181
173
  const [childProcess, readySignal] = this.spawnWorkerProcess(config, clientIndex);
182
174
  this.processes[clientIndex] = childProcess;
@@ -207,7 +199,7 @@ class WorkerClientManager {
207
199
  } catch (e) {
208
200
  this.logger.error(`Error force killing process ${index}:`, e);
209
201
  }
210
- }, 10000); // 10 second timeout for graceful exit
202
+ }, 5000); // 5 second timeout for graceful exit
211
203
  // Listen for process exit
212
204
  process1.once('exit', ()=>{
213
205
  clearTimeout(forceKillTimeout);
@@ -218,7 +210,7 @@ class WorkerClientManager {
218
210
  process1.send({
219
211
  type: 'STOP'
220
212
  });
221
- } catch (e) {
213
+ } catch {
222
214
  // If sending the message fails, force kill immediately
223
215
  clearTimeout(forceKillTimeout);
224
216
  try {
@@ -248,12 +240,12 @@ class WorkerClientManager {
248
240
  if (!p.killed) {
249
241
  p.kill('SIGKILL');
250
242
  }
251
- } catch (e) {
243
+ } catch {
252
244
  // Ignore errors when force killing
253
245
  }
254
246
  });
255
247
  resolve();
256
- }, 30000); // 30 second timeout for all processes
248
+ }, 10000); // 10 second timeout for all processes
257
249
  })
258
250
  ]);
259
251
  } catch (error) {
@@ -14,7 +14,8 @@ export declare enum PeerEvent {
14
14
  */
15
15
  export declare enum Discv5Event {
16
16
  DISCOVERED = "discovered",
17
- ENR_ADDED = "enrAdded"
17
+ ENR_ADDED = "enrAdded",
18
+ MULTIADDR_UPDATED = "multiaddrUpdated"
18
19
  }
19
20
  /**
20
21
  * Events emitted from the GossipSub protocol.
@@ -29,4 +30,5 @@ export declare enum GossipSubEvent {
29
30
  * Aztec network specific types
30
31
  */
31
32
  export declare const AZTEC_ENR_KEY = "aztec";
33
+ export declare const AZTEC_ENR_CLIENT_VERSION_KEY = "ver";
32
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;qDAEqD;AAErD;;GAEG;AACH,oBAAY,SAAS;IACnB,UAAU,oBAAoB;IAC9B,SAAS,iBAAiB;IAC1B,YAAY,oBAAoB;CACjC;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,UAAU,eAAe;IACzB,SAAS,aAAa;CACvB;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,OAAO,sBAAsB;CAC9B;AAED;;qDAEqD;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;qDAEqD;AAErD;;GAEG;AACH,oBAAY,SAAS;IACnB,UAAU,oBAAoB;IAC9B,SAAS,iBAAiB;IAC1B,YAAY,oBAAoB;CACjC;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,UAAU,eAAe;IACzB,SAAS,aAAa;IACtB,iBAAiB,qBAAqB;CACvC;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,OAAO,sBAAsB;CAC9B;AAED;;qDAEqD;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,4BAA4B,QAAQ,CAAC"}
@@ -13,6 +13,7 @@
13
13
  */ export var Discv5Event = /*#__PURE__*/ function(Discv5Event) {
14
14
  Discv5Event["DISCOVERED"] = "discovered";
15
15
  Discv5Event["ENR_ADDED"] = "enrAdded";
16
+ Discv5Event["MULTIADDR_UPDATED"] = "multiaddrUpdated";
16
17
  return Discv5Event;
17
18
  }({});
18
19
  /**
@@ -26,3 +27,4 @@
26
27
  ***************************************************/ /**
27
28
  * Aztec network specific types
28
29
  */ export const AZTEC_ENR_KEY = 'aztec';
30
+ export const AZTEC_ENR_CLIENT_VERSION_KEY = 'ver';
package/dest/util.d.ts CHANGED
@@ -1,18 +1,27 @@
1
+ import { SecretValue } from '@aztec/foundation/config';
2
+ import type { Logger } from '@aztec/foundation/log';
1
3
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
2
4
  import type { DataStoreConfig } from '@aztec/kv-store/config';
3
5
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
6
+ import type { Identify } from '@libp2p/identify';
4
7
  import type { PeerId } from '@libp2p/interface';
5
8
  import type { ConnectionManager } from '@libp2p/interface-internal';
6
9
  import type { Libp2p } from 'libp2p';
7
10
  import type { P2PConfig } from './config.js';
8
- export interface PubSubLibp2p extends Libp2p {
11
+ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' | 'peerId'> {
9
12
  services: {
10
- pubsub: GossipSub;
11
- components: {
12
- connectionManager: ConnectionManager;
13
+ pubsub: Pick<GossipSub, 'addEventListener' | 'removeEventListener' | 'publish' | 'subscribe' | 'reportMessageValidationResult' | 'direct'> & {
14
+ score: Pick<GossipSub['score'], 'score'>;
13
15
  };
14
16
  };
15
17
  }
18
+ export type FullLibp2p = Libp2p<{
19
+ identify: Identify;
20
+ pubsub: GossipSub;
21
+ components: {
22
+ connectionManager: ConnectionManager;
23
+ };
24
+ }>;
16
25
  /**
17
26
  * Converts an address string to a multiaddr string.
18
27
  * Example usage:
@@ -21,29 +30,27 @@ export interface PubSubLibp2p extends Libp2p {
21
30
  * @param address - The address string to convert. Has to be in the format <addr>:<port>.
22
31
  * @param protocol - The protocol to use in the multiaddr string.
23
32
  * @returns A multiaddr compliant string. */
24
- export declare function convertToMultiaddr(address: string, protocol: 'tcp' | 'udp'): string;
25
- /**
26
- * Splits an <address>:<port> string into its components.
27
- * @returns The ip6 or ip4 address & port separately
28
- */
29
- export declare function splitAddressPort(address: string, allowEmptyAddress: boolean): [string, string];
33
+ export declare function convertToMultiaddr(address: string, port: number, protocol: 'tcp' | 'udp'): string;
30
34
  /**
31
35
  * Queries the public IP address of the machine.
32
36
  */
33
37
  export declare function getPublicIp(): Promise<string>;
34
- export declare function resolveAddressIfNecessary(address: string): Promise<string>;
38
+ export declare function resolveAddressIfNecessary(address: string, port: string): Promise<string>;
35
39
  export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise<P2PConfig & DataStoreConfig>;
36
40
  /**
37
41
  * Get the peer id private key
38
42
  *
39
43
  * 1. Check if we have a peer id private key in the config
40
- * 2. If not, check we have a peer id private key persisted in the node
41
- * 3. If not, create a new one, then persist it in the node
44
+ * 2. If not, check if we have a peer id private key persisted in a file
45
+ * 3. If no file path or data directory is provided, check if we have a peer id private key in the node's store
46
+ * 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
42
47
  *
43
48
  */
44
49
  export declare function getPeerIdPrivateKey(config: {
45
- peerIdPrivateKey?: string;
46
- }, store: AztecAsyncKVStore): Promise<string>;
50
+ peerIdPrivateKey?: SecretValue<string>;
51
+ peerIdPrivateKeyPath?: string;
52
+ dataDirectory?: string;
53
+ }, store: AztecAsyncKVStore, logger: Logger): Promise<SecretValue<string>>;
47
54
  /**
48
55
  * Create a libp2p peer ID from the private key.
49
56
  * @param privateKey - peer ID private key as hex string