@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,25 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { Tx } from '@aztec/stdlib/tx';
3
+ export class TxProofValidator {
4
+ verifier;
5
+ #log;
6
+ constructor(verifier){
7
+ this.verifier = verifier;
8
+ this.#log = createLogger('p2p:tx_validator:private_proof');
9
+ }
10
+ async validateTx(tx) {
11
+ if (!await this.verifier.verifyProof(tx)) {
12
+ this.#log.warn(`Rejecting tx ${Tx.getHash(tx)} for invalid proof`);
13
+ return {
14
+ result: 'invalid',
15
+ reason: [
16
+ 'Invalid proof'
17
+ ]
18
+ };
19
+ }
20
+ this.#log.trace(`Accepted ${Tx.getHash(tx)} with valid proof`);
21
+ return {
22
+ result: 'valid'
23
+ };
24
+ }
25
+ }
@@ -0,0 +1,27 @@
1
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
2
+ import { type Batch, type Datastore, Key, type KeyQuery, type Pair, type Query } from 'interface-datastore';
3
+ import type { AwaitIterable } from 'interface-store';
4
+ export declare class AztecDatastore implements Datastore {
5
+ #private;
6
+ private maxMemoryItems;
7
+ constructor(db: AztecAsyncKVStore, { maxMemoryItems }?: {
8
+ maxMemoryItems: number;
9
+ });
10
+ has(key: Key): Promise<boolean>;
11
+ get(key: Key): Promise<Uint8Array>;
12
+ put(key: Key, val: Uint8Array): Promise<Key>;
13
+ putMany(source: AwaitIterable<Pair>): AwaitIterable<Key>;
14
+ getMany(source: AwaitIterable<Key>): AwaitIterable<Pair>;
15
+ deleteMany(source: AwaitIterable<Key>): AwaitIterable<Key>;
16
+ delete(key: Key): Promise<void>;
17
+ batch(): Batch;
18
+ query(q: Query): AwaitIterable<Pair>;
19
+ queryKeys(q: KeyQuery): AsyncIterable<Key>;
20
+ private _put;
21
+ private all;
22
+ /**
23
+ * Prune memory store
24
+ */
25
+ private pruneMemoryDatastore;
26
+ }
27
+ //# sourceMappingURL=data_store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data_store.d.ts","sourceRoot":"","sources":["../../src/services/data_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqBrD,qBAAa,cAAe,YAAW,SAAS;;IAM9C,OAAO,CAAC,cAAc,CAAS;gBAEnB,EAAE,EAAE,iBAAiB,EAAE,EAAE,cAAc,EAAE;;KAAyB;IAOxE,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBxC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAIrC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC;IAOxD,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IASxD,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC;IAO3D,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,KAAK,IAAI,KAAK;IA4Bd,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC;IA4BpC,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC;YA2B5B,IAAI;YAqBH,GAAG;IAkBlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAiB7B"}
@@ -0,0 +1,188 @@
1
+ import { filter, map, sort, take } from '@aztec/foundation/iterable';
2
+ import { Key } from 'interface-datastore';
3
+ class KeyNotFoundError extends Error {
4
+ code;
5
+ constructor(message){
6
+ super(message);
7
+ this.code = 'ERR_NOT_FOUND';
8
+ }
9
+ }
10
+ export class AztecDatastore {
11
+ #memoryDatastore;
12
+ #dbDatastore;
13
+ #batchOps = [];
14
+ maxMemoryItems;
15
+ constructor(db, { maxMemoryItems } = {
16
+ maxMemoryItems: 50
17
+ }){
18
+ this.#memoryDatastore = new Map();
19
+ this.#dbDatastore = db.openMap('p2p_datastore');
20
+ this.maxMemoryItems = maxMemoryItems;
21
+ }
22
+ async has(key) {
23
+ return this.#memoryDatastore.has(key.toString()) || await this.#dbDatastore.hasAsync(key.toString());
24
+ }
25
+ async get(key) {
26
+ const keyStr = key.toString();
27
+ const memoryItem = this.#memoryDatastore.get(keyStr);
28
+ if (memoryItem) {
29
+ memoryItem.lastAccessedMs = Date.now();
30
+ return memoryItem.data;
31
+ }
32
+ const dbItem = await this.#dbDatastore.getAsync(keyStr);
33
+ if (!dbItem) {
34
+ throw new KeyNotFoundError(`Key not found`);
35
+ }
36
+ return Uint8Array.from(dbItem);
37
+ }
38
+ put(key, val) {
39
+ return this._put(key, val);
40
+ }
41
+ async *putMany(source) {
42
+ for await (const { key, value } of source){
43
+ await this.put(key, value);
44
+ yield key;
45
+ }
46
+ }
47
+ async *getMany(source) {
48
+ for await (const key of source){
49
+ yield {
50
+ key,
51
+ value: await this.get(key)
52
+ };
53
+ }
54
+ }
55
+ async *deleteMany(source) {
56
+ for await (const key of source){
57
+ await this.delete(key);
58
+ yield key;
59
+ }
60
+ }
61
+ async delete(key) {
62
+ this.#memoryDatastore.delete(key.toString());
63
+ await this.#dbDatastore.delete(key.toString());
64
+ }
65
+ batch() {
66
+ return {
67
+ put: (key, value)=>{
68
+ this.#batchOps.push({
69
+ type: 'put',
70
+ key,
71
+ value
72
+ });
73
+ },
74
+ delete: (key)=>{
75
+ this.#batchOps.push({
76
+ type: 'del',
77
+ key
78
+ });
79
+ },
80
+ commit: async ()=>{
81
+ for (const op of this.#batchOps){
82
+ if (op.type === 'put' && op.value) {
83
+ await this.put(op.key, op.value);
84
+ } else if (op.type === 'del') {
85
+ await this.delete(op.key);
86
+ }
87
+ }
88
+ this.#batchOps = []; // Clear operations after commit
89
+ }
90
+ };
91
+ }
92
+ query(q) {
93
+ let it = this.all(); //
94
+ const { prefix, filters, orders, offset, limit } = q;
95
+ if (prefix != null) {
96
+ it = filter(it, (e)=>e.key.toString().startsWith(`${prefix}`));
97
+ }
98
+ if (Array.isArray(filters)) {
99
+ it = filters.reduce((it, f)=>filter(it, f), it);
100
+ }
101
+ if (Array.isArray(orders)) {
102
+ it = orders.reduce((it, f)=>sort(it, f), it);
103
+ }
104
+ if (offset != null) {
105
+ let i = 0;
106
+ it = filter(it, ()=>i++ >= offset);
107
+ }
108
+ if (limit != null) {
109
+ it = take(it, limit);
110
+ }
111
+ return it;
112
+ }
113
+ queryKeys(q) {
114
+ let it = map(this.all(), ({ key })=>key);
115
+ const { prefix, filters, orders, offset, limit } = q;
116
+ if (prefix != null) {
117
+ it = filter(it, (e)=>e.toString().startsWith(`${prefix}`));
118
+ }
119
+ if (Array.isArray(filters)) {
120
+ it = filters.reduce((it, f)=>filter(it, f), it);
121
+ }
122
+ if (Array.isArray(orders)) {
123
+ it = orders.reduce((it, f)=>sort(it, f), it);
124
+ }
125
+ if (offset != null) {
126
+ let i = 0;
127
+ it = filter(it, ()=>i++ >= offset);
128
+ }
129
+ if (limit != null) {
130
+ it = take(it, limit);
131
+ }
132
+ return it;
133
+ }
134
+ async _put(key, val) {
135
+ const keyStr = key.toString();
136
+ while(this.#memoryDatastore.size >= this.maxMemoryItems){
137
+ this.pruneMemoryDatastore();
138
+ }
139
+ const memoryItem = this.#memoryDatastore.get(keyStr);
140
+ if (memoryItem) {
141
+ // update existing
142
+ memoryItem.lastAccessedMs = Date.now();
143
+ memoryItem.data = val;
144
+ } else {
145
+ // new entry
146
+ this.#memoryDatastore.set(keyStr, {
147
+ data: val,
148
+ lastAccessedMs: Date.now()
149
+ });
150
+ }
151
+ // Always add to DB
152
+ await this.#dbDatastore.set(keyStr, val);
153
+ return key;
154
+ }
155
+ async *all() {
156
+ for (const [key, value] of this.#memoryDatastore.entries()){
157
+ yield {
158
+ key: new Key(key),
159
+ value: value.data
160
+ };
161
+ }
162
+ for await (const [key, value] of this.#dbDatastore.entriesAsync()){
163
+ if (!this.#memoryDatastore.has(key)) {
164
+ yield {
165
+ key: new Key(key),
166
+ value
167
+ };
168
+ }
169
+ }
170
+ }
171
+ /**
172
+ * Prune memory store
173
+ */ pruneMemoryDatastore() {
174
+ let oldestAccessedMs = Date.now() + 1000;
175
+ let oldestKey = undefined;
176
+ let oldestValue = undefined;
177
+ for (const [key, value] of this.#memoryDatastore){
178
+ if (value.lastAccessedMs < oldestAccessedMs) {
179
+ oldestAccessedMs = value.lastAccessedMs;
180
+ oldestKey = key;
181
+ oldestValue = value.data;
182
+ }
183
+ }
184
+ if (oldestKey && oldestValue) {
185
+ this.#memoryDatastore.delete(oldestKey);
186
+ }
187
+ }
188
+ }
@@ -0,0 +1,42 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
+ import { ENR } from '@chainsafe/enr';
4
+ import type { PeerId } from '@libp2p/interface';
5
+ import EventEmitter from 'events';
6
+ import type { P2PConfig } from '../../config.js';
7
+ import { type PeerDiscoveryService, PeerDiscoveryState } from '../service.js';
8
+ /**
9
+ * Peer discovery service using Discv5.
10
+ */
11
+ export declare class DiscV5Service extends EventEmitter implements PeerDiscoveryService {
12
+ private peerId;
13
+ private config;
14
+ private logger;
15
+ /** The Discv5 instance */
16
+ private discv5;
17
+ /** This instance's ENR */
18
+ private enr;
19
+ /** Version identifiers. */
20
+ private versions;
21
+ /** UDP listen addr */
22
+ private listenMultiAddrUdp;
23
+ private currentState;
24
+ readonly bootstrapNodes: string[];
25
+ private bootstrapNodePeerIds;
26
+ private bootstrapNodeEnrs;
27
+ private startTime;
28
+ constructor(peerId: PeerId, config: P2PConfig, telemetry?: TelemetryClient, logger?: import("@aztec/foundation/log").Logger);
29
+ start(): Promise<void>;
30
+ runRandomNodesQuery(): Promise<void>;
31
+ getAllPeers(): ENR[];
32
+ getEnr(): ENR;
33
+ getPeerId(): PeerId;
34
+ getStatus(): PeerDiscoveryState;
35
+ isBootstrapPeer(peerId: PeerId): boolean;
36
+ stop(): Promise<void>;
37
+ private onEnrAdded;
38
+ private isOurBootnode;
39
+ private onDiscovered;
40
+ private validateEnr;
41
+ }
42
+ //# sourceMappingURL=discV5_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discV5_service.d.ts","sourceRoot":"","sources":["../../../src/services/discv5/discV5_service.ts"],"names":[],"mappings":";AAGA,OAAO,EAAsB,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGvG,OAAO,EAAE,GAAG,EAAe,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,OAAO,EAAE,KAAK,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAI9E;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAa,YAAW,oBAAoB;IAsB3E,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,MAAM;IAxBhB,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAA8B;IAE5C,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAc;IAEzB,2BAA2B;IAC3B,OAAO,CAAC,QAAQ,CAAqB;IAErC,sBAAsB;IACtB,OAAO,CAAC,kBAAkB,CAAY;IAEtC,OAAO,CAAC,YAAY,CAA8B;IAElD,SAAgB,cAAc,EAAE,MAAM,EAAE,CAAM;IAC9C,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,iBAAiB,CAAa;IAEtC,OAAO,CAAC,SAAS,CAAK;gBAGZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACzB,SAAS,GAAE,eAAsC,EACzC,MAAM,yCAAqC;IA+DxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCtB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB1C,WAAW,IAAI,GAAG,EAAE;IAIpB,MAAM,IAAI,GAAG;IAIb,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,kBAAkB;IAI/B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASpB,UAAU;IAOxB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,WAAW;CA0BpB"}
@@ -0,0 +1,214 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { sleep } from '@aztec/foundation/sleep';
3
+ import { checkCompressedComponentVersion } from '@aztec/stdlib/versioning';
4
+ import { OtelMetricsAdapter, getTelemetryClient } from '@aztec/telemetry-client';
5
+ import { Discv5 } from '@chainsafe/discv5';
6
+ import { ENR, SignableENR } from '@chainsafe/enr';
7
+ import { multiaddr } from '@multiformats/multiaddr';
8
+ import EventEmitter from 'events';
9
+ import { AZTEC_ENR_KEY, Discv5Event, PeerEvent } from '../../types/index.js';
10
+ import { convertToMultiaddr } from '../../util.js';
11
+ import { setAztecEnrKey } from '../../versioning.js';
12
+ import { PeerDiscoveryState } from '../service.js';
13
+ const delayBeforeStart = 2000; // 2sec
14
+ /**
15
+ * Peer discovery service using Discv5.
16
+ */ export class DiscV5Service extends EventEmitter {
17
+ peerId;
18
+ config;
19
+ logger;
20
+ /** The Discv5 instance */ discv5;
21
+ /** This instance's ENR */ enr;
22
+ /** Version identifiers. */ versions;
23
+ /** UDP listen addr */ listenMultiAddrUdp;
24
+ currentState;
25
+ bootstrapNodes;
26
+ bootstrapNodePeerIds;
27
+ bootstrapNodeEnrs;
28
+ startTime;
29
+ constructor(peerId, config, telemetry = getTelemetryClient(), logger = createLogger('p2p:discv5_service')){
30
+ super(), this.peerId = peerId, this.config = config, this.logger = logger, this.currentState = PeerDiscoveryState.STOPPED, this.bootstrapNodes = [], this.bootstrapNodePeerIds = [], this.bootstrapNodeEnrs = [], this.startTime = 0;
31
+ const { tcpAnnounceAddress, udpAnnounceAddress, udpListenAddress, bootstrapNodes } = config;
32
+ this.bootstrapNodes = bootstrapNodes ?? [];
33
+ this.bootstrapNodeEnrs = this.bootstrapNodes.map((x)=>ENR.decodeTxt(x));
34
+ // create ENR from PeerId
35
+ this.enr = SignableENR.createFromPeerId(peerId);
36
+ // Add aztec identification to ENR
37
+ this.versions = setAztecEnrKey(this.enr, config);
38
+ if (!tcpAnnounceAddress) {
39
+ throw new Error('You need to provide at least a TCP announce address.');
40
+ }
41
+ const multiAddrTcp = multiaddr(`${convertToMultiaddr(tcpAnnounceAddress, 'tcp')}/p2p/${peerId.toString()}`);
42
+ // if no udp announce address is provided, use the tcp announce address
43
+ const multiAddrUdp = multiaddr(`${convertToMultiaddr(udpAnnounceAddress || tcpAnnounceAddress, 'udp')}/p2p/${peerId.toString()}`);
44
+ this.listenMultiAddrUdp = multiaddr(convertToMultiaddr(udpListenAddress, 'udp'));
45
+ // set location multiaddr in ENR record
46
+ this.enr.setLocationMultiaddr(multiAddrUdp);
47
+ this.enr.setLocationMultiaddr(multiAddrTcp);
48
+ const metricsRegistry = new OtelMetricsAdapter(telemetry);
49
+ this.discv5 = Discv5.create({
50
+ enr: this.enr,
51
+ peerId,
52
+ bindAddrs: {
53
+ ip4: this.listenMultiAddrUdp
54
+ },
55
+ config: {
56
+ lookupTimeout: 2000,
57
+ requestTimeout: 2000,
58
+ allowUnverifiedSessions: true
59
+ },
60
+ metricsRegistry
61
+ });
62
+ // Hook onto the onEstablished method to check the peer's version from the ENR,
63
+ // so we don't add it to our dht if it doesn't have the correct version.
64
+ // In addition, we'll hook onto onDiscovered to to repeat the same check there,
65
+ // just in case. Note that not adding the peer to the dht could lead to it
66
+ // being "readded" constantly, we'll need to keep an eye on whether this
67
+ // turns out to be a problem or not.
68
+ const origOnEstablished = this.discv5.onEstablished.bind(this.discv5);
69
+ this.discv5.onEstablished = (...args)=>{
70
+ const enr = args[1];
71
+ // A special case is for bootnodes. If this is a bootnode and we have been told to skip version checks
72
+ // then proceed straight to handling the event
73
+ if (!this.config.bootstrapNodeEnrVersionCheck && this.isOurBootnode(enr)) {
74
+ return origOnEstablished(...args);
75
+ }
76
+ if (this.validateEnr(enr)) {
77
+ return origOnEstablished(...args);
78
+ }
79
+ };
80
+ this.discv5.on(Discv5Event.DISCOVERED, this.onDiscovered.bind(this));
81
+ this.discv5.on(Discv5Event.ENR_ADDED, this.onEnrAdded.bind(this));
82
+ }
83
+ async start() {
84
+ if (this.currentState === PeerDiscoveryState.RUNNING) {
85
+ throw new Error('DiscV5Service already started');
86
+ }
87
+ this.logger.debug('Starting DiscV5');
88
+ await this.discv5.start();
89
+ this.startTime = Date.now();
90
+ this.logger.info(`DiscV5 service started`, {
91
+ nodeId: this.enr.nodeId,
92
+ peerId: this.peerId,
93
+ enrUdp: await this.enr.getFullMultiaddr('udp'),
94
+ enrTcp: await this.enr.getFullMultiaddr('tcp'),
95
+ versions: this.versions
96
+ });
97
+ this.currentState = PeerDiscoveryState.RUNNING;
98
+ // Add bootnode ENR if provided
99
+ if (this.bootstrapNodes?.length) {
100
+ // Do this conversion once since it involves an async function call
101
+ this.bootstrapNodePeerIds = await Promise.all(this.bootstrapNodeEnrs.map((enr)=>enr.peerId()));
102
+ this.logger.info(`Adding ${this.bootstrapNodes} bootstrap nodes ENRs: ${this.bootstrapNodes.join(', ')}`);
103
+ for (const enr of this.bootstrapNodeEnrs){
104
+ try {
105
+ if (this.config.bootstrapNodeEnrVersionCheck) {
106
+ const value = enr.kvs.get(AZTEC_ENR_KEY);
107
+ if (!value) {
108
+ throw new Error('ENR does not contain aztec key');
109
+ }
110
+ checkCompressedComponentVersion(Buffer.from(value).toString(), this.versions);
111
+ }
112
+ this.discv5.addEnr(enr);
113
+ } catch (e) {
114
+ this.logger.error(`Error adding bootratrap node ${enr.encodeTxt()}`, e);
115
+ }
116
+ }
117
+ }
118
+ }
119
+ async runRandomNodesQuery() {
120
+ if (this.currentState !== PeerDiscoveryState.RUNNING) {
121
+ throw new Error('DiscV5Service not running');
122
+ }
123
+ // First, wait some time before starting the peer discovery
124
+ // reference: https://github.com/ChainSafe/lodestar/issues/3423
125
+ const msSinceStart = Date.now() - this.startTime;
126
+ if (Date.now() - this.startTime <= delayBeforeStart) {
127
+ await sleep(delayBeforeStart - msSinceStart);
128
+ }
129
+ try {
130
+ await this.discv5.findRandomNode();
131
+ } catch (err) {
132
+ this.logger.error(`Error running discV5 random node query: ${err}`);
133
+ }
134
+ }
135
+ getAllPeers() {
136
+ return this.discv5.kadValues();
137
+ }
138
+ getEnr() {
139
+ return this.enr.toENR();
140
+ }
141
+ getPeerId() {
142
+ return this.peerId;
143
+ }
144
+ getStatus() {
145
+ return this.currentState;
146
+ }
147
+ isBootstrapPeer(peerId) {
148
+ return this.bootstrapNodePeerIds.some((node)=>node.equals(peerId));
149
+ }
150
+ async stop() {
151
+ await this.discv5.off(Discv5Event.DISCOVERED, this.onDiscovered);
152
+ await this.discv5.off(Discv5Event.ENR_ADDED, this.onEnrAdded);
153
+ await this.discv5.stop();
154
+ this.currentState = PeerDiscoveryState.STOPPED;
155
+ }
156
+ async onEnrAdded(enr) {
157
+ const multiAddrTcp = await enr.getFullMultiaddr('tcp');
158
+ const multiAddrUdp = await enr.getFullMultiaddr('udp');
159
+ this.logger.debug(`Added ENR ${enr.encodeTxt()}`, {
160
+ multiAddrTcp,
161
+ multiAddrUdp,
162
+ nodeId: enr.nodeId
163
+ });
164
+ this.onDiscovered(enr);
165
+ }
166
+ isOurBootnode(enr) {
167
+ return this.bootstrapNodeEnrs.some((x)=>x.nodeId === enr.nodeId);
168
+ }
169
+ onDiscovered(enr) {
170
+ // Find out if this is one of our bootnodes
171
+ if (this.isOurBootnode(enr)) {
172
+ // it is, what we do here depends
173
+ if (!this.config.bootstrapNodesAsFullPeers) {
174
+ // we don't consider bootnodes as full peers, don't perform any checks and don't emit anything
175
+ return;
176
+ }
177
+ if (!this.config.bootstrapNodeEnrVersionCheck) {
178
+ // we do consider bootnodes to be full peers and we have been told to NOT version check them, so emit
179
+ this.logger.trace(`Skipping version check for bootnode ${enr.nodeId}`);
180
+ this.emit(PeerEvent.DISCOVERED, enr);
181
+ return;
182
+ }
183
+ // here, we do consider bootnodes as full peers and we must version check so we continue to regular validation
184
+ }
185
+ if (this.validateEnr(enr)) {
186
+ this.emit(PeerEvent.DISCOVERED, enr);
187
+ }
188
+ }
189
+ validateEnr(enr) {
190
+ // Check the peer is an aztec peer
191
+ const value = enr.kvs.get(AZTEC_ENR_KEY);
192
+ if (!value) {
193
+ this.logger.warn(`Peer node ${enr.nodeId} does not have aztec key in ENR`);
194
+ return false;
195
+ }
196
+ // And check it has the correct version
197
+ let compressedVersion;
198
+ try {
199
+ compressedVersion = Buffer.from(value).toString();
200
+ checkCompressedComponentVersion(compressedVersion, this.versions);
201
+ return true;
202
+ } catch (err) {
203
+ if (err.name === 'ComponentsVersionsError') {
204
+ this.logger.debug(`Peer node ${enr.nodeId} has incorrect version: ${err.message}`, {
205
+ compressedVersion,
206
+ expected: this.versions
207
+ });
208
+ } else {
209
+ this.logger.error(`Error checking peer version`, err);
210
+ }
211
+ }
212
+ return false;
213
+ }
214
+ }
@@ -0,0 +1,85 @@
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 { TxHash } from '@aztec/stdlib/tx';
5
+ import type { PeerId } from '@libp2p/interface';
6
+ import EventEmitter from 'events';
7
+ import type { ReqRespSubProtocol, SubProtocolMap } from './reqresp/interface.js';
8
+ import { type P2PService, type PeerDiscoveryService, PeerDiscoveryState } from './service.js';
9
+ /**
10
+ * A dummy implementation of the P2P Service.
11
+ */
12
+ export declare class DummyP2PService implements P2PService {
13
+ /** Returns an empty array for peers. */
14
+ getPeers(): PeerInfo[];
15
+ /**
16
+ * Starts the dummy implementation.
17
+ * @returns A resolved promise.
18
+ */
19
+ start(): Promise<void>;
20
+ /**
21
+ * Stops the dummy implementation.
22
+ * @returns A resolved promise.
23
+ */
24
+ stop(): Promise<void>;
25
+ /**
26
+ * Called to have the given message propagated through the P2P network.
27
+ * @param _ - The message to be propagated.
28
+ */
29
+ propagate<T extends Gossipable>(_: T): void;
30
+ /**
31
+ * Called upon receipt of settled transactions.
32
+ * @param _ - The hashes of the settled transactions.
33
+ */
34
+ settledTxs(_: TxHash[]): void;
35
+ /**
36
+ * Register a callback into the validator client for when a block proposal is received
37
+ */
38
+ registerBlockReceivedCallback(_: (block: BlockProposal) => Promise<BlockAttestation>): void;
39
+ /**
40
+ * Sends a request to a peer.
41
+ * @param _protocol - The protocol to send the request on.
42
+ * @param _request - The request to send.
43
+ * @returns The response from the peer, otherwise undefined.
44
+ */
45
+ sendRequest<Protocol extends ReqRespSubProtocol>(_protocol: Protocol, _request: InstanceType<SubProtocolMap[Protocol]['request']>): Promise<InstanceType<SubProtocolMap[Protocol]['response']> | undefined>;
46
+ /**
47
+ * Sends a batch request to a peer.
48
+ * @param _protocol - The protocol to send the request on.
49
+ * @param _requests - The requests to send.
50
+ * @returns The responses from the peer, otherwise undefined.
51
+ */
52
+ sendBatchRequest<Protocol extends ReqRespSubProtocol>(_protocol: Protocol, _requests: InstanceType<SubProtocolMap[Protocol]['request']>[]): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
53
+ /**
54
+ * Returns the ENR of the peer.
55
+ * @returns The ENR of the peer, otherwise undefined.
56
+ */
57
+ getEnr(): undefined;
58
+ }
59
+ /**
60
+ * A dummy implementation of the Peer Discovery Service.
61
+ */
62
+ export declare class DummyPeerDiscoveryService extends EventEmitter implements PeerDiscoveryService {
63
+ private currentState;
64
+ bootstrapNodes: string[];
65
+ /**
66
+ * Starts the dummy implementation.
67
+ * @returns A resolved promise.
68
+ */
69
+ start(): Promise<void>;
70
+ /**
71
+ * Stops the dummy implementation.
72
+ * @returns A resolved promise.
73
+ */
74
+ stop(): Promise<void>;
75
+ /**
76
+ * Called to discover peers in the network.
77
+ * @returns An array of discovered peer addresses.
78
+ */
79
+ getAllPeers(): never[];
80
+ runRandomNodesQuery(): Promise<void>;
81
+ isBootstrapPeer(_: PeerId): boolean;
82
+ getStatus(): PeerDiscoveryState;
83
+ getEnr(): undefined;
84
+ }
85
+ //# sourceMappingURL=dummy_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/services/dummy_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;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9F;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,wCAAwC;IACxC,QAAQ,IAAI,QAAQ,EAAE;IAItB;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC;IAE3C;;;OAGG;IACI,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE;IAE7B;;OAEG;IACI,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,CAAC;IAE3F;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,SAAS,kBAAkB,EACpD,SAAS,EAAE,QAAQ,EACnB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAC1D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAI1E;;;;;OAKG;IACI,gBAAgB,CAAC,QAAQ,SAAS,kBAAkB,EACzD,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAC7D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IAIhE;;;OAGG;IACI,MAAM,IAAI,SAAS;CAG3B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAa,YAAW,oBAAoB;IACzF,OAAO,CAAC,YAAY,CAA8B;IAC3C,cAAc,EAAE,MAAM,EAAE,CAAM;IAErC;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,WAAW;IAIX,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAInC,SAAS,IAAI,kBAAkB;IAI/B,MAAM,IAAI,SAAS;CAG3B"}