@aztec/p2p 0.0.0-test.0

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 (311) hide show
  1. package/README.md +7 -0
  2. package/dest/bootstrap/bootstrap.d.ts +38 -0
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -0
  4. package/dest/bootstrap/bootstrap.js +123 -0
  5. package/dest/client/factory.d.ts +21 -0
  6. package/dest/client/factory.d.ts.map +1 -0
  7. package/dest/client/factory.js +37 -0
  8. package/dest/client/index.d.ts +3 -0
  9. package/dest/client/index.d.ts.map +1 -0
  10. package/dest/client/index.js +2 -0
  11. package/dest/client/p2p_client.d.ts +314 -0
  12. package/dest/client/p2p_client.d.ts.map +1 -0
  13. package/dest/client/p2p_client.js +505 -0
  14. package/dest/config.d.ts +180 -0
  15. package/dest/config.d.ts.map +1 -0
  16. package/dest/config.js +193 -0
  17. package/dest/enr/generate-enr.d.ts +9 -0
  18. package/dest/enr/generate-enr.d.ts.map +1 -0
  19. package/dest/enr/generate-enr.js +30 -0
  20. package/dest/enr/index.d.ts +2 -0
  21. package/dest/enr/index.d.ts.map +1 -0
  22. package/dest/enr/index.js +1 -0
  23. package/dest/errors/reqresp.error.d.ts +28 -0
  24. package/dest/errors/reqresp.error.d.ts.map +1 -0
  25. package/dest/errors/reqresp.error.js +30 -0
  26. package/dest/index.d.ts +8 -0
  27. package/dest/index.d.ts.map +1 -0
  28. package/dest/index.js +7 -0
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +57 -0
  30. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
  31. package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -0
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
  34. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +195 -0
  35. package/dest/mem_pools/attestation_pool/index.d.ts +3 -0
  36. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
  37. package/dest/mem_pools/attestation_pool/index.js +2 -0
  38. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +22 -0
  39. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -0
  40. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +112 -0
  41. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -0
  42. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -0
  43. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +129 -0
  44. package/dest/mem_pools/attestation_pool/mocks.d.ts +19 -0
  45. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
  46. package/dest/mem_pools/attestation_pool/mocks.js +33 -0
  47. package/dest/mem_pools/index.d.ts +4 -0
  48. package/dest/mem_pools/index.d.ts.map +1 -0
  49. package/dest/mem_pools/index.js +1 -0
  50. package/dest/mem_pools/instrumentation.d.ts +30 -0
  51. package/dest/mem_pools/instrumentation.d.ts.map +1 -0
  52. package/dest/mem_pools/instrumentation.js +84 -0
  53. package/dest/mem_pools/interface.d.ts +11 -0
  54. package/dest/mem_pools/interface.d.ts.map +1 -0
  55. package/dest/mem_pools/interface.js +3 -0
  56. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +66 -0
  57. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +245 -0
  59. package/dest/mem_pools/tx_pool/index.d.ts +4 -0
  60. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/index.js +3 -0
  62. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +56 -0
  63. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/memory_tx_pool.js +141 -0
  65. package/dest/mem_pools/tx_pool/priority.d.ts +8 -0
  66. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool/priority.js +10 -0
  68. package/dest/mem_pools/tx_pool/tx_pool.d.ts +66 -0
  69. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool/tx_pool.js +3 -0
  71. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +7 -0
  72. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -0
  73. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +169 -0
  74. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +8 -0
  75. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
  76. package/dest/msg_validators/attestation_validator/attestation_validator.js +19 -0
  77. package/dest/msg_validators/attestation_validator/index.d.ts +2 -0
  78. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
  79. package/dest/msg_validators/attestation_validator/index.js +1 -0
  80. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +8 -0
  81. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -0
  82. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +21 -0
  83. package/dest/msg_validators/block_proposal_validator/index.d.ts +2 -0
  84. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +1 -0
  85. package/dest/msg_validators/block_proposal_validator/index.js +1 -0
  86. package/dest/msg_validators/index.d.ts +4 -0
  87. package/dest/msg_validators/index.d.ts.map +1 -0
  88. package/dest/msg_validators/index.js +3 -0
  89. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
  90. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  91. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +31 -0
  92. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +11 -0
  93. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
  94. package/dest/msg_validators/tx_validator/block_header_validator.js +26 -0
  95. package/dest/msg_validators/tx_validator/data_validator.d.ts +6 -0
  96. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
  97. package/dest/msg_validators/tx_validator/data_validator.js +107 -0
  98. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +12 -0
  99. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
  100. package/dest/msg_validators/tx_validator/double_spend_validator.js +41 -0
  101. package/dest/msg_validators/tx_validator/index.d.ts +7 -0
  102. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
  103. package/dest/msg_validators/tx_validator/index.js +6 -0
  104. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -0
  105. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
  106. package/dest/msg_validators/tx_validator/metadata_validator.js +44 -0
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +9 -0
  108. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
  109. package/dest/msg_validators/tx_validator/tx_proof_validator.js +25 -0
  110. package/dest/services/data_store.d.ts +27 -0
  111. package/dest/services/data_store.d.ts.map +1 -0
  112. package/dest/services/data_store.js +188 -0
  113. package/dest/services/discv5/discV5_service.d.ts +42 -0
  114. package/dest/services/discv5/discV5_service.d.ts.map +1 -0
  115. package/dest/services/discv5/discV5_service.js +214 -0
  116. package/dest/services/dummy_service.d.ts +85 -0
  117. package/dest/services/dummy_service.d.ts.map +1 -0
  118. package/dest/services/dummy_service.js +92 -0
  119. package/dest/services/encoding.d.ts +31 -0
  120. package/dest/services/encoding.d.ts.map +1 -0
  121. package/dest/services/encoding.js +66 -0
  122. package/dest/services/gossipsub/scoring.d.ts +7 -0
  123. package/dest/services/gossipsub/scoring.d.ts.map +1 -0
  124. package/dest/services/gossipsub/scoring.js +10 -0
  125. package/dest/services/index.d.ts +3 -0
  126. package/dest/services/index.d.ts.map +1 -0
  127. package/dest/services/index.js +2 -0
  128. package/dest/services/libp2p/libp2p_service.d.ts +186 -0
  129. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
  130. package/dest/services/libp2p/libp2p_service.js +712 -0
  131. package/dest/services/peer-manager/metrics.d.ts +12 -0
  132. package/dest/services/peer-manager/metrics.d.ts.map +1 -0
  133. package/dest/services/peer-manager/metrics.js +33 -0
  134. package/dest/services/peer-manager/peer_manager.d.ts +94 -0
  135. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
  136. package/dest/services/peer-manager/peer_manager.js +445 -0
  137. package/dest/services/peer-manager/peer_scoring.d.ts +28 -0
  138. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
  139. package/dest/services/peer-manager/peer_scoring.js +86 -0
  140. package/dest/services/reqresp/config.d.ts +16 -0
  141. package/dest/services/reqresp/config.d.ts.map +1 -0
  142. package/dest/services/reqresp/config.js +20 -0
  143. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +45 -0
  144. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -0
  145. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +88 -0
  146. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +61 -0
  147. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
  148. package/dest/services/reqresp/connection-sampler/connection_sampler.js +181 -0
  149. package/dest/services/reqresp/index.d.ts +6 -0
  150. package/dest/services/reqresp/index.d.ts.map +1 -0
  151. package/dest/services/reqresp/index.js +4 -0
  152. package/dest/services/reqresp/interface.d.ts +116 -0
  153. package/dest/services/reqresp/interface.d.ts.map +1 -0
  154. package/dest/services/reqresp/interface.js +84 -0
  155. package/dest/services/reqresp/metrics.d.ts +15 -0
  156. package/dest/services/reqresp/metrics.d.ts.map +1 -0
  157. package/dest/services/reqresp/metrics.js +55 -0
  158. package/dest/services/reqresp/protocols/block.d.ts +4 -0
  159. package/dest/services/reqresp/protocols/block.d.ts.map +1 -0
  160. package/dest/services/reqresp/protocols/block.js +8 -0
  161. package/dest/services/reqresp/protocols/goodbye.d.ts +51 -0
  162. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
  163. package/dest/services/reqresp/protocols/goodbye.js +87 -0
  164. package/dest/services/reqresp/protocols/index.d.ts +9 -0
  165. package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
  166. package/dest/services/reqresp/protocols/index.js +7 -0
  167. package/dest/services/reqresp/protocols/ping.d.ts +9 -0
  168. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
  169. package/dest/services/reqresp/protocols/ping.js +7 -0
  170. package/dest/services/reqresp/protocols/status.d.ts +9 -0
  171. package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
  172. package/dest/services/reqresp/protocols/status.js +7 -0
  173. package/dest/services/reqresp/protocols/tx.d.ts +13 -0
  174. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
  175. package/dest/services/reqresp/protocols/tx.js +20 -0
  176. package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
  177. package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
  178. package/dest/services/reqresp/rate-limiter/index.js +1 -0
  179. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +102 -0
  180. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
  181. package/dest/services/reqresp/rate-limiter/rate_limiter.js +184 -0
  182. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
  183. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
  184. package/dest/services/reqresp/rate-limiter/rate_limits.js +54 -0
  185. package/dest/services/reqresp/reqresp.d.ts +166 -0
  186. package/dest/services/reqresp/reqresp.d.ts.map +1 -0
  187. package/dest/services/reqresp/reqresp.js +516 -0
  188. package/dest/services/reqresp/status.d.ts +31 -0
  189. package/dest/services/reqresp/status.d.ts.map +1 -0
  190. package/dest/services/reqresp/status.js +51 -0
  191. package/dest/services/service.d.ts +87 -0
  192. package/dest/services/service.d.ts.map +1 -0
  193. package/dest/services/service.js +5 -0
  194. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
  195. package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
  196. package/dest/test-helpers/generate-peer-id-private-keys.js +13 -0
  197. package/dest/test-helpers/get-ports.d.ts +7 -0
  198. package/dest/test-helpers/get-ports.d.ts.map +1 -0
  199. package/dest/test-helpers/get-ports.js +8 -0
  200. package/dest/test-helpers/index.d.ts +6 -0
  201. package/dest/test-helpers/index.d.ts.map +1 -0
  202. package/dest/test-helpers/index.js +5 -0
  203. package/dest/test-helpers/make-enrs.d.ts +16 -0
  204. package/dest/test-helpers/make-enrs.d.ts.map +1 -0
  205. package/dest/test-helpers/make-enrs.js +32 -0
  206. package/dest/test-helpers/make-test-p2p-clients.d.ts +36 -0
  207. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
  208. package/dest/test-helpers/make-test-p2p-clients.js +68 -0
  209. package/dest/test-helpers/reqresp-nodes.d.ts +66 -0
  210. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
  211. package/dest/test-helpers/reqresp-nodes.js +207 -0
  212. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -0
  213. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
  214. package/dest/testbench/p2p_client_testbench_worker.js +132 -0
  215. package/dest/testbench/parse_log_file.d.ts +2 -0
  216. package/dest/testbench/parse_log_file.d.ts.map +1 -0
  217. package/dest/testbench/parse_log_file.js +131 -0
  218. package/dest/testbench/testbench.d.ts +2 -0
  219. package/dest/testbench/testbench.d.ts.map +1 -0
  220. package/dest/testbench/testbench.js +61 -0
  221. package/dest/testbench/worker_client_manager.d.ts +56 -0
  222. package/dest/testbench/worker_client_manager.d.ts.map +1 -0
  223. package/dest/testbench/worker_client_manager.js +266 -0
  224. package/dest/types/index.d.ts +32 -0
  225. package/dest/types/index.d.ts.map +1 -0
  226. package/dest/types/index.js +28 -0
  227. package/dest/util.d.ts +53 -0
  228. package/dest/util.d.ts.map +1 -0
  229. package/dest/util.js +140 -0
  230. package/dest/versioning.d.ts +12 -0
  231. package/dest/versioning.d.ts.map +1 -0
  232. package/dest/versioning.js +33 -0
  233. package/package.json +127 -0
  234. package/src/bootstrap/bootstrap.ts +146 -0
  235. package/src/client/factory.ts +89 -0
  236. package/src/client/index.ts +2 -0
  237. package/src/client/p2p_client.ts +754 -0
  238. package/src/config.ts +371 -0
  239. package/src/enr/generate-enr.ts +39 -0
  240. package/src/enr/index.ts +1 -0
  241. package/src/errors/reqresp.error.ts +35 -0
  242. package/src/index.ts +7 -0
  243. package/src/mem_pools/attestation_pool/attestation_pool.ts +62 -0
  244. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +230 -0
  245. package/src/mem_pools/attestation_pool/index.ts +2 -0
  246. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +159 -0
  247. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +161 -0
  248. package/src/mem_pools/attestation_pool/mocks.ts +44 -0
  249. package/src/mem_pools/index.ts +3 -0
  250. package/src/mem_pools/instrumentation.ts +126 -0
  251. package/src/mem_pools/interface.ts +12 -0
  252. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +309 -0
  253. package/src/mem_pools/tx_pool/index.ts +3 -0
  254. package/src/mem_pools/tx_pool/memory_tx_pool.ts +174 -0
  255. package/src/mem_pools/tx_pool/priority.ts +13 -0
  256. package/src/mem_pools/tx_pool/tx_pool.ts +76 -0
  257. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +130 -0
  258. package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -0
  259. package/src/msg_validators/attestation_validator/index.ts +1 -0
  260. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +29 -0
  261. package/src/msg_validators/block_proposal_validator/index.ts +1 -0
  262. package/src/msg_validators/index.ts +3 -0
  263. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +32 -0
  264. package/src/msg_validators/tx_validator/block_header_validator.ts +25 -0
  265. package/src/msg_validators/tx_validator/data_validator.ts +106 -0
  266. package/src/msg_validators/tx_validator/double_spend_validator.ts +38 -0
  267. package/src/msg_validators/tx_validator/index.ts +6 -0
  268. package/src/msg_validators/tx_validator/metadata_validator.ts +48 -0
  269. package/src/msg_validators/tx_validator/tx_proof_validator.ts +18 -0
  270. package/src/services/data_store.ts +235 -0
  271. package/src/services/discv5/discV5_service.ts +256 -0
  272. package/src/services/dummy_service.ts +134 -0
  273. package/src/services/encoding.ts +79 -0
  274. package/src/services/gossipsub/scoring.ts +13 -0
  275. package/src/services/index.ts +2 -0
  276. package/src/services/libp2p/libp2p_service.ts +871 -0
  277. package/src/services/peer-manager/metrics.ts +41 -0
  278. package/src/services/peer-manager/peer_manager.ts +530 -0
  279. package/src/services/peer-manager/peer_scoring.ts +105 -0
  280. package/src/services/reqresp/config.ts +35 -0
  281. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +94 -0
  282. package/src/services/reqresp/connection-sampler/connection_sampler.ts +217 -0
  283. package/src/services/reqresp/index.ts +4 -0
  284. package/src/services/reqresp/interface.ts +185 -0
  285. package/src/services/reqresp/metrics.ts +57 -0
  286. package/src/services/reqresp/protocols/block.ts +15 -0
  287. package/src/services/reqresp/protocols/goodbye.ts +101 -0
  288. package/src/services/reqresp/protocols/index.ts +8 -0
  289. package/src/services/reqresp/protocols/ping.ts +8 -0
  290. package/src/services/reqresp/protocols/status.ts +8 -0
  291. package/src/services/reqresp/protocols/tx.ts +29 -0
  292. package/src/services/reqresp/rate-limiter/index.ts +1 -0
  293. package/src/services/reqresp/rate-limiter/rate_limiter.ts +228 -0
  294. package/src/services/reqresp/rate-limiter/rate_limits.ts +55 -0
  295. package/src/services/reqresp/reqresp.ts +661 -0
  296. package/src/services/reqresp/status.ts +59 -0
  297. package/src/services/service.ts +112 -0
  298. package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
  299. package/src/test-helpers/get-ports.ts +8 -0
  300. package/src/test-helpers/index.ts +5 -0
  301. package/src/test-helpers/make-enrs.ts +44 -0
  302. package/src/test-helpers/make-test-p2p-clients.ts +122 -0
  303. package/src/test-helpers/reqresp-nodes.ts +289 -0
  304. package/src/testbench/README.md +20 -0
  305. package/src/testbench/p2p_client_testbench_worker.ts +152 -0
  306. package/src/testbench/parse_log_file.ts +175 -0
  307. package/src/testbench/testbench.ts +66 -0
  308. package/src/testbench/worker_client_manager.ts +318 -0
  309. package/src/types/index.ts +36 -0
  310. package/src/util.ts +196 -0
  311. package/src/versioning.ts +50 -0
