@lodestar/beacon-node 1.35.0-dev.8689cc3545 → 1.35.0-dev.8b45b1e978

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 (863) hide show
  1. package/lib/db/buckets.d.ts +4 -4
  2. package/lib/db/buckets.js +4 -4
  3. package/lib/db/buckets.js.map +1 -1
  4. package/lib/db/repositories/blobSidecars.js +1 -1
  5. package/lib/db/repositories/blobSidecars.js.map +1 -1
  6. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  7. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  8. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  9. package/lib/db/repositories/dataColumnSidecar.js +1 -1
  10. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  11. package/lib/db/repositories/dataColumnSidecarArchive.js +1 -1
  12. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  13. package/lib/network/network.js +4 -2
  14. package/lib/network/network.js.map +1 -1
  15. package/lib/util/blobs.js +3 -5
  16. package/lib/util/blobs.js.map +1 -1
  17. package/package.json +20 -18
  18. package/lib/api/impl/api.d.ts.map +0 -1
  19. package/lib/api/impl/beacon/blocks/index.d.ts.map +0 -1
  20. package/lib/api/impl/beacon/blocks/utils.d.ts.map +0 -1
  21. package/lib/api/impl/beacon/index.d.ts.map +0 -1
  22. package/lib/api/impl/beacon/pool/index.d.ts.map +0 -1
  23. package/lib/api/impl/beacon/rewards/index.d.ts.map +0 -1
  24. package/lib/api/impl/beacon/state/index.d.ts.map +0 -1
  25. package/lib/api/impl/beacon/state/utils.d.ts.map +0 -1
  26. package/lib/api/impl/config/constants.d.ts.map +0 -1
  27. package/lib/api/impl/config/index.d.ts.map +0 -1
  28. package/lib/api/impl/debug/index.d.ts.map +0 -1
  29. package/lib/api/impl/errors.d.ts.map +0 -1
  30. package/lib/api/impl/events/index.d.ts.map +0 -1
  31. package/lib/api/impl/index.d.ts.map +0 -1
  32. package/lib/api/impl/lightclient/index.d.ts.map +0 -1
  33. package/lib/api/impl/lodestar/index.d.ts.map +0 -1
  34. package/lib/api/impl/node/index.d.ts.map +0 -1
  35. package/lib/api/impl/node/utils.d.ts.map +0 -1
  36. package/lib/api/impl/proof/index.d.ts.map +0 -1
  37. package/lib/api/impl/types.d.ts.map +0 -1
  38. package/lib/api/impl/utils.d.ts.map +0 -1
  39. package/lib/api/impl/validator/index.d.ts.map +0 -1
  40. package/lib/api/impl/validator/utils.d.ts.map +0 -1
  41. package/lib/api/index.d.ts.map +0 -1
  42. package/lib/api/options.d.ts.map +0 -1
  43. package/lib/api/rest/activeSockets.d.ts.map +0 -1
  44. package/lib/api/rest/base.d.ts.map +0 -1
  45. package/lib/api/rest/index.d.ts.map +0 -1
  46. package/lib/api/rest/swaggerUI.d.ts.map +0 -1
  47. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +0 -1
  48. package/lib/chain/ColumnReconstructionTracker.d.ts.map +0 -1
  49. package/lib/chain/GetBlobsTracker.d.ts.map +0 -1
  50. package/lib/chain/archiveStore/archiveStore.d.ts.map +0 -1
  51. package/lib/chain/archiveStore/constants.d.ts.map +0 -1
  52. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +0 -1
  53. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +0 -1
  54. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +0 -1
  55. package/lib/chain/archiveStore/historicalState/types.d.ts.map +0 -1
  56. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +0 -1
  57. package/lib/chain/archiveStore/index.d.ts.map +0 -1
  58. package/lib/chain/archiveStore/interface.d.ts.map +0 -1
  59. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +0 -1
  60. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +0 -1
  61. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +0 -1
  62. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +0 -1
  63. package/lib/chain/balancesCache.d.ts.map +0 -1
  64. package/lib/chain/beaconProposerCache.d.ts.map +0 -1
  65. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +0 -1
  66. package/lib/chain/blocks/blockInput/errors.d.ts.map +0 -1
  67. package/lib/chain/blocks/blockInput/index.d.ts.map +0 -1
  68. package/lib/chain/blocks/blockInput/types.d.ts.map +0 -1
  69. package/lib/chain/blocks/blockInput/utils.d.ts.map +0 -1
  70. package/lib/chain/blocks/importBlock.d.ts.map +0 -1
  71. package/lib/chain/blocks/index.d.ts.map +0 -1
  72. package/lib/chain/blocks/types.d.ts.map +0 -1
  73. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +0 -1
  74. package/lib/chain/blocks/utils/chainSegment.d.ts.map +0 -1
  75. package/lib/chain/blocks/utils/checkpoint.d.ts.map +0 -1
  76. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +0 -1
  77. package/lib/chain/blocks/utils/ownBanner.d.ts.map +0 -1
  78. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +0 -1
  79. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +0 -1
  80. package/lib/chain/blocks/verifyBlock.d.ts.map +0 -1
  81. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +0 -1
  82. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +0 -1
  83. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +0 -1
  84. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +0 -1
  85. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +0 -1
  86. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +0 -1
  87. package/lib/chain/bls/index.d.ts.map +0 -1
  88. package/lib/chain/bls/interface.d.ts.map +0 -1
  89. package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
  90. package/lib/chain/bls/multithread/index.d.ts.map +0 -1
  91. package/lib/chain/bls/multithread/jobItem.d.ts.map +0 -1
  92. package/lib/chain/bls/multithread/poolSize.d.ts.map +0 -1
  93. package/lib/chain/bls/multithread/types.d.ts.map +0 -1
  94. package/lib/chain/bls/multithread/utils.d.ts.map +0 -1
  95. package/lib/chain/bls/multithread/worker.d.ts.map +0 -1
  96. package/lib/chain/bls/singleThread.d.ts.map +0 -1
  97. package/lib/chain/bls/utils.d.ts.map +0 -1
  98. package/lib/chain/chain.d.ts.map +0 -1
  99. package/lib/chain/emitter.d.ts.map +0 -1
  100. package/lib/chain/errors/attestationError.d.ts.map +0 -1
  101. package/lib/chain/errors/attesterSlashingError.d.ts.map +0 -1
  102. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  103. package/lib/chain/errors/blockError.d.ts.map +0 -1
  104. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +0 -1
  105. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +0 -1
  106. package/lib/chain/errors/gossipValidation.d.ts.map +0 -1
  107. package/lib/chain/errors/index.d.ts.map +0 -1
  108. package/lib/chain/errors/lightClientError.d.ts.map +0 -1
  109. package/lib/chain/errors/proposerSlashingError.d.ts.map +0 -1
  110. package/lib/chain/errors/syncCommitteeError.d.ts.map +0 -1
  111. package/lib/chain/errors/voluntaryExitError.d.ts.map +0 -1
  112. package/lib/chain/forkChoice/index.d.ts.map +0 -1
  113. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  114. package/lib/chain/genesis/interface.d.ts.map +0 -1
  115. package/lib/chain/index.d.ts.map +0 -1
  116. package/lib/chain/initState.d.ts.map +0 -1
  117. package/lib/chain/interface.d.ts.map +0 -1
  118. package/lib/chain/lightClient/index.d.ts.map +0 -1
  119. package/lib/chain/lightClient/proofs.d.ts.map +0 -1
  120. package/lib/chain/lightClient/types.d.ts.map +0 -1
  121. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +0 -1
  122. package/lib/chain/opPools/attestationPool.d.ts.map +0 -1
  123. package/lib/chain/opPools/index.d.ts.map +0 -1
  124. package/lib/chain/opPools/opPool.d.ts.map +0 -1
  125. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +0 -1
  126. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +0 -1
  127. package/lib/chain/opPools/types.d.ts.map +0 -1
  128. package/lib/chain/opPools/utils.d.ts.map +0 -1
  129. package/lib/chain/options.d.ts.map +0 -1
  130. package/lib/chain/prepareNextSlot.d.ts.map +0 -1
  131. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +0 -1
  132. package/lib/chain/produceBlock/index.d.ts.map +0 -1
  133. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +0 -1
  134. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +0 -1
  135. package/lib/chain/regen/errors.d.ts.map +0 -1
  136. package/lib/chain/regen/index.d.ts.map +0 -1
  137. package/lib/chain/regen/interface.d.ts.map +0 -1
  138. package/lib/chain/regen/queued.d.ts.map +0 -1
  139. package/lib/chain/regen/regen.d.ts.map +0 -1
  140. package/lib/chain/reprocess.d.ts.map +0 -1
  141. package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
  142. package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
  143. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
  144. package/lib/chain/seenCache/index.d.ts.map +0 -1
  145. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +0 -1
  146. package/lib/chain/seenCache/seenAttestationData.d.ts.map +0 -1
  147. package/lib/chain/seenCache/seenAttesters.d.ts.map +0 -1
  148. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +0 -1
  149. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +0 -1
  150. package/lib/chain/seenCache/seenCommittee.d.ts.map +0 -1
  151. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +0 -1
  152. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +0 -1
  153. package/lib/chain/serializeState.d.ts.map +0 -1
  154. package/lib/chain/shufflingCache.d.ts.map +0 -1
  155. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
  156. package/lib/chain/stateCache/datastore/db.d.ts.map +0 -1
  157. package/lib/chain/stateCache/datastore/file.d.ts.map +0 -1
  158. package/lib/chain/stateCache/datastore/index.d.ts.map +0 -1
  159. package/lib/chain/stateCache/datastore/types.d.ts.map +0 -1
  160. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +0 -1
  161. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
  162. package/lib/chain/stateCache/index.d.ts.map +0 -1
  163. package/lib/chain/stateCache/mapMetrics.d.ts.map +0 -1
  164. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +0 -1
  165. package/lib/chain/stateCache/types.d.ts.map +0 -1
  166. package/lib/chain/validation/aggregateAndProof.d.ts.map +0 -1
  167. package/lib/chain/validation/attestation.d.ts.map +0 -1
  168. package/lib/chain/validation/attesterSlashing.d.ts.map +0 -1
  169. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  170. package/lib/chain/validation/block.d.ts.map +0 -1
  171. package/lib/chain/validation/blsToExecutionChange.d.ts.map +0 -1
  172. package/lib/chain/validation/dataColumnSidecar.d.ts.map +0 -1
  173. package/lib/chain/validation/index.d.ts.map +0 -1
  174. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +0 -1
  175. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +0 -1
  176. package/lib/chain/validation/proposerSlashing.d.ts.map +0 -1
  177. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +0 -1
  178. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +0 -1
  179. package/lib/chain/validation/signatureSets/index.d.ts.map +0 -1
  180. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +0 -1
  181. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +0 -1
  182. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +0 -1
  183. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +0 -1
  184. package/lib/chain/validation/syncCommittee.d.ts.map +0 -1
  185. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +0 -1
  186. package/lib/chain/validation/voluntaryExit.d.ts.map +0 -1
  187. package/lib/chain/validatorMonitor.d.ts.map +0 -1
  188. package/lib/constants/constants.d.ts.map +0 -1
  189. package/lib/constants/index.d.ts.map +0 -1
  190. package/lib/constants/network.d.ts.map +0 -1
  191. package/lib/db/beacon.d.ts.map +0 -1
  192. package/lib/db/buckets.d.ts.map +0 -1
  193. package/lib/db/index.d.ts.map +0 -1
  194. package/lib/db/interface.d.ts.map +0 -1
  195. package/lib/db/options.d.ts.map +0 -1
  196. package/lib/db/repositories/attesterSlashing.d.ts.map +0 -1
  197. package/lib/db/repositories/backfilledRanges.d.ts.map +0 -1
  198. package/lib/db/repositories/blobSidecars.d.ts.map +0 -1
  199. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +0 -1
  200. package/lib/db/repositories/block.d.ts.map +0 -1
  201. package/lib/db/repositories/blockArchive.d.ts.map +0 -1
  202. package/lib/db/repositories/blockArchiveIndex.d.ts.map +0 -1
  203. package/lib/db/repositories/blsToExecutionChange.d.ts.map +0 -1
  204. package/lib/db/repositories/checkpointState.d.ts.map +0 -1
  205. package/lib/db/repositories/dataColumnSidecar.d.ts.map +0 -1
  206. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +0 -1
  207. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  208. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  209. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  210. package/lib/db/repositories/index.d.ts.map +0 -1
  211. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +0 -1
  212. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +0 -1
  213. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +0 -1
  214. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +0 -1
  215. package/lib/db/repositories/proposerSlashing.d.ts.map +0 -1
  216. package/lib/db/repositories/stateArchive.d.ts.map +0 -1
  217. package/lib/db/repositories/stateArchiveIndex.d.ts.map +0 -1
  218. package/lib/db/repositories/voluntaryExit.d.ts.map +0 -1
  219. package/lib/db/single/index.d.ts.map +0 -1
  220. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  221. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  222. package/lib/eth1/errors.d.ts.map +0 -1
  223. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  224. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  225. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  226. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
  227. package/lib/eth1/index.d.ts.map +0 -1
  228. package/lib/eth1/interface.d.ts.map +0 -1
  229. package/lib/eth1/options.d.ts.map +0 -1
  230. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  231. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  232. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  233. package/lib/eth1/provider/utils.d.ts.map +0 -1
  234. package/lib/eth1/stream.d.ts.map +0 -1
  235. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  236. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  237. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  238. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  239. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  240. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  241. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  242. package/lib/execution/builder/cache.d.ts.map +0 -1
  243. package/lib/execution/builder/http.d.ts.map +0 -1
  244. package/lib/execution/builder/index.d.ts.map +0 -1
  245. package/lib/execution/builder/interface.d.ts.map +0 -1
  246. package/lib/execution/builder/utils.d.ts.map +0 -1
  247. package/lib/execution/engine/disabled.d.ts.map +0 -1
  248. package/lib/execution/engine/http.d.ts.map +0 -1
  249. package/lib/execution/engine/index.d.ts.map +0 -1
  250. package/lib/execution/engine/interface.d.ts.map +0 -1
  251. package/lib/execution/engine/mock.d.ts.map +0 -1
  252. package/lib/execution/engine/payloadIdCache.d.ts.map +0 -1
  253. package/lib/execution/engine/types.d.ts.map +0 -1
  254. package/lib/execution/engine/utils.d.ts.map +0 -1
  255. package/lib/execution/index.d.ts.map +0 -1
  256. package/lib/index.d.ts.map +0 -1
  257. package/lib/metrics/index.d.ts.map +0 -1
  258. package/lib/metrics/metrics/beacon.d.ts.map +0 -1
  259. package/lib/metrics/metrics/lodestar.d.ts.map +0 -1
  260. package/lib/metrics/metrics.d.ts.map +0 -1
  261. package/lib/metrics/nodeJsMetrics.d.ts.map +0 -1
  262. package/lib/metrics/options.d.ts.map +0 -1
  263. package/lib/metrics/server/http.d.ts.map +0 -1
  264. package/lib/metrics/server/index.d.ts.map +0 -1
  265. package/lib/metrics/utils/avgMinMax.d.ts.map +0 -1
  266. package/lib/metrics/utils/gauge.d.ts.map +0 -1
  267. package/lib/metrics/utils/registryMetricCreator.d.ts.map +0 -1
  268. package/lib/monitoring/clientStats.d.ts.map +0 -1
  269. package/lib/monitoring/index.d.ts.map +0 -1
  270. package/lib/monitoring/options.d.ts.map +0 -1
  271. package/lib/monitoring/properties.d.ts.map +0 -1
  272. package/lib/monitoring/service.d.ts.map +0 -1
  273. package/lib/monitoring/system.d.ts.map +0 -1
  274. package/lib/monitoring/types.d.ts.map +0 -1
  275. package/lib/network/core/events.d.ts.map +0 -1
  276. package/lib/network/core/index.d.ts.map +0 -1
  277. package/lib/network/core/metrics.d.ts.map +0 -1
  278. package/lib/network/core/networkCore.d.ts.map +0 -1
  279. package/lib/network/core/networkCoreWorker.d.ts.map +0 -1
  280. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +0 -1
  281. package/lib/network/core/types.d.ts.map +0 -1
  282. package/lib/network/discv5/index.d.ts.map +0 -1
  283. package/lib/network/discv5/types.d.ts.map +0 -1
  284. package/lib/network/discv5/utils.d.ts.map +0 -1
  285. package/lib/network/discv5/worker.d.ts.map +0 -1
  286. package/lib/network/events.d.ts.map +0 -1
  287. package/lib/network/forks.d.ts.map +0 -1
  288. package/lib/network/gossip/constants.d.ts.map +0 -1
  289. package/lib/network/gossip/encoding.d.ts.map +0 -1
  290. package/lib/network/gossip/errors.d.ts.map +0 -1
  291. package/lib/network/gossip/gossipsub.d.ts.map +0 -1
  292. package/lib/network/gossip/index.d.ts.map +0 -1
  293. package/lib/network/gossip/interface.d.ts.map +0 -1
  294. package/lib/network/gossip/metrics.d.ts.map +0 -1
  295. package/lib/network/gossip/scoringParameters.d.ts.map +0 -1
  296. package/lib/network/gossip/topic.d.ts.map +0 -1
  297. package/lib/network/index.d.ts.map +0 -1
  298. package/lib/network/interface.d.ts.map +0 -1
  299. package/lib/network/libp2p/error.d.ts.map +0 -1
  300. package/lib/network/libp2p/index.d.ts.map +0 -1
  301. package/lib/network/metadata.d.ts.map +0 -1
  302. package/lib/network/network.d.ts.map +0 -1
  303. package/lib/network/networkConfig.d.ts.map +0 -1
  304. package/lib/network/options.d.ts.map +0 -1
  305. package/lib/network/peers/client.d.ts.map +0 -1
  306. package/lib/network/peers/datastore.d.ts.map +0 -1
  307. package/lib/network/peers/discover.d.ts.map +0 -1
  308. package/lib/network/peers/index.d.ts.map +0 -1
  309. package/lib/network/peers/peerManager.d.ts.map +0 -1
  310. package/lib/network/peers/peersData.d.ts.map +0 -1
  311. package/lib/network/peers/score/constants.d.ts.map +0 -1
  312. package/lib/network/peers/score/index.d.ts.map +0 -1
  313. package/lib/network/peers/score/interface.d.ts.map +0 -1
  314. package/lib/network/peers/score/score.d.ts.map +0 -1
  315. package/lib/network/peers/score/store.d.ts.map +0 -1
  316. package/lib/network/peers/score/utils.d.ts.map +0 -1
  317. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +0 -1
  318. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +0 -1
  319. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +0 -1
  320. package/lib/network/peers/utils/index.d.ts.map +0 -1
  321. package/lib/network/peers/utils/prioritizePeers.d.ts.map +0 -1
  322. package/lib/network/peers/utils/subnetMap.d.ts.map +0 -1
  323. package/lib/network/processor/aggregatorTracker.d.ts.map +0 -1
  324. package/lib/network/processor/extractSlotRootFns.d.ts.map +0 -1
  325. package/lib/network/processor/gossipHandlers.d.ts.map +0 -1
  326. package/lib/network/processor/gossipQueues/index.d.ts.map +0 -1
  327. package/lib/network/processor/gossipQueues/indexed.d.ts.map +0 -1
  328. package/lib/network/processor/gossipQueues/linear.d.ts.map +0 -1
  329. package/lib/network/processor/gossipQueues/types.d.ts.map +0 -1
  330. package/lib/network/processor/gossipValidatorFn.d.ts.map +0 -1
  331. package/lib/network/processor/index.d.ts.map +0 -1
  332. package/lib/network/processor/types.d.ts.map +0 -1
  333. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +0 -1
  334. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +0 -1
  335. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +0 -1
  336. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  337. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  338. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +0 -1
  339. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +0 -1
  340. package/lib/network/reqresp/handlers/index.d.ts.map +0 -1
  341. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +0 -1
  342. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +0 -1
  343. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +0 -1
  344. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +0 -1
  345. package/lib/network/reqresp/index.d.ts.map +0 -1
  346. package/lib/network/reqresp/interface.d.ts.map +0 -1
  347. package/lib/network/reqresp/protocols.d.ts.map +0 -1
  348. package/lib/network/reqresp/rateLimit.d.ts.map +0 -1
  349. package/lib/network/reqresp/score.d.ts.map +0 -1
  350. package/lib/network/reqresp/types.d.ts.map +0 -1
  351. package/lib/network/reqresp/utils/collect.d.ts.map +0 -1
  352. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +0 -1
  353. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +0 -1
  354. package/lib/network/statusCache.d.ts.map +0 -1
  355. package/lib/network/subnets/attnetsService.d.ts.map +0 -1
  356. package/lib/network/subnets/index.d.ts.map +0 -1
  357. package/lib/network/subnets/interface.d.ts.map +0 -1
  358. package/lib/network/subnets/syncnetsService.d.ts.map +0 -1
  359. package/lib/network/subnets/util.d.ts.map +0 -1
  360. package/lib/network/util.d.ts.map +0 -1
  361. package/lib/node/index.d.ts.map +0 -1
  362. package/lib/node/nodejs.d.ts.map +0 -1
  363. package/lib/node/notifier.d.ts.map +0 -1
  364. package/lib/node/options.d.ts.map +0 -1
  365. package/lib/node/utils/interop/deposits.d.ts.map +0 -1
  366. package/lib/node/utils/interop/state.d.ts.map +0 -1
  367. package/lib/node/utils/lightclient.d.ts.map +0 -1
  368. package/lib/node/utils/state.d.ts.map +0 -1
  369. package/lib/sync/backfill/backfill.d.ts.map +0 -1
  370. package/lib/sync/backfill/errors.d.ts.map +0 -1
  371. package/lib/sync/backfill/index.d.ts.map +0 -1
  372. package/lib/sync/backfill/verify.d.ts.map +0 -1
  373. package/lib/sync/constants.d.ts.map +0 -1
  374. package/lib/sync/index.d.ts.map +0 -1
  375. package/lib/sync/interface.d.ts.map +0 -1
  376. package/lib/sync/options.d.ts.map +0 -1
  377. package/lib/sync/range/batch.d.ts.map +0 -1
  378. package/lib/sync/range/chain.d.ts.map +0 -1
  379. package/lib/sync/range/range.d.ts.map +0 -1
  380. package/lib/sync/range/utils/batches.d.ts.map +0 -1
  381. package/lib/sync/range/utils/chainTarget.d.ts.map +0 -1
  382. package/lib/sync/range/utils/hashBlocks.d.ts.map +0 -1
  383. package/lib/sync/range/utils/index.d.ts.map +0 -1
  384. package/lib/sync/range/utils/peerBalancer.d.ts.map +0 -1
  385. package/lib/sync/range/utils/updateChains.d.ts.map +0 -1
  386. package/lib/sync/sync.d.ts.map +0 -1
  387. package/lib/sync/types.d.ts.map +0 -1
  388. package/lib/sync/unknownBlock.d.ts.map +0 -1
  389. package/lib/sync/utils/downloadByRange.d.ts.map +0 -1
  390. package/lib/sync/utils/downloadByRoot.d.ts.map +0 -1
  391. package/lib/sync/utils/pendingBlocksTree.d.ts.map +0 -1
  392. package/lib/sync/utils/remoteSyncType.d.ts.map +0 -1
  393. package/lib/util/address.d.ts.map +0 -1
  394. package/lib/util/array.d.ts.map +0 -1
  395. package/lib/util/asyncIterableToEvents.d.ts.map +0 -1
  396. package/lib/util/binarySearch.d.ts.map +0 -1
  397. package/lib/util/bitArray.d.ts.map +0 -1
  398. package/lib/util/blobs.d.ts.map +0 -1
  399. package/lib/util/bufferPool.d.ts.map +0 -1
  400. package/lib/util/bytes.d.ts.map +0 -1
  401. package/lib/util/chunkify.d.ts.map +0 -1
  402. package/lib/util/clock.d.ts.map +0 -1
  403. package/lib/util/dataColumns.d.ts.map +0 -1
  404. package/lib/util/dependentRoot.d.ts.map +0 -1
  405. package/lib/util/enum.d.ts.map +0 -1
  406. package/lib/util/error.d.ts.map +0 -1
  407. package/lib/util/eventLoop.d.ts.map +0 -1
  408. package/lib/util/execution.d.ts.map +0 -1
  409. package/lib/util/file.d.ts.map +0 -1
  410. package/lib/util/forkChoice.d.ts.map +0 -1
  411. package/lib/util/forkName.d.ts.map +0 -1
  412. package/lib/util/graffiti.d.ts.map +0 -1
  413. package/lib/util/hex.d.ts.map +0 -1
  414. package/lib/util/index.d.ts.map +0 -1
  415. package/lib/util/ip.d.ts.map +0 -1
  416. package/lib/util/itTrigger.d.ts.map +0 -1
  417. package/lib/util/kzg.d.ts.map +0 -1
  418. package/lib/util/map.d.ts.map +0 -1
  419. package/lib/util/metadata.d.ts.map +0 -1
  420. package/lib/util/multifork.d.ts.map +0 -1
  421. package/lib/util/numpy.d.ts.map +0 -1
  422. package/lib/util/peerId.d.ts.map +0 -1
  423. package/lib/util/profile.d.ts.map +0 -1
  424. package/lib/util/promises.d.ts.map +0 -1
  425. package/lib/util/queue/errors.d.ts.map +0 -1
  426. package/lib/util/queue/fnQueue.d.ts.map +0 -1
  427. package/lib/util/queue/index.d.ts.map +0 -1
  428. package/lib/util/queue/itemQueue.d.ts.map +0 -1
  429. package/lib/util/queue/options.d.ts.map +0 -1
  430. package/lib/util/serializedCache.d.ts.map +0 -1
  431. package/lib/util/set.d.ts.map +0 -1
  432. package/lib/util/shuffle.d.ts.map +0 -1
  433. package/lib/util/sortBy.d.ts.map +0 -1
  434. package/lib/util/sszBytes.d.ts.map +0 -1
  435. package/lib/util/strictEvents.d.ts.map +0 -1
  436. package/lib/util/time.d.ts.map +0 -1
  437. package/lib/util/timeSeries.d.ts.map +0 -1
  438. package/lib/util/types.d.ts.map +0 -1
  439. package/lib/util/workerEvents.d.ts.map +0 -1
  440. package/lib/util/wrapError.d.ts.map +0 -1
  441. package/src/api/impl/api.ts +0 -26
  442. package/src/api/impl/beacon/blocks/index.ts +0 -744
  443. package/src/api/impl/beacon/blocks/utils.ts +0 -75
  444. package/src/api/impl/beacon/index.ts +0 -35
  445. package/src/api/impl/beacon/pool/index.ts +0 -314
  446. package/src/api/impl/beacon/rewards/index.ts +0 -30
  447. package/src/api/impl/beacon/state/index.ts +0 -406
  448. package/src/api/impl/beacon/state/utils.ts +0 -189
  449. package/src/api/impl/config/constants.ts +0 -127
  450. package/src/api/impl/config/index.ts +0 -59
  451. package/src/api/impl/debug/index.ts +0 -131
  452. package/src/api/impl/errors.ts +0 -50
  453. package/src/api/impl/events/index.ts +0 -33
  454. package/src/api/impl/index.ts +0 -6
  455. package/src/api/impl/lightclient/index.ts +0 -64
  456. package/src/api/impl/lodestar/index.ts +0 -257
  457. package/src/api/impl/node/index.ts +0 -88
  458. package/src/api/impl/node/utils.ts +0 -51
  459. package/src/api/impl/proof/index.ts +0 -60
  460. package/src/api/impl/types.ts +0 -17
  461. package/src/api/impl/utils.ts +0 -25
  462. package/src/api/impl/validator/index.ts +0 -1538
  463. package/src/api/impl/validator/utils.ts +0 -85
  464. package/src/api/index.ts +0 -2
  465. package/src/api/options.ts +0 -16
  466. package/src/api/rest/activeSockets.ts +0 -109
  467. package/src/api/rest/base.ts +0 -216
  468. package/src/api/rest/index.ts +0 -63
  469. package/src/api/rest/swaggerUI.ts +0 -80
  470. package/src/bun-wrappers/prometheus-gc-stats.ts +0 -7
  471. package/src/chain/ColumnReconstructionTracker.ts +0 -90
  472. package/src/chain/GetBlobsTracker.ts +0 -115
  473. package/src/chain/archiveStore/archiveStore.ts +0 -222
  474. package/src/chain/archiveStore/constants.ts +0 -5
  475. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +0 -116
  476. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +0 -68
  477. package/src/chain/archiveStore/historicalState/metrics.ts +0 -214
  478. package/src/chain/archiveStore/historicalState/types.ts +0 -41
  479. package/src/chain/archiveStore/historicalState/worker.ts +0 -77
  480. package/src/chain/archiveStore/index.ts +0 -3
  481. package/src/chain/archiveStore/interface.ts +0 -75
  482. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +0 -138
  483. package/src/chain/archiveStore/utils/archiveBlocks.ts +0 -437
  484. package/src/chain/archiveStore/utils/pruneHistory.ts +0 -56
  485. package/src/chain/archiveStore/utils/updateBackfillRange.ts +0 -50
  486. package/src/chain/balancesCache.ts +0 -52
  487. package/src/chain/beaconProposerCache.ts +0 -43
  488. package/src/chain/blocks/blockInput/blockInput.ts +0 -851
  489. package/src/chain/blocks/blockInput/errors.ts +0 -48
  490. package/src/chain/blocks/blockInput/index.ts +0 -4
  491. package/src/chain/blocks/blockInput/types.ts +0 -145
  492. package/src/chain/blocks/blockInput/utils.ts +0 -21
  493. package/src/chain/blocks/importBlock.ts +0 -603
  494. package/src/chain/blocks/index.ts +0 -179
  495. package/src/chain/blocks/types.ts +0 -101
  496. package/src/chain/blocks/utils/blowfishBanner.ts +0 -28
  497. package/src/chain/blocks/utils/chainSegment.ts +0 -29
  498. package/src/chain/blocks/utils/checkpoint.ts +0 -25
  499. package/src/chain/blocks/utils/giraffeBanner.ts +0 -30
  500. package/src/chain/blocks/utils/ownBanner.ts +0 -20
  501. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +0 -43
  502. package/src/chain/blocks/utils/zebraBanner.ts +0 -45
  503. package/src/chain/blocks/verifyBlock.ts +0 -242
  504. package/src/chain/blocks/verifyBlocksDataAvailability.ts +0 -34
  505. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +0 -438
  506. package/src/chain/blocks/verifyBlocksSanityChecks.ts +0 -129
  507. package/src/chain/blocks/verifyBlocksSignatures.ts +0 -105
  508. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +0 -114
  509. package/src/chain/blocks/writeBlockInputToDb.ts +0 -128
  510. package/src/chain/bls/index.ts +0 -4
  511. package/src/chain/bls/interface.ts +0 -68
  512. package/src/chain/bls/maybeBatch.ts +0 -45
  513. package/src/chain/bls/multithread/index.ts +0 -582
  514. package/src/chain/bls/multithread/jobItem.ts +0 -119
  515. package/src/chain/bls/multithread/poolSize.ts +0 -16
  516. package/src/chain/bls/multithread/types.ts +0 -38
  517. package/src/chain/bls/multithread/utils.ts +0 -19
  518. package/src/chain/bls/multithread/worker.ts +0 -114
  519. package/src/chain/bls/singleThread.ts +0 -87
  520. package/src/chain/bls/utils.ts +0 -30
  521. package/src/chain/chain.ts +0 -1365
  522. package/src/chain/emitter.ts +0 -113
  523. package/src/chain/errors/attestationError.ts +0 -194
  524. package/src/chain/errors/attesterSlashingError.ts +0 -11
  525. package/src/chain/errors/blobSidecarError.ts +0 -60
  526. package/src/chain/errors/blockError.ts +0 -166
  527. package/src/chain/errors/blsToExecutionChangeError.ts +0 -13
  528. package/src/chain/errors/dataColumnSidecarError.ts +0 -80
  529. package/src/chain/errors/gossipValidation.ts +0 -20
  530. package/src/chain/errors/index.ts +0 -10
  531. package/src/chain/errors/lightClientError.ts +0 -30
  532. package/src/chain/errors/proposerSlashingError.ts +0 -11
  533. package/src/chain/errors/syncCommitteeError.ts +0 -36
  534. package/src/chain/errors/voluntaryExitError.ts +0 -13
  535. package/src/chain/forkChoice/index.ts +0 -112
  536. package/src/chain/genesis/genesis.ts +0 -190
  537. package/src/chain/genesis/interface.ts +0 -14
  538. package/src/chain/index.ts +0 -6
  539. package/src/chain/initState.ts +0 -221
  540. package/src/chain/interface.ts +0 -280
  541. package/src/chain/lightClient/index.ts +0 -764
  542. package/src/chain/lightClient/proofs.ts +0 -85
  543. package/src/chain/lightClient/types.ts +0 -33
  544. package/src/chain/opPools/aggregatedAttestationPool.ts +0 -1063
  545. package/src/chain/opPools/attestationPool.ts +0 -283
  546. package/src/chain/opPools/index.ts +0 -5
  547. package/src/chain/opPools/opPool.ts +0 -462
  548. package/src/chain/opPools/syncCommitteeMessagePool.ts +0 -167
  549. package/src/chain/opPools/syncContributionAndProofPool.ts +0 -240
  550. package/src/chain/opPools/types.ts +0 -35
  551. package/src/chain/opPools/utils.ts +0 -65
  552. package/src/chain/options.ts +0 -138
  553. package/src/chain/prepareNextSlot.ts +0 -277
  554. package/src/chain/produceBlock/computeNewStateRoot.ts +0 -55
  555. package/src/chain/produceBlock/index.ts +0 -2
  556. package/src/chain/produceBlock/produceBlockBody.ts +0 -797
  557. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +0 -54
  558. package/src/chain/regen/errors.ts +0 -30
  559. package/src/chain/regen/index.ts +0 -4
  560. package/src/chain/regen/interface.ts +0 -93
  561. package/src/chain/regen/queued.ts +0 -317
  562. package/src/chain/regen/regen.ts +0 -424
  563. package/src/chain/reprocess.ts +0 -161
  564. package/src/chain/rewards/attestationsRewards.ts +0 -196
  565. package/src/chain/rewards/blockRewards.ts +0 -150
  566. package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
  567. package/src/chain/seenCache/index.ts +0 -5
  568. package/src/chain/seenCache/seenAggregateAndProof.ts +0 -120
  569. package/src/chain/seenCache/seenAttestationData.ts +0 -145
  570. package/src/chain/seenCache/seenAttesters.ts +0 -58
  571. package/src/chain/seenCache/seenBlockAttesters.ts +0 -18
  572. package/src/chain/seenCache/seenBlockProposers.ts +0 -48
  573. package/src/chain/seenCache/seenCommittee.ts +0 -43
  574. package/src/chain/seenCache/seenCommitteeContribution.ts +0 -104
  575. package/src/chain/seenCache/seenGossipBlockInput.ts +0 -373
  576. package/src/chain/serializeState.ts +0 -32
  577. package/src/chain/shufflingCache.ts +0 -238
  578. package/src/chain/stateCache/blockStateCacheImpl.ts +0 -150
  579. package/src/chain/stateCache/datastore/db.ts +0 -36
  580. package/src/chain/stateCache/datastore/file.ts +0 -53
  581. package/src/chain/stateCache/datastore/index.ts +0 -2
  582. package/src/chain/stateCache/datastore/types.ts +0 -13
  583. package/src/chain/stateCache/fifoBlockStateCache.ts +0 -208
  584. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -198
  585. package/src/chain/stateCache/index.ts +0 -3
  586. package/src/chain/stateCache/mapMetrics.ts +0 -52
  587. package/src/chain/stateCache/persistentCheckpointsCache.ts +0 -835
  588. package/src/chain/stateCache/types.ts +0 -86
  589. package/src/chain/validation/aggregateAndProof.ts +0 -258
  590. package/src/chain/validation/attestation.ts +0 -885
  591. package/src/chain/validation/attesterSlashing.ts +0 -61
  592. package/src/chain/validation/blobSidecar.ts +0 -301
  593. package/src/chain/validation/block.ts +0 -188
  594. package/src/chain/validation/blsToExecutionChange.ts +0 -61
  595. package/src/chain/validation/dataColumnSidecar.ts +0 -381
  596. package/src/chain/validation/index.ts +0 -9
  597. package/src/chain/validation/lightClientFinalityUpdate.ts +0 -45
  598. package/src/chain/validation/lightClientOptimisticUpdate.ts +0 -67
  599. package/src/chain/validation/proposerSlashing.ts +0 -54
  600. package/src/chain/validation/signatureSets/aggregateAndProof.ts +0 -38
  601. package/src/chain/validation/signatureSets/contributionAndProof.ts +0 -27
  602. package/src/chain/validation/signatureSets/index.ts +0 -6
  603. package/src/chain/validation/signatureSets/selectionProof.ts +0 -27
  604. package/src/chain/validation/signatureSets/syncCommittee.ts +0 -22
  605. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +0 -18
  606. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +0 -27
  607. package/src/chain/validation/syncCommittee.ts +0 -165
  608. package/src/chain/validation/syncCommitteeContributionAndProof.ts +0 -122
  609. package/src/chain/validation/voluntaryExit.ts +0 -58
  610. package/src/chain/validatorMonitor.ts +0 -1299
  611. package/src/constants/constants.ts +0 -15
  612. package/src/constants/index.ts +0 -2
  613. package/src/constants/network.ts +0 -52
  614. package/src/db/beacon.ts +0 -113
  615. package/src/db/buckets.ts +0 -80
  616. package/src/db/index.ts +0 -2
  617. package/src/db/interface.ts +0 -76
  618. package/src/db/options.ts +0 -7
  619. package/src/db/repositories/attesterSlashing.ts +0 -38
  620. package/src/db/repositories/backfilledRanges.ts +0 -29
  621. package/src/db/repositories/blobSidecars.ts +0 -37
  622. package/src/db/repositories/blobSidecarsArchive.ts +0 -28
  623. package/src/db/repositories/block.ts +0 -33
  624. package/src/db/repositories/blockArchive.ts +0 -170
  625. package/src/db/repositories/blockArchiveIndex.ts +0 -45
  626. package/src/db/repositories/blsToExecutionChange.ts +0 -16
  627. package/src/db/repositories/checkpointState.ts +0 -31
  628. package/src/db/repositories/dataColumnSidecar.ts +0 -49
  629. package/src/db/repositories/dataColumnSidecarArchive.ts +0 -56
  630. package/src/db/repositories/depositDataRoot.ts +0 -80
  631. package/src/db/repositories/depositEvent.ts +0 -32
  632. package/src/db/repositories/eth1Data.ts +0 -33
  633. package/src/db/repositories/index.ts +0 -20
  634. package/src/db/repositories/lightclientBestUpdate.ts +0 -41
  635. package/src/db/repositories/lightclientCheckpointHeader.ts +0 -32
  636. package/src/db/repositories/lightclientSyncCommittee.ts +0 -16
  637. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +0 -77
  638. package/src/db/repositories/proposerSlashing.ts +0 -15
  639. package/src/db/repositories/stateArchive.ts +0 -69
  640. package/src/db/repositories/stateArchiveIndex.ts +0 -18
  641. package/src/db/repositories/voluntaryExit.ts +0 -15
  642. package/src/db/single/index.ts +0 -2
  643. package/src/db/single/preGenesisState.ts +0 -37
  644. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  645. package/src/eth1/errors.ts +0 -40
  646. package/src/eth1/eth1DataCache.ts +0 -26
  647. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  648. package/src/eth1/eth1DepositsCache.ts +0 -141
  649. package/src/eth1/eth1MergeBlockTracker.ts +0 -328
  650. package/src/eth1/index.ts +0 -157
  651. package/src/eth1/interface.ts +0 -131
  652. package/src/eth1/options.ts +0 -28
  653. package/src/eth1/provider/eth1Provider.ts +0 -229
  654. package/src/eth1/provider/jsonRpcHttpClient.ts +0 -390
  655. package/src/eth1/provider/jwt.ts +0 -36
  656. package/src/eth1/provider/utils.ts +0 -136
  657. package/src/eth1/stream.ts +0 -75
  658. package/src/eth1/utils/depositContract.ts +0 -37
  659. package/src/eth1/utils/deposits.ts +0 -70
  660. package/src/eth1/utils/eth1Data.ts +0 -100
  661. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  662. package/src/eth1/utils/eth1Vote.ts +0 -142
  663. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  664. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  665. package/src/execution/builder/cache.ts +0 -39
  666. package/src/execution/builder/http.ts +0 -229
  667. package/src/execution/builder/index.ts +0 -27
  668. package/src/execution/builder/interface.ts +0 -49
  669. package/src/execution/builder/utils.ts +0 -19
  670. package/src/execution/engine/disabled.ts +0 -35
  671. package/src/execution/engine/http.ts +0 -644
  672. package/src/execution/engine/index.ts +0 -63
  673. package/src/execution/engine/interface.ts +0 -199
  674. package/src/execution/engine/mock.ts +0 -493
  675. package/src/execution/engine/payloadIdCache.ts +0 -54
  676. package/src/execution/engine/types.ts +0 -640
  677. package/src/execution/engine/utils.ts +0 -136
  678. package/src/execution/index.ts +0 -4
  679. package/src/index.ts +0 -20
  680. package/src/metrics/index.ts +0 -4
  681. package/src/metrics/metrics/beacon.ts +0 -390
  682. package/src/metrics/metrics/lodestar.ts +0 -1870
  683. package/src/metrics/metrics.ts +0 -43
  684. package/src/metrics/nodeJsMetrics.ts +0 -19
  685. package/src/metrics/options.ts +0 -22
  686. package/src/metrics/server/http.ts +0 -114
  687. package/src/metrics/server/index.ts +0 -1
  688. package/src/metrics/utils/avgMinMax.ts +0 -87
  689. package/src/metrics/utils/gauge.ts +0 -22
  690. package/src/metrics/utils/registryMetricCreator.ts +0 -41
  691. package/src/monitoring/clientStats.ts +0 -297
  692. package/src/monitoring/index.ts +0 -2
  693. package/src/monitoring/options.ts +0 -19
  694. package/src/monitoring/properties.ts +0 -152
  695. package/src/monitoring/service.ts +0 -235
  696. package/src/monitoring/system.ts +0 -146
  697. package/src/monitoring/types.ts +0 -21
  698. package/src/network/core/events.ts +0 -59
  699. package/src/network/core/index.ts +0 -3
  700. package/src/network/core/metrics.ts +0 -304
  701. package/src/network/core/networkCore.ts +0 -599
  702. package/src/network/core/networkCoreWorker.ts +0 -176
  703. package/src/network/core/networkCoreWorkerHandler.ts +0 -284
  704. package/src/network/core/types.ts +0 -119
  705. package/src/network/discv5/index.ts +0 -132
  706. package/src/network/discv5/types.ts +0 -74
  707. package/src/network/discv5/utils.ts +0 -50
  708. package/src/network/discv5/worker.ts +0 -137
  709. package/src/network/events.ts +0 -51
  710. package/src/network/forks.ts +0 -94
  711. package/src/network/gossip/constants.ts +0 -15
  712. package/src/network/gossip/encoding.ts +0 -111
  713. package/src/network/gossip/errors.ts +0 -7
  714. package/src/network/gossip/gossipsub.ts +0 -384
  715. package/src/network/gossip/index.ts +0 -4
  716. package/src/network/gossip/interface.ts +0 -215
  717. package/src/network/gossip/metrics.ts +0 -71
  718. package/src/network/gossip/scoringParameters.ts +0 -333
  719. package/src/network/gossip/topic.ts +0 -332
  720. package/src/network/index.ts +0 -8
  721. package/src/network/interface.ts +0 -134
  722. package/src/network/libp2p/error.ts +0 -55
  723. package/src/network/libp2p/index.ts +0 -153
  724. package/src/network/metadata.ts +0 -162
  725. package/src/network/network.ts +0 -767
  726. package/src/network/networkConfig.ts +0 -12
  727. package/src/network/options.ts +0 -70
  728. package/src/network/peers/client.ts +0 -29
  729. package/src/network/peers/datastore.ts +0 -188
  730. package/src/network/peers/discover.ts +0 -647
  731. package/src/network/peers/index.ts +0 -2
  732. package/src/network/peers/peerManager.ts +0 -899
  733. package/src/network/peers/peersData.ts +0 -65
  734. package/src/network/peers/score/constants.ts +0 -34
  735. package/src/network/peers/score/index.ts +0 -4
  736. package/src/network/peers/score/interface.ts +0 -74
  737. package/src/network/peers/score/score.ts +0 -200
  738. package/src/network/peers/score/store.ts +0 -95
  739. package/src/network/peers/score/utils.ts +0 -37
  740. package/src/network/peers/utils/assertPeerRelevance.ts +0 -99
  741. package/src/network/peers/utils/enrSubnetsDeserialize.ts +0 -27
  742. package/src/network/peers/utils/getConnectedPeerIds.ts +0 -33
  743. package/src/network/peers/utils/index.ts +0 -4
  744. package/src/network/peers/utils/prioritizePeers.ts +0 -627
  745. package/src/network/peers/utils/subnetMap.ts +0 -88
  746. package/src/network/processor/aggregatorTracker.ts +0 -38
  747. package/src/network/processor/extractSlotRootFns.ts +0 -64
  748. package/src/network/processor/gossipHandlers.ts +0 -951
  749. package/src/network/processor/gossipQueues/index.ts +0 -114
  750. package/src/network/processor/gossipQueues/indexed.ts +0 -219
  751. package/src/network/processor/gossipQueues/linear.ts +0 -162
  752. package/src/network/processor/gossipQueues/types.ts +0 -57
  753. package/src/network/processor/gossipValidatorFn.ts +0 -142
  754. package/src/network/processor/index.ts +0 -497
  755. package/src/network/processor/types.ts +0 -27
  756. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -373
  757. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +0 -101
  758. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +0 -49
  759. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -114
  760. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -62
  761. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +0 -144
  762. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +0 -88
  763. package/src/network/reqresp/handlers/index.ts +0 -78
  764. package/src/network/reqresp/handlers/lightClientBootstrap.ts +0 -31
  765. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +0 -21
  766. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +0 -21
  767. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +0 -39
  768. package/src/network/reqresp/index.ts +0 -2
  769. package/src/network/reqresp/interface.ts +0 -45
  770. package/src/network/reqresp/protocols.ts +0 -146
  771. package/src/network/reqresp/rateLimit.ts +0 -112
  772. package/src/network/reqresp/score.ts +0 -70
  773. package/src/network/reqresp/types.ts +0 -174
  774. package/src/network/reqresp/utils/collect.ts +0 -84
  775. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +0 -57
  776. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +0 -99
  777. package/src/network/statusCache.ts +0 -17
  778. package/src/network/subnets/attnetsService.ts +0 -385
  779. package/src/network/subnets/index.ts +0 -2
  780. package/src/network/subnets/interface.ts +0 -66
  781. package/src/network/subnets/syncnetsService.ts +0 -147
  782. package/src/network/subnets/util.ts +0 -63
  783. package/src/network/util.ts +0 -29
  784. package/src/node/index.ts +0 -2
  785. package/src/node/nodejs.ts +0 -349
  786. package/src/node/notifier.ts +0 -206
  787. package/src/node/options.ts +0 -51
  788. package/src/node/utils/interop/deposits.ts +0 -53
  789. package/src/node/utils/interop/state.ts +0 -59
  790. package/src/node/utils/lightclient.ts +0 -7
  791. package/src/node/utils/state.ts +0 -37
  792. package/src/sync/backfill/backfill.ts +0 -893
  793. package/src/sync/backfill/errors.ts +0 -23
  794. package/src/sync/backfill/index.ts +0 -1
  795. package/src/sync/backfill/verify.ts +0 -58
  796. package/src/sync/constants.ts +0 -71
  797. package/src/sync/index.ts +0 -2
  798. package/src/sync/interface.ts +0 -55
  799. package/src/sync/options.ts +0 -45
  800. package/src/sync/range/batch.ts +0 -455
  801. package/src/sync/range/chain.ts +0 -715
  802. package/src/sync/range/range.ts +0 -354
  803. package/src/sync/range/utils/batches.ts +0 -119
  804. package/src/sync/range/utils/chainTarget.ts +0 -62
  805. package/src/sync/range/utils/hashBlocks.ts +0 -27
  806. package/src/sync/range/utils/index.ts +0 -5
  807. package/src/sync/range/utils/peerBalancer.ts +0 -184
  808. package/src/sync/range/utils/updateChains.ts +0 -66
  809. package/src/sync/sync.ts +0 -290
  810. package/src/sync/types.ts +0 -59
  811. package/src/sync/unknownBlock.ts +0 -862
  812. package/src/sync/utils/downloadByRange.ts +0 -808
  813. package/src/sync/utils/downloadByRoot.ts +0 -560
  814. package/src/sync/utils/pendingBlocksTree.ts +0 -97
  815. package/src/sync/utils/remoteSyncType.ts +0 -144
  816. package/src/util/address.ts +0 -3
  817. package/src/util/array.ts +0 -311
  818. package/src/util/asyncIterableToEvents.ts +0 -164
  819. package/src/util/binarySearch.ts +0 -48
  820. package/src/util/bitArray.ts +0 -84
  821. package/src/util/blobs.ts +0 -210
  822. package/src/util/bufferPool.ts +0 -95
  823. package/src/util/bytes.ts +0 -11
  824. package/src/util/chunkify.ts +0 -27
  825. package/src/util/clock.ts +0 -204
  826. package/src/util/dataColumns.ts +0 -415
  827. package/src/util/dependentRoot.ts +0 -47
  828. package/src/util/enum.ts +0 -17
  829. package/src/util/error.ts +0 -56
  830. package/src/util/eventLoop.ts +0 -22
  831. package/src/util/execution.ts +0 -223
  832. package/src/util/file.ts +0 -52
  833. package/src/util/forkChoice.ts +0 -5
  834. package/src/util/forkName.ts +0 -20
  835. package/src/util/graffiti.ts +0 -39
  836. package/src/util/hex.ts +0 -9
  837. package/src/util/index.ts +0 -2
  838. package/src/util/ip.ts +0 -6
  839. package/src/util/itTrigger.ts +0 -49
  840. package/src/util/kzg.ts +0 -3
  841. package/src/util/map.ts +0 -77
  842. package/src/util/metadata.ts +0 -22
  843. package/src/util/multifork.ts +0 -69
  844. package/src/util/numpy.ts +0 -8
  845. package/src/util/peerId.ts +0 -16
  846. package/src/util/profile.ts +0 -54
  847. package/src/util/promises.ts +0 -14
  848. package/src/util/queue/errors.ts +0 -14
  849. package/src/util/queue/fnQueue.ts +0 -16
  850. package/src/util/queue/index.ts +0 -4
  851. package/src/util/queue/itemQueue.ts +0 -128
  852. package/src/util/queue/options.ts +0 -37
  853. package/src/util/serializedCache.ts +0 -20
  854. package/src/util/set.ts +0 -62
  855. package/src/util/shuffle.ts +0 -21
  856. package/src/util/sortBy.ts +0 -19
  857. package/src/util/sszBytes.ts +0 -481
  858. package/src/util/strictEvents.ts +0 -8
  859. package/src/util/time.ts +0 -13
  860. package/src/util/timeSeries.ts +0 -118
  861. package/src/util/types.ts +0 -31
  862. package/src/util/workerEvents.ts +0 -142
  863. package/src/util/wrapError.ts +0 -27
