@lodestar/beacon-node 1.35.0-dev.47470aab65 → 1.35.0-dev.47c570ab76

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 (930) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/lodestar/index.js +1 -1
  4. package/lib/api/impl/lodestar/index.js.map +1 -1
  5. package/lib/api/impl/validator/index.js +8 -9
  6. package/lib/api/impl/validator/index.js.map +1 -1
  7. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  8. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  9. package/lib/chain/blocks/blockInput/blockInput.js +1 -1
  10. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  11. package/lib/chain/blocks/importBlock.js +6 -7
  12. package/lib/chain/blocks/importBlock.js.map +1 -1
  13. package/lib/chain/blocks/verifyBlocksDataAvailability.js +1 -8
  14. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  15. package/lib/chain/blocks/writeBlockInputToDb.js +7 -1
  16. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  17. package/lib/chain/chain.js +4 -3
  18. package/lib/chain/chain.js.map +1 -1
  19. package/lib/chain/emitter.d.ts +2 -2
  20. package/lib/chain/opPools/attestationPool.d.ts +3 -2
  21. package/lib/chain/opPools/attestationPool.js +5 -3
  22. package/lib/chain/opPools/attestationPool.js.map +1 -1
  23. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +2 -3
  24. package/lib/chain/opPools/syncCommitteeMessagePool.js +5 -6
  25. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  26. package/lib/chain/opPools/types.d.ts +1 -1
  27. package/lib/chain/opPools/types.js +1 -1
  28. package/lib/chain/opPools/types.js.map +1 -1
  29. package/lib/chain/prepareNextSlot.d.ts +3 -3
  30. package/lib/chain/prepareNextSlot.js +8 -8
  31. package/lib/chain/prepareNextSlot.js.map +1 -1
  32. package/lib/chain/stateCache/persistentCheckpointsCache.js +8 -9
  33. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  34. package/lib/chain/validation/lightClientFinalityUpdate.js +3 -4
  35. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  36. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +4 -6
  37. package/lib/chain/validation/lightClientOptimisticUpdate.js +11 -11
  38. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  39. package/lib/chain/validatorMonitor.js +15 -21
  40. package/lib/chain/validatorMonitor.js.map +1 -1
  41. package/lib/db/buckets.d.ts +4 -4
  42. package/lib/db/buckets.js +4 -4
  43. package/lib/db/buckets.js.map +1 -1
  44. package/lib/db/repositories/blobSidecars.js +1 -1
  45. package/lib/db/repositories/blobSidecars.js.map +1 -1
  46. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  47. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  48. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  49. package/lib/db/repositories/dataColumnSidecar.js +1 -1
  50. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  51. package/lib/db/repositories/dataColumnSidecarArchive.js +1 -1
  52. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  53. package/lib/metrics/metrics/lodestar.d.ts +1 -1
  54. package/lib/metrics/metrics/lodestar.js +3 -3
  55. package/lib/metrics/metrics/lodestar.js.map +1 -1
  56. package/lib/network/gossip/gossipsub.js +1 -1
  57. package/lib/network/gossip/gossipsub.js.map +1 -1
  58. package/lib/network/gossip/scoringParameters.js +4 -4
  59. package/lib/network/gossip/scoringParameters.js.map +1 -1
  60. package/lib/network/network.d.ts +1 -1
  61. package/lib/network/network.js +13 -11
  62. package/lib/network/network.js.map +1 -1
  63. package/lib/network/peers/peerManager.js +1 -2
  64. package/lib/network/peers/peerManager.js.map +1 -1
  65. package/lib/network/processor/gossipHandlers.js +1 -1
  66. package/lib/network/processor/gossipHandlers.js.map +1 -1
  67. package/lib/network/processor/index.d.ts +1 -1
  68. package/lib/network/processor/index.js +3 -2
  69. package/lib/network/processor/index.js.map +1 -1
  70. package/lib/network/subnets/attnetsService.js +1 -1
  71. package/lib/network/subnets/attnetsService.js.map +1 -1
  72. package/lib/node/notifier.js +1 -1
  73. package/lib/node/notifier.js.map +1 -1
  74. package/lib/sync/types.d.ts +1 -0
  75. package/lib/sync/types.js.map +1 -1
  76. package/lib/sync/unknownBlock.d.ts +1 -0
  77. package/lib/sync/unknownBlock.js +20 -18
  78. package/lib/sync/unknownBlock.js.map +1 -1
  79. package/lib/util/blobs.js +3 -5
  80. package/lib/util/blobs.js.map +1 -1
  81. package/lib/util/clock.d.ts +3 -8
  82. package/lib/util/clock.js +5 -8
  83. package/lib/util/clock.js.map +1 -1
  84. package/package.json +20 -18
  85. package/lib/api/impl/api.d.ts.map +0 -1
  86. package/lib/api/impl/beacon/blocks/index.d.ts.map +0 -1
  87. package/lib/api/impl/beacon/blocks/utils.d.ts.map +0 -1
  88. package/lib/api/impl/beacon/index.d.ts.map +0 -1
  89. package/lib/api/impl/beacon/pool/index.d.ts.map +0 -1
  90. package/lib/api/impl/beacon/rewards/index.d.ts.map +0 -1
  91. package/lib/api/impl/beacon/state/index.d.ts.map +0 -1
  92. package/lib/api/impl/beacon/state/utils.d.ts.map +0 -1
  93. package/lib/api/impl/config/constants.d.ts.map +0 -1
  94. package/lib/api/impl/config/index.d.ts.map +0 -1
  95. package/lib/api/impl/debug/index.d.ts.map +0 -1
  96. package/lib/api/impl/errors.d.ts.map +0 -1
  97. package/lib/api/impl/events/index.d.ts.map +0 -1
  98. package/lib/api/impl/index.d.ts.map +0 -1
  99. package/lib/api/impl/lightclient/index.d.ts.map +0 -1
  100. package/lib/api/impl/lodestar/index.d.ts.map +0 -1
  101. package/lib/api/impl/node/index.d.ts.map +0 -1
  102. package/lib/api/impl/node/utils.d.ts.map +0 -1
  103. package/lib/api/impl/proof/index.d.ts.map +0 -1
  104. package/lib/api/impl/types.d.ts.map +0 -1
  105. package/lib/api/impl/utils.d.ts.map +0 -1
  106. package/lib/api/impl/validator/index.d.ts.map +0 -1
  107. package/lib/api/impl/validator/utils.d.ts.map +0 -1
  108. package/lib/api/index.d.ts.map +0 -1
  109. package/lib/api/options.d.ts.map +0 -1
  110. package/lib/api/rest/activeSockets.d.ts.map +0 -1
  111. package/lib/api/rest/base.d.ts.map +0 -1
  112. package/lib/api/rest/index.d.ts.map +0 -1
  113. package/lib/api/rest/swaggerUI.d.ts.map +0 -1
  114. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +0 -1
  115. package/lib/chain/ColumnReconstructionTracker.d.ts.map +0 -1
  116. package/lib/chain/GetBlobsTracker.d.ts.map +0 -1
  117. package/lib/chain/archiveStore/archiveStore.d.ts.map +0 -1
  118. package/lib/chain/archiveStore/constants.d.ts.map +0 -1
  119. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +0 -1
  120. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +0 -1
  121. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +0 -1
  122. package/lib/chain/archiveStore/historicalState/types.d.ts.map +0 -1
  123. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +0 -1
  124. package/lib/chain/archiveStore/index.d.ts.map +0 -1
  125. package/lib/chain/archiveStore/interface.d.ts.map +0 -1
  126. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +0 -1
  127. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +0 -1
  128. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +0 -1
  129. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +0 -1
  130. package/lib/chain/balancesCache.d.ts.map +0 -1
  131. package/lib/chain/beaconProposerCache.d.ts.map +0 -1
  132. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +0 -1
  133. package/lib/chain/blocks/blockInput/errors.d.ts.map +0 -1
  134. package/lib/chain/blocks/blockInput/index.d.ts.map +0 -1
  135. package/lib/chain/blocks/blockInput/types.d.ts.map +0 -1
  136. package/lib/chain/blocks/blockInput/utils.d.ts.map +0 -1
  137. package/lib/chain/blocks/importBlock.d.ts.map +0 -1
  138. package/lib/chain/blocks/index.d.ts.map +0 -1
  139. package/lib/chain/blocks/types.d.ts.map +0 -1
  140. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +0 -1
  141. package/lib/chain/blocks/utils/chainSegment.d.ts.map +0 -1
  142. package/lib/chain/blocks/utils/checkpoint.d.ts.map +0 -1
  143. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +0 -1
  144. package/lib/chain/blocks/utils/ownBanner.d.ts.map +0 -1
  145. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +0 -1
  146. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +0 -1
  147. package/lib/chain/blocks/verifyBlock.d.ts.map +0 -1
  148. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +0 -1
  149. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +0 -1
  150. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +0 -1
  151. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +0 -1
  152. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +0 -1
  153. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +0 -1
  154. package/lib/chain/bls/index.d.ts.map +0 -1
  155. package/lib/chain/bls/interface.d.ts.map +0 -1
  156. package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
  157. package/lib/chain/bls/multithread/index.d.ts.map +0 -1
  158. package/lib/chain/bls/multithread/jobItem.d.ts.map +0 -1
  159. package/lib/chain/bls/multithread/poolSize.d.ts.map +0 -1
  160. package/lib/chain/bls/multithread/types.d.ts.map +0 -1
  161. package/lib/chain/bls/multithread/utils.d.ts.map +0 -1
  162. package/lib/chain/bls/multithread/worker.d.ts.map +0 -1
  163. package/lib/chain/bls/singleThread.d.ts.map +0 -1
  164. package/lib/chain/bls/utils.d.ts.map +0 -1
  165. package/lib/chain/chain.d.ts.map +0 -1
  166. package/lib/chain/emitter.d.ts.map +0 -1
  167. package/lib/chain/errors/attestationError.d.ts.map +0 -1
  168. package/lib/chain/errors/attesterSlashingError.d.ts.map +0 -1
  169. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  170. package/lib/chain/errors/blockError.d.ts.map +0 -1
  171. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +0 -1
  172. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +0 -1
  173. package/lib/chain/errors/gossipValidation.d.ts.map +0 -1
  174. package/lib/chain/errors/index.d.ts.map +0 -1
  175. package/lib/chain/errors/lightClientError.d.ts.map +0 -1
  176. package/lib/chain/errors/proposerSlashingError.d.ts.map +0 -1
  177. package/lib/chain/errors/syncCommitteeError.d.ts.map +0 -1
  178. package/lib/chain/errors/voluntaryExitError.d.ts.map +0 -1
  179. package/lib/chain/forkChoice/index.d.ts.map +0 -1
  180. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  181. package/lib/chain/genesis/interface.d.ts.map +0 -1
  182. package/lib/chain/index.d.ts.map +0 -1
  183. package/lib/chain/initState.d.ts.map +0 -1
  184. package/lib/chain/interface.d.ts.map +0 -1
  185. package/lib/chain/lightClient/index.d.ts.map +0 -1
  186. package/lib/chain/lightClient/proofs.d.ts.map +0 -1
  187. package/lib/chain/lightClient/types.d.ts.map +0 -1
  188. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +0 -1
  189. package/lib/chain/opPools/attestationPool.d.ts.map +0 -1
  190. package/lib/chain/opPools/index.d.ts.map +0 -1
  191. package/lib/chain/opPools/opPool.d.ts.map +0 -1
  192. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +0 -1
  193. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +0 -1
  194. package/lib/chain/opPools/types.d.ts.map +0 -1
  195. package/lib/chain/opPools/utils.d.ts.map +0 -1
  196. package/lib/chain/options.d.ts.map +0 -1
  197. package/lib/chain/prepareNextSlot.d.ts.map +0 -1
  198. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +0 -1
  199. package/lib/chain/produceBlock/index.d.ts.map +0 -1
  200. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +0 -1
  201. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +0 -1
  202. package/lib/chain/regen/errors.d.ts.map +0 -1
  203. package/lib/chain/regen/index.d.ts.map +0 -1
  204. package/lib/chain/regen/interface.d.ts.map +0 -1
  205. package/lib/chain/regen/queued.d.ts.map +0 -1
  206. package/lib/chain/regen/regen.d.ts.map +0 -1
  207. package/lib/chain/reprocess.d.ts.map +0 -1
  208. package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
  209. package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
  210. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
  211. package/lib/chain/seenCache/index.d.ts.map +0 -1
  212. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +0 -1
  213. package/lib/chain/seenCache/seenAttestationData.d.ts.map +0 -1
  214. package/lib/chain/seenCache/seenAttesters.d.ts.map +0 -1
  215. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +0 -1
  216. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +0 -1
  217. package/lib/chain/seenCache/seenCommittee.d.ts.map +0 -1
  218. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +0 -1
  219. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +0 -1
  220. package/lib/chain/serializeState.d.ts.map +0 -1
  221. package/lib/chain/shufflingCache.d.ts.map +0 -1
  222. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
  223. package/lib/chain/stateCache/datastore/db.d.ts.map +0 -1
  224. package/lib/chain/stateCache/datastore/file.d.ts.map +0 -1
  225. package/lib/chain/stateCache/datastore/index.d.ts.map +0 -1
  226. package/lib/chain/stateCache/datastore/types.d.ts.map +0 -1
  227. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +0 -1
  228. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
  229. package/lib/chain/stateCache/index.d.ts.map +0 -1
  230. package/lib/chain/stateCache/mapMetrics.d.ts.map +0 -1
  231. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +0 -1
  232. package/lib/chain/stateCache/types.d.ts.map +0 -1
  233. package/lib/chain/validation/aggregateAndProof.d.ts.map +0 -1
  234. package/lib/chain/validation/attestation.d.ts.map +0 -1
  235. package/lib/chain/validation/attesterSlashing.d.ts.map +0 -1
  236. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  237. package/lib/chain/validation/block.d.ts.map +0 -1
  238. package/lib/chain/validation/blsToExecutionChange.d.ts.map +0 -1
  239. package/lib/chain/validation/dataColumnSidecar.d.ts.map +0 -1
  240. package/lib/chain/validation/index.d.ts.map +0 -1
  241. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +0 -1
  242. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +0 -1
  243. package/lib/chain/validation/proposerSlashing.d.ts.map +0 -1
  244. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +0 -1
  245. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +0 -1
  246. package/lib/chain/validation/signatureSets/index.d.ts.map +0 -1
  247. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +0 -1
  248. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +0 -1
  249. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +0 -1
  250. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +0 -1
  251. package/lib/chain/validation/syncCommittee.d.ts.map +0 -1
  252. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +0 -1
  253. package/lib/chain/validation/voluntaryExit.d.ts.map +0 -1
  254. package/lib/chain/validatorMonitor.d.ts.map +0 -1
  255. package/lib/constants/constants.d.ts.map +0 -1
  256. package/lib/constants/index.d.ts.map +0 -1
  257. package/lib/constants/network.d.ts.map +0 -1
  258. package/lib/db/beacon.d.ts.map +0 -1
  259. package/lib/db/buckets.d.ts.map +0 -1
  260. package/lib/db/index.d.ts.map +0 -1
  261. package/lib/db/interface.d.ts.map +0 -1
  262. package/lib/db/options.d.ts.map +0 -1
  263. package/lib/db/repositories/attesterSlashing.d.ts.map +0 -1
  264. package/lib/db/repositories/backfilledRanges.d.ts.map +0 -1
  265. package/lib/db/repositories/blobSidecars.d.ts.map +0 -1
  266. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +0 -1
  267. package/lib/db/repositories/block.d.ts.map +0 -1
  268. package/lib/db/repositories/blockArchive.d.ts.map +0 -1
  269. package/lib/db/repositories/blockArchiveIndex.d.ts.map +0 -1
  270. package/lib/db/repositories/blsToExecutionChange.d.ts.map +0 -1
  271. package/lib/db/repositories/checkpointState.d.ts.map +0 -1
  272. package/lib/db/repositories/dataColumnSidecar.d.ts.map +0 -1
  273. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +0 -1
  274. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  275. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  276. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  277. package/lib/db/repositories/index.d.ts.map +0 -1
  278. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +0 -1
  279. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +0 -1
  280. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +0 -1
  281. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +0 -1
  282. package/lib/db/repositories/proposerSlashing.d.ts.map +0 -1
  283. package/lib/db/repositories/stateArchive.d.ts.map +0 -1
  284. package/lib/db/repositories/stateArchiveIndex.d.ts.map +0 -1
  285. package/lib/db/repositories/voluntaryExit.d.ts.map +0 -1
  286. package/lib/db/single/index.d.ts.map +0 -1
  287. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  288. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  289. package/lib/eth1/errors.d.ts.map +0 -1
  290. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  291. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  292. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  293. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
  294. package/lib/eth1/index.d.ts.map +0 -1
  295. package/lib/eth1/interface.d.ts.map +0 -1
  296. package/lib/eth1/options.d.ts.map +0 -1
  297. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  298. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  299. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  300. package/lib/eth1/provider/utils.d.ts.map +0 -1
  301. package/lib/eth1/stream.d.ts.map +0 -1
  302. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  303. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  304. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  305. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  306. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  307. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  308. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  309. package/lib/execution/builder/cache.d.ts.map +0 -1
  310. package/lib/execution/builder/http.d.ts.map +0 -1
  311. package/lib/execution/builder/index.d.ts.map +0 -1
  312. package/lib/execution/builder/interface.d.ts.map +0 -1
  313. package/lib/execution/builder/utils.d.ts.map +0 -1
  314. package/lib/execution/engine/disabled.d.ts.map +0 -1
  315. package/lib/execution/engine/http.d.ts.map +0 -1
  316. package/lib/execution/engine/index.d.ts.map +0 -1
  317. package/lib/execution/engine/interface.d.ts.map +0 -1
  318. package/lib/execution/engine/mock.d.ts.map +0 -1
  319. package/lib/execution/engine/payloadIdCache.d.ts.map +0 -1
  320. package/lib/execution/engine/types.d.ts.map +0 -1
  321. package/lib/execution/engine/utils.d.ts.map +0 -1
  322. package/lib/execution/index.d.ts.map +0 -1
  323. package/lib/index.d.ts.map +0 -1
  324. package/lib/metrics/index.d.ts.map +0 -1
  325. package/lib/metrics/metrics/beacon.d.ts.map +0 -1
  326. package/lib/metrics/metrics/lodestar.d.ts.map +0 -1
  327. package/lib/metrics/metrics.d.ts.map +0 -1
  328. package/lib/metrics/nodeJsMetrics.d.ts.map +0 -1
  329. package/lib/metrics/options.d.ts.map +0 -1
  330. package/lib/metrics/server/http.d.ts.map +0 -1
  331. package/lib/metrics/server/index.d.ts.map +0 -1
  332. package/lib/metrics/utils/avgMinMax.d.ts.map +0 -1
  333. package/lib/metrics/utils/gauge.d.ts.map +0 -1
  334. package/lib/metrics/utils/registryMetricCreator.d.ts.map +0 -1
  335. package/lib/monitoring/clientStats.d.ts.map +0 -1
  336. package/lib/monitoring/index.d.ts.map +0 -1
  337. package/lib/monitoring/options.d.ts.map +0 -1
  338. package/lib/monitoring/properties.d.ts.map +0 -1
  339. package/lib/monitoring/service.d.ts.map +0 -1
  340. package/lib/monitoring/system.d.ts.map +0 -1
  341. package/lib/monitoring/types.d.ts.map +0 -1
  342. package/lib/network/core/events.d.ts.map +0 -1
  343. package/lib/network/core/index.d.ts.map +0 -1
  344. package/lib/network/core/metrics.d.ts.map +0 -1
  345. package/lib/network/core/networkCore.d.ts.map +0 -1
  346. package/lib/network/core/networkCoreWorker.d.ts.map +0 -1
  347. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +0 -1
  348. package/lib/network/core/types.d.ts.map +0 -1
  349. package/lib/network/discv5/index.d.ts.map +0 -1
  350. package/lib/network/discv5/types.d.ts.map +0 -1
  351. package/lib/network/discv5/utils.d.ts.map +0 -1
  352. package/lib/network/discv5/worker.d.ts.map +0 -1
  353. package/lib/network/events.d.ts.map +0 -1
  354. package/lib/network/forks.d.ts.map +0 -1
  355. package/lib/network/gossip/constants.d.ts.map +0 -1
  356. package/lib/network/gossip/encoding.d.ts.map +0 -1
  357. package/lib/network/gossip/errors.d.ts.map +0 -1
  358. package/lib/network/gossip/gossipsub.d.ts.map +0 -1
  359. package/lib/network/gossip/index.d.ts.map +0 -1
  360. package/lib/network/gossip/interface.d.ts.map +0 -1
  361. package/lib/network/gossip/metrics.d.ts.map +0 -1
  362. package/lib/network/gossip/scoringParameters.d.ts.map +0 -1
  363. package/lib/network/gossip/topic.d.ts.map +0 -1
  364. package/lib/network/index.d.ts.map +0 -1
  365. package/lib/network/interface.d.ts.map +0 -1
  366. package/lib/network/libp2p/error.d.ts.map +0 -1
  367. package/lib/network/libp2p/index.d.ts.map +0 -1
  368. package/lib/network/metadata.d.ts.map +0 -1
  369. package/lib/network/network.d.ts.map +0 -1
  370. package/lib/network/networkConfig.d.ts.map +0 -1
  371. package/lib/network/options.d.ts.map +0 -1
  372. package/lib/network/peers/client.d.ts.map +0 -1
  373. package/lib/network/peers/datastore.d.ts.map +0 -1
  374. package/lib/network/peers/discover.d.ts.map +0 -1
  375. package/lib/network/peers/index.d.ts.map +0 -1
  376. package/lib/network/peers/peerManager.d.ts.map +0 -1
  377. package/lib/network/peers/peersData.d.ts.map +0 -1
  378. package/lib/network/peers/score/constants.d.ts.map +0 -1
  379. package/lib/network/peers/score/index.d.ts.map +0 -1
  380. package/lib/network/peers/score/interface.d.ts.map +0 -1
  381. package/lib/network/peers/score/score.d.ts.map +0 -1
  382. package/lib/network/peers/score/store.d.ts.map +0 -1
  383. package/lib/network/peers/score/utils.d.ts.map +0 -1
  384. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +0 -1
  385. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +0 -1
  386. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +0 -1
  387. package/lib/network/peers/utils/index.d.ts.map +0 -1
  388. package/lib/network/peers/utils/prioritizePeers.d.ts.map +0 -1
  389. package/lib/network/peers/utils/subnetMap.d.ts.map +0 -1
  390. package/lib/network/processor/aggregatorTracker.d.ts.map +0 -1
  391. package/lib/network/processor/extractSlotRootFns.d.ts.map +0 -1
  392. package/lib/network/processor/gossipHandlers.d.ts.map +0 -1
  393. package/lib/network/processor/gossipQueues/index.d.ts.map +0 -1
  394. package/lib/network/processor/gossipQueues/indexed.d.ts.map +0 -1
  395. package/lib/network/processor/gossipQueues/linear.d.ts.map +0 -1
  396. package/lib/network/processor/gossipQueues/types.d.ts.map +0 -1
  397. package/lib/network/processor/gossipValidatorFn.d.ts.map +0 -1
  398. package/lib/network/processor/index.d.ts.map +0 -1
  399. package/lib/network/processor/types.d.ts.map +0 -1
  400. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +0 -1
  401. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +0 -1
  402. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +0 -1
  403. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  404. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  405. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +0 -1
  406. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +0 -1
  407. package/lib/network/reqresp/handlers/index.d.ts.map +0 -1
  408. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +0 -1
  409. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +0 -1
  410. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +0 -1
  411. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +0 -1
  412. package/lib/network/reqresp/index.d.ts.map +0 -1
  413. package/lib/network/reqresp/interface.d.ts.map +0 -1
  414. package/lib/network/reqresp/protocols.d.ts.map +0 -1
  415. package/lib/network/reqresp/rateLimit.d.ts.map +0 -1
  416. package/lib/network/reqresp/score.d.ts.map +0 -1
  417. package/lib/network/reqresp/types.d.ts.map +0 -1
  418. package/lib/network/reqresp/utils/collect.d.ts.map +0 -1
  419. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +0 -1
  420. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +0 -1
  421. package/lib/network/statusCache.d.ts.map +0 -1
  422. package/lib/network/subnets/attnetsService.d.ts.map +0 -1
  423. package/lib/network/subnets/index.d.ts.map +0 -1
  424. package/lib/network/subnets/interface.d.ts.map +0 -1
  425. package/lib/network/subnets/syncnetsService.d.ts.map +0 -1
  426. package/lib/network/subnets/util.d.ts.map +0 -1
  427. package/lib/network/util.d.ts.map +0 -1
  428. package/lib/node/index.d.ts.map +0 -1
  429. package/lib/node/nodejs.d.ts.map +0 -1
  430. package/lib/node/notifier.d.ts.map +0 -1
  431. package/lib/node/options.d.ts.map +0 -1
  432. package/lib/node/utils/interop/deposits.d.ts.map +0 -1
  433. package/lib/node/utils/interop/state.d.ts.map +0 -1
  434. package/lib/node/utils/lightclient.d.ts.map +0 -1
  435. package/lib/node/utils/state.d.ts.map +0 -1
  436. package/lib/sync/backfill/backfill.d.ts.map +0 -1
  437. package/lib/sync/backfill/errors.d.ts.map +0 -1
  438. package/lib/sync/backfill/index.d.ts.map +0 -1
  439. package/lib/sync/backfill/verify.d.ts.map +0 -1
  440. package/lib/sync/constants.d.ts.map +0 -1
  441. package/lib/sync/index.d.ts.map +0 -1
  442. package/lib/sync/interface.d.ts.map +0 -1
  443. package/lib/sync/options.d.ts.map +0 -1
  444. package/lib/sync/range/batch.d.ts.map +0 -1
  445. package/lib/sync/range/chain.d.ts.map +0 -1
  446. package/lib/sync/range/range.d.ts.map +0 -1
  447. package/lib/sync/range/utils/batches.d.ts.map +0 -1
  448. package/lib/sync/range/utils/chainTarget.d.ts.map +0 -1
  449. package/lib/sync/range/utils/hashBlocks.d.ts.map +0 -1
  450. package/lib/sync/range/utils/index.d.ts.map +0 -1
  451. package/lib/sync/range/utils/peerBalancer.d.ts.map +0 -1
  452. package/lib/sync/range/utils/updateChains.d.ts.map +0 -1
  453. package/lib/sync/sync.d.ts.map +0 -1
  454. package/lib/sync/types.d.ts.map +0 -1
  455. package/lib/sync/unknownBlock.d.ts.map +0 -1
  456. package/lib/sync/utils/downloadByRange.d.ts.map +0 -1
  457. package/lib/sync/utils/downloadByRoot.d.ts.map +0 -1
  458. package/lib/sync/utils/pendingBlocksTree.d.ts.map +0 -1
  459. package/lib/sync/utils/remoteSyncType.d.ts.map +0 -1
  460. package/lib/util/address.d.ts.map +0 -1
  461. package/lib/util/array.d.ts.map +0 -1
  462. package/lib/util/asyncIterableToEvents.d.ts.map +0 -1
  463. package/lib/util/binarySearch.d.ts.map +0 -1
  464. package/lib/util/bitArray.d.ts.map +0 -1
  465. package/lib/util/blobs.d.ts.map +0 -1
  466. package/lib/util/bufferPool.d.ts.map +0 -1
  467. package/lib/util/bytes.d.ts.map +0 -1
  468. package/lib/util/chunkify.d.ts.map +0 -1
  469. package/lib/util/clock.d.ts.map +0 -1
  470. package/lib/util/dataColumns.d.ts.map +0 -1
  471. package/lib/util/dependentRoot.d.ts.map +0 -1
  472. package/lib/util/enum.d.ts.map +0 -1
  473. package/lib/util/error.d.ts.map +0 -1
  474. package/lib/util/eventLoop.d.ts.map +0 -1
  475. package/lib/util/execution.d.ts.map +0 -1
  476. package/lib/util/file.d.ts.map +0 -1
  477. package/lib/util/forkChoice.d.ts.map +0 -1
  478. package/lib/util/forkName.d.ts.map +0 -1
  479. package/lib/util/graffiti.d.ts.map +0 -1
  480. package/lib/util/hex.d.ts.map +0 -1
  481. package/lib/util/index.d.ts.map +0 -1
  482. package/lib/util/ip.d.ts.map +0 -1
  483. package/lib/util/itTrigger.d.ts.map +0 -1
  484. package/lib/util/kzg.d.ts.map +0 -1
  485. package/lib/util/map.d.ts.map +0 -1
  486. package/lib/util/metadata.d.ts.map +0 -1
  487. package/lib/util/multifork.d.ts.map +0 -1
  488. package/lib/util/numpy.d.ts.map +0 -1
  489. package/lib/util/peerId.d.ts.map +0 -1
  490. package/lib/util/profile.d.ts.map +0 -1
  491. package/lib/util/promises.d.ts.map +0 -1
  492. package/lib/util/queue/errors.d.ts.map +0 -1
  493. package/lib/util/queue/fnQueue.d.ts.map +0 -1
  494. package/lib/util/queue/index.d.ts.map +0 -1
  495. package/lib/util/queue/itemQueue.d.ts.map +0 -1
  496. package/lib/util/queue/options.d.ts.map +0 -1
  497. package/lib/util/serializedCache.d.ts.map +0 -1
  498. package/lib/util/set.d.ts.map +0 -1
  499. package/lib/util/shuffle.d.ts.map +0 -1
  500. package/lib/util/sortBy.d.ts.map +0 -1
  501. package/lib/util/sszBytes.d.ts.map +0 -1
  502. package/lib/util/strictEvents.d.ts.map +0 -1
  503. package/lib/util/time.d.ts.map +0 -1
  504. package/lib/util/timeSeries.d.ts.map +0 -1
  505. package/lib/util/types.d.ts.map +0 -1
  506. package/lib/util/workerEvents.d.ts.map +0 -1
  507. package/lib/util/wrapError.d.ts.map +0 -1
  508. package/src/api/impl/api.ts +0 -26
  509. package/src/api/impl/beacon/blocks/index.ts +0 -744
  510. package/src/api/impl/beacon/blocks/utils.ts +0 -75
  511. package/src/api/impl/beacon/index.ts +0 -35
  512. package/src/api/impl/beacon/pool/index.ts +0 -314
  513. package/src/api/impl/beacon/rewards/index.ts +0 -30
  514. package/src/api/impl/beacon/state/index.ts +0 -406
  515. package/src/api/impl/beacon/state/utils.ts +0 -189
  516. package/src/api/impl/config/constants.ts +0 -127
  517. package/src/api/impl/config/index.ts +0 -59
  518. package/src/api/impl/debug/index.ts +0 -131
  519. package/src/api/impl/errors.ts +0 -50
  520. package/src/api/impl/events/index.ts +0 -33
  521. package/src/api/impl/index.ts +0 -6
  522. package/src/api/impl/lightclient/index.ts +0 -64
  523. package/src/api/impl/lodestar/index.ts +0 -257
  524. package/src/api/impl/node/index.ts +0 -88
  525. package/src/api/impl/node/utils.ts +0 -51
  526. package/src/api/impl/proof/index.ts +0 -60
  527. package/src/api/impl/types.ts +0 -17
  528. package/src/api/impl/utils.ts +0 -25
  529. package/src/api/impl/validator/index.ts +0 -1541
  530. package/src/api/impl/validator/utils.ts +0 -85
  531. package/src/api/index.ts +0 -2
  532. package/src/api/options.ts +0 -16
  533. package/src/api/rest/activeSockets.ts +0 -109
  534. package/src/api/rest/base.ts +0 -216
  535. package/src/api/rest/index.ts +0 -63
  536. package/src/api/rest/swaggerUI.ts +0 -80
  537. package/src/bun-wrappers/prometheus-gc-stats.ts +0 -7
  538. package/src/chain/ColumnReconstructionTracker.ts +0 -90
  539. package/src/chain/GetBlobsTracker.ts +0 -115
  540. package/src/chain/archiveStore/archiveStore.ts +0 -222
  541. package/src/chain/archiveStore/constants.ts +0 -5
  542. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +0 -116
  543. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +0 -68
  544. package/src/chain/archiveStore/historicalState/metrics.ts +0 -214
  545. package/src/chain/archiveStore/historicalState/types.ts +0 -41
  546. package/src/chain/archiveStore/historicalState/worker.ts +0 -77
  547. package/src/chain/archiveStore/index.ts +0 -3
  548. package/src/chain/archiveStore/interface.ts +0 -75
  549. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +0 -138
  550. package/src/chain/archiveStore/utils/archiveBlocks.ts +0 -437
  551. package/src/chain/archiveStore/utils/pruneHistory.ts +0 -56
  552. package/src/chain/archiveStore/utils/updateBackfillRange.ts +0 -50
  553. package/src/chain/balancesCache.ts +0 -52
  554. package/src/chain/beaconProposerCache.ts +0 -43
  555. package/src/chain/blocks/blockInput/blockInput.ts +0 -852
  556. package/src/chain/blocks/blockInput/errors.ts +0 -48
  557. package/src/chain/blocks/blockInput/index.ts +0 -4
  558. package/src/chain/blocks/blockInput/types.ts +0 -145
  559. package/src/chain/blocks/blockInput/utils.ts +0 -21
  560. package/src/chain/blocks/importBlock.ts +0 -599
  561. package/src/chain/blocks/index.ts +0 -179
  562. package/src/chain/blocks/types.ts +0 -101
  563. package/src/chain/blocks/utils/blowfishBanner.ts +0 -28
  564. package/src/chain/blocks/utils/chainSegment.ts +0 -29
  565. package/src/chain/blocks/utils/checkpoint.ts +0 -25
  566. package/src/chain/blocks/utils/giraffeBanner.ts +0 -30
  567. package/src/chain/blocks/utils/ownBanner.ts +0 -20
  568. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +0 -43
  569. package/src/chain/blocks/utils/zebraBanner.ts +0 -45
  570. package/src/chain/blocks/verifyBlock.ts +0 -242
  571. package/src/chain/blocks/verifyBlocksDataAvailability.ts +0 -42
  572. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +0 -438
  573. package/src/chain/blocks/verifyBlocksSanityChecks.ts +0 -129
  574. package/src/chain/blocks/verifyBlocksSignatures.ts +0 -105
  575. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +0 -114
  576. package/src/chain/blocks/writeBlockInputToDb.ts +0 -120
  577. package/src/chain/bls/index.ts +0 -4
  578. package/src/chain/bls/interface.ts +0 -68
  579. package/src/chain/bls/maybeBatch.ts +0 -45
  580. package/src/chain/bls/multithread/index.ts +0 -582
  581. package/src/chain/bls/multithread/jobItem.ts +0 -119
  582. package/src/chain/bls/multithread/poolSize.ts +0 -16
  583. package/src/chain/bls/multithread/types.ts +0 -38
  584. package/src/chain/bls/multithread/utils.ts +0 -19
  585. package/src/chain/bls/multithread/worker.ts +0 -114
  586. package/src/chain/bls/singleThread.ts +0 -87
  587. package/src/chain/bls/utils.ts +0 -30
  588. package/src/chain/chain.ts +0 -1354
  589. package/src/chain/emitter.ts +0 -113
  590. package/src/chain/errors/attestationError.ts +0 -194
  591. package/src/chain/errors/attesterSlashingError.ts +0 -11
  592. package/src/chain/errors/blobSidecarError.ts +0 -60
  593. package/src/chain/errors/blockError.ts +0 -166
  594. package/src/chain/errors/blsToExecutionChangeError.ts +0 -13
  595. package/src/chain/errors/dataColumnSidecarError.ts +0 -80
  596. package/src/chain/errors/gossipValidation.ts +0 -20
  597. package/src/chain/errors/index.ts +0 -10
  598. package/src/chain/errors/lightClientError.ts +0 -30
  599. package/src/chain/errors/proposerSlashingError.ts +0 -11
  600. package/src/chain/errors/syncCommitteeError.ts +0 -36
  601. package/src/chain/errors/voluntaryExitError.ts +0 -13
  602. package/src/chain/forkChoice/index.ts +0 -112
  603. package/src/chain/genesis/genesis.ts +0 -190
  604. package/src/chain/genesis/interface.ts +0 -14
  605. package/src/chain/index.ts +0 -6
  606. package/src/chain/initState.ts +0 -221
  607. package/src/chain/interface.ts +0 -280
  608. package/src/chain/lightClient/index.ts +0 -764
  609. package/src/chain/lightClient/proofs.ts +0 -85
  610. package/src/chain/lightClient/types.ts +0 -33
  611. package/src/chain/opPools/aggregatedAttestationPool.ts +0 -1063
  612. package/src/chain/opPools/attestationPool.ts +0 -282
  613. package/src/chain/opPools/index.ts +0 -5
  614. package/src/chain/opPools/opPool.ts +0 -462
  615. package/src/chain/opPools/syncCommitteeMessagePool.ts +0 -169
  616. package/src/chain/opPools/syncContributionAndProofPool.ts +0 -240
  617. package/src/chain/opPools/types.ts +0 -35
  618. package/src/chain/opPools/utils.ts +0 -65
  619. package/src/chain/options.ts +0 -138
  620. package/src/chain/prepareNextSlot.ts +0 -277
  621. package/src/chain/produceBlock/computeNewStateRoot.ts +0 -55
  622. package/src/chain/produceBlock/index.ts +0 -2
  623. package/src/chain/produceBlock/produceBlockBody.ts +0 -797
  624. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +0 -54
  625. package/src/chain/regen/errors.ts +0 -30
  626. package/src/chain/regen/index.ts +0 -4
  627. package/src/chain/regen/interface.ts +0 -93
  628. package/src/chain/regen/queued.ts +0 -317
  629. package/src/chain/regen/regen.ts +0 -424
  630. package/src/chain/reprocess.ts +0 -161
  631. package/src/chain/rewards/attestationsRewards.ts +0 -196
  632. package/src/chain/rewards/blockRewards.ts +0 -150
  633. package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
  634. package/src/chain/seenCache/index.ts +0 -5
  635. package/src/chain/seenCache/seenAggregateAndProof.ts +0 -120
  636. package/src/chain/seenCache/seenAttestationData.ts +0 -145
  637. package/src/chain/seenCache/seenAttesters.ts +0 -58
  638. package/src/chain/seenCache/seenBlockAttesters.ts +0 -18
  639. package/src/chain/seenCache/seenBlockProposers.ts +0 -48
  640. package/src/chain/seenCache/seenCommittee.ts +0 -43
  641. package/src/chain/seenCache/seenCommitteeContribution.ts +0 -104
  642. package/src/chain/seenCache/seenGossipBlockInput.ts +0 -373
  643. package/src/chain/serializeState.ts +0 -32
  644. package/src/chain/shufflingCache.ts +0 -238
  645. package/src/chain/stateCache/blockStateCacheImpl.ts +0 -150
  646. package/src/chain/stateCache/datastore/db.ts +0 -36
  647. package/src/chain/stateCache/datastore/file.ts +0 -53
  648. package/src/chain/stateCache/datastore/index.ts +0 -2
  649. package/src/chain/stateCache/datastore/types.ts +0 -13
  650. package/src/chain/stateCache/fifoBlockStateCache.ts +0 -208
  651. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -198
  652. package/src/chain/stateCache/index.ts +0 -3
  653. package/src/chain/stateCache/mapMetrics.ts +0 -52
  654. package/src/chain/stateCache/persistentCheckpointsCache.ts +0 -837
  655. package/src/chain/stateCache/types.ts +0 -86
  656. package/src/chain/validation/aggregateAndProof.ts +0 -258
  657. package/src/chain/validation/attestation.ts +0 -885
  658. package/src/chain/validation/attesterSlashing.ts +0 -61
  659. package/src/chain/validation/blobSidecar.ts +0 -301
  660. package/src/chain/validation/block.ts +0 -188
  661. package/src/chain/validation/blsToExecutionChange.ts +0 -61
  662. package/src/chain/validation/dataColumnSidecar.ts +0 -381
  663. package/src/chain/validation/index.ts +0 -9
  664. package/src/chain/validation/lightClientFinalityUpdate.ts +0 -46
  665. package/src/chain/validation/lightClientOptimisticUpdate.ts +0 -68
  666. package/src/chain/validation/proposerSlashing.ts +0 -54
  667. package/src/chain/validation/signatureSets/aggregateAndProof.ts +0 -38
  668. package/src/chain/validation/signatureSets/contributionAndProof.ts +0 -27
  669. package/src/chain/validation/signatureSets/index.ts +0 -6
  670. package/src/chain/validation/signatureSets/selectionProof.ts +0 -27
  671. package/src/chain/validation/signatureSets/syncCommittee.ts +0 -22
  672. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +0 -18
  673. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +0 -27
  674. package/src/chain/validation/syncCommittee.ts +0 -165
  675. package/src/chain/validation/syncCommitteeContributionAndProof.ts +0 -122
  676. package/src/chain/validation/voluntaryExit.ts +0 -58
  677. package/src/chain/validatorMonitor.ts +0 -1310
  678. package/src/constants/constants.ts +0 -15
  679. package/src/constants/index.ts +0 -2
  680. package/src/constants/network.ts +0 -52
  681. package/src/db/beacon.ts +0 -113
  682. package/src/db/buckets.ts +0 -80
  683. package/src/db/index.ts +0 -2
  684. package/src/db/interface.ts +0 -76
  685. package/src/db/options.ts +0 -7
  686. package/src/db/repositories/attesterSlashing.ts +0 -38
  687. package/src/db/repositories/backfilledRanges.ts +0 -29
  688. package/src/db/repositories/blobSidecars.ts +0 -37
  689. package/src/db/repositories/blobSidecarsArchive.ts +0 -28
  690. package/src/db/repositories/block.ts +0 -33
  691. package/src/db/repositories/blockArchive.ts +0 -170
  692. package/src/db/repositories/blockArchiveIndex.ts +0 -45
  693. package/src/db/repositories/blsToExecutionChange.ts +0 -16
  694. package/src/db/repositories/checkpointState.ts +0 -31
  695. package/src/db/repositories/dataColumnSidecar.ts +0 -49
  696. package/src/db/repositories/dataColumnSidecarArchive.ts +0 -56
  697. package/src/db/repositories/depositDataRoot.ts +0 -80
  698. package/src/db/repositories/depositEvent.ts +0 -32
  699. package/src/db/repositories/eth1Data.ts +0 -33
  700. package/src/db/repositories/index.ts +0 -20
  701. package/src/db/repositories/lightclientBestUpdate.ts +0 -41
  702. package/src/db/repositories/lightclientCheckpointHeader.ts +0 -32
  703. package/src/db/repositories/lightclientSyncCommittee.ts +0 -16
  704. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +0 -77
  705. package/src/db/repositories/proposerSlashing.ts +0 -15
  706. package/src/db/repositories/stateArchive.ts +0 -69
  707. package/src/db/repositories/stateArchiveIndex.ts +0 -18
  708. package/src/db/repositories/voluntaryExit.ts +0 -15
  709. package/src/db/single/index.ts +0 -2
  710. package/src/db/single/preGenesisState.ts +0 -37
  711. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  712. package/src/eth1/errors.ts +0 -40
  713. package/src/eth1/eth1DataCache.ts +0 -26
  714. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  715. package/src/eth1/eth1DepositsCache.ts +0 -141
  716. package/src/eth1/eth1MergeBlockTracker.ts +0 -328
  717. package/src/eth1/index.ts +0 -157
  718. package/src/eth1/interface.ts +0 -131
  719. package/src/eth1/options.ts +0 -28
  720. package/src/eth1/provider/eth1Provider.ts +0 -229
  721. package/src/eth1/provider/jsonRpcHttpClient.ts +0 -390
  722. package/src/eth1/provider/jwt.ts +0 -36
  723. package/src/eth1/provider/utils.ts +0 -136
  724. package/src/eth1/stream.ts +0 -75
  725. package/src/eth1/utils/depositContract.ts +0 -37
  726. package/src/eth1/utils/deposits.ts +0 -70
  727. package/src/eth1/utils/eth1Data.ts +0 -100
  728. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  729. package/src/eth1/utils/eth1Vote.ts +0 -142
  730. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  731. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  732. package/src/execution/builder/cache.ts +0 -39
  733. package/src/execution/builder/http.ts +0 -229
  734. package/src/execution/builder/index.ts +0 -27
  735. package/src/execution/builder/interface.ts +0 -49
  736. package/src/execution/builder/utils.ts +0 -19
  737. package/src/execution/engine/disabled.ts +0 -35
  738. package/src/execution/engine/http.ts +0 -644
  739. package/src/execution/engine/index.ts +0 -63
  740. package/src/execution/engine/interface.ts +0 -199
  741. package/src/execution/engine/mock.ts +0 -493
  742. package/src/execution/engine/payloadIdCache.ts +0 -54
  743. package/src/execution/engine/types.ts +0 -640
  744. package/src/execution/engine/utils.ts +0 -136
  745. package/src/execution/index.ts +0 -4
  746. package/src/index.ts +0 -20
  747. package/src/metrics/index.ts +0 -4
  748. package/src/metrics/metrics/beacon.ts +0 -390
  749. package/src/metrics/metrics/lodestar.ts +0 -1870
  750. package/src/metrics/metrics.ts +0 -43
  751. package/src/metrics/nodeJsMetrics.ts +0 -19
  752. package/src/metrics/options.ts +0 -22
  753. package/src/metrics/server/http.ts +0 -114
  754. package/src/metrics/server/index.ts +0 -1
  755. package/src/metrics/utils/avgMinMax.ts +0 -87
  756. package/src/metrics/utils/gauge.ts +0 -22
  757. package/src/metrics/utils/registryMetricCreator.ts +0 -41
  758. package/src/monitoring/clientStats.ts +0 -297
  759. package/src/monitoring/index.ts +0 -2
  760. package/src/monitoring/options.ts +0 -19
  761. package/src/monitoring/properties.ts +0 -152
  762. package/src/monitoring/service.ts +0 -235
  763. package/src/monitoring/system.ts +0 -146
  764. package/src/monitoring/types.ts +0 -21
  765. package/src/network/core/events.ts +0 -59
  766. package/src/network/core/index.ts +0 -3
  767. package/src/network/core/metrics.ts +0 -304
  768. package/src/network/core/networkCore.ts +0 -599
  769. package/src/network/core/networkCoreWorker.ts +0 -176
  770. package/src/network/core/networkCoreWorkerHandler.ts +0 -284
  771. package/src/network/core/types.ts +0 -119
  772. package/src/network/discv5/index.ts +0 -132
  773. package/src/network/discv5/types.ts +0 -74
  774. package/src/network/discv5/utils.ts +0 -50
  775. package/src/network/discv5/worker.ts +0 -137
  776. package/src/network/events.ts +0 -51
  777. package/src/network/forks.ts +0 -94
  778. package/src/network/gossip/constants.ts +0 -15
  779. package/src/network/gossip/encoding.ts +0 -111
  780. package/src/network/gossip/errors.ts +0 -7
  781. package/src/network/gossip/gossipsub.ts +0 -384
  782. package/src/network/gossip/index.ts +0 -4
  783. package/src/network/gossip/interface.ts +0 -215
  784. package/src/network/gossip/metrics.ts +0 -71
  785. package/src/network/gossip/scoringParameters.ts +0 -333
  786. package/src/network/gossip/topic.ts +0 -332
  787. package/src/network/index.ts +0 -8
  788. package/src/network/interface.ts +0 -134
  789. package/src/network/libp2p/error.ts +0 -55
  790. package/src/network/libp2p/index.ts +0 -153
  791. package/src/network/metadata.ts +0 -162
  792. package/src/network/network.ts +0 -767
  793. package/src/network/networkConfig.ts +0 -12
  794. package/src/network/options.ts +0 -70
  795. package/src/network/peers/client.ts +0 -29
  796. package/src/network/peers/datastore.ts +0 -188
  797. package/src/network/peers/discover.ts +0 -647
  798. package/src/network/peers/index.ts +0 -2
  799. package/src/network/peers/peerManager.ts +0 -900
  800. package/src/network/peers/peersData.ts +0 -65
  801. package/src/network/peers/score/constants.ts +0 -34
  802. package/src/network/peers/score/index.ts +0 -4
  803. package/src/network/peers/score/interface.ts +0 -74
  804. package/src/network/peers/score/score.ts +0 -200
  805. package/src/network/peers/score/store.ts +0 -95
  806. package/src/network/peers/score/utils.ts +0 -37
  807. package/src/network/peers/utils/assertPeerRelevance.ts +0 -99
  808. package/src/network/peers/utils/enrSubnetsDeserialize.ts +0 -27
  809. package/src/network/peers/utils/getConnectedPeerIds.ts +0 -33
  810. package/src/network/peers/utils/index.ts +0 -4
  811. package/src/network/peers/utils/prioritizePeers.ts +0 -627
  812. package/src/network/peers/utils/subnetMap.ts +0 -88
  813. package/src/network/processor/aggregatorTracker.ts +0 -38
  814. package/src/network/processor/extractSlotRootFns.ts +0 -64
  815. package/src/network/processor/gossipHandlers.ts +0 -951
  816. package/src/network/processor/gossipQueues/index.ts +0 -114
  817. package/src/network/processor/gossipQueues/indexed.ts +0 -219
  818. package/src/network/processor/gossipQueues/linear.ts +0 -162
  819. package/src/network/processor/gossipQueues/types.ts +0 -57
  820. package/src/network/processor/gossipValidatorFn.ts +0 -142
  821. package/src/network/processor/index.ts +0 -496
  822. package/src/network/processor/types.ts +0 -27
  823. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -373
  824. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +0 -101
  825. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +0 -49
  826. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -114
  827. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -62
  828. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +0 -144
  829. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +0 -88
  830. package/src/network/reqresp/handlers/index.ts +0 -78
  831. package/src/network/reqresp/handlers/lightClientBootstrap.ts +0 -31
  832. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +0 -21
  833. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +0 -21
  834. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +0 -39
  835. package/src/network/reqresp/index.ts +0 -2
  836. package/src/network/reqresp/interface.ts +0 -45
  837. package/src/network/reqresp/protocols.ts +0 -146
  838. package/src/network/reqresp/rateLimit.ts +0 -112
  839. package/src/network/reqresp/score.ts +0 -70
  840. package/src/network/reqresp/types.ts +0 -174
  841. package/src/network/reqresp/utils/collect.ts +0 -84
  842. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +0 -57
  843. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +0 -99
  844. package/src/network/statusCache.ts +0 -17
  845. package/src/network/subnets/attnetsService.ts +0 -382
  846. package/src/network/subnets/index.ts +0 -2
  847. package/src/network/subnets/interface.ts +0 -66
  848. package/src/network/subnets/syncnetsService.ts +0 -147
  849. package/src/network/subnets/util.ts +0 -63
  850. package/src/network/util.ts +0 -29
  851. package/src/node/index.ts +0 -2
  852. package/src/node/nodejs.ts +0 -349
  853. package/src/node/notifier.ts +0 -206
  854. package/src/node/options.ts +0 -51
  855. package/src/node/utils/interop/deposits.ts +0 -53
  856. package/src/node/utils/interop/state.ts +0 -59
  857. package/src/node/utils/lightclient.ts +0 -7
  858. package/src/node/utils/state.ts +0 -37
  859. package/src/sync/backfill/backfill.ts +0 -893
  860. package/src/sync/backfill/errors.ts +0 -23
  861. package/src/sync/backfill/index.ts +0 -1
  862. package/src/sync/backfill/verify.ts +0 -58
  863. package/src/sync/constants.ts +0 -71
  864. package/src/sync/index.ts +0 -2
  865. package/src/sync/interface.ts +0 -55
  866. package/src/sync/options.ts +0 -45
  867. package/src/sync/range/batch.ts +0 -455
  868. package/src/sync/range/chain.ts +0 -715
  869. package/src/sync/range/range.ts +0 -354
  870. package/src/sync/range/utils/batches.ts +0 -119
  871. package/src/sync/range/utils/chainTarget.ts +0 -62
  872. package/src/sync/range/utils/hashBlocks.ts +0 -27
  873. package/src/sync/range/utils/index.ts +0 -5
  874. package/src/sync/range/utils/peerBalancer.ts +0 -184
  875. package/src/sync/range/utils/updateChains.ts +0 -66
  876. package/src/sync/sync.ts +0 -290
  877. package/src/sync/types.ts +0 -57
  878. package/src/sync/unknownBlock.ts +0 -860
  879. package/src/sync/utils/downloadByRange.ts +0 -808
  880. package/src/sync/utils/downloadByRoot.ts +0 -560
  881. package/src/sync/utils/pendingBlocksTree.ts +0 -97
  882. package/src/sync/utils/remoteSyncType.ts +0 -144
  883. package/src/util/address.ts +0 -3
  884. package/src/util/array.ts +0 -311
  885. package/src/util/asyncIterableToEvents.ts +0 -164
  886. package/src/util/binarySearch.ts +0 -48
  887. package/src/util/bitArray.ts +0 -84
  888. package/src/util/blobs.ts +0 -210
  889. package/src/util/bufferPool.ts +0 -95
  890. package/src/util/bytes.ts +0 -11
  891. package/src/util/chunkify.ts +0 -27
  892. package/src/util/clock.ts +0 -212
  893. package/src/util/dataColumns.ts +0 -415
  894. package/src/util/dependentRoot.ts +0 -47
  895. package/src/util/enum.ts +0 -17
  896. package/src/util/error.ts +0 -56
  897. package/src/util/eventLoop.ts +0 -22
  898. package/src/util/execution.ts +0 -223
  899. package/src/util/file.ts +0 -52
  900. package/src/util/forkChoice.ts +0 -5
  901. package/src/util/forkName.ts +0 -20
  902. package/src/util/graffiti.ts +0 -39
  903. package/src/util/hex.ts +0 -9
  904. package/src/util/index.ts +0 -2
  905. package/src/util/ip.ts +0 -6
  906. package/src/util/itTrigger.ts +0 -49
  907. package/src/util/kzg.ts +0 -3
  908. package/src/util/map.ts +0 -77
  909. package/src/util/metadata.ts +0 -22
  910. package/src/util/multifork.ts +0 -69
  911. package/src/util/numpy.ts +0 -8
  912. package/src/util/peerId.ts +0 -16
  913. package/src/util/profile.ts +0 -54
  914. package/src/util/promises.ts +0 -14
  915. package/src/util/queue/errors.ts +0 -14
  916. package/src/util/queue/fnQueue.ts +0 -16
  917. package/src/util/queue/index.ts +0 -4
  918. package/src/util/queue/itemQueue.ts +0 -128
  919. package/src/util/queue/options.ts +0 -37
  920. package/src/util/serializedCache.ts +0 -20
  921. package/src/util/set.ts +0 -62
  922. package/src/util/shuffle.ts +0 -21
  923. package/src/util/sortBy.ts +0 -19
  924. package/src/util/sszBytes.ts +0 -481
  925. package/src/util/strictEvents.ts +0 -8
  926. package/src/util/time.ts +0 -13
  927. package/src/util/timeSeries.ts +0 -118
  928. package/src/util/types.ts +0 -31
  929. package/src/util/workerEvents.ts +0 -142
  930. package/src/util/wrapError.ts +0 -27