@@ -0,0 +1,87 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
+ import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
4
+ import type { ENR } from '@chainsafe/enr';
5
+ import type { PeerId } from '@libp2p/interface';
6
+ import type EventEmitter from 'events';
7
+ import type { ReqRespSubProtocol, SubProtocolMap } from './reqresp/interface.js';
8
+ export declare enum PeerDiscoveryState {
9
+ RUNNING = "running",
10
+ STOPPED = "stopped"
11
+ }
12
+ /**
13
+ * The interface for a P2P service implementation.
14
+ */
15
+ export interface P2PService {
16
+ /**
17
+ * Starts the service.
18
+ * @returns An empty promise.
19
+ */
20
+ start(): Promise<void>;
21
+ /**
22
+ * Stops the service.
23
+ * @returns An empty promise.
24
+ */
25
+ stop(): Promise<void>;
26
+ /**
27
+ * Called to have the given transaction propagated through the P2P network.
28
+ * @param message - The message to be propagated.
29
+ */
30
+ propagate<T extends Gossipable>(message: T): void;
31
+ /**
32
+ * Request information from peers via the request response protocol.
33
+ *
34
+ * @param protocol - The request response protocol to use
35
+ * @param request - The request type, corresponding to the protocol
36
+ * @returns The response type, corresponding to the protocol
37
+ */
38
+ sendRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, request: InstanceType<SubProtocolMap[Protocol]['request']>): Promise<InstanceType<SubProtocolMap[Protocol]['response']> | undefined>;
39
+ /**
40
+ * Send a batch of requests to peers, and return the responses
41
+ *
42
+ * @param protocol - The request response protocol to use
43
+ * @param requests - The requests to send to the peers
44
+ * @returns The responses to the requests
45
+ */
46
+ sendBatchRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, requests: InstanceType<SubProtocolMap[Protocol]['request']>[]): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[] | undefined>;
47
+ registerBlockReceivedCallback(callback: (block: BlockProposal) => Promise<BlockAttestation | undefined>): void;
48
+ getEnr(): ENR | undefined;
49
+ getPeers(includePending?: boolean): PeerInfo[];
50
+ }
51
+ /**
52
+ * The interface for a peer discovery service implementation.
53
+ */
54
+ export interface PeerDiscoveryService extends EventEmitter {
55
+ /**
56
+ * Starts the service.
57
+ * */
58
+ start(): Promise<void>;
59
+ /**
60
+ * Stops the service.
61
+ * */
62
+ stop(): Promise<void>;
63
+ /**
64
+ * Gets all peers.
65
+ * @returns An array of peer ENRs.
66
+ */
67
+ getAllPeers(): ENR[];
68
+ /**
69
+ * Runs findRandomNode query.
70
+ */
71
+ runRandomNodesQuery(): Promise<void>;
72
+ /**
73
+ * Checks if the given peer is a bootstrap peer.
74
+ * @param peerId - The peer ID to check.
75
+ * @returns True if the peer is a bootstrap peer.
76
+ */
77
+ isBootstrapPeer(peerId: PeerId): boolean;
78
+ /**
79
+ * Event emitted when a new peer is discovered.
80
+ */
81
+ on(event: 'peer:discovered', listener: (enr: ENR) => void): this;
82
+ emit(event: 'peer:discovered', enr: ENR): boolean;
83
+ getStatus(): PeerDiscoveryState;
84
+ getEnr(): ENR | undefined;
85
+ bootstrapNodes: string[];
86
+ }
87
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/services/service.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEjF,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAElD;;;;;;OAMG;IACH,WAAW,CAAC,QAAQ,SAAS,kBAAkB,EAC7C,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAE3E;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,SAAS,kBAAkB,EAClD,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAC5D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAG7E,6BAA6B,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IAE/G,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD;;SAEK;IACL,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;SAEK;IACL,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,WAAW,IAAI,GAAG,EAAE,CAAC;IAErB;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAElD,SAAS,IAAI,kBAAkB,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B"}
@@ -0,0 +1,5 @@
1
+ export var PeerDiscoveryState = /*#__PURE__*/ function(PeerDiscoveryState) {
2
+ PeerDiscoveryState["RUNNING"] = "running";
3
+ PeerDiscoveryState["STOPPED"] = "stopped";
4
+ return PeerDiscoveryState;
5
+ }({});
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Generate a list of peer id private keys
3
+ * @param numberOfPeers - The number of peer id private keys to generate
4
+ * @returns A list of peer id private keys
5
+ */
6
+ export declare function generatePeerIdPrivateKeys(numberOfPeers: number): string[];
7
+ //# sourceMappingURL=generate-peer-id-private-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-peer-id-private-keys.d.ts","sourceRoot":"","sources":["../../src/test-helpers/generate-peer-id-private-keys.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAOzE"}
@@ -0,0 +1,13 @@
1
+ import { generatePrivateKey } from 'viem/accounts';
2
+ /**
3
+ * Generate a list of peer id private keys
4
+ * @param numberOfPeers - The number of peer id private keys to generate
5
+ * @returns A list of peer id private keys
6
+ */ export function generatePeerIdPrivateKeys(numberOfPeers) {
7
+ const peerIdPrivateKeys = [];
8
+ for(let i = 0; i < numberOfPeers; i++){
9
+ // magic number is multiaddr prefix: https://multiformats.io/multiaddr/
10
+ peerIdPrivateKeys.push('08021220' + generatePrivateKey().slice(2, 68));
11
+ }
12
+ return peerIdPrivateKeys;
13
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Get a list of ports for a given number of peers
3
+ * @param numberOfPeers - The number of peers to get ports for
4
+ * @returns A list of ports
5
+ */
6
+ export declare const getPorts: (numberOfPeers: number) => Promise<number[]>;
7
+ //# sourceMappingURL=get-ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-ports.d.ts","sourceRoot":"","sources":["../../src/test-helpers/get-ports.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,kBAAmB,MAAM,sBAAwE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import getPort from 'get-port';
2
+ /**
3
+ * Get a list of ports for a given number of peers
4
+ * @param numberOfPeers - The number of peers to get ports for
5
+ * @returns A list of ports
6
+ */ export const getPorts = (numberOfPeers)=>Promise.all(Array.from({
7
+ length: numberOfPeers
8
+ }, ()=>getPort()));
@@ -0,0 +1,6 @@
1
+ export * from './generate-peer-id-private-keys.js';
2
+ export * from './get-ports.js';
3
+ export * from './make-enrs.js';
4
+ export * from './make-test-p2p-clients.js';
5
+ export * from './reqresp-nodes.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './generate-peer-id-private-keys.js';
2
+ export * from './get-ports.js';
3
+ export * from './make-enrs.js';
4
+ export * from './make-test-p2p-clients.js';
5
+ export * from './reqresp-nodes.js';
@@ -0,0 +1,16 @@
1
+ import type { ChainConfig } from '@aztec/stdlib/config';
2
+ /**
3
+ * Make a list of ENRs for a given list of p2p private keys and ports
4
+ * @param p2pPrivateKeys - The private keys of the p2p nodes
5
+ * @param ports - The ports of the p2p nodes
6
+ * @returns A list of ENRs
7
+ */
8
+ export declare function makeEnrs(p2pPrivateKeys: string[], ports: number[], config: ChainConfig): Promise<string[]>;
9
+ /**
10
+ * Make an ENR for a given p2p private key and port
11
+ * @param p2pPrivateKey - The private key of the p2p node
12
+ * @param port - The port of the p2p node
13
+ * @returns The ENR of the p2p node
14
+ */
15
+ export declare function makeEnr(p2pPrivateKey: string, port: number, config: ChainConfig): Promise<string>;
16
+ //# sourceMappingURL=make-enrs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-enrs.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-enrs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,qBAM5F;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,mBAerF"}
@@ -0,0 +1,32 @@
1
+ import { SignableENR } from '@chainsafe/enr';
2
+ import { multiaddr } from '@multiformats/multiaddr';
3
+ import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
4
+ import { setAztecEnrKey } from '../versioning.js';
5
+ /**
6
+ * Make a list of ENRs for a given list of p2p private keys and ports
7
+ * @param p2pPrivateKeys - The private keys of the p2p nodes
8
+ * @param ports - The ports of the p2p nodes
9
+ * @returns A list of ENRs
10
+ */ export async function makeEnrs(p2pPrivateKeys, ports, config) {
11
+ return await Promise.all(p2pPrivateKeys.map((pk, i)=>{
12
+ return makeEnr(pk, ports[i], config);
13
+ }));
14
+ }
15
+ /**
16
+ * Make an ENR for a given p2p private key and port
17
+ * @param p2pPrivateKey - The private key of the p2p node
18
+ * @param port - The port of the p2p node
19
+ * @returns The ENR of the p2p node
20
+ */ export async function makeEnr(p2pPrivateKey, port, config) {
21
+ const peerId = await createLibP2PPeerIdFromPrivateKey(p2pPrivateKey);
22
+ const enr = SignableENR.createFromPeerId(peerId);
23
+ const udpAnnounceAddress = `127.0.0.1:${port}`;
24
+ const tcpAnnounceAddress = `127.0.0.1:${port}`;
25
+ const udpPublicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
26
+ const tcpPublicAddr = multiaddr(convertToMultiaddr(tcpAnnounceAddress, 'tcp'));
27
+ // ENRS must include the network and a discoverable address (udp for discv5)
28
+ setAztecEnrKey(enr, config);
29
+ enr.setLocationMultiaddr(udpPublicAddr);
30
+ enr.setLocationMultiaddr(tcpPublicAddr);
31
+ return enr.encodeTxt();
32
+ }
@@ -0,0 +1,36 @@
1
+ import type { EpochCache } from '@aztec/epoch-cache';
2
+ import { type Logger } from '@aztec/foundation/log';
3
+ import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
4
+ import { P2PClientType } from '@aztec/stdlib/p2p';
5
+ import type { P2PClient } from '../client/p2p_client.js';
6
+ import type { P2PConfig } from '../config.js';
7
+ import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
8
+ import type { TxPool } from '../mem_pools/tx_pool/index.js';
9
+ interface MakeTestP2PClientOptions {
10
+ mockAttestationPool: AttestationPool;
11
+ mockTxPool: TxPool;
12
+ mockEpochCache: EpochCache;
13
+ mockWorldState: WorldStateSynchronizer;
14
+ alwaysTrueVerifier?: boolean;
15
+ p2pBaseConfig: P2PConfig;
16
+ p2pConfigOverrides?: Partial<P2PConfig>;
17
+ logger?: Logger;
18
+ }
19
+ /**
20
+ * Creates a single P2P client for testing purposes.
21
+ * @param peerIdPrivateKey - The private key of the peer.
22
+ * @param port - The port to run the client on.
23
+ * @param peers - The peers to connect to.
24
+ * @param options - The options for the client.
25
+ * @returns The created client.
26
+ */
27
+ export declare function makeTestP2PClient(peerIdPrivateKey: string, port: number, peers: string[], { alwaysTrueVerifier, p2pBaseConfig, p2pConfigOverrides, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, logger, }: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>>;
28
+ /**
29
+ * Creates a number of P2P clients for testing purposes.
30
+ * @param numberOfPeers - The number of clients to create.
31
+ * @param options - The options for the clients.
32
+ * @returns The created clients.
33
+ */
34
+ export declare function makeTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>[]>;
35
+ export {};
36
+ //# sourceMappingURL=make-test-p2p-clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAM5D,UAAU,wBAAwB;IAChC,mBAAmB,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,EACE,kBAAyB,EACzB,aAAa,EACb,kBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,MAAwC,GACzC,EAAE,wBAAwB,0CA8C5B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB,4CAiBnG"}
@@ -0,0 +1,68 @@
1
+ import { MockL2BlockSource } from '@aztec/archiver/test';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
4
+ import { P2PClientType } from '@aztec/stdlib/p2p';
5
+ import { createP2PClient } from '../client/index.js';
6
+ import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
7
+ import { getPorts } from './get-ports.js';
8
+ import { makeEnrs } from './make-enrs.js';
9
+ import { AlwaysFalseCircuitVerifier, AlwaysTrueCircuitVerifier } from './reqresp-nodes.js';
10
+ /**
11
+ * Creates a single P2P client for testing purposes.
12
+ * @param peerIdPrivateKey - The private key of the peer.
13
+ * @param port - The port to run the client on.
14
+ * @param peers - The peers to connect to.
15
+ * @param options - The options for the client.
16
+ * @returns The created client.
17
+ */ export async function makeTestP2PClient(peerIdPrivateKey, port, peers, { alwaysTrueVerifier = true, p2pBaseConfig, p2pConfigOverrides = {}, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, logger = createLogger('p2p-test-client') }) {
18
+ const addr = `127.0.0.1:${port}`;
19
+ const listenAddr = `0.0.0.0:${port}`;
20
+ // Filter nodes so that we only dial active peers
21
+ const config = {
22
+ ...p2pBaseConfig,
23
+ p2pEnabled: true,
24
+ peerIdPrivateKey,
25
+ tcpListenAddress: listenAddr,
26
+ udpListenAddress: listenAddr,
27
+ tcpAnnounceAddress: addr,
28
+ udpAnnounceAddress: addr,
29
+ bootstrapNodes: peers,
30
+ peerCheckIntervalMS: 1000,
31
+ maxPeerCount: 10,
32
+ bootstrapNodesAsFullPeers: true,
33
+ ...p2pConfigOverrides
34
+ };
35
+ const l2BlockSource = new MockL2BlockSource();
36
+ await l2BlockSource.createBlocks(100);
37
+ const proofVerifier = alwaysTrueVerifier ? new AlwaysTrueCircuitVerifier() : new AlwaysFalseCircuitVerifier();
38
+ const kvStore = await openTmpStore('test');
39
+ const deps = {
40
+ txPool: mockTxPool,
41
+ attestationPool: mockAttestationPool,
42
+ store: kvStore,
43
+ logger
44
+ };
45
+ const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, mockWorldState, mockEpochCache, undefined, deps);
46
+ await client.start();
47
+ return client;
48
+ }
49
+ /**
50
+ * Creates a number of P2P clients for testing purposes.
51
+ * @param numberOfPeers - The number of clients to create.
52
+ * @param options - The options for the clients.
53
+ * @returns The created clients.
54
+ */ export async function makeTestP2PClients(numberOfPeers, testConfig) {
55
+ const clients = [];
56
+ const peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfPeers);
57
+ const ports = await getPorts(numberOfPeers);
58
+ const peerEnrs = await makeEnrs(peerIdPrivateKeys, ports, testConfig.p2pBaseConfig);
59
+ for(let i = 0; i < numberOfPeers; i++){
60
+ const client = await makeTestP2PClient(peerIdPrivateKeys[i], ports[i], peerEnrs, {
61
+ ...testConfig,
62
+ logger: createLogger(`p2p:${i}`)
63
+ });
64
+ clients.push(client);
65
+ }
66
+ await Promise.all(clients.map((client)=>client.isReady()));
67
+ return clients;
68
+ }
@@ -0,0 +1,66 @@
1
+ import type { EpochCache } from '@aztec/epoch-cache';
2
+ import type { L2BlockSource } from '@aztec/stdlib/block';
3
+ import { type ChainConfig } from '@aztec/stdlib/config';
4
+ import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
5
+ import type { P2PClientType } from '@aztec/stdlib/p2p';
6
+ import type { Tx } from '@aztec/stdlib/tx';
7
+ import { type TelemetryClient } from '@aztec/telemetry-client';
8
+ import { SignableENR } from '@chainsafe/enr';
9
+ import type { PeerId } from '@libp2p/interface';
10
+ import { type Libp2p } from 'libp2p';
11
+ import { BootstrapNode } from '../bootstrap/bootstrap.js';
12
+ import type { BootnodeConfig } from '../config.js';
13
+ import type { MemPools } from '../mem_pools/interface.js';
14
+ import { LibP2PService } from '../services/libp2p/libp2p_service.js';
15
+ import type { PeerScoring } from '../services/peer-manager/peer_scoring.js';
16
+ import { type ReqRespSubProtocolHandlers, type ReqRespSubProtocolValidators } from '../services/reqresp/interface.js';
17
+ import { ReqResp } from '../services/reqresp/reqresp.js';
18
+ /**
19
+ * Creates a libp2p node, pre configured.
20
+ * @param boostrapAddrs - an optional list of bootstrap addresses
21
+ * @returns Lip2p node
22
+ */
23
+ export declare function createLibp2pNode(boostrapAddrs?: string[], peerId?: PeerId, port?: number, enableGossipSub?: boolean, start?: boolean): Promise<Libp2p>;
24
+ /**
25
+ * Test Libp2p service
26
+ * P2P functionality is operational, however everything else is default
27
+ *
28
+ *
29
+ */
30
+ export declare function createTestLibP2PService<T extends P2PClientType>(clientType: T, boostrapAddrs: string[] | undefined, l2BlockSource: L2BlockSource, worldStateSynchronizer: WorldStateSynchronizer, epochCache: EpochCache, mempools: MemPools<T>, telemetry: TelemetryClient, port?: number, peerId?: PeerId, chainConfig?: ChainConfig): Promise<LibP2PService<T>>;
31
+ /**
32
+ * A p2p / req resp node pairing the req node will always contain the p2p node.
33
+ * they are provided as a pair to allow access the p2p node directly
34
+ */
35
+ export type ReqRespNode = {
36
+ p2p: Libp2p;
37
+ req: ReqResp;
38
+ };
39
+ export declare const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers;
40
+ export declare const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators;
41
+ /**
42
+ * @param numberOfNodes - the number of nodes to create
43
+ * @returns An array of the created nodes
44
+ */
45
+ export declare const createNodes: (peerScoring: PeerScoring, numberOfNodes: number) => Promise<ReqRespNode[]>;
46
+ export declare const startNodes: (nodes: ReqRespNode[], subProtocolHandlers?: ReqRespSubProtocolHandlers, subProtocolValidators?: ReqRespSubProtocolValidators) => Promise<void>;
47
+ export declare const stopNodes: (nodes: ReqRespNode[]) => Promise<void>;
48
+ export declare const createReqResp: (peerScoring: PeerScoring) => Promise<ReqRespNode>;
49
+ export declare const connectToPeers: (nodes: ReqRespNode[]) => Promise<void>;
50
+ export declare class AlwaysTrueCircuitVerifier implements ClientProtocolCircuitVerifier {
51
+ verifyProof(_tx: Tx): Promise<boolean>;
52
+ }
53
+ export declare class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier {
54
+ verifyProof(_tx: Tx): Promise<boolean>;
55
+ }
56
+ export declare function createBootstrapNodeConfig(privateKey: string, port: number, chainConfig: ChainConfig): BootnodeConfig;
57
+ export declare function createBootstrapNodeFromPrivateKey(privateKey: string, port: number, telemetry?: TelemetryClient, chainConfig?: ChainConfig): Promise<BootstrapNode>;
58
+ /**
59
+ * Create a bootstrap node ENR
60
+ * @param privateKey - the private key of the bootstrap node
61
+ * @param port - the port of the bootstrap node
62
+ * @returns the bootstrap node ENR
63
+ */
64
+ export declare function getBootstrapNodeEnr(privateKey: string, port: number): Promise<SignableENR>;
65
+ export declare function createBootstrapNode(port: number, telemetry?: TelemetryClient, chainConfig?: ChainConfig): Promise<BootstrapNode>;
66
+ //# sourceMappingURL=reqresp-nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reqresp-nodes.d.ts","sourceRoot":"","sources":["../../src/test-helpers/reqresp-nodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+ import { timesParallel } from '@aztec/foundation/collection';
2
+ import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
3
+ import { emptyChainConfig } from '@aztec/stdlib/config';
4
+ import { getTelemetryClient } from '@aztec/telemetry-client';
5
+ import { SignableENR } from '@chainsafe/enr';
6
+ import { gossipsub } from '@chainsafe/libp2p-gossipsub';
7
+ import { noise } from '@chainsafe/libp2p-noise';
8
+ import { yamux } from '@chainsafe/libp2p-yamux';
9
+ import { bootstrap } from '@libp2p/bootstrap';
10
+ import { identify } from '@libp2p/identify';
11
+ import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
12
+ import { tcp } from '@libp2p/tcp';
13
+ import { multiaddr } from '@multiformats/multiaddr';
14
+ import getPort from 'get-port';
15
+ import { createLibp2p } from 'libp2p';
16
+ import { BootstrapNode } from '../bootstrap/bootstrap.js';
17
+ import { DiscV5Service } from '../services/discv5/discV5_service.js';
18
+ import { LibP2PService } from '../services/libp2p/libp2p_service.js';
19
+ import { ReqRespSubProtocol, noopValidator } from '../services/reqresp/interface.js';
20
+ import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
21
+ import { ReqResp } from '../services/reqresp/reqresp.js';
22
+ import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
23
+ /**
24
+ * Creates a libp2p node, pre configured.
25
+ * @param boostrapAddrs - an optional list of bootstrap addresses
26
+ * @returns Lip2p node
27
+ */ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableGossipSub = false, start = true) {
28
+ port = port ?? await getPort();
29
+ const options = {
30
+ start,
31
+ addresses: {
32
+ listen: [
33
+ `/ip4/0.0.0.0/tcp/${port}`
34
+ ],
35
+ announce: [
36
+ `/ip4/0.0.0.0/tcp/${port}`
37
+ ]
38
+ },
39
+ connectionEncryption: [
40
+ noise()
41
+ ],
42
+ streamMuxers: [
43
+ yamux()
44
+ ],
45
+ transports: [
46
+ tcp()
47
+ ],
48
+ services: {
49
+ identify: identify({
50
+ protocolPrefix: 'aztec'
51
+ })
52
+ }
53
+ };
54
+ if (boostrapAddrs.length > 0) {
55
+ options.peerDiscovery = [
56
+ bootstrap({
57
+ list: boostrapAddrs
58
+ })
59
+ ];
60
+ }
61
+ if (peerId) {
62
+ options.peerId = peerId;
63
+ }
64
+ if (enableGossipSub) {
65
+ options.services.pubsub = gossipsub({
66
+ allowPublishToZeroTopicPeers: true
67
+ });
68
+ }
69
+ return await createLibp2p(options);
70
+ }
71
+ /**
72
+ * Test Libp2p service
73
+ * P2P functionality is operational, however everything else is default
74
+ *
75
+ *
76
+ */ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2BlockSource, worldStateSynchronizer, epochCache, mempools, telemetry, port = 0, peerId, chainConfig = emptyChainConfig) {
77
+ peerId = peerId ?? await createSecp256k1PeerId();
78
+ 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}`,
83
+ bootstrapNodes: boostrapAddrs,
84
+ peerCheckIntervalMS: 1000,
85
+ maxPeerCount: 5,
86
+ p2pEnabled: true,
87
+ peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex'),
88
+ bootstrapNodeEnrVersionCheck: false,
89
+ ...chainConfig
90
+ };
91
+ const discoveryService = new DiscV5Service(peerId, config, telemetry);
92
+ const proofVerifier = new AlwaysTrueCircuitVerifier();
93
+ // No bootstrap nodes provided as the libp2p service will register them in the constructor
94
+ 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);
96
+ }
97
+ // Mock sub protocol handlers
98
+ export const MOCK_SUB_PROTOCOL_HANDLERS = {
99
+ [ReqRespSubProtocol.PING]: pingHandler,
100
+ [ReqRespSubProtocol.STATUS]: statusHandler,
101
+ [ReqRespSubProtocol.TX]: (_msg)=>Promise.resolve(Buffer.from('tx')),
102
+ [ReqRespSubProtocol.GOODBYE]: (_msg)=>Promise.resolve(Buffer.from('goodbye')),
103
+ [ReqRespSubProtocol.BLOCK]: (_msg)=>Promise.resolve(Buffer.from('block'))
104
+ };
105
+ // By default, all requests are valid
106
+ // If you want to test an invalid response, you can override the validator
107
+ export const MOCK_SUB_PROTOCOL_VALIDATORS = {
108
+ [ReqRespSubProtocol.PING]: noopValidator,
109
+ [ReqRespSubProtocol.STATUS]: noopValidator,
110
+ [ReqRespSubProtocol.TX]: noopValidator,
111
+ [ReqRespSubProtocol.GOODBYE]: noopValidator,
112
+ [ReqRespSubProtocol.BLOCK]: noopValidator
113
+ };
114
+ /**
115
+ * @param numberOfNodes - the number of nodes to create
116
+ * @returns An array of the created nodes
117
+ */ export const createNodes = (peerScoring, numberOfNodes)=>{
118
+ return timesParallel(numberOfNodes, ()=>createReqResp(peerScoring));
119
+ };
120
+ export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS)=>{
121
+ for (const node of nodes){
122
+ await node.req.start(subProtocolHandlers, subProtocolValidators);
123
+ }
124
+ };
125
+ export const stopNodes = async (nodes)=>{
126
+ const stopPromises = nodes.flatMap((node)=>[
127
+ node.req.stop(),
128
+ node.p2p.stop()
129
+ ]);
130
+ await Promise.all(stopPromises);
131
+ };
132
+ // Create a req resp node, exposing the underlying p2p node
133
+ export const createReqResp = async (peerScoring)=>{
134
+ const p2p = await createLibp2pNode();
135
+ const config = {
136
+ overallRequestTimeoutMs: 4000,
137
+ individualRequestTimeoutMs: 2000
138
+ };
139
+ const req = new ReqResp(config, p2p, peerScoring);
140
+ return {
141
+ p2p,
142
+ req
143
+ };
144
+ };
145
+ // Given a node list; hand shake all of the nodes with each other
146
+ export const connectToPeers = async (nodes)=>{
147
+ for (const node of nodes){
148
+ for (const otherNode of nodes){
149
+ if (node === otherNode) {
150
+ continue;
151
+ }
152
+ const addr = otherNode.p2p.getMultiaddrs()[0];
153
+ await node.p2p.dial(addr);
154
+ }
155
+ }
156
+ };
157
+ // Mock circuit verifier for testing - reimplementation from bb to avoid dependency
158
+ export class AlwaysTrueCircuitVerifier {
159
+ verifyProof(_tx) {
160
+ return Promise.resolve(true);
161
+ }
162
+ }
163
+ export class AlwaysFalseCircuitVerifier {
164
+ verifyProof(_tx) {
165
+ return Promise.resolve(false);
166
+ }
167
+ }
168
+ // Bootnodes
169
+ export function createBootstrapNodeConfig(privateKey, port, chainConfig) {
170
+ return {
171
+ l1ChainId: chainConfig.l1ChainId,
172
+ udpListenAddress: `0.0.0.0:${port}`,
173
+ udpAnnounceAddress: `127.0.0.1:${port}`,
174
+ peerIdPrivateKey: privateKey,
175
+ dataDirectory: undefined,
176
+ dataStoreMapSizeKB: 0,
177
+ bootstrapNodes: []
178
+ };
179
+ }
180
+ export function createBootstrapNodeFromPrivateKey(privateKey, port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
181
+ const config = createBootstrapNodeConfig(privateKey, port, chainConfig);
182
+ return startBootstrapNode(config, telemetry);
183
+ }
184
+ /**
185
+ * Create a bootstrap node ENR
186
+ * @param privateKey - the private key of the bootstrap node
187
+ * @param port - the port of the bootstrap node
188
+ * @returns the bootstrap node ENR
189
+ */ export async function getBootstrapNodeEnr(privateKey, port) {
190
+ const peerId = await createLibP2PPeerIdFromPrivateKey(privateKey);
191
+ const enr = SignableENR.createFromPeerId(peerId);
192
+ const listenAddrUdp = multiaddr(convertToMultiaddr(`127.0.0.1:${port}`, 'udp'));
193
+ enr.setLocationMultiaddr(listenAddrUdp);
194
+ return enr;
195
+ }
196
+ export async function createBootstrapNode(port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
197
+ const peerId = await createSecp256k1PeerId();
198
+ const config = createBootstrapNodeConfig(Buffer.from(peerId.privateKey).toString('hex'), port, chainConfig);
199
+ return startBootstrapNode(config, telemetry);
200
+ }
201
+ async function startBootstrapNode(config, telemetry) {
202
+ // Open an ephemeral store that will only exist in memory
203
+ const store = await openTmpStore('bootstrap-node', true);
204
+ const bootstrapNode = new BootstrapNode(store, telemetry);
205
+ await bootstrapNode.start(config);
206
+ return bootstrapNode;
207
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=p2p_client_testbench_worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":""}