@aztec/p2p 0.0.0-test.0 → 0.0.1-commit.001888fc

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 (659) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +4 -3
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +26 -13
  5. package/dest/client/factory.d.ts +21 -11
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +101 -26
  8. package/dest/client/index.d.ts +2 -1
  9. package/dest/client/index.d.ts.map +1 -1
  10. package/dest/client/index.js +1 -0
  11. package/dest/client/interface.d.ts +183 -0
  12. package/dest/client/interface.d.ts.map +1 -0
  13. package/dest/client/interface.js +9 -0
  14. package/dest/client/p2p_client.d.ts +93 -221
  15. package/dest/client/p2p_client.d.ts.map +1 -1
  16. package/dest/client/p2p_client.js +760 -289
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  19. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +304 -0
  20. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  21. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  22. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  23. package/dest/config.d.ts +192 -126
  24. package/dest/config.d.ts.map +1 -1
  25. package/dest/config.js +240 -36
  26. package/dest/enr/generate-enr.d.ts +11 -3
  27. package/dest/enr/generate-enr.d.ts.map +1 -1
  28. package/dest/enr/generate-enr.js +27 -5
  29. package/dest/enr/index.d.ts +1 -1
  30. package/dest/errors/attestation-pool.error.d.ts +7 -0
  31. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  32. package/dest/errors/attestation-pool.error.js +12 -0
  33. package/dest/errors/reqresp.error.d.ts +1 -1
  34. package/dest/errors/reqresp.error.d.ts.map +1 -1
  35. package/dest/errors/tx-pool.error.d.ts +8 -0
  36. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  37. package/dest/errors/tx-pool.error.js +9 -0
  38. package/dest/index.d.ts +5 -1
  39. package/dest/index.d.ts.map +1 -1
  40. package/dest/index.js +3 -0
  41. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +125 -30
  42. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  43. package/dest/mem_pools/attestation_pool/attestation_pool.js +445 -3
  44. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  45. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  46. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +564 -173
  47. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  48. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  49. package/dest/mem_pools/attestation_pool/index.js +1 -2
  50. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -11
  51. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  52. package/dest/mem_pools/attestation_pool/mocks.js +19 -21
  53. package/dest/mem_pools/index.d.ts +3 -2
  54. package/dest/mem_pools/index.d.ts.map +1 -1
  55. package/dest/mem_pools/index.js +1 -1
  56. package/dest/mem_pools/instrumentation.d.ts +18 -12
  57. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  58. package/dest/mem_pools/instrumentation.js +58 -41
  59. package/dest/mem_pools/interface.d.ts +6 -7
  60. package/dest/mem_pools/interface.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +75 -16
  62. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +493 -142
  64. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  65. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  67. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  68. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  70. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  71. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +123 -0
  73. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  74. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  76. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  77. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  79. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  80. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  82. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  83. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  85. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  86. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  87. package/dest/mem_pools/tx_pool/index.js +0 -1
  88. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  89. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  90. package/dest/mem_pools/tx_pool/priority.js +8 -3
  91. package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
  92. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  93. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  94. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  95. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +279 -46
  96. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  97. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  99. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  100. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  102. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  103. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  105. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  106. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  108. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  109. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  111. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  112. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  114. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  115. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  116. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  117. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  118. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  119. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  120. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  121. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  122. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  123. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  124. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  125. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  126. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  127. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  128. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  129. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  130. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  131. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  132. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  133. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  134. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  135. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  136. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  137. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  138. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  139. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  140. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  141. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +215 -0
  142. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  143. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  144. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +134 -0
  145. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  146. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +216 -0
  147. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  148. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  149. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  150. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  151. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  152. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  153. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  154. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  155. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  156. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  157. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  158. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +923 -0
  159. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
  160. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  161. package/dest/msg_validators/attestation_validator/attestation_validator.js +79 -10
  162. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  163. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  164. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
  165. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  166. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  167. package/dest/msg_validators/attestation_validator/index.js +1 -0
  168. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  169. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  170. package/dest/msg_validators/clock_tolerance.js +37 -0
  171. package/dest/msg_validators/index.d.ts +2 -2
  172. package/dest/msg_validators/index.d.ts.map +1 -1
  173. package/dest/msg_validators/index.js +1 -1
  174. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  175. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  176. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  177. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +11 -0
  178. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  179. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +14 -0
  180. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +11 -0
  181. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  182. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +20 -0
  183. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  184. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  185. package/dest/msg_validators/proposal_validator/index.js +3 -0
  186. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +18 -0
  187. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  188. package/dest/msg_validators/proposal_validator/proposal_validator.js +116 -0
  189. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  190. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  191. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  192. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +4 -0
  193. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  194. package/dest/msg_validators/tx_validator/allowed_public_setup.js +31 -0
  195. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  196. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  197. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  198. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  199. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  200. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  201. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  202. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  203. package/dest/msg_validators/tx_validator/block_header_validator.js +7 -6
  204. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  205. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  206. package/dest/msg_validators/tx_validator/data_validator.js +60 -87
  207. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -6
  208. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  209. package/dest/msg_validators/tx_validator/double_spend_validator.js +24 -29
  210. package/dest/msg_validators/tx_validator/factory.d.ts +148 -0
  211. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  212. package/dest/msg_validators/tx_validator/factory.js +265 -0
  213. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  214. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  215. package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
  216. package/dest/msg_validators/tx_validator/gas_validator.d.ts +76 -0
  217. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  218. package/dest/msg_validators/tx_validator/gas_validator.js +177 -0
  219. package/dest/msg_validators/tx_validator/index.d.ts +11 -1
  220. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  221. package/dest/msg_validators/tx_validator/index.js +10 -0
  222. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -5
  223. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  224. package/dest/msg_validators/tx_validator/metadata_validator.js +40 -21
  225. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  226. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  227. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  228. package/dest/msg_validators/tx_validator/phases_validator.d.ts +35 -0
  229. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  230. package/dest/msg_validators/tx_validator/phases_validator.js +141 -0
  231. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  232. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  233. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  234. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  235. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  236. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  237. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +30 -0
  238. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  239. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  240. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
  241. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  242. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  243. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  244. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  245. package/dest/msg_validators/tx_validator/tx_proof_validator.js +8 -7
  246. package/dest/services/data_store.d.ts +1 -1
  247. package/dest/services/data_store.d.ts.map +1 -1
  248. package/dest/services/data_store.js +10 -6
  249. package/dest/services/discv5/discV5_service.d.ts +10 -9
  250. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  251. package/dest/services/discv5/discV5_service.js +64 -37
  252. package/dest/services/dummy_service.d.ts +74 -11
  253. package/dest/services/dummy_service.d.ts.map +1 -1
  254. package/dest/services/dummy_service.js +136 -5
  255. package/dest/services/encoding.d.ts +26 -7
  256. package/dest/services/encoding.d.ts.map +1 -1
  257. package/dest/services/encoding.js +82 -12
  258. package/dest/services/gossipsub/index.d.ts +3 -0
  259. package/dest/services/gossipsub/index.d.ts.map +1 -0
  260. package/dest/services/gossipsub/index.js +2 -0
  261. package/dest/services/gossipsub/scoring.d.ts +21 -3
  262. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  263. package/dest/services/gossipsub/scoring.js +24 -7
  264. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  265. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  266. package/dest/services/gossipsub/topic_score_params.js +346 -0
  267. package/dest/services/index.d.ts +6 -1
  268. package/dest/services/index.d.ts.map +1 -1
  269. package/dest/services/index.js +5 -0
  270. package/dest/services/libp2p/instrumentation.d.ts +20 -0
  271. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  272. package/dest/services/libp2p/instrumentation.js +122 -0
  273. package/dest/services/libp2p/libp2p_service.d.ts +165 -101
  274. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  275. package/dest/services/libp2p/libp2p_service.js +1478 -350
  276. package/dest/services/peer-manager/interface.d.ts +23 -0
  277. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  278. package/dest/services/peer-manager/interface.js +1 -0
  279. package/dest/services/peer-manager/metrics.d.ts +14 -3
  280. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  281. package/dest/services/peer-manager/metrics.js +50 -12
  282. package/dest/services/peer-manager/peer_manager.d.ts +103 -23
  283. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  284. package/dest/services/peer-manager/peer_manager.js +552 -82
  285. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  286. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  287. package/dest/services/peer-manager/peer_scoring.js +68 -4
  288. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +54 -0
  289. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  290. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +556 -0
  291. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  292. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  293. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  294. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +48 -0
  295. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  296. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  297. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  298. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  299. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  300. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  301. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  302. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  303. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  304. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  305. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  306. package/dest/services/reqresp/config.d.ts +11 -9
  307. package/dest/services/reqresp/config.d.ts.map +1 -1
  308. package/dest/services/reqresp/config.js +18 -4
  309. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +23 -4
  310. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  311. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +73 -10
  312. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +32 -17
  313. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  314. package/dest/services/reqresp/connection-sampler/connection_sampler.js +154 -84
  315. package/dest/services/reqresp/constants.d.ts +12 -0
  316. package/dest/services/reqresp/constants.d.ts.map +1 -0
  317. package/dest/services/reqresp/constants.js +7 -0
  318. package/dest/services/reqresp/index.d.ts +3 -2
  319. package/dest/services/reqresp/index.d.ts.map +1 -1
  320. package/dest/services/reqresp/index.js +2 -1
  321. package/dest/services/reqresp/interface.d.ts +84 -24
  322. package/dest/services/reqresp/interface.d.ts.map +1 -1
  323. package/dest/services/reqresp/interface.js +60 -27
  324. package/dest/services/reqresp/metrics.d.ts +6 -5
  325. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  326. package/dest/services/reqresp/metrics.js +17 -21
  327. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  328. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  329. package/dest/services/reqresp/protocols/auth.js +71 -0
  330. package/dest/services/reqresp/protocols/block.d.ts +6 -1
  331. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  332. package/dest/services/reqresp/protocols/block.js +30 -6
  333. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +34 -0
  334. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  335. package/dest/services/reqresp/protocols/block_txs/bitvector.js +87 -0
  336. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +13 -0
  337. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  338. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +57 -0
  339. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +70 -0
  340. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  341. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +121 -0
  342. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  343. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  344. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  345. package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
  346. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  347. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  348. package/dest/services/reqresp/protocols/index.d.ts +3 -1
  349. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  350. package/dest/services/reqresp/protocols/index.js +2 -0
  351. package/dest/services/reqresp/protocols/ping.d.ts +1 -3
  352. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  353. package/dest/services/reqresp/protocols/status.d.ts +40 -7
  354. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  355. package/dest/services/reqresp/protocols/status.js +76 -5
  356. package/dest/services/reqresp/protocols/tx.d.ts +20 -4
  357. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  358. package/dest/services/reqresp/protocols/tx.js +54 -6
  359. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  360. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
  361. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  362. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  363. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  364. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  365. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  366. package/dest/services/reqresp/reqresp.d.ts +29 -66
  367. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  368. package/dest/services/reqresp/reqresp.js +762 -249
  369. package/dest/services/reqresp/status.d.ts +10 -4
  370. package/dest/services/reqresp/status.d.ts.map +1 -1
  371. package/dest/services/reqresp/status.js +9 -2
  372. package/dest/services/service.d.ts +76 -20
  373. package/dest/services/service.d.ts.map +1 -1
  374. package/dest/services/tx_collection/config.d.ts +46 -0
  375. package/dest/services/tx_collection/config.d.ts.map +1 -0
  376. package/dest/services/tx_collection/config.js +112 -0
  377. package/dest/services/tx_collection/fast_tx_collection.d.ts +54 -0
  378. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  379. package/dest/services/tx_collection/fast_tx_collection.js +327 -0
  380. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  381. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  382. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  383. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  384. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  385. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  386. package/dest/services/tx_collection/index.d.ts +5 -0
  387. package/dest/services/tx_collection/index.d.ts.map +1 -0
  388. package/dest/services/tx_collection/index.js +4 -0
  389. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  390. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  391. package/dest/services/tx_collection/instrumentation.js +32 -0
  392. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  393. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  394. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  395. package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
  396. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  397. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  398. package/dest/services/tx_collection/slow_tx_collection.d.ts +57 -0
  399. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  400. package/dest/services/tx_collection/slow_tx_collection.js +211 -0
  401. package/dest/services/tx_collection/tx_collection.d.ts +123 -0
  402. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  403. package/dest/services/tx_collection/tx_collection.js +200 -0
  404. package/dest/services/tx_collection/tx_collection_sink.d.ts +40 -0
  405. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  406. package/dest/services/tx_collection/tx_collection_sink.js +108 -0
  407. package/dest/services/tx_collection/tx_source.d.ts +23 -0
  408. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  409. package/dest/services/tx_collection/tx_source.js +48 -0
  410. package/dest/services/tx_file_store/config.d.ts +16 -0
  411. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  412. package/dest/services/tx_file_store/config.js +22 -0
  413. package/dest/services/tx_file_store/index.d.ts +4 -0
  414. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  415. package/dest/services/tx_file_store/index.js +3 -0
  416. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  417. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  418. package/dest/services/tx_file_store/instrumentation.js +29 -0
  419. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  420. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  421. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  422. package/dest/services/tx_provider.d.ts +51 -0
  423. package/dest/services/tx_provider.d.ts.map +1 -0
  424. package/dest/services/tx_provider.js +220 -0
  425. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  426. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  427. package/dest/services/tx_provider_instrumentation.js +34 -0
  428. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  429. package/dest/test-helpers/get-ports.d.ts +1 -1
  430. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  431. package/dest/test-helpers/index.d.ts +4 -1
  432. package/dest/test-helpers/index.d.ts.map +1 -1
  433. package/dest/test-helpers/index.js +3 -0
  434. package/dest/test-helpers/make-enrs.d.ts +1 -1
  435. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  436. package/dest/test-helpers/make-enrs.js +4 -5
  437. package/dest/test-helpers/make-test-p2p-clients.d.ts +35 -8
  438. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  439. package/dest/test-helpers/make-test-p2p-clients.js +86 -17
  440. package/dest/test-helpers/mock-pubsub.d.ts +85 -0
  441. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  442. package/dest/test-helpers/mock-pubsub.js +231 -0
  443. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  444. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  445. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  446. package/dest/test-helpers/reqresp-nodes.d.ts +15 -12
  447. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  448. package/dest/test-helpers/reqresp-nodes.js +63 -28
  449. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  450. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  451. package/dest/test-helpers/test_tx_provider.js +41 -0
  452. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  453. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  454. package/dest/test-helpers/testbench-utils.js +367 -0
  455. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  456. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  457. package/dest/testbench/p2p_client_testbench_worker.js +261 -91
  458. package/dest/testbench/parse_log_file.d.ts +1 -1
  459. package/dest/testbench/parse_log_file.js +4 -4
  460. package/dest/testbench/testbench.d.ts +1 -1
  461. package/dest/testbench/testbench.js +4 -4
  462. package/dest/testbench/worker_client_manager.d.ts +53 -11
  463. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  464. package/dest/testbench/worker_client_manager.js +237 -54
  465. package/dest/types/index.d.ts +4 -2
  466. package/dest/types/index.d.ts.map +1 -1
  467. package/dest/types/index.js +2 -0
  468. package/dest/util.d.ts +25 -17
  469. package/dest/util.d.ts.map +1 -1
  470. package/dest/util.js +75 -69
  471. package/dest/versioning.d.ts +4 -4
  472. package/dest/versioning.d.ts.map +1 -1
  473. package/dest/versioning.js +8 -3
  474. package/package.json +32 -27
  475. package/src/bootstrap/bootstrap.ts +34 -15
  476. package/src/client/factory.ts +215 -58
  477. package/src/client/index.ts +1 -0
  478. package/src/client/interface.ts +235 -0
  479. package/src/client/p2p_client.ts +474 -457
  480. package/src/client/test/tx_proposal_collector/README.md +227 -0
  481. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +345 -0
  482. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  483. package/src/config.ts +409 -135
  484. package/src/enr/generate-enr.ts +39 -6
  485. package/src/errors/attestation-pool.error.ts +13 -0
  486. package/src/errors/tx-pool.error.ts +12 -0
  487. package/src/index.ts +5 -0
  488. package/src/mem_pools/attestation_pool/attestation_pool.ts +530 -29
  489. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +692 -201
  490. package/src/mem_pools/attestation_pool/index.ts +9 -2
  491. package/src/mem_pools/attestation_pool/mocks.ts +25 -17
  492. package/src/mem_pools/index.ts +4 -1
  493. package/src/mem_pools/instrumentation.ts +75 -47
  494. package/src/mem_pools/interface.ts +5 -7
  495. package/src/mem_pools/tx_pool/README.md +270 -0
  496. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +580 -143
  497. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  498. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  499. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +163 -0
  500. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  501. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  502. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  503. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  504. package/src/mem_pools/tx_pool/index.ts +0 -1
  505. package/src/mem_pools/tx_pool/priority.ts +10 -3
  506. package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
  507. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +228 -37
  508. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  509. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  510. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  511. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  512. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  513. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  514. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  515. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  516. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  517. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  518. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  519. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  520. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  521. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  522. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  523. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  524. package/src/mem_pools/tx_pool_v2/interfaces.ts +247 -0
  525. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +337 -0
  526. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  527. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  528. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  529. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1105 -0
  530. package/src/msg_validators/attestation_validator/README.md +49 -0
  531. package/src/msg_validators/attestation_validator/attestation_validator.ts +72 -14
  532. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
  533. package/src/msg_validators/attestation_validator/index.ts +1 -0
  534. package/src/msg_validators/clock_tolerance.ts +51 -0
  535. package/src/msg_validators/index.ts +1 -1
  536. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  537. package/src/msg_validators/proposal_validator/README.md +123 -0
  538. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +20 -0
  539. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -0
  540. package/src/msg_validators/proposal_validator/index.ts +3 -0
  541. package/src/msg_validators/proposal_validator/proposal_validator.ts +115 -0
  542. package/src/msg_validators/tx_validator/README.md +119 -0
  543. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  544. package/src/msg_validators/tx_validator/allowed_public_setup.ts +30 -0
  545. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  546. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  547. package/src/msg_validators/tx_validator/block_header_validator.ts +23 -10
  548. package/src/msg_validators/tx_validator/data_validator.ts +95 -71
  549. package/src/msg_validators/tx_validator/double_spend_validator.ts +31 -23
  550. package/src/msg_validators/tx_validator/factory.ts +460 -0
  551. package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
  552. package/src/msg_validators/tx_validator/gas_validator.ts +219 -0
  553. package/src/msg_validators/tx_validator/index.ts +10 -0
  554. package/src/msg_validators/tx_validator/metadata_validator.ts +80 -24
  555. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  556. package/src/msg_validators/tx_validator/phases_validator.ts +173 -0
  557. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  558. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  559. package/src/msg_validators/tx_validator/timestamp_validator.ts +57 -0
  560. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
  561. package/src/msg_validators/tx_validator/tx_proof_validator.ts +14 -8
  562. package/src/services/data_store.ts +10 -7
  563. package/src/services/discv5/discV5_service.ts +85 -39
  564. package/src/services/dummy_service.ts +210 -9
  565. package/src/services/encoding.ts +87 -11
  566. package/src/services/gossipsub/README.md +641 -0
  567. package/src/services/gossipsub/index.ts +2 -0
  568. package/src/services/gossipsub/scoring.ts +29 -5
  569. package/src/services/gossipsub/topic_score_params.ts +487 -0
  570. package/src/services/index.ts +5 -0
  571. package/src/services/libp2p/instrumentation.ts +126 -0
  572. package/src/services/libp2p/libp2p_service.ts +1335 -402
  573. package/src/services/peer-manager/interface.ts +29 -0
  574. package/src/services/peer-manager/metrics.ts +62 -12
  575. package/src/services/peer-manager/peer_manager.ts +658 -80
  576. package/src/services/peer-manager/peer_scoring.ts +70 -3
  577. package/src/services/reqresp/README.md +229 -0
  578. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  579. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +698 -0
  580. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  581. package/src/services/reqresp/batch-tx-requester/interface.ts +55 -0
  582. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  583. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  584. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  585. package/src/services/reqresp/config.ts +26 -9
  586. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +77 -10
  587. package/src/services/reqresp/connection-sampler/connection_sampler.ts +166 -95
  588. package/src/services/reqresp/constants.ts +14 -0
  589. package/src/services/reqresp/index.ts +2 -0
  590. package/src/services/reqresp/interface.ts +120 -37
  591. package/src/services/reqresp/metrics.ts +40 -28
  592. package/src/services/reqresp/protocols/auth.ts +83 -0
  593. package/src/services/reqresp/protocols/block.ts +26 -4
  594. package/src/services/reqresp/protocols/block_txs/bitvector.ts +106 -0
  595. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +76 -0
  596. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +144 -0
  597. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  598. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  599. package/src/services/reqresp/protocols/index.ts +2 -0
  600. package/src/services/reqresp/protocols/status.ts +121 -5
  601. package/src/services/reqresp/protocols/tx.ts +58 -8
  602. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  603. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  604. package/src/services/reqresp/reqresp.ts +462 -272
  605. package/src/services/reqresp/status.ts +12 -3
  606. package/src/services/service.ts +114 -22
  607. package/src/services/tx_collection/config.ts +166 -0
  608. package/src/services/tx_collection/fast_tx_collection.ts +387 -0
  609. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  610. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  611. package/src/services/tx_collection/index.ts +8 -0
  612. package/src/services/tx_collection/instrumentation.ts +41 -0
  613. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  614. package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
  615. package/src/services/tx_collection/slow_tx_collection.ts +266 -0
  616. package/src/services/tx_collection/tx_collection.ts +313 -0
  617. package/src/services/tx_collection/tx_collection_sink.ts +125 -0
  618. package/src/services/tx_collection/tx_source.ts +56 -0
  619. package/src/services/tx_file_store/config.ts +37 -0
  620. package/src/services/tx_file_store/index.ts +3 -0
  621. package/src/services/tx_file_store/instrumentation.ts +36 -0
  622. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  623. package/src/services/tx_provider.ts +233 -0
  624. package/src/services/tx_provider_instrumentation.ts +54 -0
  625. package/src/test-helpers/index.ts +3 -0
  626. package/src/test-helpers/make-enrs.ts +4 -5
  627. package/src/test-helpers/make-test-p2p-clients.ts +114 -26
  628. package/src/test-helpers/mock-pubsub.ts +325 -0
  629. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  630. package/src/test-helpers/reqresp-nodes.ts +91 -42
  631. package/src/test-helpers/test_tx_provider.ts +64 -0
  632. package/src/test-helpers/testbench-utils.ts +431 -0
  633. package/src/testbench/p2p_client_testbench_worker.ts +442 -93
  634. package/src/testbench/parse_log_file.ts +4 -4
  635. package/src/testbench/testbench.ts +4 -4
  636. package/src/testbench/worker_client_manager.ts +323 -59
  637. package/src/types/index.ts +2 -0
  638. package/src/util.ts +112 -92
  639. package/src/versioning.ts +11 -4
  640. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -22
  641. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  642. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -112
  643. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -17
  644. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  645. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -129
  646. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
  647. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  648. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
  649. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
  650. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  651. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
  652. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  653. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  654. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  655. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -159
  656. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -161
  657. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
  658. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
  659. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,21 +1,25 @@