@@ -1,900 +0,0 @@
1
- import {Connection, PeerId, PrivateKey} from "@libp2p/interface";
2
- import {BitArray} from "@chainsafe/ssz";
3
- import {BeaconConfig} from "@lodestar/config";
4
- import {LoggerNode} from "@lodestar/logger/node";
5
- import {ForkSeq, SLOTS_PER_EPOCH, SYNC_COMMITTEE_SUBNET_COUNT} from "@lodestar/params";
6
- import {computeTimeAtSlot} from "@lodestar/state-transition";
7
- import {Metadata, Status, altair, fulu, phase0} from "@lodestar/types";
8
- import {prettyPrintIndices, toHex, withTimeout} from "@lodestar/utils";
9
- import {GOODBYE_KNOWN_CODES, GoodByeReasonCode, Libp2pEvent} from "../../constants/index.js";
10
- import {IClock} from "../../util/clock.js";
11
- import {computeColumnsForCustodyGroup, getCustodyGroups} from "../../util/dataColumns.js";
12
- import {NetworkCoreMetrics} from "../core/metrics.js";
13
- import {LodestarDiscv5Opts} from "../discv5/types.js";
14
- import {INetworkEventBus, NetworkEvent, NetworkEventData} from "../events.js";
15
- import {Eth2Gossipsub} from "../gossip/gossipsub.js";
16
- import {Libp2p} from "../interface.js";
17
- import {SubnetType} from "../metadata.js";
18
- import {NetworkConfig} from "../networkConfig.js";
19
- import {ReqRespMethod} from "../reqresp/ReqRespBeaconNode.js";
20
- import {StatusCache} from "../statusCache.js";
21
- import {NodeId, SubnetsService, computeNodeId} from "../subnets/index.js";
22
- import {getConnection, getConnectionsMap, prettyPrintPeerId, prettyPrintPeerIdStr} from "../util.js";
23
- import {ClientKind, getKnownClientFromAgentVersion} from "./client.js";
24
- import {PeerDiscovery, SubnetDiscvQueryMs} from "./discover.js";
25
- import {PeerData, PeersData} from "./peersData.js";
26
- import {NO_COOL_DOWN_APPLIED} from "./score/constants.js";
27
- import {IPeerRpcScoreStore, PeerAction, PeerScoreStats, ScoreState, updateGossipsubScores} from "./score/index.js";
28
- import {
29
- assertPeerRelevance,
30
- getConnectedPeerIds,
31
- hasSomeConnectedPeer,
32
- prioritizePeers,
33
- renderIrrelevantPeerType,
34
- } from "./utils/index.js";
35
-
36
- /** heartbeat performs regular updates such as updating reputations and performing discovery requests */
37
- const HEARTBEAT_INTERVAL_MS = 30 * 1000;
38
- /** The time in seconds between PING events. We do not send a ping if the other peer has PING'd us */
39
- const PING_INTERVAL_INBOUND_MS = 15 * 1000; // Offset to not ping when outbound reqs
40
- const PING_INTERVAL_OUTBOUND_MS = 20 * 1000;
41
- /** The time in seconds between re-status's peers. */
42
- const STATUS_INTERVAL_MS = 5 * 60 * 1000;
43
- /** Expect a STATUS request from on inbound peer for some time. Afterwards the node does a request */
44
- const STATUS_INBOUND_GRACE_PERIOD = 15 * 1000;
45
- /** Internal interval to check PING and STATUS timeouts */
46
- const CHECK_PING_STATUS_INTERVAL = 10 * 1000;
47
- /** A peer is considered long connection if it's >= 1 day */
48
- const LONG_PEER_CONNECTION_MS = 24 * 60 * 60 * 1000;
49
- /** Ref https://github.com/ChainSafe/lodestar/issues/3423 */
50
- const DEFAULT_DISCV5_FIRST_QUERY_DELAY_MS = 1000;
51
- /**
52
- * Tag peer when it's relevant and connecting to our node.
53
- * When node has > maxPeer (55), libp2p randomly prune peers if we don't tag peers in use.
54
- * See https://github.com/ChainSafe/lodestar/issues/4623#issuecomment-1374447934
55
- **/
56
- const PEER_RELEVANT_TAG = "relevant";
57
- /** Tag value of PEER_RELEVANT_TAG */
58
- const PEER_RELEVANT_TAG_VALUE = 100;
59
-
60
- /** Change pruning behavior once the head falls behind */
61
- const STARVATION_THRESHOLD_SLOTS = SLOTS_PER_EPOCH * 2;
62
- /** Percentage of peers to attempt to prune when starvation threshold is met */
63
- const STARVATION_PRUNE_RATIO = 0.05;
64
-
65
- /**
66
- * Relative factor of peers that are allowed to have a negative gossipsub score without penalizing them in lodestar.
67
- */
68
- const ALLOWED_NEGATIVE_GOSSIPSUB_FACTOR = 0.1;
69
-
70
- // TODO:
71
- // maxPeers and targetPeers should be dynamic on the num of validators connected
72
- // The Node should compute a recommended value every interval and log a warning
73
- // to terminal if it deviates significantly from the user's settings
74
-
75
- export type PeerManagerOpts = {
76
- /** The target number of peers we would like to connect to. */
77
- targetPeers: number;
78
- /** The maximum number of peers we allow (exceptions for subnet peers) */
79
- maxPeers: number;
80
- /** Target peer per PeerDAS group */
81
- targetGroupPeers: number;
82
- /**
83
- * Delay the 1st query after starting discv5
84
- * See https://github.com/ChainSafe/lodestar/issues/3423
85
- */
86
- discv5FirstQueryDelayMs?: number;
87
- /**
88
- * If null, Don't run discv5 queries, nor connect to cached peers in the peerStore
89
- */
90
- discv5: LodestarDiscv5Opts | null;
91
- /**
92
- * If set to true, connect to Discv5 bootnodes. If not set or false, do not connect
93
- */
94
- connectToDiscv5Bootnodes?: boolean;
95
- };
96
-
97
- /**
98
- * ReqResp methods used only be PeerManager, so the main thread never has to call them
99
- */
100
- export interface IReqRespBeaconNodePeerManager {
101
- sendPing(peerId: PeerId): Promise<phase0.Ping>;
102
- sendStatus(peerId: PeerId, request: Status): Promise<Status>;
103
- sendGoodbye(peerId: PeerId, request: phase0.Goodbye): Promise<void>;
104
- sendMetadata(peerId: PeerId): Promise<Metadata>;
105
- }
106
-
107
- export type PeerManagerModules = {
108
- privateKey: PrivateKey;
109
- libp2p: Libp2p;
110
- logger: LoggerNode;
111
- metrics: NetworkCoreMetrics | null;
112
- reqResp: IReqRespBeaconNodePeerManager;
113
- gossip: Eth2Gossipsub;
114
- attnetsService: SubnetsService;
115
- syncnetsService: SubnetsService;
116
- clock: IClock;
117
- peerRpcScores: IPeerRpcScoreStore;
118
- events: INetworkEventBus;
119
- networkConfig: NetworkConfig;
120
- peersData: PeersData;
121
- statusCache: StatusCache;
122
- };
123
-
124
- export type PeerRequestedSubnetType = SubnetType | "column";
125
-
126
- type PeerIdStr = string;
127
-
128
- // TODO(fulu): dedupe with network/peers/peerData.ts
129
- enum RelevantPeerStatus {
130
- Unknown = "unknown",
131
- relevant = "relevant",
132
- irrelevant = "irrelevant",
133
- }
134
-
135
- /**
136
- * Performs all peer management functionality in a single grouped class:
137
- * - Ping peers every `PING_INTERVAL_MS`
138
- * - Status peers every `STATUS_INTERVAL_MS`
139
- * - Execute discovery query if under target peers
140
- * - Execute discovery query if need peers on some subnet: TODO
141
- * - Disconnect peers if over target peers
142
- */
143
- export class PeerManager {
144
- private nodeId: NodeId;
145
- private readonly libp2p: Libp2p;
146
- private readonly logger: LoggerNode;
147
- private readonly metrics: NetworkCoreMetrics | null;
148
- private readonly reqResp: IReqRespBeaconNodePeerManager;
149
- private readonly gossipsub: Eth2Gossipsub;
150
- private readonly attnetsService: SubnetsService;
151
- private readonly syncnetsService: SubnetsService;
152
- private readonly clock: IClock;
153
- private readonly networkConfig: NetworkConfig;
154
- private readonly config: BeaconConfig;
155
- private readonly peerRpcScores: IPeerRpcScoreStore;
156
- /** If null, discovery is disabled */
157
- private readonly discovery: PeerDiscovery | null;
158
- private readonly networkEventBus: INetworkEventBus;
159
- private readonly statusCache: StatusCache;
160
- private lastStatus: Status;
161
-
162
- // A single map of connected peers with all necessary data to handle PINGs, STATUS, and metrics
163
- private connectedPeers: Map<PeerIdStr, PeerData>;
164
-
165
- private opts: PeerManagerOpts;
166
- private intervals: NodeJS.Timeout[] = [];
167
-
168
- constructor(modules: PeerManagerModules, opts: PeerManagerOpts, discovery: PeerDiscovery | null) {
169
- const {networkConfig} = modules;
170
- this.libp2p = modules.libp2p;
171
- this.logger = modules.logger;
172
- this.metrics = modules.metrics;
173
- this.reqResp = modules.reqResp;
174
- this.gossipsub = modules.gossip;
175
- this.attnetsService = modules.attnetsService;
176
- this.syncnetsService = modules.syncnetsService;
177
- this.statusCache = modules.statusCache;
178
- this.clock = modules.clock;
179
- this.networkConfig = networkConfig;
180
- this.config = networkConfig.config;
181
- this.peerRpcScores = modules.peerRpcScores;
182
- this.networkEventBus = modules.events;
183
- this.connectedPeers = modules.peersData.connectedPeers;
184
- this.opts = opts;
185
- this.discovery = discovery;
186
- this.nodeId = networkConfig.nodeId;
187
-
188
- const {metrics} = modules;
189
- if (metrics) {
190
- metrics.peers.addCollect(() => this.runPeerCountMetrics(metrics));
191
- }
192
-
193
- this.libp2p.services.components.events.addEventListener(Libp2pEvent.connectionOpen, this.onLibp2pPeerConnect);
194
- this.libp2p.services.components.events.addEventListener(Libp2pEvent.connectionClose, this.onLibp2pPeerDisconnect);
195
- this.networkEventBus.on(NetworkEvent.reqRespRequest, this.onRequest);
196
-
197
- this.lastStatus = this.statusCache.get();
198
-
199
- // On start-up will connected to existing peers in libp2p.peerStore, same as autoDial behaviour
200
- this.heartbeat();
201
- this.intervals = [
202
- setInterval(this.pingAndStatusTimeouts.bind(this), CHECK_PING_STATUS_INTERVAL),
203
- setInterval(this.heartbeat.bind(this), HEARTBEAT_INTERVAL_MS),
204
- setInterval(
205
- this.updateGossipsubScores.bind(this),
206
- this.gossipsub.scoreParams.decayInterval ?? HEARTBEAT_INTERVAL_MS
207
- ),
208
- ];
209
- }
210
-
211
- static async init(modules: PeerManagerModules, opts: PeerManagerOpts): Promise<PeerManager> {
212
- // opts.discv5 === null, discovery is disabled
213
- const discovery = opts.discv5
214
- ? await PeerDiscovery.init(modules, {
215
- discv5FirstQueryDelayMs: opts.discv5FirstQueryDelayMs ?? DEFAULT_DISCV5_FIRST_QUERY_DELAY_MS,
216
- discv5: opts.discv5,
217
- connectToDiscv5Bootnodes: opts.connectToDiscv5Bootnodes,
218
- })
219
- : null;
220
-
221
- return new PeerManager(modules, opts, discovery);
222
- }
223
-
224
- async close(): Promise<void> {
225
- await this.discovery?.stop();
226
- this.libp2p.services.components.events.removeEventListener(Libp2pEvent.connectionOpen, this.onLibp2pPeerConnect);
227
- this.libp2p.services.components.events.removeEventListener(
228
- Libp2pEvent.connectionClose,
229
- this.onLibp2pPeerDisconnect
230
- );
231
- this.networkEventBus.off(NetworkEvent.reqRespRequest, this.onRequest);
232
- for (const interval of this.intervals) clearInterval(interval);
233
- }
234
-
235
- /**
236
- * Return peers with at least one connection in status "open"
237
- */
238
- getConnectedPeerIds(): PeerId[] {
239
- return getConnectedPeerIds(this.libp2p);
240
- }
241
-
242
- /**
243
- * Efficiently check if there is at least one peer connected
244
- */
245
- hasSomeConnectedPeer(): boolean {
246
- return hasSomeConnectedPeer(this.libp2p);
247
- }
248
-
249
- async goodbyeAndDisconnectAllPeers(): Promise<void> {
250
- await Promise.all(
251
- // Filter by peers that support the goodbye protocol: {supportsProtocols: [goodbyeProtocol]}
252
- this.getConnectedPeerIds().map(async (peer) => this.goodbyeAndDisconnect(peer, GoodByeReasonCode.CLIENT_SHUTDOWN))
253
- );
254
- }
255
-
256
- /**
257
- * Run after validator subscriptions request.
258
- */
259
- onCommitteeSubscriptions(): void {
260
- // TODO:
261
- // Only if the slot is more than epoch away, add an event to start looking for peers
262
-
263
- // Request to run heartbeat fn
264
- this.heartbeat();
265
- }
266
-
267
- reportPeer(peer: PeerId, action: PeerAction, actionName: string): void {
268
- this.peerRpcScores.applyAction(peer, action, actionName);
269
- }
270
-
271
- /**
272
- * The app layer needs to refresh the status of some peers. The sync have reached a target
273
- */
274
- reStatusPeers(peers: PeerIdStr[]): void {
275
- for (const peer of peers) {
276
- const peerData = this.connectedPeers.get(peer);
277
- if (peerData) {
278
- // Set to 0 to trigger a status request after calling pingAndStatusTimeouts()
279
- peerData.lastStatusUnixTsMs = 0;
280
- }
281
- }
282
- this.pingAndStatusTimeouts();
283
- }
284
-
285
- dumpPeerScoreStats(): PeerScoreStats {
286
- return this.peerRpcScores.dumpPeerScoreStats();
287
- }
288
-
289
- /**
290
- * Must be called when network ReqResp receives incoming requests
291
- */
292
- private onRequest = ({peer, request}: NetworkEventData[NetworkEvent.reqRespRequest]): void => {
293
- try {
294
- const peerData = this.connectedPeers.get(peer.toString());
295
- if (peerData) {
296
- peerData.lastReceivedMsgUnixTsMs = Date.now();
297
- }
298
-
299
- switch (request.method) {
300
- case ReqRespMethod.Ping:
301
- this.onPing(peer, request.body);
302
- return;
303
- case ReqRespMethod.Goodbye:
304
- this.onGoodbye(peer, request.body);
305
- return;
306
- case ReqRespMethod.Status:
307
- this.onStatus(peer, request.body);
308
- return;
309
- }
310
- } catch (e) {
311
- this.logger.error("Error onRequest handler", {}, e as Error);
312
- }
313
- };
314
-
315
- /**
316
- * Handle a PING request + response (rpc handler responds with PONG automatically)
317
- */
318
- private onPing(peer: PeerId, seqNumber: phase0.Ping): void {
319
- // if the sequence number is unknown update the peer's metadata
320
- const metadata = this.connectedPeers.get(peer.toString())?.metadata;
321
- if (!metadata || metadata.seqNumber < seqNumber) {
322
- void this.requestMetadata(peer);
323
- }
324
- }
325
-
326
- /**
327
- * Handle a METADATA request + response (rpc handler responds with METADATA automatically)
328
- */
329
- private onMetadata(peer: PeerId, metadata: Metadata): void {
330
- // Store metadata always in case the peer updates attnets but not the sequence number
331
- // Trust that the peer always sends the latest metadata (From Lighthouse)
332
- const peerData = this.connectedPeers.get(peer.toString());
333
- this.logger.debug("onMetadata", {
334
- peer: peer.toString(),
335
- peerData: peerData !== undefined,
336
- custodyGroupCount: (metadata as Partial<fulu.Metadata>)?.custodyGroupCount,
337
- });
338
- if (peerData) {
339
- const oldMetadata = peerData.metadata;
340
- const custodyGroupCount =
341
- (metadata as Partial<fulu.Metadata>).custodyGroupCount ?? this.config.CUSTODY_REQUIREMENT;
342
- const samplingGroupCount = Math.max(this.config.SAMPLES_PER_SLOT, custodyGroupCount);
343
- const nodeId = peerData?.nodeId ?? computeNodeId(peer);
344
- const custodyGroups =
345
- oldMetadata == null || oldMetadata.custodyGroups == null || custodyGroupCount !== oldMetadata.custodyGroupCount
346
- ? getCustodyGroups(this.config, nodeId, custodyGroupCount)
347
- : oldMetadata.custodyGroups;
348
- const oldSamplingGroupCount = Math.max(this.config.SAMPLES_PER_SLOT, oldMetadata?.custodyGroupCount ?? 0);
349
- const samplingGroups =
350
- oldMetadata == null || oldMetadata.samplingGroups == null || samplingGroupCount !== oldSamplingGroupCount
351
- ? getCustodyGroups(this.config, nodeId, samplingGroupCount)
352
- : oldMetadata.samplingGroups;
353
- peerData.metadata = {
354
- seqNumber: metadata.seqNumber,
355
- attnets: metadata.attnets,
356
- syncnets: (metadata as Partial<altair.Metadata>).syncnets ?? BitArray.fromBitLen(SYNC_COMMITTEE_SUBNET_COUNT),
357
- custodyGroupCount:
358
- (metadata as Partial<fulu.Metadata>).custodyGroupCount ??
359
- // TODO: spec says that Clients MAY reject peers with a value less than CUSTODY_REQUIREMENT
360
- this.config.CUSTODY_REQUIREMENT,
361
- // TODO(fulu): this should be columns not groups. need to change everywhere. we consume columns and should
362
- // cache that instead so if groups->columns ever changes from 1-1 we only need to update that here
363
- custodyGroups,
364
- samplingGroups,
365
- };
366
- if (oldMetadata === null || oldMetadata.custodyGroupCount !== peerData.metadata.custodyGroupCount) {
367
- void this.requestStatus(peer, this.statusCache.get());
368
- }
369
- }
370
- }
371
-
372
- /**
373
- * Handle a GOODBYE request (rpc handler responds automatically)
374
- */
375
- private onGoodbye(peer: PeerId, goodbye: phase0.Goodbye): void {
376
- const reason = GOODBYE_KNOWN_CODES[goodbye.toString()] || "";
377
- this.logger.verbose("Received goodbye request", {peer: prettyPrintPeerId(peer), goodbye, reason});
378
- this.metrics?.peerGoodbyeReceived.inc({reason});
379
-
380
- const conn = getConnection(this.libp2p, peer.toString());
381
- if (conn && Date.now() - conn.timeline.open > LONG_PEER_CONNECTION_MS) {
382
- this.metrics?.peerLongConnectionDisconnect.inc({reason});
383
- }
384
-
385
- void this.disconnect(peer);
386
- }
387
-
388
- /**
389
- * Handle a STATUS request + response (rpc handler responds with STATUS automatically)
390
- */
391
- private onStatus(peer: PeerId, status: Status): void {
392
- // reset the to-status timer of this peer
393
- const peerData = this.connectedPeers.get(peer.toString());
394
- if (peerData) {
395
- peerData.lastStatusUnixTsMs = Date.now();
396
- peerData.status = status;
397
- }
398
-
399
- const forkName = this.config.getForkName(this.clock.currentSlot);
400
-
401
- let isIrrelevant: boolean;
402
- try {
403
- const irrelevantReasonType = assertPeerRelevance(
404
- forkName,
405
- status,
406
- this.statusCache.get(),
407
- this.clock.currentSlot
408
- );
409
- if (irrelevantReasonType === null) {
410
- isIrrelevant = false;
411
- } else {
412
- isIrrelevant = true;
413
- this.logger.debug("Irrelevant peer", {
414
- peer: prettyPrintPeerId(peer),
415
- reason: renderIrrelevantPeerType(irrelevantReasonType),
416
- });
417
- }
418
- } catch (e) {
419
- this.logger.error("Irrelevant peer - unexpected error", {peer: prettyPrintPeerId(peer)}, e as Error);
420
- isIrrelevant = true;
421
- }
422
-
423
- if (isIrrelevant) {
424
- if (peerData) peerData.relevantStatus = RelevantPeerStatus.irrelevant;
425
- void this.goodbyeAndDisconnect(peer, GoodByeReasonCode.IRRELEVANT_NETWORK);
426
- return;
427
- }
428
-
429
- // Peer is usable, send it to the rangeSync
430
- // NOTE: Peer may not be connected anymore at this point, potential race condition
431
- // libp2p.connectionManager.get() returns not null if there's +1 open connections with `peer`
432
- if (peerData && peerData.relevantStatus !== RelevantPeerStatus.relevant) {
433
- this.libp2p.peerStore
434
- .merge(peer, {
435
- // ttl = undefined means it's never expired
436
- tags: {[PEER_RELEVANT_TAG]: {ttl: undefined, value: PEER_RELEVANT_TAG_VALUE}},
437
- })
438
- .catch((e) => this.logger.verbose("cannot tag peer", {peerId: peer.toString()}, e as Error));
439
- peerData.relevantStatus = RelevantPeerStatus.relevant;
440
- }
441
- if (getConnection(this.libp2p, peer.toString())) {
442
- const nodeId = peerData?.nodeId ?? computeNodeId(peer);
443
- // TODO(fulu): Are we sure we've run Metadata before this?
444
- const custodyGroupCount = peerData?.metadata?.custodyGroupCount ?? this.config.CUSTODY_REQUIREMENT;
445
- const custodyGroups =
446
- peerData?.metadata?.custodyGroups ?? getCustodyGroups(this.config, nodeId, custodyGroupCount);
447
- const custodyColumns = custodyGroups
448
- .flatMap((g) => computeColumnsForCustodyGroup(this.config, g))
449
- .sort((a, b) => a - b);
450
-
451
- const sampleSubnets = this.networkConfig.custodyConfig.sampledSubnets;
452
- const matchingSubnetsNum = sampleSubnets.reduce((acc, elem) => acc + (custodyColumns.includes(elem) ? 1 : 0), 0);
453
- const hasAllColumns = matchingSubnetsNum === sampleSubnets.length;
454
- const clientAgent = peerData?.agentClient ?? ClientKind.Unknown;
455
-
456
- this.logger.debug("onStatus", {
457
- nodeId: toHex(nodeId),
458
- myNodeId: toHex(this.nodeId),
459
- peerId: peer.toString(),
460
- custodyGroupCount,
461
- hasAllColumns,
462
- matchingSubnetsNum,
463
- custodyGroups: prettyPrintIndices(custodyGroups),
464
- custodyColumns: prettyPrintIndices(custodyColumns),
465
- mySampleSubnets: prettyPrintIndices(sampleSubnets),
466
- clientAgent,
467
- });
468
-
469
- this.networkEventBus.emit(NetworkEvent.peerConnected, {
470
- peer: peer.toString(),
471
- status,
472
- clientAgent,
473
- custodyColumns,
474
- });
475
- }
476
- }
477
-
478
- private async requestMetadata(peer: PeerId): Promise<void> {
479
- const peerIdStr = peer.toString();
480
- try {
481
- this.onMetadata(peer, await this.reqResp.sendMetadata(peer));
482
- } catch (e) {
483
- this.logger.verbose("invalid requestMetadata", {peer: prettyPrintPeerIdStr(peerIdStr)}, e as Error);
484
- // TODO: Downvote peer here or in the reqResp layer
485
- }
486
- }
487
-
488
- private async requestPing(peer: PeerId): Promise<void> {
489
- const peerIdStr = peer.toString();
490
- try {
491
- this.onPing(peer, await this.reqResp.sendPing(peer));
492
-
493
- // If peer replies a PING request also update lastReceivedMsg
494
- const peerData = this.connectedPeers.get(peer.toString());
495
- if (peerData) peerData.lastReceivedMsgUnixTsMs = Date.now();
496
- } catch (e) {
497
- this.logger.verbose("invalid requestPing", {peer: prettyPrintPeerIdStr(peerIdStr)}, e as Error);
498
- // TODO: Downvote peer here or in the reqResp layer
499
- }
500
- }
501
-
502
- private async requestStatus(peer: PeerId, localStatus: Status): Promise<void> {
503
- const peerIdStr = peer.toString();
504
- try {
505
- this.onStatus(peer, await this.reqResp.sendStatus(peer, localStatus));
506
- } catch (e) {
507
- this.logger.verbose("invalid requestStatus", {peer: prettyPrintPeerIdStr(peerIdStr)}, e as Error);
508
- // TODO: Failed to get peer latest status: downvote but don't disconnect
509
- }
510
- }
511
-
512
- private async requestStatusMany(peers: PeerId[]): Promise<void> {
513
- try {
514
- const localStatus = this.statusCache.get();
515
- await Promise.all(peers.map(async (peer) => this.requestStatus(peer, localStatus)));
516
- } catch (e) {
517
- this.logger.verbose("Error requesting new status to peers", {}, e as Error);
518
- }
519
- }
520
-
521
- /**
522
- * The Peer manager's heartbeat maintains the peer count and maintains peer reputations.
523
- * It will request discovery queries if the peer count has not reached the desired number of peers.
524
- * NOTE: Discovery should only add a new query if one isn't already queued.
525
- */
526
- private heartbeat(): void {
527
- // timer is safe without a try {} catch (_e) {}, in case of error the metric won't register and timer is GC'ed
528
- const timer = this.metrics?.peerManager.heartbeatDuration.startTimer();
529
-
530
- const connectedPeers = this.getConnectedPeerIds();
531
-
532
- // Decay scores before reading them. Also prunes scores
533
- this.peerRpcScores.update();
534
-
535
- // ban and disconnect peers with bad score, collect rest of healthy peers
536
- const connectedHealthyPeers: PeerId[] = [];
537
- for (const peer of connectedPeers) {
538
- switch (this.peerRpcScores.getScoreState(peer)) {
539
- case ScoreState.Banned:
540
- void this.goodbyeAndDisconnect(peer, GoodByeReasonCode.BANNED);
541
- break;
542
- case ScoreState.Disconnected:
543
- void this.goodbyeAndDisconnect(peer, GoodByeReasonCode.SCORE_TOO_LOW);
544
- break;
545
- case ScoreState.Healthy:
546
- connectedHealthyPeers.push(peer);
547
- }
548
- }
549
-
550
- const status = this.statusCache.get();
551
- const starved =
552
- // while syncing progress is happening, we aren't starved
553
- this.lastStatus.headSlot === status.headSlot &&
554
- // if the head falls behind the threshold, we are starved
555
- this.clock.currentSlot - status.headSlot > STARVATION_THRESHOLD_SLOTS;
556
- this.lastStatus = status;
557
- this.metrics?.peerManager.starved.set(starved ? 1 : 0);
558
- const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
559
-
560
- const {peersToDisconnect, peersToConnect, attnetQueries, syncnetQueries, custodyGroupQueries} = prioritizePeers(
561
- connectedHealthyPeers.map((peer) => {
562
- const peerData = this.connectedPeers.get(peer.toString());
563
- return {
564
- id: peer,
565
- direction: peerData?.direction ?? null,
566
- status: peerData?.status ?? null,
567
- attnets: peerData?.metadata?.attnets ?? null,
568
- syncnets: peerData?.metadata?.syncnets ?? null,
569
- // here we care samplingGroups not custodyGroups in order to know which column subnets peers subscribe to
570
- samplingGroups: peerData?.metadata?.samplingGroups ?? null,
571
- score: this.peerRpcScores.getScore(peer),
572
- };
573
- }),
574
- // Collect subnets which we need peers for in the current slot
575
- this.attnetsService.getActiveSubnets(),
576
- this.syncnetsService.getActiveSubnets(),
577
- // ignore samplingGroups for pre-fulu forks
578
- forkSeq >= ForkSeq.fulu ? this.networkConfig.custodyConfig.sampleGroups : undefined,
579
- {
580
- ...this.opts,
581
- status,
582
- starved,
583
- starvationPruneRatio: STARVATION_PRUNE_RATIO,
584
- starvationThresholdSlots: STARVATION_THRESHOLD_SLOTS,
585
- },
586
- this.config,
587
- this.metrics
588
- );
589
-
590
- const queriesMerged: SubnetDiscvQueryMs[] = [];
591
- for (const {type, queries} of [
592
- {type: SubnetType.attnets, queries: attnetQueries},
593
- {type: SubnetType.syncnets, queries: syncnetQueries},
594
- ]) {
595
- if (queries.length > 0) {
596
- let count = 0;
597
- for (const query of queries) {
598
- count += query.maxPeersToDiscover;
599
- queriesMerged.push({
600
- subnet: query.subnet,
601
- type,
602
- maxPeersToDiscover: query.maxPeersToDiscover,
603
- toUnixMs: computeTimeAtSlot(this.config, query.toSlot, this.clock.genesisTime) * 1000,
604
- });
605
- }
606
-
607
- this.metrics?.peersRequestedSubnetsToQuery.inc({type}, queries.length);
608
- this.metrics?.peersRequestedSubnetsPeerCount.inc({type}, count);
609
- }
610
- }
611
-
612
- for (const maxPeersToDiscover of custodyGroupQueries.values()) {
613
- this.metrics?.peersRequestedSubnetsToQuery.inc({type: "column"}, 1);
614
- this.metrics?.peersRequestedSubnetsPeerCount.inc({type: "column"}, maxPeersToDiscover);
615
- }
616
-
617
- // disconnect first to have more slots before we dial new peers
618
- for (const [reason, peers] of peersToDisconnect) {
619
- this.metrics?.peersRequestedToDisconnect.inc({reason}, peers.length);
620
- for (const peer of peers) {
621
- void this.goodbyeAndDisconnect(peer, GoodByeReasonCode.TOO_MANY_PEERS);
622
- }
623
- }
624
-
625
- if (this.discovery) {
626
- try {
627
- this.metrics?.peersRequestedToConnect.inc(peersToConnect);
628
- // for PeerDAS, lodestar implements subnet sampling strategy, hence we need to issue columnSubnetQueries to PeerDiscovery
629
- this.discovery.discoverPeers(peersToConnect, custodyGroupQueries, queriesMerged);
630
- } catch (e) {
631
- this.logger.error("Error on discoverPeers", {}, e as Error);
632
- }
633
- }
634
-
635
- // Prune connectedPeers map in case it leaks. It has happen in previous nodes,
636
- // disconnect is not always called for all peers
637
- if (this.connectedPeers.size > connectedPeers.length * 1.1) {
638
- const actualConnectedPeerIds = new Set(connectedPeers.map((peerId) => peerId.toString()));
639
- for (const peerIdStr of this.connectedPeers.keys()) {
640
- if (!actualConnectedPeerIds.has(peerIdStr)) {
641
- this.connectedPeers.delete(peerIdStr);
642
- this.metrics?.leakedConnectionsCount.inc();
643
- }
644
- }
645
- }
646
-
647
- timer?.();
648
-
649
- this.logger.debug("peerManager heartbeat result", {
650
- peersToDisconnect: peersToDisconnect.size,
651
- peersToConnect: peersToConnect,
652
- attnetQueries: attnetQueries.length,
653
- syncnetQueries: syncnetQueries.length,
654
- });
655
- }
656
-
657
- private updateGossipsubScores(): void {
658
- const gossipsubScores = new Map<string, number>();
659
- for (const peerIdStr of this.connectedPeers.keys()) {
660
- gossipsubScores.set(peerIdStr, this.gossipsub.getScore(peerIdStr));
661
- }
662
-
663
- const toIgnoreNegativePeers = Math.ceil(this.opts.targetPeers * ALLOWED_NEGATIVE_GOSSIPSUB_FACTOR);
664
- updateGossipsubScores(this.peerRpcScores, gossipsubScores, toIgnoreNegativePeers);
665
- }
666
-
667
- private pingAndStatusTimeouts(): void {
668
- const now = Date.now();
669
- const peersToStatus: PeerId[] = [];
670
-
671
- for (const peer of this.connectedPeers.values()) {
672
- // Every interval request to send some peers our seqNumber and process theirs
673
- // If the seqNumber is different it must request the new metadata
674
- const pingInterval = peer.direction === "inbound" ? PING_INTERVAL_INBOUND_MS : PING_INTERVAL_OUTBOUND_MS;
675
- if (now > peer.lastReceivedMsgUnixTsMs + pingInterval) {
676
- void this.requestPing(peer.peerId);
677
- }
678
-
679
- // TODO: Consider sending status request to peers that do support status protocol
680
- // {supportsProtocols: getStatusProtocols()}
681
-
682
- // Every interval request to send some peers our status, and process theirs
683
- // Must re-check if this peer is relevant to us and emit an event if the status changes
684
- // So the sync layer can update things
685
- if (now > peer.lastStatusUnixTsMs + STATUS_INTERVAL_MS) {
686
- peersToStatus.push(peer.peerId);
687
- }
688
- }
689
-
690
- if (peersToStatus.length > 0) {
691
- void this.requestStatusMany(peersToStatus);
692
- }
693
- }
694
-
695
- /**
696
- * The libp2p Upgrader has successfully upgraded a peer connection on a particular multiaddress
697
- * This event is routed through the connectionManager
698
- *
699
- * Registers a peer as connected. The `direction` parameter determines if the peer is being
700
- * dialed or connecting to us.
701
- */
702
- private onLibp2pPeerConnect = async (evt: CustomEvent<Connection>): Promise<void> => {
703
- const {direction, status, remotePeer} = evt.detail;
704
- const remotePeerStr = remotePeer.toString();
705
- const remotePeerPrettyStr = prettyPrintPeerId(remotePeer);
706
- this.logger.verbose("peer connected", {peer: remotePeerPrettyStr, direction, status});
707
- // NOTE: The peerConnect event is not emitted here here, but after asserting peer relevance
708
- this.metrics?.peerConnectedEvent.inc({direction, status});
709
-
710
- if (evt.detail.status !== "open") {
711
- this.logger.debug("Peer disconnected before identify protocol initiated", {
712
- peerId: remotePeerPrettyStr,
713
- status: evt.detail.status,
714
- });
715
- return;
716
- }
717
-
718
- // On connection:
719
- // - Outbound connections: send a STATUS and PING request
720
- // - Inbound connections: expect to be STATUS'd, schedule STATUS and PING for latter
721
- // NOTE: libp2p may emit two "peer:connect" events: One for inbound, one for outbound
722
- // If that happens, it's okay. Only the "outbound" connection triggers immediate action
723
- const now = Date.now();
724
- const nodeId = computeNodeId(remotePeer);
725
- const peerData: PeerData = {
726
- lastReceivedMsgUnixTsMs: direction === "outbound" ? 0 : now,
727
- // If inbound, request after STATUS_INBOUND_GRACE_PERIOD
728
- lastStatusUnixTsMs: direction === "outbound" ? 0 : now - STATUS_INTERVAL_MS + STATUS_INBOUND_GRACE_PERIOD,
729
- connectedUnixTsMs: now,
730
- relevantStatus: RelevantPeerStatus.Unknown,
731
- direction,
732
- nodeId,
733
- peerId: remotePeer,
734
- status: null,
735
- metadata: null,
736
- agentVersion: null,
737
- agentClient: null,
738
- encodingPreference: null,
739
- };
740
- this.connectedPeers.set(remotePeerStr, peerData);
741
-
742
- if (direction === "outbound") {
743
- // this.pingAndStatusTimeouts();
744
- void this.requestPing(remotePeer);
745
- void this.requestStatus(remotePeer, this.statusCache.get());
746
- }
747
-
748
- this.libp2p.services.identify
749
- .identify(evt.detail)
750
- .then((result) => {
751
- const agentVersion = result.agentVersion;
752
- if (agentVersion) {
753
- peerData.agentVersion = agentVersion;
754
- peerData.agentClient = getKnownClientFromAgentVersion(agentVersion);
755
- }
756
- })
757
- .catch((err) => {
758
- if (evt.detail.status !== "open") {
759
- this.logger.debug("Peer disconnected during identify protocol", {
760
- peerId: remotePeerPrettyStr,
761
- error: (err as Error).message,
762
- });
763
- } else {
764
- this.logger.debug("Error setting agentVersion for the peer", {peerId: remotePeerPrettyStr}, err);
765
- }
766
- });
767
- };
768
-
769
- /**
770
- * The libp2p Upgrader has ended a connection
771
- */
772
- private onLibp2pPeerDisconnect = (evt: CustomEvent<Connection>): void => {
773
- const {direction, status, remotePeer} = evt.detail;
774
- const peerIdStr = remotePeer.toString();
775
-
776
- let logMessage = "onLibp2pPeerDisconnect";
777
- const logContext: Record<string, string | number> = {
778
- peerId: prettyPrintPeerIdStr(peerIdStr),
779
- direction,
780
- status,
781
- };
782
- // Some clients do not send good-bye requests (Nimbus) so check for inbound disconnects and apply reconnection
783
- // cool-down period to prevent automatic reconnection by Discovery
784
- if (direction === "inbound") {
785
- // prevent automatic/immediate reconnects
786
- const coolDownMin = this.peerRpcScores.applyReconnectionCoolDown(peerIdStr, GoodByeReasonCode.INBOUND_DISCONNECT);
787
- logMessage += ". Enforcing a reconnection cool-down period";
788
- logContext.coolDownMin = coolDownMin;
789
- }
790
-
791
- // remove the ping and status timer for the peer
792
- this.connectedPeers.delete(peerIdStr);
793
-
794
- this.logger.verbose(logMessage, logContext);
795
- this.networkEventBus.emit(NetworkEvent.peerDisconnected, {peer: peerIdStr});
796
- this.metrics?.peerDisconnectedEvent.inc({direction});
797
- this.libp2p.peerStore
798
- .merge(remotePeer, {tags: {[PEER_RELEVANT_TAG]: undefined}})
799
- .catch((e) => this.logger.verbose("cannot untag peer", {peerId: peerIdStr}, e as Error));
800
- };
801
-
802
- private async disconnect(peer: PeerId): Promise<void> {
803
- try {
804
- await this.libp2p.hangUp(peer);
805
- } catch (e) {
806
- this.logger.debug("Unclean disconnect", {peer: prettyPrintPeerId(peer)}, e as Error);
807
- }
808
- }
809
-
810
- private async goodbyeAndDisconnect(peer: PeerId, goodbye: GoodByeReasonCode): Promise<void> {
811
- const reason = GOODBYE_KNOWN_CODES[goodbye.toString()] || "";
812
- const peerIdStr = peer.toString();
813
- try {
814
- this.metrics?.peerGoodbyeSent.inc({reason});
815
- this.logger.debug("initiating goodbyeAndDisconnect peer", {reason, peerId: prettyPrintPeerId(peer)});
816
-
817
- const conn = getConnection(this.libp2p, peerIdStr);
818
- if (conn && Date.now() - conn.timeline.open > LONG_PEER_CONNECTION_MS) {
819
- this.metrics?.peerLongConnectionDisconnect.inc({reason});
820
- }
821
-
822
- // Wrap with shorter timeout than regular ReqResp requests to speed up shutdown
823
- await withTimeout(() => this.reqResp.sendGoodbye(peer, BigInt(goodbye)), 1_000);
824
- } catch (e) {
825
- this.logger.verbose("Failed to send goodbye", {peer: prettyPrintPeerId(peer)}, e as Error);
826
- } finally {
827
- await this.disconnect(peer);
828
- // prevent automatic/immediate reconnects
829
- const coolDownMin = this.peerRpcScores.applyReconnectionCoolDown(peerIdStr, goodbye);
830
- if (coolDownMin === NO_COOL_DOWN_APPLIED) {
831
- this.logger.verbose("Disconnected a peer", {peerId: prettyPrintPeerIdStr(peerIdStr)});
832
- } else {
833
- this.logger.verbose("Disconnected a peer. Enforcing a reconnection cool-down period", {
834
- peerId: prettyPrintPeerIdStr(peerIdStr),
835
- coolDownMin,
836
- });
837
- }
838
- }
839
- }
840
-
841
- /** Register peer count metrics */
842
- private async runPeerCountMetrics(metrics: NetworkCoreMetrics): Promise<void> {
843
- let total = 0;
844
-
845
- const peersByDirection = new Map<string, number>();
846
- const peersByClient = new Map<string, number>();
847
- const now = Date.now();
848
-
849
- // peerLongLivedAttnets metric is a count
850
- metrics.peerLongLivedAttnets.reset();
851
- metrics.peerScoreByClient.reset();
852
- metrics.peerConnectionLength.reset();
853
- metrics.peerGossipScoreByClient.reset();
854
-
855
- // reset client counts _for each client_ to 0
856
- for (const client of Object.values(ClientKind)) {
857
- peersByClient.set(client, 0);
858
- }
859
-
860
- for (const connections of getConnectionsMap(this.libp2p).values()) {
861
- const openCnx = connections.value.find((cnx) => cnx.status === "open");
862
- if (openCnx) {
863
- const direction = openCnx.direction;
864
- peersByDirection.set(direction, 1 + (peersByDirection.get(direction) ?? 0));
865
- const peerId = openCnx.remotePeer;
866
- const peerData = this.connectedPeers.get(peerId.toString());
867
- const client = peerData?.agentClient ?? ClientKind.Unknown;
868
- peersByClient.set(client, 1 + (peersByClient.get(client) ?? 0));
869
-
870
- const attnets = peerData?.metadata?.attnets;
871
-
872
- // TODO: Consider optimizing by doing observe in batch
873
- metrics.peerLongLivedAttnets.observe(attnets ? attnets.getTrueBitIndexes().length : 0);
874
- metrics.peerColumnGroupCount.observe(peerData?.metadata?.custodyGroupCount ?? 0);
875
- metrics.peerScoreByClient.observe({client}, this.peerRpcScores.getScore(peerId));
876
- metrics.peerGossipScoreByClient.observe({client}, this.peerRpcScores.getGossipScore(peerId));
877
- metrics.peerConnectionLength.observe((now - openCnx.timeline.open) / 1000);
878
- total++;
879
- }
880
- }
881
-
882
- for (const [direction, peers] of peersByDirection.entries()) {
883
- metrics.peersByDirection.set({direction}, peers);
884
- }
885
-
886
- for (const [client, peers] of peersByClient.entries()) {
887
- metrics.peersByClient.set({client}, peers);
888
- }
889
-
890
- let syncPeers = 0;
891
- for (const peer of this.connectedPeers.values()) {
892
- if (peer.relevantStatus === RelevantPeerStatus.relevant) {
893
- syncPeers++;
894
- }
895
- }
896
-
897
- metrics.peers.set(total);
898
- metrics.peersSync.set(syncPeers);
899
- }
900
- }