@aztec/p2p 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.76.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 (262) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +38 -0
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -0
  3. package/dest/bootstrap/bootstrap.js +31 -38
  4. package/dest/client/factory.d.ts +21 -0
  5. package/dest/client/factory.d.ts.map +1 -0
  6. package/dest/client/factory.js +13 -11
  7. package/dest/client/index.d.ts +3 -0
  8. package/dest/client/index.d.ts.map +1 -0
  9. package/dest/client/index.js +1 -0
  10. package/dest/client/p2p_client.d.ts +332 -0
  11. package/dest/client/p2p_client.d.ts.map +1 -0
  12. package/dest/client/p2p_client.js +535 -513
  13. package/dest/config.d.ts +187 -0
  14. package/dest/config.d.ts.map +1 -0
  15. package/dest/config.js +64 -53
  16. package/dest/errors/reqresp.error.d.ts +28 -0
  17. package/dest/errors/reqresp.error.d.ts.map +1 -0
  18. package/dest/errors/reqresp.error.js +10 -6
  19. package/dest/index.d.ts +9 -0
  20. package/dest/index.d.ts.map +1 -0
  21. package/dest/index.js +1 -0
  22. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +57 -0
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
  24. package/dest/mem_pools/attestation_pool/attestation_pool.js +2 -6
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +32 -64
  28. package/dest/mem_pools/attestation_pool/index.d.ts +3 -0
  29. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
  30. package/dest/mem_pools/attestation_pool/index.js +1 -0
  31. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +22 -0
  32. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -0
  33. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +19 -22
  34. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -0
  35. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -0
  36. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +26 -22
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +18 -0
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
  39. package/dest/mem_pools/attestation_pool/mocks.js +6 -10
  40. package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts +7 -0
  41. package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts.map +1 -0
  42. package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.js +2 -1
  43. package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts +4 -0
  44. package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts.map +1 -0
  45. package/dest/mem_pools/epoch_proof_quote_pool/index.js +1 -0
  46. package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts +12 -0
  47. package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts.map +1 -0
  48. package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.js +4 -5
  49. package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts +8 -0
  50. package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts.map +1 -0
  51. package/dest/mem_pools/epoch_proof_quote_pool/test_utils.js +3 -2
  52. package/dest/mem_pools/index.d.ts +5 -0
  53. package/dest/mem_pools/index.d.ts.map +1 -0
  54. package/dest/mem_pools/index.js +2 -1
  55. package/dest/mem_pools/instrumentation.d.ts +31 -0
  56. package/dest/mem_pools/instrumentation.d.ts.map +1 -0
  57. package/dest/mem_pools/instrumentation.js +42 -37
  58. package/dest/mem_pools/interface.d.ts +13 -0
  59. package/dest/mem_pools/interface.d.ts.map +1 -0
  60. package/dest/mem_pools/interface.js +2 -3
  61. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +66 -0
  62. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +134 -127
  64. package/dest/mem_pools/tx_pool/index.d.ts +4 -0
  65. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool/index.js +1 -0
  67. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +56 -0
  68. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/memory_tx_pool.js +43 -45
  70. package/dest/mem_pools/tx_pool/priority.d.ts +8 -0
  71. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool/priority.js +3 -1
  73. package/dest/mem_pools/tx_pool/tx_pool.d.ts +66 -0
  74. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool/tx_pool.js +2 -3
  76. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +7 -0
  77. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +37 -107
  79. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +8 -0
  80. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
  81. package/dest/msg_validators/attestation_validator/attestation_validator.js +3 -3
  82. package/dest/msg_validators/attestation_validator/index.d.ts +2 -0
  83. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
  84. package/dest/msg_validators/attestation_validator/index.js +1 -0
  85. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +8 -0
  86. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -0
  87. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +2 -2
  88. package/dest/msg_validators/block_proposal_validator/index.d.ts +2 -0
  89. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +1 -0
  90. package/dest/msg_validators/block_proposal_validator/index.js +1 -0
  91. package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts +8 -0
  92. package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts.map +1 -0
  93. package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.js +2 -2
  94. package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts +2 -0
  95. package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts.map +1 -0
  96. package/dest/msg_validators/epoch_proof_quote_validator/index.js +1 -0
  97. package/dest/msg_validators/index.d.ts +4 -0
  98. package/dest/msg_validators/index.d.ts.map +1 -0
  99. package/dest/msg_validators/index.js +1 -0
  100. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
  101. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  102. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -9
  103. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +11 -0
  104. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
  105. package/dest/msg_validators/tx_validator/block_header_validator.js +12 -17
  106. package/dest/msg_validators/tx_validator/data_validator.d.ts +6 -0
  107. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
  108. package/dest/msg_validators/tx_validator/data_validator.js +32 -41
  109. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +12 -0
  110. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/double_spend_validator.js +14 -22
  112. package/dest/msg_validators/tx_validator/index.d.ts +7 -0
  113. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
  114. package/dest/msg_validators/tx_validator/index.js +1 -0
  115. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -0
  116. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
  117. package/dest/msg_validators/tx_validator/metadata_validator.js +26 -29
  118. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +8 -0
  119. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
  120. package/dest/msg_validators/tx_validator/tx_proof_validator.js +12 -17
  121. package/dest/services/data_store.d.ts +27 -0
  122. package/dest/services/data_store.d.ts.map +1 -0
  123. package/dest/services/data_store.js +57 -57
  124. package/dest/services/discv5/discV5_service.d.ts +40 -0
  125. package/dest/services/discv5/discV5_service.d.ts.map +1 -0
  126. package/dest/services/discv5/discV5_service.js +82 -43
  127. package/dest/services/dummy_service.d.ts +83 -0
  128. package/dest/services/dummy_service.d.ts.map +1 -0
  129. package/dest/services/dummy_service.js +59 -40
  130. package/dest/services/encoding.d.ts +31 -0
  131. package/dest/services/encoding.d.ts.map +1 -0
  132. package/dest/services/encoding.js +9 -10
  133. package/dest/services/index.d.ts +3 -0
  134. package/dest/services/index.d.ts.map +1 -0
  135. package/dest/services/index.js +1 -0
  136. package/dest/services/libp2p/libp2p_logger.d.ts +7 -0
  137. package/dest/services/libp2p/libp2p_logger.d.ts.map +1 -0
  138. package/dest/services/libp2p/libp2p_logger.js +67 -0
  139. package/dest/services/libp2p/libp2p_service.d.ts +225 -0
  140. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
  141. package/dest/services/libp2p/libp2p_service.js +727 -709
  142. package/dest/services/peer-manager/metrics.d.ts +12 -0
  143. package/dest/services/peer-manager/metrics.d.ts.map +1 -0
  144. package/dest/services/peer-manager/metrics.js +7 -14
  145. package/dest/services/peer-manager/peer_manager.d.ts +76 -0
  146. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
  147. package/dest/services/peer-manager/peer_manager.js +342 -340
  148. package/dest/services/peer-manager/peer_scoring.d.ts +28 -0
  149. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
  150. package/dest/services/peer-manager/peer_scoring.js +18 -20
  151. package/dest/services/reqresp/config.d.ts +16 -0
  152. package/dest/services/reqresp/config.d.ts.map +1 -0
  153. package/dest/services/reqresp/config.js +5 -4
  154. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +45 -0
  155. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -0
  156. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +28 -35
  157. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +61 -0
  158. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
  159. package/dest/services/reqresp/connection-sampler/connection_sampler.js +59 -60
  160. package/dest/services/reqresp/index.d.ts +6 -0
  161. package/dest/services/reqresp/index.d.ts.map +1 -0
  162. package/dest/services/reqresp/index.js +3 -1
  163. package/dest/services/reqresp/interface.d.ts +116 -0
  164. package/dest/services/reqresp/interface.d.ts.map +1 -0
  165. package/dest/services/reqresp/interface.js +30 -25
  166. package/dest/services/reqresp/metrics.d.ts +15 -0
  167. package/dest/services/reqresp/metrics.d.ts.map +1 -0
  168. package/dest/services/reqresp/metrics.js +10 -23
  169. package/dest/services/reqresp/protocols/block.d.ts +4 -0
  170. package/dest/services/reqresp/protocols/block.d.ts.map +1 -0
  171. package/dest/services/reqresp/protocols/block.js +2 -1
  172. package/dest/services/reqresp/protocols/goodbye.d.ts +51 -0
  173. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
  174. package/dest/services/reqresp/protocols/goodbye.js +41 -36
  175. package/dest/services/reqresp/protocols/index.d.ts +9 -0
  176. package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
  177. package/dest/services/reqresp/protocols/index.js +3 -1
  178. package/dest/services/reqresp/protocols/ping.d.ts +9 -0
  179. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
  180. package/dest/services/reqresp/protocols/ping.js +3 -1
  181. package/dest/services/reqresp/protocols/status.d.ts +9 -0
  182. package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
  183. package/dest/services/reqresp/protocols/status.js +3 -1
  184. package/dest/services/reqresp/protocols/tx.d.ts +13 -0
  185. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
  186. package/dest/services/reqresp/protocols/tx.js +8 -5
  187. package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
  188. package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
  189. package/dest/services/reqresp/rate-limiter/index.js +1 -0
  190. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +102 -0
  191. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
  192. package/dest/services/reqresp/rate-limiter/rate_limiter.js +35 -39
  193. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
  194. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
  195. package/dest/services/reqresp/rate-limiter/rate_limits.js +17 -16
  196. package/dest/services/reqresp/reqresp.d.ts +166 -0
  197. package/dest/services/reqresp/reqresp.d.ts.map +1 -0
  198. package/dest/services/reqresp/reqresp.js +463 -460
  199. package/dest/services/reqresp/status.d.ts +31 -0
  200. package/dest/services/reqresp/status.d.ts.map +1 -0
  201. package/dest/services/reqresp/status.js +17 -16
  202. package/dest/services/service.d.ts +86 -0
  203. package/dest/services/service.d.ts.map +1 -0
  204. package/dest/services/service.js +4 -3
  205. package/dest/services/types.d.ts +32 -0
  206. package/dest/services/types.d.ts.map +1 -0
  207. package/dest/services/types.js +19 -20
  208. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
  209. package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
  210. package/dest/test-helpers/generate-peer-id-private-keys.js +15 -0
  211. package/dest/test-helpers/get-ports.d.ts +7 -0
  212. package/dest/test-helpers/get-ports.d.ts.map +1 -0
  213. package/dest/test-helpers/get-ports.js +8 -0
  214. package/dest/test-helpers/index.d.ts +6 -0
  215. package/dest/test-helpers/index.d.ts.map +1 -0
  216. package/dest/test-helpers/index.js +6 -0
  217. package/dest/test-helpers/make-enrs.d.ts +16 -0
  218. package/dest/test-helpers/make-enrs.d.ts.map +1 -0
  219. package/dest/test-helpers/make-enrs.js +35 -0
  220. package/dest/test-helpers/make-test-p2p-clients.d.ts +37 -0
  221. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
  222. package/dest/test-helpers/make-test-p2p-clients.js +71 -0
  223. package/dest/test-helpers/reqresp-nodes.d.ts +55 -0
  224. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
  225. package/dest/test-helpers/reqresp-nodes.js +183 -0
  226. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -0
  227. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
  228. package/dest/testbench/p2p_client_testbench_worker.js +125 -0
  229. package/dest/util.d.ts +53 -0
  230. package/dest/util.d.ts.map +1 -0
  231. package/dest/util.js +34 -23
  232. package/dest/versioning.d.ts +12 -0
  233. package/dest/versioning.d.ts.map +1 -0
  234. package/dest/versioning.js +38 -0
  235. package/package.json +11 -9
  236. package/src/bootstrap/bootstrap.ts +9 -3
  237. package/src/client/factory.ts +12 -5
  238. package/src/config.ts +56 -29
  239. package/src/mem_pools/index.ts +3 -3
  240. package/src/mem_pools/instrumentation.ts +2 -3
  241. package/src/msg_validators/attestation_validator/attestation_validator.ts +3 -3
  242. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +3 -3
  243. package/src/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.ts +3 -3
  244. package/src/services/discv5/discV5_service.ts +67 -18
  245. package/src/services/dummy_service.ts +2 -0
  246. package/src/services/libp2p/libp2p_logger.ts +78 -0
  247. package/src/services/libp2p/libp2p_service.ts +47 -10
  248. package/src/services/reqresp/protocols/goodbye.ts +1 -1
  249. package/src/services/reqresp/reqresp.ts +9 -1
  250. package/src/services/service.ts +2 -0
  251. package/src/services/types.ts +2 -10
  252. package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
  253. package/src/test-helpers/get-ports.ts +8 -0
  254. package/src/test-helpers/index.ts +5 -0
  255. package/src/test-helpers/make-enrs.ts +44 -0
  256. package/src/test-helpers/make-test-p2p-clients.ts +124 -0
  257. package/src/{mocks/index.ts → test-helpers/reqresp-nodes.ts} +10 -5
  258. package/src/testbench/README.md +20 -0
  259. package/src/testbench/p2p_client_testbench_worker.ts +156 -0
  260. package/src/testbench/scripts/run_testbench.sh +7 -0
  261. package/src/versioning.ts +50 -0
  262. package/dest/mocks/index.js +0 -190