1
- function _ts_decorate(decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- }
1
+ import { makeEthSignDigest, tryRecoverAddress } from '@aztec/foundation/crypto/secp256k1-signer';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
7
3
  import { createLogger } from '@aztec/foundation/log';
8
- import { trackSpan } from '@aztec/telemetry-client';
4
+ import { bufferToHex } from '@aztec/foundation/string';
5
+ import { DateProvider } from '@aztec/foundation/timer';
6
+ import { peerIdFromString } from '@libp2p/peer-id';
7
+ import { ENR } from '@nethermindeth/enr';
9
8
  import { inspect } from 'util';
10
9
  import { PeerEvent } from '../../types/index.js';
11
10
  import { ReqRespSubProtocol } from '../reqresp/interface.js';
11
+ import { AuthRequest, AuthResponse } from '../reqresp/protocols/auth.js';
12
12
  import { GoodByeReason, prettyGoodbyeReason } from '../reqresp/protocols/goodbye.js';
13
+ import { StatusMessage } from '../reqresp/protocols/status.js';
14
+ import { ReqRespStatus } from '../reqresp/status.js';
13
15
  import { PeerManagerMetrics } from './metrics.js';
14
16
  import { PeerScoreState } from './peer_scoring.js';
15
17
  const MAX_DIAL_ATTEMPTS = 3;