@@ -1,862 +0,0 @@
1
- import {ChainForkConfig} from "@lodestar/config";
2
- import {ForkSeq, INTERVALS_PER_SLOT} from "@lodestar/params";
3
- import {RequestError, RequestErrorCode} from "@lodestar/reqresp";
4
- import {RootHex, Slot} from "@lodestar/types";
5
- import {Logger, prettyBytes, prettyPrintIndices, pruneSetToMax, sleep} from "@lodestar/utils";
6
- import {isBlockInputBlobs, isBlockInputColumns} from "../chain/blocks/blockInput/blockInput.js";
7
- import {BlockInputSource, IBlockInput} from "../chain/blocks/blockInput/types.js";
8
- import {BlockError, BlockErrorCode} from "../chain/errors/index.js";
9
- import {ChainEvent, ChainEventData, IBeaconChain} from "../chain/index.js";
10
- import {Metrics} from "../metrics/index.js";
11
- import {INetwork, NetworkEvent, NetworkEventData, prettyPrintPeerIdStr} from "../network/index.js";
12
- import {PeerSyncMeta} from "../network/peers/peersData.js";
13
- import {PeerIdStr} from "../util/peerId.js";
14
- import {shuffle} from "../util/shuffle.js";
15
- import {sortBy} from "../util/sortBy.js";
16
- import {wrapError} from "../util/wrapError.js";
17
- import {MAX_CONCURRENT_REQUESTS} from "./constants.js";
18
- import {SyncOptions} from "./options.js";
19
- import {
20
- BlockInputSyncCacheItem,
21
- PendingBlockInput,
22
- PendingBlockInputStatus,
23
- PendingBlockType,
24
- getBlockInputSyncCacheItemRootHex,
25
- getBlockInputSyncCacheItemSlot,
26
- isPendingBlockInput,
27
- } from "./types.js";
28
- import {DownloadByRootError, downloadByRoot} from "./utils/downloadByRoot.js";
29
- import {getAllDescendantBlocks, getDescendantBlocks, getUnknownAndAncestorBlocks} from "./utils/pendingBlocksTree.js";
30
-
31
- const MAX_ATTEMPTS_PER_BLOCK = 5;
32
- const MAX_KNOWN_BAD_BLOCKS = 500;
33
- const MAX_PENDING_BLOCKS = 100;
34
-
35
- enum FetchResult {
36
- SuccessResolved = "success_resolved",
37
- SuccessMissingParent = "success_missing_parent",
38
- SuccessLate = "success_late",
39
- FailureTriedAllPeers = "failure_tried_all_peers",
40
- FailureMaxAttempts = "failure_max_attempts",
41
- }
42
-
43
- /**
44
- * BlockInputSync is a class that handles ReqResp to find blocks and data related to a specific blockRoot. The
45
- * blockRoot may have been found via object gossip, or the API. Gossip objects that can trigger a search are block,
46
- * blobs, columns, attestations, etc. In the case of blocks and data this is generally during the current slot but
47
- * can also be for items that are received late but are not fully verified and thus not in fork-choice (old blocks on
48
- * an unknown fork). It can also be triggered via an attestation (or sync committee message or any other item that
49
- * gets gossiped) that references a blockRoot that is not in fork-choice. In rare (and realistically should not happen)
50
- * situations it can get triggered via the API when the validator attempts to publish a block, attestation, aggregate
51
- * and proof or a sync committee contribution that has unknown information included (parentRoot for instance).
52
- *
53
- * The goal of the class is to make sure that all information that is necessary for import into fork-choice is pulled
54
- * from peers so that the block and data can be processed, and thus the object that triggered the search can be
55
- * referenced and validated.
56
- *
57
- * The most common case for this search is a set of block/data that comes across gossip for the current slot, during
58
- * normal chain operation, but not everything was received before the gossip cutoff window happens so it is necessary
59
- * to pull remaining data via req/resp so that fork-choice can be updated prior to making an attestation for the
60
- * current slot.
61
- *
62
- * Event sources for old UnknownBlock
63
- *
64
- * - publishBlock
65
- * - gossipHandlers
66
- * - searchUnknownSlotRoot
67
- * = produceSyncCommitteeContribution
68
- * = validateGossipFnRetryUnknownRoot
69
- * * submitPoolAttestationsV2
70
- * * publishAggregateAndProofsV2
71
- * = onPendingGossipsubMessage
72
- * * NetworkEvent.pendingGossipsubMessage
73
- * - onGossipsubMessage
74
- */
75
- export class BlockInputSync {
76
- /**
77
- * block RootHex -> PendingBlock. To avoid finding same root at the same time
78
- */
79
- private readonly pendingBlocks = new Map<RootHex, BlockInputSyncCacheItem>();
80
- private readonly knownBadBlocks = new Set<RootHex>();
81
- private readonly proposerBoostSecWindow: number;
82
- private readonly maxPendingBlocks;
83
- private subscribedToNetworkEvents = false;
84
- private peerBalancer: UnknownBlockPeerBalancer;
85
-
86
- constructor(
87
- private readonly config: ChainForkConfig,
88
- private readonly network: INetwork,
89
- private readonly chain: IBeaconChain,
90
- private readonly logger: Logger,
91
- private readonly metrics: Metrics | null,
92
- private readonly opts?: SyncOptions
93
- ) {
94
- this.maxPendingBlocks = opts?.maxPendingBlocks ?? MAX_PENDING_BLOCKS;
95
- this.proposerBoostSecWindow = this.config.SECONDS_PER_SLOT / INTERVALS_PER_SLOT;
96
- this.peerBalancer = new UnknownBlockPeerBalancer();
97
-
98
- if (metrics) {
99
- metrics.blockInputSync.pendingBlocks.addCollect(() =>
100
- metrics.blockInputSync.pendingBlocks.set(this.pendingBlocks.size)
101
- );
102
- metrics.blockInputSync.knownBadBlocks.addCollect(() =>
103
- metrics.blockInputSync.knownBadBlocks.set(this.knownBadBlocks.size)
104
- );
105
- }
106
- }
107
-
108
- subscribeToNetwork(): void {
109
- if (this.opts?.disableBlockInputSync) {
110
- this.logger.verbose("BlockInputSync disabled by disableBlockInputSync option.");
111
- return;
112
- }
113
-
114
- // cannot chain to the above if or the log will be incorrect
115
- if (!this.subscribedToNetworkEvents) {
116
- this.logger.verbose("BlockInputSync enabled.");
117
- this.chain.emitter.on(ChainEvent.unknownBlockRoot, this.onUnknownBlockRoot);
118
- this.chain.emitter.on(ChainEvent.incompleteBlockInput, this.onIncompleteBlockInput);
119
- this.chain.emitter.on(ChainEvent.unknownParent, this.onUnknownParent);
120
- this.network.events.on(NetworkEvent.peerConnected, this.onPeerConnected);
121
- this.network.events.on(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
122
- this.subscribedToNetworkEvents = true;
123
- }
124
- }
125
-
126
- unsubscribeFromNetwork(): void {
127
- this.logger.verbose("BlockInputSync disabled.");
128
- this.chain.emitter.off(ChainEvent.unknownBlockRoot, this.onUnknownBlockRoot);
129
- this.chain.emitter.off(ChainEvent.incompleteBlockInput, this.onIncompleteBlockInput);
130
- this.chain.emitter.off(ChainEvent.unknownParent, this.onUnknownParent);
131
- this.network.events.off(NetworkEvent.peerConnected, this.onPeerConnected);
132
- this.network.events.off(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
133
- this.subscribedToNetworkEvents = false;
134
- }
135
-
136
- close(): void {
137
- this.unsubscribeFromNetwork();
138
- }
139
-
140
- isSubscribedToNetwork(): boolean {
141
- return this.subscribedToNetworkEvents;
142
- }
143
-
144
- /**
145
- * Process an unknownBlock event and register the block in `pendingBlocks` Map.
146
- */
147
- private onUnknownBlockRoot = (data: ChainEventData[ChainEvent.unknownBlockRoot]): void => {
148
- try {
149
- const {root, slot} = data.rootSlot;
150
- this.addByRootHex(root, slot, data.peer);
151
- this.triggerUnknownBlockSearch();
152
- this.metrics?.blockInputSync.requests.inc({type: PendingBlockType.UNKNOWN_BLOCK_ROOT});
153
- this.metrics?.blockInputSync.source.inc({source: data.source});
154
- } catch (e) {
155
- this.logger.debug("Error handling unknownBlockRoot event", {}, e as Error);
156
- }
157
- };
158
-
159
- /**
160
- * Process an unknownBlockInput event and register the block in `pendingBlocks` Map.
161
- */
162
- private onIncompleteBlockInput = (data: ChainEventData[ChainEvent.incompleteBlockInput]): void => {
163
- try {
164
- this.addByBlockInput(data.blockInput, data.peer);
165
- this.triggerUnknownBlockSearch();
166
- this.metrics?.blockInputSync.requests.inc({type: PendingBlockType.INCOMPLETE_BLOCK_INPUT});
167
- this.metrics?.blockInputSync.source.inc({source: data.source});
168
- } catch (e) {
169
- this.logger.debug("Error handling incompleteBlockInput event", {}, e as Error);
170
- }
171
- };
172
-
173
- /**
174
- * Process an unknownBlockParent event and register the block in `pendingBlocks` Map.
175
- */
176
- private onUnknownParent = (data: ChainEventData[ChainEvent.unknownParent]): void => {
177
- try {
178
- // we don't know the slot of parent, hence make it undefined
179
- this.addByRootHex(data.blockInput.parentRootHex, undefined, data.peer);
180
- this.addByBlockInput(data.blockInput, data.peer);
181
- this.triggerUnknownBlockSearch();
182
- this.metrics?.blockInputSync.requests.inc({type: PendingBlockType.UNKNOWN_PARENT});
183
- this.metrics?.blockInputSync.source.inc({source: data.source});
184
- } catch (e) {
185
- this.logger.debug("Error handling unknownParent event", {}, e as Error);
186
- }
187
- };
188
-
189
- private addByRootHex = (rootHex: RootHex, slot?: Slot, peerIdStr?: PeerIdStr): void => {
190
- let pendingBlock = this.pendingBlocks.get(rootHex);
191
- if (!pendingBlock) {
192
- pendingBlock = {
193
- status: PendingBlockInputStatus.pending,
194
- slot,
195
- rootHex: rootHex,
196
- peerIdStrings: new Set(),
197
- timeAddedSec: Date.now() / 1000,
198
- };
199
- this.pendingBlocks.set(rootHex, pendingBlock);
200
-
201
- this.logger.verbose("Added new rootHex to BlockInputSync.pendingBlocks", {
202
- rootHex: prettyBytes(pendingBlock.rootHex),
203
- peerIdStr: peerIdStr ?? "unknown peer",
204
- });
205
- }
206
-
207
- if (peerIdStr) {
208
- pendingBlock.peerIdStrings.add(peerIdStr);
209
- }
210
-
211
- // TODO: check this prune methodology
212
- // Limit pending blocks to prevent DOS attacks that cause OOM
213
- const prunedItemCount = pruneSetToMax(this.pendingBlocks, this.maxPendingBlocks);
214
- if (prunedItemCount > 0) {
215
- this.logger.verbose(`Pruned ${prunedItemCount} items from BlockInputSync.pendingBlocks`);
216
- }
217
- };
218
-
219
- private addByBlockInput = (blockInput: IBlockInput, peerIdStr?: string): void => {
220
- let pendingBlock = this.pendingBlocks.get(blockInput.blockRootHex);
221
- // if entry is missing or was added via rootHex and now we have more complete information overwrite
222
- // the existing information with the more complete cache entry
223
- if (!pendingBlock || !isPendingBlockInput(pendingBlock)) {
224
- pendingBlock = {
225
- // can be added via unknown parent and we may already have full block input. need to check and set correctly
226
- // so we pull the data if its missing or handle the block correctly in getIncompleteAndAncestorBlocks
227
- status: blockInput.hasBlockAndAllData() ? PendingBlockInputStatus.downloaded : PendingBlockInputStatus.pending,
228
- blockInput,
229
- peerIdStrings: new Set(),
230
- timeAddedSec: Date.now() / 1000,
231
- };
232
- this.pendingBlocks.set(blockInput.blockRootHex, pendingBlock);
233
-
234
- this.logger.verbose("Added blockInput to BlockInputSync.pendingBlocks", pendingBlock.blockInput.getLogMeta());
235
- }
236
-
237
- if (peerIdStr) {
238
- pendingBlock.peerIdStrings.add(peerIdStr);
239
- }
240
-
241
- // TODO: check this prune methodology
242
- // Limit pending blocks to prevent DOS attacks that cause OOM
243
- const prunedItemCount = pruneSetToMax(this.pendingBlocks, this.maxPendingBlocks);
244
- if (prunedItemCount > 0) {
245
- this.logger.verbose(`Pruned ${prunedItemCount} items from BlockInputSync.pendingBlocks`);
246
- }
247
- };
248
-
249
- private onPeerConnected = (data: NetworkEventData[NetworkEvent.peerConnected]): void => {
250
- try {
251
- const peerId = data.peer;
252
- const peerSyncMeta = this.network.getConnectedPeerSyncMeta(peerId);
253
- this.peerBalancer.onPeerConnected(data.peer, peerSyncMeta);
254
- this.triggerUnknownBlockSearch();
255
- } catch (e) {
256
- this.logger.debug("Error handling peerConnected event", {}, e as Error);
257
- }
258
- };
259
-
260
- private onPeerDisconnected = (data: NetworkEventData[NetworkEvent.peerDisconnected]): void => {
261
- const peerId = data.peer;
262
- this.peerBalancer.onPeerDisconnected(peerId);
263
- };
264
-
265
- /**
266
- * Gather tip parent blocks with unknown parent and do a search for all of them
267
- */
268
- private triggerUnknownBlockSearch = (): void => {
269
- // Cheap early stop to prevent calling the network.getConnectedPeers()
270
- if (this.pendingBlocks.size === 0) {
271
- return;
272
- }
273
-
274
- // If the node loses all peers with pending unknown blocks, the sync will stall
275
- const connectedPeers = this.network.getConnectedPeers();
276
- if (connectedPeers.length === 0) {
277
- this.logger.debug("No connected peers, skipping unknown block search.");
278
- return;
279
- }
280
-
281
- const {unknowns, ancestors} = getUnknownAndAncestorBlocks(this.pendingBlocks);
282
- // it's rare when there is no unknown block
283
- // see https://github.com/ChainSafe/lodestar/issues/5649#issuecomment-1594213550
284
- if (unknowns.length === 0) {
285
- let processedBlocks = 0;
286
-
287
- for (const block of ancestors) {
288
- // when this happens, it's likely the block and parent block are processed by head sync
289
- if (this.chain.forkChoice.hasBlockHex(block.blockInput.parentRootHex)) {
290
- processedBlocks++;
291
- this.processBlock(block).catch((e) => {
292
- this.logger.debug("Unexpected error - process old downloaded block", {}, e);
293
- });
294
- }
295
- }
296
-
297
- this.logger.verbose("No unknown block, process ancestor downloaded blocks", {
298
- pendingBlocks: this.pendingBlocks.size,
299
- ancestorBlocks: ancestors.length,
300
- processedBlocks,
301
- });
302
- return;
303
- }
304
-
305
- // most of the time there is exactly 1 unknown block
306
- for (const block of unknowns) {
307
- this.downloadBlock(block).catch((e) => {
308
- this.logger.debug("Unexpected error - downloadBlock", {root: getBlockInputSyncCacheItemRootHex(block)}, e);
309
- });
310
- }
311
- };
312
-
313
- private async downloadBlock(block: BlockInputSyncCacheItem): Promise<void> {
314
- if (block.status !== PendingBlockInputStatus.pending) {
315
- return;
316
- }
317
-
318
- const rootHex = getBlockInputSyncCacheItemRootHex(block);
319
- const logCtx = {
320
- slot: getBlockInputSyncCacheItemSlot(block),
321
- blockRoot: prettyBytes(rootHex),
322
- pendingBlocks: this.pendingBlocks.size,
323
- };
324
-
325
- this.logger.verbose("BlockInputSync.downloadBlock()", logCtx);
326
-
327
- block.status = PendingBlockInputStatus.fetching;
328
-
329
- const res = await wrapError(this.fetchBlockInput(block));
330
-
331
- if (!res.err) {
332
- this.metrics?.blockInputSync.downloadedBlocksSuccess.inc();
333
- const pending = res.result;
334
- this.pendingBlocks.set(pending.blockInput.blockRootHex, pending);
335
- const blockSlot = pending.blockInput.slot;
336
- const finalizedSlot = this.chain.forkChoice.getFinalizedBlock().slot;
337
- const delaySec = Date.now() / 1000 - (this.chain.genesisTime + blockSlot * this.config.SECONDS_PER_SLOT);
338
- this.metrics?.blockInputSync.elapsedTimeTillReceived.observe(delaySec);
339
-
340
- const parentInForkChoice = this.chain.forkChoice.hasBlockHex(pending.blockInput.parentRootHex);
341
- const logCtx2 = {
342
- ...logCtx,
343
- slot: blockSlot,
344
- parentInForkChoice,
345
- };
346
- this.logger.verbose("Downloaded unknown block", logCtx2);
347
-
348
- if (parentInForkChoice) {
349
- // Bingo! Process block. Add to pending blocks anyway for recycle the cache that prevents duplicate processing
350
- this.processBlock(pending).catch((e) => {
351
- this.logger.debug("Unexpected error - process newly downloaded block", logCtx2, e);
352
- });
353
- } else if (blockSlot <= finalizedSlot) {
354
- // the common ancestor of the downloading chain and canonical chain should be at least the finalized slot and
355
- // we should found it through forkchoice. If not, we should penalize all peers sending us this block chain
356
- // 0 - 1 - ... - n - finalizedSlot
357
- // \
358
- // parent 1 - parent 2 - ... - unknownParent block
359
- this.logger.debug("Downloaded block is before finalized slot", {
360
- ...logCtx2,
361
- finalizedSlot,
362
- });
363
- this.removeAndDownScoreAllDescendants(block);
364
- } else {
365
- this.onUnknownBlockRoot({rootSlot: {root: pending.blockInput.parentRootHex}, source: BlockInputSource.byRoot});
366
- }
367
- } else {
368
- this.metrics?.blockInputSync.downloadedBlocksError.inc();
369
- this.logger.debug("Ignoring unknown block root after many failed downloads", logCtx, res.err);
370
- this.removeAndDownScoreAllDescendants(block);
371
- }
372
- }
373
-
374
- /**
375
- * Send block to the processor awaiting completition. If processed successfully, send all children to the processor.
376
- * On error, remove and downscore all descendants.
377
- * This function could run recursively for all descendant blocks
378
- */
379
- private async processBlock(pendingBlock: PendingBlockInput): Promise<void> {
380
- // pending block status is `downloaded` right after `downloadBlock`
381
- // but could be `pending` if added by `onUnknownBlockParent` event and this function is called recursively
382
- if (pendingBlock.status !== PendingBlockInputStatus.downloaded) {
383
- if (pendingBlock.status === PendingBlockInputStatus.pending) {
384
- const connectedPeers = this.network.getConnectedPeers();
385
- if (connectedPeers.length === 0) {
386
- this.logger.debug("No connected peers, skipping download block", {
387
- slot: pendingBlock.blockInput.slot,
388
- blockRoot: pendingBlock.blockInput.blockRootHex,
389
- });
390
- return;
391
- }
392
- // if the download is a success we'll call `processBlock()` for this block
393
- await this.downloadBlock(pendingBlock);
394
- }
395
- return;
396
- }
397
-
398
- pendingBlock.status = PendingBlockInputStatus.processing;
399
- // this prevents unbundling attack
400
- // see https://lighthouse-blog.sigmaprime.io/mev-unbundling-rpc.html
401
- const {slot: blockSlot, proposerIndex} = pendingBlock.blockInput.getBlock().message;
402
- if (
403
- this.chain.clock.secFromSlot(blockSlot) < this.proposerBoostSecWindow &&
404
- this.chain.seenBlockProposers.isKnown(blockSlot, proposerIndex)
405
- ) {
406
- // proposer is known by a gossip block already, wait a bit to make sure this block is not
407
- // eligible for proposer boost to prevent unbundling attack
408
- this.logger.verbose("Avoid proposer boost for this block of known proposer", {
409
- slot: blockSlot,
410
- blockRoot: prettyBytes(pendingBlock.blockInput.blockRootHex),
411
- proposerIndex,
412
- });
413
- await sleep(this.proposerBoostSecWindow * 1000);
414
- }
415
- // At gossip time, it's critical to keep a good number of mesh peers.
416
- // To do that, the Gossip Job Wait Time should be consistently <3s to avoid the behavior penalties in gossip
417
- // Gossip Job Wait Time depends on the BLS Job Wait Time
418
- // so `blsVerifyOnMainThread = true`: we want to verify signatures immediately without affecting the bls thread pool.
419
- // otherwise we can't utilize bls thread pool capacity and Gossip Job Wait Time can't be kept low consistently.
420
- // See https://github.com/ChainSafe/lodestar/issues/3792
421
- const res = await wrapError(
422
- this.chain.processBlock(pendingBlock.blockInput, {
423
- ignoreIfKnown: true,
424
- // there could be finalized/head sync at the same time so we need to ignore if finalized
425
- // see https://github.com/ChainSafe/lodestar/issues/5650
426
- ignoreIfFinalized: true,
427
- blsVerifyOnMainThread: true,
428
- // block is validated with correct root, we want to process it as soon as possible
429
- eagerPersistBlock: true,
430
- })
431
- );
432
-
433
- if (res.err) this.metrics?.blockInputSync.processedBlocksError.inc();
434
- else this.metrics?.blockInputSync.processedBlocksSuccess.inc();
435
-
436
- if (!res.err) {
437
- // no need to update status to "processed", delete anyway
438
- this.pendingBlocks.delete(pendingBlock.blockInput.blockRootHex);
439
- this.chain.seenBlockInputCache.prune(pendingBlock.blockInput.blockRootHex);
440
-
441
- // Send child blocks to the processor
442
- for (const descendantBlock of getDescendantBlocks(pendingBlock.blockInput.blockRootHex, this.pendingBlocks)) {
443
- if (isPendingBlockInput(descendantBlock)) {
444
- this.processBlock(descendantBlock).catch((e) => {
445
- this.logger.debug("Unexpected error - process descendant block", {}, e);
446
- });
447
- }
448
- }
449
- } else {
450
- const errorData = {slot: pendingBlock.blockInput.slot, root: pendingBlock.blockInput.blockRootHex};
451
- if (res.err instanceof BlockError) {
452
- switch (res.err.type.code) {
453
- // This cases are already handled with `{ignoreIfKnown: true}`
454
- // case BlockErrorCode.ALREADY_KNOWN:
455
- // case BlockErrorCode.GENESIS_BLOCK:
456
-
457
- case BlockErrorCode.PARENT_UNKNOWN:
458
- case BlockErrorCode.PRESTATE_MISSING:
459
- // Should not happen, mark as downloaded to try again latter
460
- this.logger.debug("Attempted to process block but its parent was still unknown", errorData, res.err);
461
- pendingBlock.status = PendingBlockInputStatus.downloaded;
462
- break;
463
-
464
- case BlockErrorCode.EXECUTION_ENGINE_ERROR:
465
- // Removing the block(s) without penalizing the peers, hoping for EL to
466
- // recover on a latter download + verify attempt
467
- this.removeAllDescendants(pendingBlock);
468
- break;
469
-
470
- default:
471
- // Block is not correct with respect to our chain. Log error loudly
472
- this.logger.debug("Error processing block from unknown parent sync", errorData, res.err);
473
- this.removeAndDownScoreAllDescendants(pendingBlock);
474
- }
475
- }
476
-
477
- // Probably a queue error or something unwanted happened, mark as pending to try again latter
478
- else {
479
- this.logger.debug("Unknown error processing block from unknown block sync", errorData, res.err);
480
- pendingBlock.status = PendingBlockInputStatus.downloaded;
481
- }
482
- }
483
- }
484
-
485
- /**
486
- * From a set of shuffled peers:
487
- * - fetch the block
488
- * - from deneb, fetch all missing blobs
489
- * - from peerDAS, fetch sampled colmns
490
- * TODO: this means we only have block root, and nothing else. Consider to reflect this in the function name
491
- * prefulu, will attempt a max of `MAX_ATTEMPTS_PER_BLOCK` on different peers, postfulu we may attempt more as defined in `getMaxDownloadAttempts()` function
492
- * Also verifies the received block root + returns the peer that provided the block for future downscoring.
493
- */
494
- private async fetchBlockInput(cacheItem: BlockInputSyncCacheItem): Promise<PendingBlockInput> {
495
- const rootHex = getBlockInputSyncCacheItemRootHex(cacheItem);
496
- const excludedPeers = new Set<PeerIdStr>();
497
- const defaultPendingColumns =
498
- this.config.getForkSeq(this.chain.clock.currentSlot) >= ForkSeq.fulu
499
- ? new Set(this.network.custodyConfig.sampledColumns)
500
- : null;
501
-
502
- const fetchStartSec = Date.now() / 1000;
503
- let slot = isPendingBlockInput(cacheItem) ? cacheItem.blockInput.slot : cacheItem.slot;
504
- if (slot !== undefined) {
505
- this.metrics?.blockInputSync.fetchBegin.observe(this.chain.clock.secFromSlot(slot, fetchStartSec));
506
- }
507
-
508
- let i = 0;
509
- while (i++ < this.getMaxDownloadAttempts()) {
510
- const pendingColumns =
511
- isPendingBlockInput(cacheItem) && isBlockInputColumns(cacheItem.blockInput)
512
- ? new Set(cacheItem.blockInput.getMissingSampledColumnMeta().missing)
513
- : defaultPendingColumns;
514
- // pendingDataColumns is null pre-fulu
515
- const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers);
516
- if (peerMeta === null) {
517
- // no more peer with needed columns to try, throw error
518
- let message = `Error fetching UnknownBlockRoot slot=${slot} blockRoot=${prettyBytes(rootHex)} after ${i}: cannot find peer`;
519
- if (pendingColumns) {
520
- message += ` with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`;
521
- }
522
- this.metrics?.blockInputSync.fetchTimeSec.observe(
523
- {result: FetchResult.FailureTriedAllPeers},
524
- Date.now() / 1000 - fetchStartSec
525
- );
526
- this.metrics?.blockInputSync.fetchPeers.set({result: FetchResult.FailureTriedAllPeers}, i);
527
- throw Error(message);
528
- }
529
- const {peerId, client: peerClient} = peerMeta;
530
-
531
- cacheItem.peerIdStrings.add(peerId);
532
-
533
- try {
534
- const downloadResult = await downloadByRoot({
535
- config: this.config,
536
- network: this.network,
537
- seenCache: this.chain.seenBlockInputCache,
538
- emitter: this.chain.emitter,
539
- peerMeta,
540
- cacheItem,
541
- });
542
- cacheItem = downloadResult.result;
543
- if (slot === undefined) {
544
- slot = cacheItem.blockInput.slot;
545
- // we were not able to observe the time into slot when starting the fetch, do it now
546
- this.metrics?.blockInputSync.fetchBegin.observe(this.chain.clock.secFromSlot(slot, fetchStartSec));
547
- }
548
-
549
- const logCtx = {slot, rootHex, peerId, peerClient};
550
- this.logger.verbose("BlockInputSync.fetchBlockInput: successful download", logCtx);
551
- this.metrics?.blockInputSync.downloadByRoot.success.inc();
552
- const warnings = downloadResult.warnings;
553
- if (warnings) {
554
- for (const warning of warnings) {
555
- this.logger.debug("BlockInputSync.fetchBlockInput: downloaded with warning", logCtx, warning);
556
- this.metrics?.blockInputSync.downloadByRoot.warn.inc({code: warning.type.code, client: peerClient});
557
- }
558
- // TODO: penalize peer?
559
- }
560
- } catch (e) {
561
- this.logger.debug(
562
- "Error downloading in BlockInputSync.fetchBlockInput",
563
- {slot, rootHex, attempt: i, peer: peerId, peerClient},
564
- e as Error
565
- );
566
- const downloadByRootMetrics = this.metrics?.blockInputSync.downloadByRoot;
567
- // TODO: penalize peer?
568
- if (e instanceof DownloadByRootError) {
569
- const errorCode = e.type.code;
570
- downloadByRootMetrics?.error.inc({code: errorCode, client: peerClient});
571
- excludedPeers.add(peerId);
572
- } else if (e instanceof RequestError) {
573
- // should look into req_resp metrics in this case
574
- downloadByRootMetrics?.error.inc({code: "req_resp", client: peerClient});
575
- switch (e.type.code) {
576
- case RequestErrorCode.REQUEST_RATE_LIMITED:
577
- case RequestErrorCode.REQUEST_TIMEOUT:
578
- // do not exclude peer for these errors
579
- break;
580
- default:
581
- excludedPeers.add(peerId);
582
- break;
583
- }
584
- } else {
585
- // investigate if this happens
586
- downloadByRootMetrics?.error.inc({code: "unknown", client: peerClient});
587
- excludedPeers.add(peerId);
588
- }
589
- } finally {
590
- this.peerBalancer.onRequestCompleted(peerId);
591
- }
592
-
593
- this.pendingBlocks.set(getBlockInputSyncCacheItemRootHex(cacheItem), cacheItem);
594
-
595
- if (cacheItem.status === PendingBlockInputStatus.downloaded) {
596
- // download was successful, no need to go with another peer, return
597
- const result = this.chain.forkChoice.hasBlockHex(cacheItem.blockInput.blockRootHex)
598
- ? FetchResult.SuccessLate
599
- : this.chain.forkChoice.hasBlockHex(cacheItem.blockInput.parentRootHex)
600
- ? FetchResult.SuccessResolved
601
- : FetchResult.SuccessMissingParent;
602
- this.metrics?.blockInputSync.fetchTimeSec.observe({result}, Date.now() / 1000 - fetchStartSec);
603
- this.metrics?.blockInputSync.fetchPeers.set({result}, i);
604
- return cacheItem;
605
- }
606
- } // end while loop over peers
607
-
608
- const message = `Error fetching BlockInput with slot=${slot} blockRoot=${prettyBytes(rootHex)} after ${i - 1} attempts.`;
609
-
610
- if (!isPendingBlockInput(cacheItem)) {
611
- throw Error(`${message} No block and no data was found.`);
612
- }
613
-
614
- if (!cacheItem.blockInput.hasBlock()) {
615
- throw new Error(`${message} Block was not found.`);
616
- }
617
-
618
- if (isBlockInputBlobs(cacheItem.blockInput)) {
619
- const missing = cacheItem.blockInput.getMissingBlobMeta().map((b) => b.index);
620
- if (missing.length) {
621
- throw new Error(`${message} Missing blob indices=${prettyPrintIndices(missing)}.`);
622
- }
623
- }
624
-
625
- if (isBlockInputColumns(cacheItem.blockInput)) {
626
- const missing = cacheItem.blockInput.getMissingSampledColumnMeta().missing;
627
- if (missing.length) {
628
- throw new Error(`${message} Missing column indices=${prettyPrintIndices(missing)}.`);
629
- }
630
- }
631
-
632
- this.metrics?.blockInputSync.fetchTimeSec.observe(
633
- {result: FetchResult.FailureMaxAttempts},
634
- Date.now() / 1000 - fetchStartSec
635
- );
636
- this.metrics?.blockInputSync.fetchPeers.set({result: FetchResult.FailureMaxAttempts}, i - 1);
637
-
638
- throw Error(message);
639
- }
640
-
641
- /**
642
- * Gets all descendant blocks of `block` recursively from `pendingBlocks`.
643
- * Assumes that if a parent block does not exist or is not processable, all descendant blocks are bad too.
644
- * Downscore all peers that have referenced any of this bad blocks. May report peers multiple times if they have
645
- * referenced more than one bad block.
646
- */
647
- private removeAndDownScoreAllDescendants(block: BlockInputSyncCacheItem): void {
648
- // Get all blocks that are a descendant of this one
649
- const badPendingBlocks = this.removeAllDescendants(block);
650
- // just console log and do not penalize on pending/bad blocks for debugging
651
- // console.log("removeAndDownscoreAllDescendants", {block});
652
-
653
- for (const block of badPendingBlocks) {
654
- //
655
- // TODO(fulu): why is this commented out here?
656
- //
657
- // this.knownBadBlocks.add(block.blockRootHex);
658
- // for (const peerIdStr of block.peerIdStrs) {
659
- // // TODO: Refactor peerRpcScores to work with peerIdStr only
660
- // this.network.reportPeer(peerIdStr, PeerAction.LowToleranceError, "BadBlockByRoot");
661
- // }
662
- this.logger.debug("ignored Banning unknown block", {
663
- slot: getBlockInputSyncCacheItemSlot(block),
664
- root: getBlockInputSyncCacheItemRootHex(block),
665
- peerIdStrings: Array.from(block.peerIdStrings)
666
- .map((id) => prettyPrintPeerIdStr(id))
667
- .join(","),
668
- });
669
- }
670
-
671
- // Prune knownBadBlocks
672
- pruneSetToMax(this.knownBadBlocks, MAX_KNOWN_BAD_BLOCKS);
673
- }
674
-
675
- private removeAllDescendants(block: BlockInputSyncCacheItem): BlockInputSyncCacheItem[] {
676
- const rootHex = getBlockInputSyncCacheItemRootHex(block);
677
- const slot = getBlockInputSyncCacheItemSlot(block);
678
- // Get all blocks that are a descendant of this one
679
- const badPendingBlocks = [block, ...getAllDescendantBlocks(rootHex, this.pendingBlocks)];
680
-
681
- this.metrics?.blockInputSync.removedBlocks.inc(badPendingBlocks.length);
682
-
683
- for (const block of badPendingBlocks) {
684
- const rootHex = getBlockInputSyncCacheItemRootHex(block);
685
- this.pendingBlocks.delete(rootHex);
686
- this.chain.seenBlockInputCache.prune(rootHex);
687
- this.logger.debug("Removing bad/unknown/incomplete BlockInputSyncCacheItem", {
688
- slot,
689
- blockRoot: rootHex,
690
- });
691
- }
692
-
693
- return badPendingBlocks;
694
- }
695
-
696
- private getMaxDownloadAttempts(): number {
697
- if (this.config.getForkSeq(this.chain.clock.currentSlot) < ForkSeq.fulu) {
698
- return MAX_ATTEMPTS_PER_BLOCK;
699
- }
700
-
701
- // TODO: I consider max 20 downloads per block for a supernode is enough for devnets
702
- // review this computation for public testnets or mainnet
703
- return Math.min(
704
- 20,
705
- (MAX_ATTEMPTS_PER_BLOCK * this.network.custodyConfig.sampleGroups.length) / this.config.SAMPLES_PER_SLOT
706
- );
707
- }
708
- }
709
-
710
- /**
711
- * Class to track active byRoots requests and balance them across eligible peers.
712
- */
713
- export class UnknownBlockPeerBalancer {
714
- readonly peersMeta: Map<PeerIdStr, PeerSyncMeta>;
715
- readonly activeRequests: Map<PeerIdStr, number>;
716
-
717
- constructor() {
718
- this.peersMeta = new Map();
719
- this.activeRequests = new Map();
720
- }
721
-
722
- /** Trigger on each peer re-status */
723
- onPeerConnected(peerId: PeerIdStr, syncMeta: PeerSyncMeta): void {
724
- this.peersMeta.set(peerId, syncMeta);
725
-
726
- if (!this.activeRequests.has(peerId)) {
727
- this.activeRequests.set(peerId, 0);
728
- }
729
- }
730
-
731
- onPeerDisconnected(peerId: PeerIdStr): void {
732
- this.peersMeta.delete(peerId);
733
- this.activeRequests.delete(peerId);
734
- }
735
-
736
- /**
737
- * called from fetchUnknownBlockRoot() where we only have block root and nothing else
738
- * excludedPeers are the peers that we requested already so we don't want to try again
739
- * pendingColumns is empty for prefulu, or the 1st time we we download a block by root
740
- */
741
- bestPeerForPendingColumns(pendingColumns: Set<number> | null, excludedPeers: Set<PeerIdStr>): PeerSyncMeta | null {
742
- const eligiblePeers = this.filterPeers(pendingColumns, excludedPeers);
743
- if (eligiblePeers.length === 0) {
744
- return null;
745
- }
746
-
747
- const sortedEligiblePeers = sortBy(
748
- shuffle(eligiblePeers),
749
- // prefer peers with least active req
750
- (peerId) => this.activeRequests.get(peerId) ?? 0
751
- );
752
-
753
- const bestPeerId = sortedEligiblePeers[0];
754
- this.onRequest(bestPeerId);
755
- return this.peersMeta.get(bestPeerId) ?? null;
756
- }
757
-
758
- /**
759
- * called from fetchUnavailableBlockInput() where we have either BlockInput or NullBlockInput
760
- * excludedPeers are the peers that we requested already so we don't want to try again
761
- */
762
- bestPeerForBlockInput(blockInput: IBlockInput, excludedPeers: Set<PeerIdStr>): PeerSyncMeta | null {
763
- const eligiblePeers: PeerIdStr[] = [];
764
-
765
- if (isBlockInputColumns(blockInput)) {
766
- const pendingDataColumns: Set<number> = new Set(blockInput.getMissingSampledColumnMeta().missing);
767
- // there could be no pending column in case when block is still missing
768
- eligiblePeers.push(...this.filterPeers(pendingDataColumns, excludedPeers));
769
- } else {
770
- // prefulu
771
- eligiblePeers.push(...this.filterPeers(null, excludedPeers));
772
- }
773
-
774
- if (eligiblePeers.length === 0) {
775
- return null;
776
- }
777
-
778
- const sortedEligiblePeers = sortBy(
779
- shuffle(eligiblePeers),
780
- // prefer peers with least active req
781
- (peerId) => this.activeRequests.get(peerId) ?? 0
782
- );
783
-
784
- const bestPeerId = sortedEligiblePeers[0];
785
- this.onRequest(bestPeerId);
786
- return this.peersMeta.get(bestPeerId) ?? null;
787
- }
788
-
789
- /**
790
- * Consumers don't need to call this method directly, it is called internally by bestPeer*() methods
791
- * make this public for testing
792
- */
793
- onRequest(peerId: PeerIdStr): void {
794
- this.activeRequests.set(peerId, (this.activeRequests.get(peerId) ?? 0) + 1);
795
- }
796
-
797
- /**
798
- * Consumers should call this method when a request is completed for a peer.
799
- */
800
- onRequestCompleted(peerId: PeerIdStr): void {
801
- this.activeRequests.set(peerId, Math.max(0, (this.activeRequests.get(peerId) ?? 1) - 1));
802
- }
803
-
804
- getTotalActiveRequests(): number {
805
- let totalActiveRequests = 0;
806
- for (const count of this.activeRequests.values()) {
807
- totalActiveRequests += count;
808
- }
809
- return totalActiveRequests;
810
- }
811
-
812
- // pendingDataColumns could be null for prefulu
813
- private filterPeers(pendingDataColumns: Set<number> | null, excludedPeers: Set<PeerIdStr>): PeerIdStr[] {
814
- let maxColumnCount = 0;
815
- const considerPeers: {peerId: PeerIdStr; columnCount: number}[] = [];
816
- for (const [peerId, syncMeta] of this.peersMeta.entries()) {
817
- if (excludedPeers.has(peerId)) {
818
- // made request to this peer already
819
- continue;
820
- }
821
-
822
- const activeRequests = this.activeRequests.get(peerId) ?? 0;
823
- if (activeRequests >= MAX_CONCURRENT_REQUESTS) {
824
- // should return peer with no more than MAX_CONCURRENT_REQUESTS active requests
825
- continue;
826
- }
827
-
828
- if (pendingDataColumns === null || pendingDataColumns.size === 0) {
829
- // prefulu, no pending columns
830
- considerPeers.push({peerId, columnCount: 0});
831
- continue;
832
- }
833
-
834
- // postfulu, find peers that have custody columns that we need
835
- const {custodyColumns: peerColumns} = syncMeta;
836
- // check if the peer has all needed columns
837
- // get match
838
- const columns = peerColumns.reduce((acc, elem) => {
839
- if (pendingDataColumns.has(elem)) {
840
- acc.push(elem);
841
- }
842
- return acc;
843
- }, [] as number[]);
844
-
845
- if (columns.length > 0) {
846
- if (columns.length > maxColumnCount) {
847
- maxColumnCount = columns.length;
848
- }
849
- considerPeers.push({peerId, columnCount: columns.length});
850
- }
851
- } // end for
852
-
853
- const eligiblePeers: PeerIdStr[] = [];
854
- for (const {peerId, columnCount} of considerPeers) {
855
- if (columnCount === maxColumnCount) {
856
- eligiblePeers.push(peerId);
857
- }
858
- }
859
-
860
- return eligiblePeers;
861
- }
862
- }