@@ -0,0 +1,7 @@
1
+ ## Test bench
2
+ # Run the testbench and pipe the output into a file
3
+ # Usage: ./run_testbench.sh <outputfile>
4
+
5
+ outputfile=$1
6
+
7
+ LOG_LEVEL="debug; trace: .*gossipsub" yarn test testbench.test.ts 2>&1 | pino-pretty > $outputfile
@@ -0,0 +1,50 @@
1
+ import {
2
+ type ComponentsVersions,
3
+ checkCompressedComponentVersion,
4
+ compressComponentVersions,
5
+ getComponentsVersionsFromConfig,
6
+ } from '@aztec/circuit-types';
7
+ import { type ChainConfig } from '@aztec/circuit-types/config';
8
+ import { toBufferBE } from '@aztec/foundation/bigint-buffer';
9
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
10
+ import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
11
+
12
+ import { type SignableENR } from '@chainsafe/enr';
13
+ import xxhashFactory from 'xxhash-wasm';
14
+
15
+ import { AZTEC_ENR_KEY } from './services/types.js';
16
+
17
+ const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
18
+ const XX_HASH_LEN = 8;
19
+ const xxhash = await xxhashFactory();
20
+
21
+ /** Returns the component versions based on config and this build. */
22
+ export function getVersions(config: ChainConfig) {
23
+ return getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot());
24
+ }
25
+
26
+ /** Sets the aztec key on the ENR record with versioning info. */
27
+ export function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash = USE_XX_HASH) {
28
+ const versions = getVersions(config);
29
+ const value = versionsToEnrValue(versions, useXxHash);
30
+ enr.set(AZTEC_ENR_KEY, value);
31
+ return versions;
32
+ }
33
+
34
+ /** Checks the given value from an ENR record against the expected versions. */
35
+ export function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions) {
36
+ if (enrValue.length === XX_HASH_LEN) {
37
+ const expected = versionsToEnrValue(expectedVersions, true);
38
+ if (!Buffer.from(enrValue).equals(expected)) {
39
+ throw new Error(`Expected ENR version ${expected.toString('hex')} but received ${enrValue.toString('hex')}`);
40
+ }
41
+ } else {
42
+ const actual = Buffer.from(enrValue).toString();
43
+ checkCompressedComponentVersion(actual, expectedVersions);
44
+ }
45
+ }
46
+
47
+ function versionsToEnrValue(versions: ComponentsVersions, useXxHash: boolean) {
48
+ const compressed = compressComponentVersions(versions);
49
+ return useXxHash ? toBufferBE(xxhash.h64(compressed), XX_HASH_LEN) : Buffer.from(compressed);
50
+ }
@@ -1,190 +0,0 @@
1
- import { timesParallel } from '@aztec/foundation/collection';
2
- import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
3
- import { getTelemetryClient } from '@aztec/telemetry-client';
4
- import { gossipsub } from '@chainsafe/libp2p-gossipsub';
5
- import { noise } from '@chainsafe/libp2p-noise';
6
- import { yamux } from '@chainsafe/libp2p-yamux';
7
- import { bootstrap } from '@libp2p/bootstrap';
8
- import { identify } from '@libp2p/identify';
9
- import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
10
- import { tcp } from '@libp2p/tcp';
11
- import getPort from 'get-port';
12
- import { createLibp2p } from 'libp2p';
13
- import { BootstrapNode } from '../bootstrap/bootstrap.js';
14
- import { DiscV5Service } from '../services/discv5/discV5_service.js';
15
- import { LibP2PService } from '../services/libp2p/libp2p_service.js';
16
- import { ReqRespSubProtocol, noopValidator } from '../services/reqresp/interface.js';
17
- import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
18
- import { ReqResp } from '../services/reqresp/reqresp.js';
19
- /**
20
- * Creates a libp2p node, pre configured.
21
- * @param boostrapAddrs - an optional list of bootstrap addresses
22
- * @returns Lip2p node
23
- */ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableGossipSub = false, start = true) {
24
- port = port ?? await getPort();
25
- const options = {
26
- start,
27
- addresses: {
28
- listen: [
29
- `/ip4/0.0.0.0/tcp/${port}`
30
- ],
31
- announce: [
32
- `/ip4/0.0.0.0/tcp/${port}`
33
- ]
34
- },
35
- connectionEncryption: [
36
- noise()
37
- ],
38
- streamMuxers: [
39
- yamux()
40
- ],
41
- transports: [
42
- tcp()
43
- ],
44
- services: {
45
- identify: identify({
46
- protocolPrefix: 'aztec'
47
- })
48
- }
49
- };
50
- if (boostrapAddrs.length > 0) {
51
- options.peerDiscovery = [
52
- bootstrap({
53
- list: boostrapAddrs
54
- })
55
- ];
56
- }
57
- if (peerId) {
58
- options.peerId = peerId;
59
- }
60
- if (enableGossipSub) {
61
- options.services.pubsub = gossipsub({
62
- allowPublishToZeroTopicPeers: true
63
- });
64
- }
65
- return await createLibp2p(options);
66
- }
67
- /**
68
- * Test Libp2p service
69
- * P2P functionality is operational, however everything else is default
70
- *
71
- *
72
- */ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2BlockSource, worldStateSynchronizer, epochCache, mempools, telemetry, port = 0, peerId) {
73
- peerId = peerId ?? await createSecp256k1PeerId();
74
- const config = {
75
- tcpAnnounceAddress: `127.0.0.1:${port}`,
76
- udpAnnounceAddress: `127.0.0.1:${port}`,
77
- tcpListenAddress: `0.0.0.0:${port}`,
78
- udpListenAddress: `0.0.0.0:${port}`,
79
- bootstrapNodes: boostrapAddrs,
80
- peerCheckIntervalMS: 1000,
81
- minPeerCount: 1,
82
- maxPeerCount: 5,
83
- p2pEnabled: true,
84
- peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex')
85
- };
86
- const discoveryService = new DiscV5Service(peerId, config, telemetry);
87
- const proofVerifier = new AlwaysTrueCircuitVerifier();
88
- // No bootstrap nodes provided as the libp2p service will register them in the constructor
89
- const p2pNode = await createLibp2pNode([], peerId, port, /*enable gossip */ true, /**start */ false);
90
- return new LibP2PService(clientType, config, p2pNode, discoveryService, mempools, l2BlockSource, epochCache, proofVerifier, worldStateSynchronizer, telemetry);
91
- }
92
- // Mock sub protocol handlers
93
- export const MOCK_SUB_PROTOCOL_HANDLERS = {
94
- [ReqRespSubProtocol.PING]: pingHandler,
95
- [ReqRespSubProtocol.STATUS]: statusHandler,
96
- [ReqRespSubProtocol.TX]: (_msg)=>Promise.resolve(Buffer.from('tx')),
97
- [ReqRespSubProtocol.GOODBYE]: (_msg)=>Promise.resolve(Buffer.from('goodbye')),
98
- [ReqRespSubProtocol.BLOCK]: (_msg)=>Promise.resolve(Buffer.from('block'))
99
- };
100
- // By default, all requests are valid
101
- // If you want to test an invalid response, you can override the validator
102
- export const MOCK_SUB_PROTOCOL_VALIDATORS = {
103
- [ReqRespSubProtocol.PING]: noopValidator,
104
- [ReqRespSubProtocol.STATUS]: noopValidator,
105
- [ReqRespSubProtocol.TX]: noopValidator,
106
- [ReqRespSubProtocol.GOODBYE]: noopValidator,
107
- [ReqRespSubProtocol.BLOCK]: noopValidator
108
- };
109
- /**
110
- * @param numberOfNodes - the number of nodes to create
111
- * @returns An array of the created nodes
112
- */ export const createNodes = (peerScoring, numberOfNodes)=>{
113
- return timesParallel(numberOfNodes, ()=>createReqResp(peerScoring));
114
- };
115
- export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS)=>{
116
- for (const node of nodes){
117
- await node.req.start(subProtocolHandlers, subProtocolValidators);
118
- }
119
- };
120
- export const stopNodes = async (nodes)=>{
121
- const stopPromises = nodes.flatMap((node)=>[
122
- node.req.stop(),
123
- node.p2p.stop()
124
- ]);
125
- await Promise.all(stopPromises);
126
- };
127
- // Create a req resp node, exposing the underlying p2p node
128
- export const createReqResp = async (peerScoring)=>{
129
- const p2p = await createLibp2pNode();
130
- const config = {
131
- overallRequestTimeoutMs: 4000,
132
- individualRequestTimeoutMs: 2000
133
- };
134
- const req = new ReqResp(config, p2p, peerScoring);
135
- return {
136
- p2p,
137
- req
138
- };
139
- };
140
- // Given a node list; hand shake all of the nodes with each other
141
- export const connectToPeers = async (nodes)=>{
142
- for (const node of nodes){
143
- for (const otherNode of nodes){
144
- if (node === otherNode) {
145
- continue;
146
- }
147
- const addr = otherNode.p2p.getMultiaddrs()[0];
148
- await node.p2p.dial(addr);
149
- }
150
- }
151
- };
152
- // Mock circuit verifier for testing - reimplementation from bb to avoid dependency
153
- export class AlwaysTrueCircuitVerifier {
154
- verifyProof(_tx) {
155
- return Promise.resolve(true);
156
- }
157
- }
158
- export class AlwaysFalseCircuitVerifier {
159
- verifyProof(_tx) {
160
- return Promise.resolve(false);
161
- }
162
- }
163
- // Bootnodes
164
- export function createBootstrapNodeConfig(privateKey, port) {
165
- return {
166
- udpListenAddress: `0.0.0.0:${port}`,
167
- udpAnnounceAddress: `127.0.0.1:${port}`,
168
- peerIdPrivateKey: privateKey,
169
- minPeerCount: 10,
170
- maxPeerCount: 100,
171
- dataDirectory: undefined,
172
- dataStoreMapSizeKB: 0
173
- };
174
- }
175
- export function createBootstrapNodeFromPrivateKey(privateKey, port, telemetry = getTelemetryClient()) {
176
- const config = createBootstrapNodeConfig(privateKey, port);
177
- return startBootstrapNode(config, telemetry);
178
- }
179
- export async function createBootstrapNode(port, telemetry = getTelemetryClient()) {
180
- const peerId = await createSecp256k1PeerId();
181
- const config = createBootstrapNodeConfig(Buffer.from(peerId.privateKey).toString('hex'), port);
182
- return startBootstrapNode(config, telemetry);
183
- }
184
- async function startBootstrapNode(config, telemetry) {
185
- // Open an ephemeral store that will only exist in memory
186
- const store = await openTmpStore('bootstrap-node', true);
187
- const bootstrapNode = new BootstrapNode(store, telemetry);
188
- await bootstrapNode.start(config);
189
- return bootstrapNode;
190
- }