16
18
  const MAX_CACHED_PEERS = 100;
17
19
  const MAX_CACHED_PEER_AGE_MS = 5 * 60 * 1000; // 5 minutes
18
20
  const FAILED_PEER_BAN_TIME_MS = 5 * 60 * 1000; // 5 minutes timeout after failing MAX_DIAL_ATTEMPTS
21
+ const GOODBYE_DIAL_TIMEOUT_MS = 1000;
22
+ const FAILED_AUTH_HANDSHAKE_EXPIRY_MS = 60 * 60 * 1000; // 1 hour
19
23
  export class PeerManager {
20
24
  libP2PNode;
21
25
  peerDiscoveryService;
@@ -23,44 +27,150 @@ export class PeerManager {
23
27
  logger;
24
28
  peerScoring;
25
29
  reqresp;
30
+ worldStateSynchronizer;
31
+ protocolVersion;
32
+ epochCache;
33
+ dateProvider;
26
34
  cachedPeers;
27
35
  heartbeatCounter;
28
36
  displayPeerCountsPeerHeartbeat;
29
37
  timedOutPeers;
38
+ trustedPeers;
39
+ trustedPeersInitialized;
40
+ privatePeers;
41
+ privatePeersInitialized;
42
+ preferredPeers;
43
+ authenticatedPeerIdToValidatorAddress;
44
+ authenticatedValidatorAddressToPeerId;
45
+ peersToBeDisconnected;
46
+ failedAuthHandshakes;
47
+ validatorAddresses;
48
+ initializedPreferredPeers;
30
49
  metrics;
31
- discoveredPeerHandler;
32
- constructor(libP2PNode, peerDiscoveryService, config, telemetryClient, logger = createLogger('p2p:peer-manager'), peerScoring, reqresp){
50
+ handlers;
51
+ constructor(libP2PNode, peerDiscoveryService, config, telemetryClient, logger = createLogger('p2p:peer-manager'), peerScoring, reqresp, worldStateSynchronizer, protocolVersion, epochCache, dateProvider = new DateProvider()){
33
52
  this.libP2PNode = libP2PNode;
34
53
  this.peerDiscoveryService = peerDiscoveryService;
35
54
  this.config = config;
36
55
  this.logger = logger;
37
56
  this.peerScoring = peerScoring;
38
57
  this.reqresp = reqresp;
58
+ this.worldStateSynchronizer = worldStateSynchronizer;
59
+ this.protocolVersion = protocolVersion;
60
+ this.epochCache = epochCache;
61
+ this.dateProvider = dateProvider;
39
62
  this.cachedPeers = new Map();
40
63
  this.heartbeatCounter = 0;
41
64
  this.displayPeerCountsPeerHeartbeat = 0;
42
65
  this.timedOutPeers = new Map();
66
+ this.trustedPeers = new Set();
67
+ this.trustedPeersInitialized = false;
68
+ this.privatePeers = new Set();
69
+ this.privatePeersInitialized = false;
70
+ this.preferredPeers = new Set();
71
+ this.authenticatedPeerIdToValidatorAddress = new Map();
72
+ this.authenticatedValidatorAddressToPeerId = new Map();
73
+ this.peersToBeDisconnected = new Set();
74
+ this.failedAuthHandshakes = new Map();
75
+ this.validatorAddresses = [];
76
+ this.initializedPreferredPeers = false;
77
+ if (this.config.p2pDisableStatusHandshake && this.config.p2pAllowOnlyValidators) {
78
+ throw new Error('Status handshake disabled but is required to allow only validators to connect.');
79
+ }
43
80
  this.metrics = new PeerManagerMetrics(telemetryClient, 'PeerManager');
81
+ // Handle Discovered peers
82
+ this.handlers = {
83
+ handleConnectedPeerEvent: this.handleConnectedPeerEvent.bind(this),
84
+ handleDisconnectedPeerEvent: this.handleDisconnectedPeerEvent.bind(this),
85
+ handleDiscoveredPeer: (enr)=>this.handleDiscoveredPeer(enr).catch((e)=>this.logger.error('Error handling discovered peer', e))
86
+ };
44
87
  // Handle new established connections
45
- this.libP2PNode.addEventListener(PeerEvent.CONNECTED, this.handleConnectedPeerEvent.bind(this));
88
+ this.libP2PNode.addEventListener(PeerEvent.CONNECTED, this.handlers.handleConnectedPeerEvent);
46
89
  // Handle lost connections
47
- this.libP2PNode.addEventListener(PeerEvent.DISCONNECTED, this.handleDisconnectedPeerEvent.bind(this));
48
- // Handle Discovered peers
49
- this.discoveredPeerHandler = (enr)=>this.handleDiscoveredPeer(enr).catch((e)=>this.logger.error('Error handling discovered peer', e));
90
+ this.libP2PNode.addEventListener(PeerEvent.DISCONNECTED, this.handlers.handleDisconnectedPeerEvent);
50
91
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
51
- this.peerDiscoveryService.on(PeerEvent.DISCOVERED, this.discoveredPeerHandler);
92
+ this.peerDiscoveryService?.on(PeerEvent.DISCOVERED, this.handlers.handleDiscoveredPeer);
52
93
  // Display peer counts every 60 seconds
53
94
  this.displayPeerCountsPeerHeartbeat = Math.floor(60_000 / this.config.peerCheckIntervalMS);
54
95
  }
96
+ /**
97
+ * Initializes the trusted peers.
98
+ *
99
+ * This function is called when the peer manager is initialized.
100
+ */ async initializePeers() {
101
+ if (this.config.trustedPeers) {
102
+ const trustedPeersEnrs = this.config.trustedPeers.map((enr)=>ENR.decodeTxt(enr));
103
+ await Promise.all(trustedPeersEnrs.map((enr)=>enr.peerId())).then((peerIds)=>peerIds.forEach((peerId)=>this.trustedPeers.add(peerId.toString()))).finally(()=>{
104
+ this.trustedPeersInitialized = true;
105
+ }).catch((e)=>this.logger.error('Error initializing trusted peers', e));
106
+ }
107
+ if (this.config.privatePeers) {
108
+ const privatePeersEnrs = this.config.privatePeers.map((enr)=>ENR.decodeTxt(enr));
109
+ await Promise.all(privatePeersEnrs.map((enr)=>enr.peerId())).then((peerIds)=>peerIds.forEach((peerId)=>{
110
+ this.trustedPeers.add(peerId.toString());
111
+ this.privatePeers.add(peerId.toString());
112
+ })).finally(()=>{
113
+ if (!this.config.trustedPeers) {
114
+ this.trustedPeersInitialized = true;
115
+ }
116
+ this.privatePeersInitialized = true;
117
+ }).catch((e)=>this.logger.error('Error initializing private peers', e));
118
+ }
119
+ if (this.config.preferredPeers) {
120
+ const preferredPeersEnrs = this.config.preferredPeers.map((enr)=>ENR.decodeTxt(enr));
121
+ await Promise.all(preferredPeersEnrs.map((enr)=>enr.peerId())).then((peerIds)=>peerIds.forEach((peerId)=>this.preferredPeers.add(peerId.toString()))).catch((e)=>this.logger.error('Error initializing preferred peers', e));
122
+ }
123
+ }
55
124
  get tracer() {
56
125
  return this.metrics.tracer;
57
126
  }
58
- heartbeat() {
127
+ async heartbeat() {
59
128
  this.heartbeatCounter++;
60
129
  this.peerScoring.decayAllScores();
61
130
  this.cleanupExpiredTimeouts();
131
+ await this.setupDirectPeersIfValidator();
132
+ await this.updateAuthenticatedPeers();
133
+ await this.processScheduledDisconnects();
62
134
  this.discover();
63
135
  }
136
+ /*
137
+ * If this node is connecting to preferred peers, make sure it is registered validator */ async setupDirectPeersIfValidator() {
138
+ if (!this.config.preferredPeers) {
139
+ return;
140
+ }
141
+ // Already initialized preferred peers, don't wastefully repeat the same work
142
+ if (this.initializedPreferredPeers) {
143
+ return;
144
+ }
145
+ const registeredValidators = await this.epochCache.getRegisteredValidators();
146
+ const validatorSet = new Set(registeredValidators.map((v)=>v.toString()));
147
+ const isThisNodePartOfValidatorSet = this.validatorAddresses.some((v)=>validatorSet.has(v.toString()));
148
+ if (!isThisNodePartOfValidatorSet) {
149
+ return;
150
+ }
151
+ const preferredPeersEnrs = this.config.preferredPeers.map((enr)=>ENR.decodeTxt(enr));
152
+ await Promise.all(preferredPeersEnrs.map((enr)=>enr.peerId())).then((peerIds)=>peerIds.forEach((peerId)=>this.preferredPeers.add(peerId.toString()))).catch((e)=>this.logger.error('Error initializing preferred peers', e));
153
+ const directPeers = (await Promise.all(preferredPeersEnrs.map(async (enr)=>{
154
+ const peerId = await enr.peerId();
155
+ const address = enr.getLocationMultiaddr('tcp');
156
+ if (address === undefined) {
157
+ throw new Error(`Direct peer ${peerId.toString()} has no TCP address, ENR: ${enr.encodeTxt()}`);
158
+ }
159
+ return {
160
+ id: peerId,
161
+ addrs: [
162
+ address
163
+ ]
164
+ };
165
+ }))).filter((peer)=>peer !== undefined);
166
+ await Promise.all(directPeers.map((peer)=>{
167
+ this.libP2PNode.services.pubsub.direct.add(peer.id.toString());
168
+ return this.libP2PNode.peerStore.merge(peer.id, {
169
+ multiaddrs: peer.addrs
170
+ });
171
+ }));
172
+ this.initializedPreferredPeers = true;
173
+ }
64
174
  /**
65
175
  * Cleans up expired timeouts.
66
176
  *
@@ -69,7 +179,7 @@ export class PeerManager {
69
179
  * To give them a chance to reconnect.
70
180
  */ cleanupExpiredTimeouts() {
71
181
  // Clean up expired timeouts
72
- const now = Date.now();
182
+ const now = this.dateProvider.now();
73
183
  for (const [peerId, timedOutPeer] of this.timedOutPeers.entries()){
74
184
  if (now >= timedOutPeer.timeoutUntilMs) {
75
185
  this.timedOutPeers.delete(peerId);
@@ -77,26 +187,135 @@ export class PeerManager {
77
187
  }
78
188
  }
79
189
  /**
80
- * Simply logs the type of connected peer.
190
+ * Processes scheduled disconnects during heartbeat.
191
+ *
192
+ * This batch processes all peers that have been marked for disconnect.
193
+ * preventing immediate disconnects that could cause libp2p state corruption.
194
+ */ async processScheduledDisconnects() {
195
+ if (this.peersToBeDisconnected.size === 0) {
196
+ return;
197
+ }
198
+ const peersToDisconnect = Array.from(this.peersToBeDisconnected);
199
+ this.logger.debug(`Processing ${peersToDisconnect.length} scheduled disconnects`);
200
+ try {
201
+ await Promise.all(peersToDisconnect.map(async (peerIdStr)=>{
202
+ if (await this.disconnectPeer(peerIdFromString(peerIdStr))) {
203
+ this.peersToBeDisconnected.delete(peerIdStr);
204
+ }
205
+ }));
206
+ this.logger.verbose(`Disconnected ${peersToDisconnect.length} peers`, {
207
+ peersToDisconnect
208
+ });
209
+ } catch (error) {
210
+ this.logger.error('Error when disconnecting from peers', error);
211
+ }
212
+ }
213
+ /**
214
+ * Performs Status Handshake with a connected peer.
81
215
  * @param e - The connected peer event.
82
216
  */ handleConnectedPeerEvent(e) {
83
217
  const peerId = e.detail;
84
- if (this.peerDiscoveryService.isBootstrapPeer(peerId)) {
85
- this.logger.verbose(`Connected to bootstrap peer ${peerId.toString()}`);
86
- } else {
87
- this.logger.verbose(`Connected to transaction peer ${peerId.toString()}`);
218
+ this.logger.verbose(`Connected to peer ${peerId.toString()}`);
219
+ this.metrics.peerConnected(peerId);
220
+ if (this.config.p2pDisableStatusHandshake) {
221
+ return;
222
+ }
223
+ // If we are not configured to only allow validators then perform a status handshake
224
+ if (!this.config.p2pAllowOnlyValidators) {
225
+ void this.exchangeStatusHandshake(peerId);
226
+ return;
88
227
  }
228
+ // We are configured to only allow validators, but this doesn't apply to trusted, private peers or preferred peers
229
+ if (this.isProtectedPeer(peerId)) {
230
+ void this.exchangeStatusHandshake(peerId);
231
+ return;
232
+ }
233
+ // Initiate auth handshake
234
+ void this.exchangeAuthHandshake(peerId);
89
235
  }
90
236
  /**
91
237
  * Simply logs the type of disconnected peer.
92
238
  * @param e - The disconnected peer event.
93
239
  */ handleDisconnectedPeerEvent(e) {
94
240
  const peerId = e.detail;
95
- if (this.peerDiscoveryService.isBootstrapPeer(peerId)) {
96
- this.logger.verbose(`Disconnected from bootstrap peer ${peerId.toString()}`);
97
- } else {
98
- this.logger.verbose(`Disconnected from transaction peer ${peerId.toString()}`);
241
+ this.metrics.peerDisconnected(peerId);
242
+ this.logger.verbose(`Disconnected from peer ${peerId.toString()}`);
243
+ const validatorAddress = this.authenticatedPeerIdToValidatorAddress.get(peerId.toString());
244
+ if (validatorAddress !== undefined) {
245
+ this.logger.info(`Removing authentication for validator ${validatorAddress} at peer id ${peerId.toString()} due to disconnection`);
246
+ this.authenticatedValidatorAddressToPeerId.delete(validatorAddress.toString());
247
+ this.authenticatedPeerIdToValidatorAddress.delete(peerId.toString());
248
+ }
249
+ }
250
+ registerThisValidatorAddresses(address) {
251
+ this.validatorAddresses = [
252
+ ...address
253
+ ];
254
+ }
255
+ /**
256
+ * Checks if a peer is trusted.
257
+ * @param peerId - The peer ID.
258
+ * @returns True if the peer is trusted, false otherwise.
259
+ * Note: This function will return false and log a warning if the trusted peers are not initialized.
260
+ */ isTrustedPeer(peerId) {
261
+ if (!this.trustedPeersInitialized) {
262
+ this.logger.warn('Trusted peers not initialized, returning false');
263
+ return false;
99
264
  }
265
+ return this.trustedPeers.has(peerId.toString());
266
+ }
267
+ /**
268
+ * Adds a peer to the trusted peers set.
269
+ * @param peerId - The peer ID to add to trusted peers.
270
+ */ addTrustedPeer(peerId) {
271
+ const peerIdStr = peerId.toString();
272
+ this.trustedPeers.add(peerIdStr);
273
+ this.trustedPeersInitialized = true;
274
+ this.logger.verbose(`Added trusted peer ${peerIdStr}`);
275
+ }
276
+ /**
277
+ * Adds a peer to the private peers set.
278
+ * @param peerId - The peer ID to add to private peers.
279
+ */ addPrivatePeer(peerId) {
280
+ const peerIdStr = peerId.toString();
281
+ this.trustedPeers.add(peerIdStr);
282
+ this.privatePeers.add(peerIdStr);
283
+ this.trustedPeersInitialized = true;
284
+ this.privatePeersInitialized = true;
285
+ this.logger.verbose(`Added private peer ${peerIdStr}`);
286
+ }
287
+ /**
288
+ * Checks if a peer is private.
289
+ * @param peerId - The peer ID.
290
+ * @returns True if the peer is private, false otherwise.
291
+ */ isPrivatePeer(peerId) {
292
+ if (!this.privatePeersInitialized) {
293
+ this.logger.warn('Private peers not initialized, returning false');
294
+ return false;
295
+ }
296
+ return this.privatePeers.has(peerId.toString());
297
+ }
298
+ /**
299
+ * Adds a peer to the preferred peers set.
300
+ * @param peerId - The peer ID to add to preferred peers.
301
+ */ addPreferredPeer(peerId) {
302
+ const peerIdStr = peerId.toString();
303
+ this.preferredPeers.add(peerIdStr);
304
+ this.logger.verbose(`Added preferred peer ${peerIdStr}`);
305
+ }
306
+ /**
307
+ * Checks if a peer is preferred.
308
+ * @param peerId - The peer ID.
309
+ * @returns True if the peer is preferred, false otherwise.
310
+ */ isPreferredPeer(peerId) {
311
+ return this.preferredPeers.has(peerId.toString());
312
+ }
313
+ /**
314
+ * Checks if a peer is protected (either trusted or private).
315
+ * @param peerId - The peer ID.
316
+ * @returns True if the peer is protected, false otherwise.
317
+ */ isProtectedPeer(peerId) {
318
+ return this.isTrustedPeer(peerId) || this.isPrivatePeer(peerId) || this.isPreferredPeer(peerId);
100
319
  }
101
320
  /**
102
321
  * Handles a goodbye received from a peer.
@@ -107,7 +326,7 @@ export class PeerManager {
107
326
  */ goodbyeReceived(peerId, reason) {
108
327
  this.logger.debug(`Goodbye received from peer ${peerId.toString()} with reason ${prettyGoodbyeReason(reason)}`);
109
328
  this.metrics.recordGoodbyeReceived(reason);
110
- void this.disconnectPeer(peerId);
329
+ this.markPeerForDisconnect(peerId);
111
330
  }
112
331
  penalizePeer(peerId, penalty) {
113
332
  this.peerScoring.penalizePeer(peerId, penalty);
@@ -115,6 +334,10 @@ export class PeerManager {
115
334
  getPeerScore(peerId) {
116
335
  return this.peerScoring.getScore(peerId);
117
336
  }
337
+ shouldDisableP2PGossip(peerId) {
338
+ const isAuthenticated = this.isAuthenticatedPeer(peerIdFromString(peerId));
339
+ return (this.config.p2pAllowOnlyValidators ?? false) && !isAuthenticated;
340
+ }
118
341
  getPeers(includePending = false) {
119
342
  const connected = this.libP2PNode.getPeers().map((peer)=>({
120
343
  id: peer.toString(),
@@ -145,30 +368,57 @@ export class PeerManager {
145
368
  ...cachedPeers
146
369
  ];
147
370
  }
371
+ isAuthenticatedPeer(peerId) {
372
+ const peerIdAsString = peerId.toString();
373
+ return this.privatePeers.has(peerIdAsString) || this.trustedPeers.has(peerIdAsString) || this.preferredPeers.has(peerIdAsString) || this.authenticatedPeerIdToValidatorAddress.has(peerIdAsString);
374
+ }
375
+ /*
376
+ * Checks whether peer is allowed to connect
377
+ *
378
+ * @param id: Address of the node or it's peerId
379
+ *
380
+ * @returns: True if node is allowed to connect, otherwise false
381
+ * */ isNodeAllowedToConnect(id) {
382
+ const entry = this.failedAuthHandshakes.get(id.toString());
383
+ if (!entry) {
384
+ return true;
385
+ }
386
+ // In case entry is too old, remove it and allow connection
387
+ if (this.dateProvider.now() - entry.lastFailureTimestamp > FAILED_AUTH_HANDSHAKE_EXPIRY_MS) {
388
+ this.failedAuthHandshakes.delete(id.toString());
389
+ return true;
390
+ }
391
+ return entry.count <= this.config.p2pMaxFailedAuthAttemptsAllowed;
392
+ }
148
393
  /**
149
394
  * Discovers peers.
150
395
  */ discover() {
151
396
  const connections = this.libP2PNode.getConnections();
152
- const healthyConnections = this.prioritizePeers(this.pruneUnhealthyPeers(this.pruneDuplicatePeers(connections)));
397
+ const healthyConnections = this.prioritizePeers(this.pruneUnhealthyPeers(this.getNonProtectedPeers(connections)));
153
398
  // Calculate how many connections we're looking to make
154
- const peersToConnect = this.config.maxPeerCount - healthyConnections.length;
399
+ const protectedPeerCount = this.getProtectedPeerCount();
400
+ const peersToConnect = this.config.maxPeerCount - healthyConnections.length - protectedPeerCount;
155
401
  const logLevel = this.heartbeatCounter % this.displayPeerCountsPeerHeartbeat === 0 ? 'info' : 'debug';
156
- this.logger[logLevel](`Connected to ${healthyConnections.length} peers`, {
157
- connections: healthyConnections.length,
402
+ this.logger[logLevel](`Connected to ${healthyConnections.length + this.trustedPeers.size} peers`, {
403
+ discoveredConnections: healthyConnections.length,
404
+ protectedConnections: protectedPeerCount,
158
405
  maxPeerCount: this.config.maxPeerCount,
159
406
  cachedPeers: this.cachedPeers.size,
160
407
  ...this.peerScoring.getStats()
161
408
  });
409
+ this.metrics.recordPeerCount(connections.length);
410
+ this.metrics.recordHealthyPeerCount(healthyConnections.length);
162
411
  // Exit if no peers to connect
163
412
  if (peersToConnect <= 0) {
164
413
  return;
165
414
  }
166
415
  const cachedPeersToDial = [];
167
416
  const pendingDials = new Set(this.libP2PNode.getDialQueue().map((pendingDial)=>pendingDial.peerId?.toString()).filter(Boolean));
417
+ const now = this.dateProvider.now();
168
418
  for (const [id, peerData] of this.cachedPeers.entries()){
169
419
  // if already dialling or connected to, remove from cache
170
420
  if (pendingDials.has(id) || healthyConnections.some((conn)=>conn.remotePeer.equals(peerData.peerId)) || // if peer has been in cache for the max cache age, remove from cache
171
- Date.now() - peerData.addedUnixMs > MAX_CACHED_PEER_AGE_MS) {
421
+ now - peerData.addedUnixMs > MAX_CACHED_PEER_AGE_MS) {
172
422
  this.cachedPeers.delete(id);
173
423
  } else {
174
424
  // cachedPeersToDial.set(id, enr);
@@ -188,15 +438,23 @@ export class PeerManager {
188
438
  void this.peerDiscoveryService.runRandomNodesQuery();
189
439
  }
190
440
  }
441
+ getNonProtectedPeers(connections) {
442
+ return connections.filter((conn)=>!this.isProtectedPeer(conn.remotePeer));
443
+ }
444
+ getProtectedPeerCount() {
445
+ return this.trustedPeers.size + this.privatePeers.size + this.preferredPeers.size;
446
+ }
191
447
  pruneUnhealthyPeers(connections) {
192
448
  const connectedHealthyPeers = [];
193
449
  for (const peer of connections){
194
450
  const score = this.peerScoring.getScoreState(peer.remotePeer.toString());
195
451
  switch(score){
196
452
  case PeerScoreState.Banned:
453
+ this.metrics.recordLowScoreDisconnect('Banned');
197
454
  void this.goodbyeAndDisconnectPeer(peer.remotePeer, GoodByeReason.BANNED);
198
455
  break;
199
456
  case PeerScoreState.Disconnect:
457
+ this.metrics.recordLowScoreDisconnect('Disconnect');
200
458
  void this.goodbyeAndDisconnectPeer(peer.remotePeer, GoodByeReason.LOW_SCORE);
201
459
  break;
202
460
  case PeerScoreState.Healthy:
@@ -211,72 +469,69 @@ export class PeerManager {
211
469
  * @param connections - The list of connections to prune low scoring peers above the max peer count from.
212
470
  * @returns The pruned list of connections.
213
471
  */ prioritizePeers(connections) {
214
- if (connections.length > this.config.maxPeerCount) {
215
- // Sort the peer scores from lowest to highest
472
+ const protectedPeerCount = this.getProtectedPeerCount();
473
+ if (connections.length > this.config.maxPeerCount - protectedPeerCount) {
474
+ // Sort the regular peer scores from highest to lowest
216
475
  const prioritizedConnections = connections.sort((connectionA, connectionB)=>{
217
476
  const connectionScoreA = this.peerScoring.getScore(connectionA.remotePeer.toString());
218
477
  const connectionScoreB = this.peerScoring.getScore(connectionB.remotePeer.toString());
219
478
  return connectionScoreB - connectionScoreA;
220
479
  });
221
- // Disconnect from the lowest scoring connections.
222
- for (const conn of prioritizedConnections.slice(this.config.maxPeerCount)){
480
+ // Calculate how many regular peers we can keep
481
+ const peersToKeep = Math.max(0, this.config.maxPeerCount - protectedPeerCount);
482
+ // Disconnect from the lowest scoring regular connections that exceed our limit
483
+ for (const conn of prioritizedConnections.slice(peersToKeep)){
223
484
  void this.goodbyeAndDisconnectPeer(conn.remotePeer, GoodByeReason.MAX_PEERS);
224
485
  }
225
- return prioritizedConnections.slice(0, this.config.maxPeerCount);
486
+ // Return trusted connections plus the highest scoring regular connections up to the max peer count
487
+ return prioritizedConnections.slice(0, peersToKeep);
226
488
  } else {
227
489
  return connections;
228
490
  }
229
491
  }
230
- /**
231
- * If multiple connections to the same peer are found, the oldest connection is kept and the duplicates are pruned.
232
- *
233
- * This is necessary to resolve a race condition where multiple connections to the same peer are established if
234
- * they are discovered at the same time.
235
- *
236
- * @param connections - The list of connections to prune duplicate peers from.
237
- * @returns The pruned list of connections.
238
- */ pruneDuplicatePeers(connections) {
239
- const peerConnections = new Map();
240
- for (const conn of connections){
241
- const peerId = conn.remotePeer.toString();
242
- const existingConnection = peerConnections.get(peerId);
243
- if (!existingConnection) {
244
- peerConnections.set(peerId, conn);
245
- } else {
246
- // Keep the oldest connection for each peer
247
- this.logger.debug(`Found duplicate connection to peer ${peerId}, keeping oldest connection`);
248
- if (conn.timeline.open < existingConnection.timeline.open) {
249
- peerConnections.set(peerId, conn);
250
- void existingConnection.close();
251
- } else {
252
- void conn.close();
253
- }
254
- }
255
- }
256
- return [
257
- ...peerConnections.values()
258
- ];
259
- }
260
492
  async goodbyeAndDisconnectPeer(peer, reason) {
261
493
  this.logger.debug(`Disconnecting peer ${peer.toString()} with reason ${prettyGoodbyeReason(reason)}`);
262
494
  this.metrics.recordGoodbyeSent(reason);
263
495
  try {
264
- await this.reqresp.sendRequestToPeer(peer, ReqRespSubProtocol.GOODBYE, Buffer.from([
496
+ const resp = await this.reqresp.sendRequestToPeer(peer, ReqRespSubProtocol.GOODBYE, Buffer.from([
265
497
  reason
266
- ]));
498
+ ]), GOODBYE_DIAL_TIMEOUT_MS);
499
+ if (resp.status === ReqRespStatus.FAILURE) {
500
+ this.logger.debug(`Failed to send goodbye to peer ${peer.toString()}`);
501
+ } else if (resp.status === ReqRespStatus.SUCCESS) {
502
+ this.logger.verbose(`Sent goodbye to peer ${peer.toString()}`);
503
+ } else {
504
+ this.logger.debug(`Unexpected status sending goodbye to peer ${peer.toString()}: ${ReqRespStatus[resp.status]}`);
505
+ }
267
506
  } catch (error) {
268
507
  this.logger.debug(`Failed to send goodbye to peer ${peer.toString()}: ${error}`);
269
508
  } finally{
270
- await this.disconnectPeer(peer);
509
+ this.markPeerForDisconnect(peer);
271
510
  }
272
511
  }
273
- async disconnectPeer(peer) {
512
+ /*
513
+ * Marks peer to be disconnected on the next heartbeat
514
+ * */ markPeerForDisconnect(peer) {
515
+ const peerIdStr = peer.toString();
516
+ this.logger.debug(`Scheduling peer ${peerIdStr} for disconnection`);
517
+ this.peersToBeDisconnected.add(peerIdStr);
518
+ }
519
+ /**
520
+ * Performs the actual disconnection of a peer.
521
+ * This is called during heartbeat processing to avoid immediate disconnections.
522
+ *
523
+ * @returns True if peer was disconnect, otherwise false
524
+ */ async disconnectPeer(peer) {
525
+ const peerIdStr = peer.toString();
274
526
  try {
275
527
  await this.libP2PNode.hangUp(peer);
528
+ this.logger.debug(`Successfully disconnected peer ${peerIdStr}`);
529
+ return true;
276
530
  } catch (error) {
277
- this.logger.debug(`Failed to disconnect peer ${peer.toString()}`, {
278
- error: inspect(error)
531
+ this.logger.warn(`Failed to disconnect peer ${peerIdStr}`, {
532
+ error
279
533
  });
534
+ return false;
280
535
  }
281
536
  }
282
537
  /**
@@ -286,10 +541,15 @@ export class PeerManager {
286
541
  // Check that the peer has not already been banned
287
542
  const peerId = await enr.peerId();
288
543
  const peerIdString = peerId.toString();
544
+ // Don't attempt to connect to peers scheduled for disconnection
545
+ if (this.peersToBeDisconnected.has(peerIdString)) {
546
+ this.logger.trace(`Skipping peer scheduled for disconnection ${peerId}`);
547
+ return;
548
+ }
289
549
  // Check if peer is temporarily timed out
290
550
  const timedOutPeer = this.timedOutPeers.get(peerIdString);
291
551
  if (timedOutPeer) {
292
- if (Date.now() < timedOutPeer.timeoutUntilMs) {
552
+ if (this.dateProvider.now() < timedOutPeer.timeoutUntilMs) {
293
553
  this.logger.trace(`Skipping timed out peer ${peerId}`);
294
554
  return;
295
555
  }
@@ -325,7 +585,7 @@ export class PeerManager {
325
585
  enr,
326
586
  multiaddrTcp,
327
587
  dialAttempts: 0,
328
- addedUnixMs: Date.now()
588
+ addedUnixMs: this.dateProvider.now()
329
589
  };
330
590
  // Determine if we should dial immediately or not
331
591
  if (this.shouldDialPeer()) {
@@ -364,7 +624,7 @@ export class PeerManager {
364
624
  // Add to timed out peers
365
625
  this.timedOutPeers.set(id, {
366
626
  peerId: id,
367
- timeoutUntilMs: Date.now() + FAILED_PEER_BAN_TIME_MS
627
+ timeoutUntilMs: this.dateProvider.now() + FAILED_PEER_BAN_TIME_MS
368
628
  });
369
629
  }
370
630
  }
@@ -383,7 +643,11 @@ export class PeerManager {
383
643
  return;
384
644
  }
385
645
  // Remove the oldest peers
386
- for (const key of this.cachedPeers.keys()){
646
+ for (const [key, value] of this.cachedPeers.entries()){
647
+ if (this.isProtectedPeer(value.peerId)) {
648
+ this.logger.debug(`Not pruning trusted peer ${key}`);
649
+ continue;
650
+ }
387
651
  this.cachedPeers.delete(key);
388
652
  this.logger.trace(`Pruning peer ${key} from cache`);
389
653
  peersToDelete--;
@@ -392,21 +656,227 @@ export class PeerManager {
392
656
  }
393
657
  }
394
658
  }
659
+ async createStatusMessage() {
660
+ const syncSummary = (await this.worldStateSynchronizer.status()).syncSummary;
661
+ return StatusMessage.fromWorldStateSyncStatus(this.protocolVersion, syncSummary);
662
+ }
663
+ /**
664
+ * Performs status Handshake with the Peer
665
+ * The way the protocol is designed is that each peer will call this method on newly established p2p connection.
666
+ * Both peers request Status message and both peers perform validation of the received Status message.
667
+ * If this validation fails on any end that peer will initiate disconnect.
668
+ * Note: It's important for both peers to request and perform Status validation,
669
+ * Because one of the peers can be _bad peer_ and this peer can simply skip the check.
670
+ * If we don't implement validation on both ends the _bad peer_ remains connected.
671
+ * @param: peerId The Id of the peer to request the Status from.
672
+ * */ async exchangeStatusHandshake(peerId) {
673
+ try {
674
+ const ourStatus = await this.createStatusMessage();
675
+ //Note: Technically we don't have to send out status to peer as well, but we do.
676
+ //It will be easier to update protocol in the future this way if need be.
677
+ this.logger.trace(`Initiating status handshake with peer ${peerId}`);
678
+ const response = await this.reqresp.sendRequestToPeer(peerId, ReqRespSubProtocol.STATUS, ourStatus.toBuffer());
679
+ const { status } = response;
680
+ if (status !== ReqRespStatus.SUCCESS) {
681
+ //TODO: maybe hard ban these peers in the future.
682
+ //We could allow this to happen up to N times, and then hard ban?
683
+ //Hard ban: Disallow connection via e.g. libp2p's Gater
684
+ this.logger.debug(`Disconnecting peer ${peerId} who failed to respond status handshake`, {
685
+ peerId,
686
+ status: ReqRespStatus[status]
687
+ });
688
+ this.markPeerForDisconnect(peerId);
689
+ return;
690
+ }
691
+ const { data } = response;
692
+ const logData = {
693
+ peerId,
694
+ status: ReqRespStatus[status],
695
+ data: data ? bufferToHex(data) : undefined
696
+ };
697
+ const peerStatusMessage = StatusMessage.fromBuffer(data);
698
+ if (!ourStatus.validate(peerStatusMessage)) {
699
+ this.logger.debug(`Disconnecting peer ${peerId} due to failed status handshake.`, logData);
700
+ this.markPeerForDisconnect(peerId);
701
+ return;
702
+ }
703
+ this.logger.debug(`Successfully completed status handshake with peer ${peerId}`, logData);
704
+ } catch (err) {
705
+ //TODO: maybe hard ban these peers in the future
706
+ this.logger.debug(`Disconnecting peer ${peerId} due to error during status handshake: ${err.message ?? err}`, {
707
+ peerId
708
+ });
709
+ this.markPeerForDisconnect(peerId);
710
+ }
711
+ }
712
+ /**
713
+ * Performs auth Handshake with the Peer
714
+ * A superset of the status handshake. Also includes a challenge that needs to be signed by the peer's validator key.
715
+ * @param: peerId The Id of the peer to request the Status from.
716
+ * */ async exchangeAuthHandshake(peerId) {
717
+ const peerIdString = peerId.toString();
718
+ try {
719
+ const ourStatus = await this.createStatusMessage();
720
+ const authRequest = new AuthRequest(ourStatus, Fr.random());
721
+ // Note: Technically we don't have to send our status to peer as well, but we do.
722
+ // It will be easier to update protocol in the future this way if need be.
723
+ // We also need to send the challenge at least, so that the peer can sign it.
724
+ this.logger.debug(`Initiating auth handshake with peer ${peerId}`);
725
+ const response = await this.reqresp.sendRequestToPeer(peerId, ReqRespSubProtocol.AUTH, authRequest.toBuffer());
726
+ const { status } = response;
727
+ if (status !== ReqRespStatus.SUCCESS) {
728
+ this.logger.verbose(`Disconnecting peer ${peerId} who failed to respond auth handshake`, {
729
+ peerId,
730
+ status: ReqRespStatus[status]
731
+ });
732
+ this.markAuthHandshakeFailed(peerId);
733
+ this.markPeerForDisconnect(peerId);
734
+ return;
735
+ }
736
+ const { data } = response;
737
+ const logData = {
738
+ peerId,
739
+ status: ReqRespStatus[status],
740
+ data: data ? bufferToHex(data) : undefined
741
+ };
742
+ const peerAuthResponse = AuthResponse.fromBuffer(data);
743
+ const peerStatusMessage = peerAuthResponse.status;
744
+ if (!ourStatus.validate(peerStatusMessage)) {
745
+ this.logger.verbose(`Disconnecting peer ${peerId} due to failed status handshake as part of auth.`, logData);
746
+ this.markAuthHandshakeFailed(peerId);
747
+ this.markPeerForDisconnect(peerId);
748
+ return;
749
+ }
750
+ const hashToRecover = authRequest.getPayloadToSign();
751
+ const ethSignedHash = makeEthSignDigest(hashToRecover);
752
+ const sender = tryRecoverAddress(ethSignedHash, peerAuthResponse.signature);
753
+ if (!sender) {
754
+ this.logger.verbose(`Disconnecting peer ${peerId} due to failed auth handshake, invalid signature.`, logData);
755
+ this.markAuthHandshakeFailed(peerId);
756
+ this.markPeerForDisconnect(peerId);
757
+ return;
758
+ }
759
+ const registeredValidators = await this.epochCache.getRegisteredValidators();
760
+ const found = registeredValidators.find((v)=>v.toString() === sender.toString()) !== undefined;
761
+ if (!found) {
762
+ this.logger.verbose(`Disconnecting peer ${peerId} due to failed auth handshake, peer is not a registered validator.`, {
763
+ ...logData,
764
+ address: sender.toString()
765
+ });
766
+ this.markAuthHandshakeFailed(peerId);
767
+ this.markPeerForDisconnect(peerId);
768
+ return;
769
+ }
770
+ // Check to see that this validator address isn't already allocated to a different peer
771
+ const peerForAddress = this.authenticatedValidatorAddressToPeerId.get(sender.toString());
772
+ if (peerForAddress !== undefined && peerForAddress.toString() !== peerIdString) {
773
+ this.logger.verbose(`Received auth for validator ${sender.toString()} from peer ${peerIdString}, but this validator is already authenticated to peer ${peerForAddress.toString()}`, {
774
+ ...logData,
775
+ address: sender.toString()
776
+ });
777
+ return;
778
+ }
779
+ this.markAuthHandshakeSuccess(peerId);
780
+ this.authenticatedPeerIdToValidatorAddress.set(peerIdString, sender);
781
+ this.authenticatedValidatorAddressToPeerId.set(sender.toString(), peerId);
782
+ this.logger.info(`Successfully completed auth handshake with peer ${peerId}, validator address ${sender.toString()}`, {
783
+ ...logData,
784
+ address: sender.toString()
785
+ });
786
+ } catch (err) {
787
+ //TODO: maybe hard ban these peers in the future
788
+ this.logger.verbose(`Disconnecting peer ${peerId} due to error during auth handshake: ${err.message}`, {
789
+ peerId,
790
+ err
791
+ });
792
+ this.markAuthHandshakeFailed(peerId);
793
+ this.markPeerForDisconnect(peerId);
794
+ }
795
+ }
796
+ /*
797
+ * Marks when peer fails auth handshake
798
+ * */ markAuthHandshakeFailed(peerId) {
799
+ const now = this.dateProvider.now();
800
+ const peerIdStr = peerId.toString();
801
+ const existingEntry = this.failedAuthHandshakes.get(peerIdStr);
802
+ this.failedAuthHandshakes.set(peerIdStr, {
803
+ count: (existingEntry?.count || 0) + 1,
804
+ lastFailureTimestamp: now
805
+ });
806
+ const connections = this.libP2PNode.getConnections(peerId);
807
+ connections.forEach((conn)=>{
808
+ // We mark the IP address
809
+ const address = conn.remoteAddr.nodeAddress().address;
810
+ const existingAddressEntry = this.failedAuthHandshakes.get(address);
811
+ this.failedAuthHandshakes.set(address, {
812
+ count: (existingAddressEntry?.count || 0) + 1,
813
+ lastFailureTimestamp: now
814
+ });
815
+ });
816
+ }
817
+ /*
818
+ * Marks when peer exchanges auth handshake
819
+ * Removes any failed previous attempts
820
+ * */ markAuthHandshakeSuccess(peerId) {
821
+ this.failedAuthHandshakes.delete(peerId.toString());
822
+ const connections = this.libP2PNode.getConnections(peerId);
823
+ connections.forEach((conn)=>{
824
+ const address = conn.remoteAddr.nodeAddress().address;
825
+ this.failedAuthHandshakes.delete(address);
826
+ });
827
+ }
395
828
  /**
396
829
  * Stops the peer manager.
397
830
  * Removing all event listeners.
398
831
  */ async stop() {
399
832
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
400
- this.peerDiscoveryService.off(PeerEvent.DISCOVERED, this.discoveredPeerHandler);
833
+ this.peerDiscoveryService.off(PeerEvent.DISCOVERED, this.handlers.handleDiscoveredPeer);
401
834
  // Send goodbyes to all peers
402
835
  await Promise.all(this.libP2PNode.getPeers().map((peer)=>this.goodbyeAndDisconnectPeer(peer, GoodByeReason.SHUTDOWN)));
403
- this.libP2PNode.removeEventListener(PeerEvent.CONNECTED, this.handleConnectedPeerEvent);
404
- this.libP2PNode.removeEventListener(PeerEvent.DISCONNECTED, this.handleDisconnectedPeerEvent);
836
+ this.libP2PNode.removeEventListener(PeerEvent.CONNECTED, this.handlers.handleConnectedPeerEvent);
837
+ this.libP2PNode.removeEventListener(PeerEvent.DISCONNECTED, this.handlers.handleDisconnectedPeerEvent);
838
+ }
839
+ shouldTrustWithIdentity(peerId) {
840
+ return this.isProtectedPeer(peerId);
841
+ }
842
+ /**
843
+ * Performs auth request verification from peer. An auth request is valid if requested by an authorized peer (a peer we trust).
844
+ *
845
+ * @param: _authRequest - Auth request (unused)
846
+ * @param: peerId - The ID of the peer that requested the auth handshake
847
+ *
848
+ * @returns: StatusMessage if peer is trusted
849
+ *
850
+ * @throws: If peer is unauthorized
851
+ * */ async handleAuthRequestFromPeer(_authRequest, peerId) {
852
+ if (!this.shouldTrustWithIdentity(peerId)) {
853
+ this.logger.warn(`Received auth request from untrusted peer ${peerId.toString()}`);
854
+ throw new Error('Unauthorised');
855
+ }
856
+ this.logger.debug(`Received auth request from trusted peer ${peerId.toString()}`);
857
+ return await this.createStatusMessage();
858
+ }
859
+ async updateAuthenticatedPeers() {
860
+ const registeredValidators = await this.epochCache.getRegisteredValidators();
861
+ const validatorSet = new Set(registeredValidators.map((v)=>v.toString()));
862
+ const peersToDelete = new Set();
863
+ const addressesToDelete = new Set();
864
+ for (const [peer, address] of this.authenticatedPeerIdToValidatorAddress.entries()){
865
+ const addressString = address.toString();
866
+ if (!validatorSet.has(addressString)) {
867
+ peersToDelete.add(peer);
868
+ addressesToDelete.add(addressString);
869
+ this.logger.info(`Removing authentication for peer ${peer.toString()} at address ${addressString} due to no longer being a registered validator`);
870
+ }
871
+ }
872
+ for (const peer of peersToDelete){
873
+ this.authenticatedPeerIdToValidatorAddress.delete(peer);
874
+ }
875
+ for (const address of addressesToDelete){
876
+ this.authenticatedValidatorAddressToPeerId.delete(address);
877
+ }
405
878
  }
406
879
  }
407
- _ts_decorate([
408
- trackSpan('PeerManager.heartbeat')
409
- ], PeerManager.prototype, "heartbeat", null);
410
880
  /**
411
881
  * copied from github.com/ChainSafe/lodestar
412
882
  * libp2p errors with extremely noisy errors here, which are deeply nested taking 30-50 lines.