@lodestar/beacon-node 1.35.0-dev.b42a298a7c → 1.35.0-dev.ba92bd8a88

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 (884) hide show
  1. package/lib/api/impl/api.d.ts.map +1 -0
  2. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -0
  3. package/lib/api/impl/beacon/blocks/utils.d.ts.map +1 -0
  4. package/lib/api/impl/beacon/index.d.ts.map +1 -0
  5. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -0
  6. package/lib/api/impl/beacon/rewards/index.d.ts.map +1 -0
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -0
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -0
  9. package/lib/api/impl/config/constants.d.ts.map +1 -0
  10. package/lib/api/impl/config/index.d.ts.map +1 -0
  11. package/lib/api/impl/debug/index.d.ts.map +1 -0
  12. package/lib/api/impl/errors.d.ts.map +1 -0
  13. package/lib/api/impl/events/index.d.ts.map +1 -0
  14. package/lib/api/impl/index.d.ts.map +1 -0
  15. package/lib/api/impl/lightclient/index.d.ts.map +1 -0
  16. package/lib/api/impl/lodestar/index.d.ts.map +1 -0
  17. package/lib/api/impl/node/index.d.ts.map +1 -0
  18. package/lib/api/impl/node/utils.d.ts.map +1 -0
  19. package/lib/api/impl/proof/index.d.ts.map +1 -0
  20. package/lib/api/impl/types.d.ts.map +1 -0
  21. package/lib/api/impl/utils.d.ts.map +1 -0
  22. package/lib/api/impl/validator/index.d.ts.map +1 -0
  23. package/lib/api/impl/validator/utils.d.ts.map +1 -0
  24. package/lib/api/index.d.ts.map +1 -0
  25. package/lib/api/options.d.ts.map +1 -0
  26. package/lib/api/rest/activeSockets.d.ts.map +1 -0
  27. package/lib/api/rest/base.d.ts.map +1 -0
  28. package/lib/api/rest/index.d.ts.map +1 -0
  29. package/lib/api/rest/swaggerUI.d.ts.map +1 -0
  30. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +1 -0
  31. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -0
  32. package/lib/chain/GetBlobsTracker.d.ts.map +1 -0
  33. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -0
  34. package/lib/chain/archiveStore/constants.d.ts.map +1 -0
  35. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -0
  36. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -0
  37. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -0
  38. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -0
  39. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +1 -0
  40. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  41. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  42. package/lib/chain/archiveStore/index.d.ts.map +1 -0
  43. package/lib/chain/archiveStore/interface.d.ts.map +1 -0
  44. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -0
  45. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -0
  46. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -0
  47. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +1 -0
  48. package/lib/chain/balancesCache.d.ts.map +1 -0
  49. package/lib/chain/beaconProposerCache.d.ts.map +1 -0
  50. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -0
  51. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -0
  52. package/lib/chain/blocks/blockInput/index.d.ts.map +1 -0
  53. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -0
  54. package/lib/chain/blocks/blockInput/utils.d.ts.map +1 -0
  55. package/lib/chain/blocks/importBlock.d.ts.map +1 -0
  56. package/lib/chain/blocks/index.d.ts.map +1 -0
  57. package/lib/chain/blocks/types.d.ts.map +1 -0
  58. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +1 -0
  59. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -0
  60. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -0
  61. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +1 -0
  62. package/lib/chain/blocks/utils/ownBanner.d.ts.map +1 -0
  63. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +1 -0
  64. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +1 -0
  65. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -0
  66. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -0
  67. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -0
  68. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -0
  69. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -0
  70. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -0
  71. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -0
  72. package/lib/chain/bls/index.d.ts.map +1 -0
  73. package/lib/chain/bls/interface.d.ts.map +1 -0
  74. package/lib/chain/bls/maybeBatch.d.ts.map +1 -0
  75. package/lib/chain/bls/multithread/index.d.ts.map +1 -0
  76. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -0
  77. package/lib/chain/bls/multithread/poolSize.d.ts.map +1 -0
  78. package/lib/chain/bls/multithread/types.d.ts.map +1 -0
  79. package/lib/chain/bls/multithread/utils.d.ts.map +1 -0
  80. package/lib/chain/bls/multithread/worker.d.ts.map +1 -0
  81. package/lib/chain/bls/singleThread.d.ts.map +1 -0
  82. package/lib/chain/bls/utils.d.ts.map +1 -0
  83. package/lib/chain/chain.d.ts.map +1 -0
  84. package/lib/chain/emitter.d.ts +2 -2
  85. package/lib/chain/emitter.d.ts.map +1 -0
  86. package/lib/chain/errors/attestationError.d.ts.map +1 -0
  87. package/lib/chain/errors/attesterSlashingError.d.ts.map +1 -0
  88. package/lib/chain/errors/blobSidecarError.d.ts.map +1 -0
  89. package/lib/chain/errors/blockError.d.ts.map +1 -0
  90. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +1 -0
  91. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -0
  92. package/lib/chain/errors/gossipValidation.d.ts.map +1 -0
  93. package/lib/chain/errors/index.d.ts.map +1 -0
  94. package/lib/chain/errors/lightClientError.d.ts.map +1 -0
  95. package/lib/chain/errors/proposerSlashingError.d.ts.map +1 -0
  96. package/lib/chain/errors/syncCommitteeError.d.ts.map +1 -0
  97. package/lib/chain/errors/voluntaryExitError.d.ts.map +1 -0
  98. package/lib/chain/forkChoice/index.d.ts.map +1 -0
  99. package/lib/chain/genesis/genesis.d.ts.map +1 -0
  100. package/lib/chain/genesis/interface.d.ts.map +1 -0
  101. package/lib/chain/index.d.ts.map +1 -0
  102. package/lib/chain/initState.d.ts.map +1 -0
  103. package/lib/chain/interface.d.ts.map +1 -0
  104. package/lib/chain/lightClient/index.d.ts.map +1 -0
  105. package/lib/chain/lightClient/proofs.d.ts.map +1 -0
  106. package/lib/chain/lightClient/types.d.ts.map +1 -0
  107. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -0
  108. package/lib/chain/opPools/attestationPool.d.ts.map +1 -0
  109. package/lib/chain/opPools/index.d.ts.map +1 -0
  110. package/lib/chain/opPools/opPool.d.ts.map +1 -0
  111. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -0
  112. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -0
  113. package/lib/chain/opPools/types.d.ts.map +1 -0
  114. package/lib/chain/opPools/utils.d.ts.map +1 -0
  115. package/lib/chain/options.d.ts.map +1 -0
  116. package/lib/chain/prepareNextSlot.d.ts.map +1 -0
  117. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -0
  118. package/lib/chain/produceBlock/index.d.ts.map +1 -0
  119. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -0
  120. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +1 -0
  121. package/lib/chain/regen/errors.d.ts.map +1 -0
  122. package/lib/chain/regen/index.d.ts.map +1 -0
  123. package/lib/chain/regen/interface.d.ts.map +1 -0
  124. package/lib/chain/regen/queued.d.ts.map +1 -0
  125. package/lib/chain/regen/regen.d.ts.map +1 -0
  126. package/lib/chain/reprocess.d.ts.map +1 -0
  127. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -0
  128. package/lib/chain/rewards/blockRewards.d.ts.map +1 -0
  129. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -0
  130. package/lib/chain/seenCache/index.d.ts.map +1 -0
  131. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +1 -0
  132. package/lib/chain/seenCache/seenAttestationData.d.ts.map +1 -0
  133. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -0
  134. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +1 -0
  135. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -0
  136. package/lib/chain/seenCache/seenCommittee.d.ts.map +1 -0
  137. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +1 -0
  138. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -0
  139. package/lib/chain/serializeState.d.ts.map +1 -0
  140. package/lib/chain/shufflingCache.d.ts.map +1 -0
  141. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +1 -0
  142. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -0
  143. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -0
  144. package/lib/chain/stateCache/datastore/index.d.ts.map +1 -0
  145. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -0
  146. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -0
  147. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +1 -0
  148. package/lib/chain/stateCache/index.d.ts.map +1 -0
  149. package/lib/chain/stateCache/mapMetrics.d.ts.map +1 -0
  150. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -0
  151. package/lib/chain/stateCache/types.d.ts.map +1 -0
  152. package/lib/chain/validation/aggregateAndProof.d.ts.map +1 -0
  153. package/lib/chain/validation/attestation.d.ts.map +1 -0
  154. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -0
  155. package/lib/chain/validation/blobSidecar.d.ts.map +1 -0
  156. package/lib/chain/validation/block.d.ts.map +1 -0
  157. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -0
  158. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -0
  159. package/lib/chain/validation/index.d.ts.map +1 -0
  160. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +1 -0
  161. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +1 -0
  162. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -0
  163. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -0
  164. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -0
  165. package/lib/chain/validation/signatureSets/index.d.ts.map +1 -0
  166. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -0
  167. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -0
  168. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -0
  169. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -0
  170. package/lib/chain/validation/syncCommittee.d.ts.map +1 -0
  171. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -0
  172. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -0
  173. package/lib/chain/validatorMonitor.d.ts.map +1 -0
  174. package/lib/constants/constants.d.ts.map +1 -0
  175. package/lib/constants/index.d.ts.map +1 -0
  176. package/lib/constants/network.d.ts.map +1 -0
  177. package/lib/db/beacon.d.ts.map +1 -0
  178. package/lib/db/buckets.d.ts +4 -4
  179. package/lib/db/buckets.d.ts.map +1 -0
  180. package/lib/db/buckets.js +4 -4
  181. package/lib/db/buckets.js.map +1 -1
  182. package/lib/db/index.d.ts.map +1 -0
  183. package/lib/db/interface.d.ts.map +1 -0
  184. package/lib/db/options.d.ts.map +1 -0
  185. package/lib/db/repositories/attesterSlashing.d.ts.map +1 -0
  186. package/lib/db/repositories/backfilledRanges.d.ts.map +1 -0
  187. package/lib/db/repositories/blobSidecars.d.ts.map +1 -0
  188. package/lib/db/repositories/blobSidecars.js +1 -1
  189. package/lib/db/repositories/blobSidecars.js.map +1 -1
  190. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +1 -0
  191. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  192. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  193. package/lib/db/repositories/block.d.ts.map +1 -0
  194. package/lib/db/repositories/blockArchive.d.ts.map +1 -0
  195. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  196. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -0
  197. package/lib/db/repositories/blsToExecutionChange.d.ts.map +1 -0
  198. package/lib/db/repositories/checkpointState.d.ts.map +1 -0
  199. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -0
  200. package/lib/db/repositories/dataColumnSidecar.js +1 -1
  201. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  202. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -0
  203. package/lib/db/repositories/dataColumnSidecarArchive.js +1 -1
  204. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  205. package/lib/db/repositories/depositDataRoot.d.ts.map +1 -0
  206. package/lib/db/repositories/depositEvent.d.ts.map +1 -0
  207. package/lib/db/repositories/eth1Data.d.ts.map +1 -0
  208. package/lib/db/repositories/index.d.ts.map +1 -0
  209. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +1 -0
  210. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +1 -0
  211. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +1 -0
  212. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +1 -0
  213. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -0
  214. package/lib/db/repositories/stateArchive.d.ts.map +1 -0
  215. package/lib/db/repositories/stateArchiveIndex.d.ts.map +1 -0
  216. package/lib/db/repositories/voluntaryExit.d.ts.map +1 -0
  217. package/lib/db/single/index.d.ts.map +1 -0
  218. package/lib/db/single/preGenesisState.d.ts.map +1 -0
  219. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +1 -0
  220. package/lib/eth1/errors.d.ts.map +1 -0
  221. package/lib/eth1/eth1DataCache.d.ts.map +1 -0
  222. package/lib/eth1/eth1DepositDataTracker.d.ts.map +1 -0
  223. package/lib/eth1/eth1DepositsCache.d.ts.map +1 -0
  224. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +1 -0
  225. package/lib/eth1/index.d.ts.map +1 -0
  226. package/lib/eth1/interface.d.ts.map +1 -0
  227. package/lib/eth1/options.d.ts.map +1 -0
  228. package/lib/eth1/provider/eth1Provider.d.ts.map +1 -0
  229. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +1 -0
  230. package/lib/eth1/provider/jwt.d.ts.map +1 -0
  231. package/lib/eth1/provider/utils.d.ts.map +1 -0
  232. package/lib/eth1/stream.d.ts.map +1 -0
  233. package/lib/eth1/utils/depositContract.d.ts.map +1 -0
  234. package/lib/eth1/utils/deposits.d.ts.map +1 -0
  235. package/lib/eth1/utils/eth1Data.d.ts.map +1 -0
  236. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +1 -0
  237. package/lib/eth1/utils/eth1Vote.d.ts.map +1 -0
  238. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +1 -0
  239. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +1 -0
  240. package/lib/execution/builder/cache.d.ts.map +1 -0
  241. package/lib/execution/builder/http.d.ts.map +1 -0
  242. package/lib/execution/builder/index.d.ts.map +1 -0
  243. package/lib/execution/builder/interface.d.ts.map +1 -0
  244. package/lib/execution/builder/utils.d.ts.map +1 -0
  245. package/lib/execution/engine/disabled.d.ts.map +1 -0
  246. package/lib/execution/engine/http.d.ts.map +1 -0
  247. package/lib/execution/engine/index.d.ts.map +1 -0
  248. package/lib/execution/engine/interface.d.ts.map +1 -0
  249. package/lib/execution/engine/mock.d.ts.map +1 -0
  250. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -0
  251. package/lib/execution/engine/types.d.ts.map +1 -0
  252. package/lib/execution/engine/utils.d.ts.map +1 -0
  253. package/lib/execution/index.d.ts.map +1 -0
  254. package/lib/index.d.ts.map +1 -0
  255. package/lib/metrics/index.d.ts.map +1 -0
  256. package/lib/metrics/metrics/beacon.d.ts.map +1 -0
  257. package/lib/metrics/metrics/lodestar.d.ts.map +1 -0
  258. package/lib/metrics/metrics.d.ts.map +1 -0
  259. package/lib/metrics/nodeJsMetrics.d.ts.map +1 -0
  260. package/lib/metrics/options.d.ts.map +1 -0
  261. package/lib/metrics/server/http.d.ts.map +1 -0
  262. package/lib/metrics/server/index.d.ts.map +1 -0
  263. package/lib/metrics/utils/avgMinMax.d.ts.map +1 -0
  264. package/lib/metrics/utils/gauge.d.ts.map +1 -0
  265. package/lib/metrics/utils/registryMetricCreator.d.ts.map +1 -0
  266. package/lib/monitoring/clientStats.d.ts.map +1 -0
  267. package/lib/monitoring/index.d.ts.map +1 -0
  268. package/lib/monitoring/options.d.ts.map +1 -0
  269. package/lib/monitoring/properties.d.ts.map +1 -0
  270. package/lib/monitoring/service.d.ts.map +1 -0
  271. package/lib/monitoring/system.d.ts.map +1 -0
  272. package/lib/monitoring/types.d.ts.map +1 -0
  273. package/lib/network/core/events.d.ts.map +1 -0
  274. package/lib/network/core/index.d.ts.map +1 -0
  275. package/lib/network/core/metrics.d.ts.map +1 -0
  276. package/lib/network/core/networkCore.d.ts.map +1 -0
  277. package/lib/network/core/networkCoreWorker.d.ts.map +1 -0
  278. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -0
  279. package/lib/network/core/types.d.ts.map +1 -0
  280. package/lib/network/discv5/index.d.ts.map +1 -0
  281. package/lib/network/discv5/types.d.ts.map +1 -0
  282. package/lib/network/discv5/utils.d.ts.map +1 -0
  283. package/lib/network/discv5/worker.d.ts.map +1 -0
  284. package/lib/network/events.d.ts.map +1 -0
  285. package/lib/network/forks.d.ts.map +1 -0
  286. package/lib/network/gossip/constants.d.ts.map +1 -0
  287. package/lib/network/gossip/encoding.d.ts.map +1 -0
  288. package/lib/network/gossip/errors.d.ts.map +1 -0
  289. package/lib/network/gossip/gossipsub.d.ts +1 -0
  290. package/lib/network/gossip/gossipsub.d.ts.map +1 -0
  291. package/lib/network/gossip/gossipsub.js +35 -16
  292. package/lib/network/gossip/gossipsub.js.map +1 -1
  293. package/lib/network/gossip/index.d.ts.map +1 -0
  294. package/lib/network/gossip/interface.d.ts.map +1 -0
  295. package/lib/network/gossip/metrics.d.ts +15 -7
  296. package/lib/network/gossip/metrics.d.ts.map +1 -0
  297. package/lib/network/gossip/metrics.js +16 -6
  298. package/lib/network/gossip/metrics.js.map +1 -1
  299. package/lib/network/gossip/scoringParameters.d.ts.map +1 -0
  300. package/lib/network/gossip/topic.d.ts.map +1 -0
  301. package/lib/network/index.d.ts.map +1 -0
  302. package/lib/network/interface.d.ts.map +1 -0
  303. package/lib/network/libp2p/error.d.ts.map +1 -0
  304. package/lib/network/libp2p/index.d.ts.map +1 -0
  305. package/lib/network/metadata.d.ts.map +1 -0
  306. package/lib/network/metadata.js +2 -1
  307. package/lib/network/metadata.js.map +1 -1
  308. package/lib/network/network.d.ts.map +1 -0
  309. package/lib/network/network.js +2 -4
  310. package/lib/network/network.js.map +1 -1
  311. package/lib/network/networkConfig.d.ts.map +1 -0
  312. package/lib/network/options.d.ts.map +1 -0
  313. package/lib/network/peers/client.d.ts.map +1 -0
  314. package/lib/network/peers/datastore.d.ts.map +1 -0
  315. package/lib/network/peers/discover.d.ts.map +1 -0
  316. package/lib/network/peers/index.d.ts.map +1 -0
  317. package/lib/network/peers/peerManager.d.ts.map +1 -0
  318. package/lib/network/peers/peersData.d.ts.map +1 -0
  319. package/lib/network/peers/score/constants.d.ts.map +1 -0
  320. package/lib/network/peers/score/index.d.ts.map +1 -0
  321. package/lib/network/peers/score/interface.d.ts.map +1 -0
  322. package/lib/network/peers/score/score.d.ts.map +1 -0
  323. package/lib/network/peers/score/store.d.ts.map +1 -0
  324. package/lib/network/peers/score/utils.d.ts.map +1 -0
  325. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -0
  326. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -0
  327. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +1 -0
  328. package/lib/network/peers/utils/index.d.ts.map +1 -0
  329. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -0
  330. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -0
  331. package/lib/network/processor/aggregatorTracker.d.ts.map +1 -0
  332. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -0
  333. package/lib/network/processor/gossipHandlers.d.ts.map +1 -0
  334. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -0
  335. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -0
  336. package/lib/network/processor/gossipQueues/linear.d.ts.map +1 -0
  337. package/lib/network/processor/gossipQueues/types.d.ts.map +1 -0
  338. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -0
  339. package/lib/network/processor/index.d.ts +1 -1
  340. package/lib/network/processor/index.d.ts.map +1 -0
  341. package/lib/network/processor/index.js +2 -3
  342. package/lib/network/processor/index.js.map +1 -1
  343. package/lib/network/processor/types.d.ts.map +1 -0
  344. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -0
  345. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -0
  346. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -0
  347. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -0
  348. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -0
  349. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -0
  350. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -0
  351. package/lib/network/reqresp/handlers/index.d.ts.map +1 -0
  352. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +1 -0
  353. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +1 -0
  354. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +1 -0
  355. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +1 -0
  356. package/lib/network/reqresp/index.d.ts.map +1 -0
  357. package/lib/network/reqresp/interface.d.ts.map +1 -0
  358. package/lib/network/reqresp/protocols.d.ts.map +1 -0
  359. package/lib/network/reqresp/rateLimit.d.ts.map +1 -0
  360. package/lib/network/reqresp/score.d.ts.map +1 -0
  361. package/lib/network/reqresp/types.d.ts.map +1 -0
  362. package/lib/network/reqresp/utils/collect.d.ts.map +1 -0
  363. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +1 -0
  364. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -0
  365. package/lib/network/statusCache.d.ts.map +1 -0
  366. package/lib/network/subnets/attnetsService.d.ts.map +1 -0
  367. package/lib/network/subnets/index.d.ts.map +1 -0
  368. package/lib/network/subnets/interface.d.ts.map +1 -0
  369. package/lib/network/subnets/syncnetsService.d.ts.map +1 -0
  370. package/lib/network/subnets/util.d.ts.map +1 -0
  371. package/lib/network/util.d.ts.map +1 -0
  372. package/lib/node/index.d.ts.map +1 -0
  373. package/lib/node/nodejs.d.ts.map +1 -0
  374. package/lib/node/notifier.d.ts.map +1 -0
  375. package/lib/node/options.d.ts.map +1 -0
  376. package/lib/node/utils/interop/deposits.d.ts.map +1 -0
  377. package/lib/node/utils/interop/state.d.ts.map +1 -0
  378. package/lib/node/utils/lightclient.d.ts.map +1 -0
  379. package/lib/node/utils/state.d.ts.map +1 -0
  380. package/lib/sync/backfill/backfill.d.ts.map +1 -0
  381. package/lib/sync/backfill/errors.d.ts.map +1 -0
  382. package/lib/sync/backfill/index.d.ts.map +1 -0
  383. package/lib/sync/backfill/verify.d.ts.map +1 -0
  384. package/lib/sync/constants.d.ts.map +1 -0
  385. package/lib/sync/index.d.ts.map +1 -0
  386. package/lib/sync/interface.d.ts.map +1 -0
  387. package/lib/sync/options.d.ts.map +1 -0
  388. package/lib/sync/range/batch.d.ts.map +1 -0
  389. package/lib/sync/range/chain.d.ts.map +1 -0
  390. package/lib/sync/range/range.d.ts.map +1 -0
  391. package/lib/sync/range/utils/batches.d.ts.map +1 -0
  392. package/lib/sync/range/utils/chainTarget.d.ts.map +1 -0
  393. package/lib/sync/range/utils/hashBlocks.d.ts.map +1 -0
  394. package/lib/sync/range/utils/index.d.ts.map +1 -0
  395. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -0
  396. package/lib/sync/range/utils/updateChains.d.ts.map +1 -0
  397. package/lib/sync/sync.d.ts.map +1 -0
  398. package/lib/sync/types.d.ts +0 -1
  399. package/lib/sync/types.d.ts.map +1 -0
  400. package/lib/sync/types.js.map +1 -1
  401. package/lib/sync/unknownBlock.d.ts.map +1 -0
  402. package/lib/sync/unknownBlock.js +12 -14
  403. package/lib/sync/unknownBlock.js.map +1 -1
  404. package/lib/sync/utils/downloadByRange.d.ts.map +1 -0
  405. package/lib/sync/utils/downloadByRoot.d.ts +3 -1
  406. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -0
  407. package/lib/sync/utils/downloadByRoot.js +32 -5
  408. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  409. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -0
  410. package/lib/sync/utils/remoteSyncType.d.ts.map +1 -0
  411. package/lib/util/address.d.ts.map +1 -0
  412. package/lib/util/array.d.ts.map +1 -0
  413. package/lib/util/asyncIterableToEvents.d.ts.map +1 -0
  414. package/lib/util/binarySearch.d.ts.map +1 -0
  415. package/lib/util/bitArray.d.ts.map +1 -0
  416. package/lib/util/blobs.d.ts.map +1 -0
  417. package/lib/util/blobs.js +5 -3
  418. package/lib/util/blobs.js.map +1 -1
  419. package/lib/util/bufferPool.d.ts.map +1 -0
  420. package/lib/util/bytes.d.ts.map +1 -0
  421. package/lib/util/chunkify.d.ts.map +1 -0
  422. package/lib/util/clock.d.ts.map +1 -0
  423. package/lib/util/dataColumns.d.ts.map +1 -0
  424. package/lib/util/dependentRoot.d.ts.map +1 -0
  425. package/lib/util/enum.d.ts.map +1 -0
  426. package/lib/util/error.d.ts.map +1 -0
  427. package/lib/util/eventLoop.d.ts.map +1 -0
  428. package/lib/util/execution.d.ts.map +1 -0
  429. package/lib/util/file.d.ts.map +1 -0
  430. package/lib/util/forkChoice.d.ts.map +1 -0
  431. package/lib/util/forkName.d.ts.map +1 -0
  432. package/lib/util/graffiti.d.ts.map +1 -0
  433. package/lib/util/hex.d.ts.map +1 -0
  434. package/lib/util/index.d.ts.map +1 -0
  435. package/lib/util/ip.d.ts.map +1 -0
  436. package/lib/util/itTrigger.d.ts.map +1 -0
  437. package/lib/util/kzg.d.ts.map +1 -0
  438. package/lib/util/map.d.ts.map +1 -0
  439. package/lib/util/metadata.d.ts.map +1 -0
  440. package/lib/util/multifork.d.ts.map +1 -0
  441. package/lib/util/numpy.d.ts.map +1 -0
  442. package/lib/util/peerId.d.ts.map +1 -0
  443. package/lib/util/profile.d.ts.map +1 -0
  444. package/lib/util/promises.d.ts.map +1 -0
  445. package/lib/util/queue/errors.d.ts.map +1 -0
  446. package/lib/util/queue/fnQueue.d.ts.map +1 -0
  447. package/lib/util/queue/index.d.ts.map +1 -0
  448. package/lib/util/queue/itemQueue.d.ts.map +1 -0
  449. package/lib/util/queue/options.d.ts.map +1 -0
  450. package/lib/util/serializedCache.d.ts.map +1 -0
  451. package/lib/util/set.d.ts.map +1 -0
  452. package/lib/util/shuffle.d.ts.map +1 -0
  453. package/lib/util/sortBy.d.ts.map +1 -0
  454. package/lib/util/sszBytes.d.ts.map +1 -0
  455. package/lib/util/strictEvents.d.ts.map +1 -0
  456. package/lib/util/time.d.ts.map +1 -0
  457. package/lib/util/timeSeries.d.ts.map +1 -0
  458. package/lib/util/types.d.ts.map +1 -0
  459. package/lib/util/workerEvents.d.ts.map +1 -0
  460. package/lib/util/wrapError.d.ts.map +1 -0
  461. package/package.json +18 -20
  462. package/src/api/impl/api.ts +26 -0
  463. package/src/api/impl/beacon/blocks/index.ts +744 -0
  464. package/src/api/impl/beacon/blocks/utils.ts +75 -0
  465. package/src/api/impl/beacon/index.ts +35 -0
  466. package/src/api/impl/beacon/pool/index.ts +314 -0
  467. package/src/api/impl/beacon/rewards/index.ts +30 -0
  468. package/src/api/impl/beacon/state/index.ts +406 -0
  469. package/src/api/impl/beacon/state/utils.ts +189 -0
  470. package/src/api/impl/config/constants.ts +127 -0
  471. package/src/api/impl/config/index.ts +59 -0
  472. package/src/api/impl/debug/index.ts +131 -0
  473. package/src/api/impl/errors.ts +50 -0
  474. package/src/api/impl/events/index.ts +33 -0
  475. package/src/api/impl/index.ts +6 -0
  476. package/src/api/impl/lightclient/index.ts +64 -0
  477. package/src/api/impl/lodestar/index.ts +257 -0
  478. package/src/api/impl/node/index.ts +88 -0
  479. package/src/api/impl/node/utils.ts +51 -0
  480. package/src/api/impl/proof/index.ts +60 -0
  481. package/src/api/impl/types.ts +17 -0
  482. package/src/api/impl/utils.ts +25 -0
  483. package/src/api/impl/validator/index.ts +1538 -0
  484. package/src/api/impl/validator/utils.ts +85 -0
  485. package/src/api/index.ts +2 -0
  486. package/src/api/options.ts +16 -0
  487. package/src/api/rest/activeSockets.ts +109 -0
  488. package/src/api/rest/base.ts +216 -0
  489. package/src/api/rest/index.ts +63 -0
  490. package/src/api/rest/swaggerUI.ts +80 -0
  491. package/src/bun-wrappers/prometheus-gc-stats.ts +7 -0
  492. package/src/chain/ColumnReconstructionTracker.ts +90 -0
  493. package/src/chain/GetBlobsTracker.ts +115 -0
  494. package/src/chain/archiveStore/archiveStore.ts +222 -0
  495. package/src/chain/archiveStore/constants.ts +5 -0
  496. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +116 -0
  497. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +68 -0
  498. package/src/chain/archiveStore/historicalState/metrics.ts +214 -0
  499. package/src/chain/archiveStore/historicalState/types.ts +41 -0
  500. package/src/chain/archiveStore/historicalState/worker.ts +77 -0
  501. package/src/chain/archiveStore/index.ts +3 -0
  502. package/src/chain/archiveStore/interface.ts +75 -0
  503. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +138 -0
  504. package/src/chain/archiveStore/utils/archiveBlocks.ts +437 -0
  505. package/src/chain/archiveStore/utils/pruneHistory.ts +56 -0
  506. package/src/chain/archiveStore/utils/updateBackfillRange.ts +50 -0
  507. package/src/chain/balancesCache.ts +52 -0
  508. package/src/chain/beaconProposerCache.ts +43 -0
  509. package/src/chain/blocks/blockInput/blockInput.ts +851 -0
  510. package/src/chain/blocks/blockInput/errors.ts +48 -0
  511. package/src/chain/blocks/blockInput/index.ts +4 -0
  512. package/src/chain/blocks/blockInput/types.ts +145 -0
  513. package/src/chain/blocks/blockInput/utils.ts +21 -0
  514. package/src/chain/blocks/importBlock.ts +603 -0
  515. package/src/chain/blocks/index.ts +179 -0
  516. package/src/chain/blocks/types.ts +101 -0
  517. package/src/chain/blocks/utils/blowfishBanner.ts +28 -0
  518. package/src/chain/blocks/utils/chainSegment.ts +29 -0
  519. package/src/chain/blocks/utils/checkpoint.ts +25 -0
  520. package/src/chain/blocks/utils/giraffeBanner.ts +30 -0
  521. package/src/chain/blocks/utils/ownBanner.ts +20 -0
  522. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +43 -0
  523. package/src/chain/blocks/utils/zebraBanner.ts +45 -0
  524. package/src/chain/blocks/verifyBlock.ts +242 -0
  525. package/src/chain/blocks/verifyBlocksDataAvailability.ts +34 -0
  526. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +438 -0
  527. package/src/chain/blocks/verifyBlocksSanityChecks.ts +129 -0
  528. package/src/chain/blocks/verifyBlocksSignatures.ts +105 -0
  529. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +114 -0
  530. package/src/chain/blocks/writeBlockInputToDb.ts +128 -0
  531. package/src/chain/bls/index.ts +4 -0
  532. package/src/chain/bls/interface.ts +68 -0
  533. package/src/chain/bls/maybeBatch.ts +45 -0
  534. package/src/chain/bls/multithread/index.ts +582 -0
  535. package/src/chain/bls/multithread/jobItem.ts +119 -0
  536. package/src/chain/bls/multithread/poolSize.ts +16 -0
  537. package/src/chain/bls/multithread/types.ts +38 -0
  538. package/src/chain/bls/multithread/utils.ts +19 -0
  539. package/src/chain/bls/multithread/worker.ts +114 -0
  540. package/src/chain/bls/singleThread.ts +87 -0
  541. package/src/chain/bls/utils.ts +30 -0
  542. package/src/chain/chain.ts +1365 -0
  543. package/src/chain/emitter.ts +113 -0
  544. package/src/chain/errors/attestationError.ts +194 -0
  545. package/src/chain/errors/attesterSlashingError.ts +11 -0
  546. package/src/chain/errors/blobSidecarError.ts +60 -0
  547. package/src/chain/errors/blockError.ts +166 -0
  548. package/src/chain/errors/blsToExecutionChangeError.ts +13 -0
  549. package/src/chain/errors/dataColumnSidecarError.ts +80 -0
  550. package/src/chain/errors/gossipValidation.ts +20 -0
  551. package/src/chain/errors/index.ts +10 -0
  552. package/src/chain/errors/lightClientError.ts +30 -0
  553. package/src/chain/errors/proposerSlashingError.ts +11 -0
  554. package/src/chain/errors/syncCommitteeError.ts +36 -0
  555. package/src/chain/errors/voluntaryExitError.ts +13 -0
  556. package/src/chain/forkChoice/index.ts +112 -0
  557. package/src/chain/genesis/genesis.ts +190 -0
  558. package/src/chain/genesis/interface.ts +14 -0
  559. package/src/chain/index.ts +6 -0
  560. package/src/chain/initState.ts +221 -0
  561. package/src/chain/interface.ts +280 -0
  562. package/src/chain/lightClient/index.ts +764 -0
  563. package/src/chain/lightClient/proofs.ts +85 -0
  564. package/src/chain/lightClient/types.ts +33 -0
  565. package/src/chain/opPools/aggregatedAttestationPool.ts +1063 -0
  566. package/src/chain/opPools/attestationPool.ts +283 -0
  567. package/src/chain/opPools/index.ts +5 -0
  568. package/src/chain/opPools/opPool.ts +462 -0
  569. package/src/chain/opPools/syncCommitteeMessagePool.ts +167 -0
  570. package/src/chain/opPools/syncContributionAndProofPool.ts +240 -0
  571. package/src/chain/opPools/types.ts +35 -0
  572. package/src/chain/opPools/utils.ts +65 -0
  573. package/src/chain/options.ts +138 -0
  574. package/src/chain/prepareNextSlot.ts +277 -0
  575. package/src/chain/produceBlock/computeNewStateRoot.ts +55 -0
  576. package/src/chain/produceBlock/index.ts +2 -0
  577. package/src/chain/produceBlock/produceBlockBody.ts +797 -0
  578. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +54 -0
  579. package/src/chain/regen/errors.ts +30 -0
  580. package/src/chain/regen/index.ts +4 -0
  581. package/src/chain/regen/interface.ts +93 -0
  582. package/src/chain/regen/queued.ts +317 -0
  583. package/src/chain/regen/regen.ts +424 -0
  584. package/src/chain/reprocess.ts +161 -0
  585. package/src/chain/rewards/attestationsRewards.ts +196 -0
  586. package/src/chain/rewards/blockRewards.ts +150 -0
  587. package/src/chain/rewards/syncCommitteeRewards.ts +58 -0
  588. package/src/chain/seenCache/index.ts +5 -0
  589. package/src/chain/seenCache/seenAggregateAndProof.ts +120 -0
  590. package/src/chain/seenCache/seenAttestationData.ts +145 -0
  591. package/src/chain/seenCache/seenAttesters.ts +58 -0
  592. package/src/chain/seenCache/seenBlockAttesters.ts +18 -0
  593. package/src/chain/seenCache/seenBlockProposers.ts +48 -0
  594. package/src/chain/seenCache/seenCommittee.ts +43 -0
  595. package/src/chain/seenCache/seenCommitteeContribution.ts +104 -0
  596. package/src/chain/seenCache/seenGossipBlockInput.ts +373 -0
  597. package/src/chain/serializeState.ts +32 -0
  598. package/src/chain/shufflingCache.ts +238 -0
  599. package/src/chain/stateCache/blockStateCacheImpl.ts +150 -0
  600. package/src/chain/stateCache/datastore/db.ts +36 -0
  601. package/src/chain/stateCache/datastore/file.ts +53 -0
  602. package/src/chain/stateCache/datastore/index.ts +2 -0
  603. package/src/chain/stateCache/datastore/types.ts +13 -0
  604. package/src/chain/stateCache/fifoBlockStateCache.ts +208 -0
  605. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +198 -0
  606. package/src/chain/stateCache/index.ts +3 -0
  607. package/src/chain/stateCache/mapMetrics.ts +52 -0
  608. package/src/chain/stateCache/persistentCheckpointsCache.ts +835 -0
  609. package/src/chain/stateCache/types.ts +86 -0
  610. package/src/chain/validation/aggregateAndProof.ts +258 -0
  611. package/src/chain/validation/attestation.ts +885 -0
  612. package/src/chain/validation/attesterSlashing.ts +61 -0
  613. package/src/chain/validation/blobSidecar.ts +301 -0
  614. package/src/chain/validation/block.ts +188 -0
  615. package/src/chain/validation/blsToExecutionChange.ts +61 -0
  616. package/src/chain/validation/dataColumnSidecar.ts +381 -0
  617. package/src/chain/validation/index.ts +9 -0
  618. package/src/chain/validation/lightClientFinalityUpdate.ts +45 -0
  619. package/src/chain/validation/lightClientOptimisticUpdate.ts +67 -0
  620. package/src/chain/validation/proposerSlashing.ts +54 -0
  621. package/src/chain/validation/signatureSets/aggregateAndProof.ts +38 -0
  622. package/src/chain/validation/signatureSets/contributionAndProof.ts +27 -0
  623. package/src/chain/validation/signatureSets/index.ts +6 -0
  624. package/src/chain/validation/signatureSets/selectionProof.ts +27 -0
  625. package/src/chain/validation/signatureSets/syncCommittee.ts +22 -0
  626. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +18 -0
  627. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +27 -0
  628. package/src/chain/validation/syncCommittee.ts +165 -0
  629. package/src/chain/validation/syncCommitteeContributionAndProof.ts +122 -0
  630. package/src/chain/validation/voluntaryExit.ts +58 -0
  631. package/src/chain/validatorMonitor.ts +1299 -0
  632. package/src/constants/constants.ts +15 -0
  633. package/src/constants/index.ts +2 -0
  634. package/src/constants/network.ts +52 -0
  635. package/src/db/beacon.ts +113 -0
  636. package/src/db/buckets.ts +80 -0
  637. package/src/db/index.ts +2 -0
  638. package/src/db/interface.ts +76 -0
  639. package/src/db/options.ts +7 -0
  640. package/src/db/repositories/attesterSlashing.ts +38 -0
  641. package/src/db/repositories/backfilledRanges.ts +29 -0
  642. package/src/db/repositories/blobSidecars.ts +37 -0
  643. package/src/db/repositories/blobSidecarsArchive.ts +28 -0
  644. package/src/db/repositories/block.ts +33 -0
  645. package/src/db/repositories/blockArchive.ts +170 -0
  646. package/src/db/repositories/blockArchiveIndex.ts +45 -0
  647. package/src/db/repositories/blsToExecutionChange.ts +16 -0
  648. package/src/db/repositories/checkpointState.ts +31 -0
  649. package/src/db/repositories/dataColumnSidecar.ts +49 -0
  650. package/src/db/repositories/dataColumnSidecarArchive.ts +56 -0
  651. package/src/db/repositories/depositDataRoot.ts +80 -0
  652. package/src/db/repositories/depositEvent.ts +32 -0
  653. package/src/db/repositories/eth1Data.ts +33 -0
  654. package/src/db/repositories/index.ts +20 -0
  655. package/src/db/repositories/lightclientBestUpdate.ts +41 -0
  656. package/src/db/repositories/lightclientCheckpointHeader.ts +32 -0
  657. package/src/db/repositories/lightclientSyncCommittee.ts +16 -0
  658. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +77 -0
  659. package/src/db/repositories/proposerSlashing.ts +15 -0
  660. package/src/db/repositories/stateArchive.ts +69 -0
  661. package/src/db/repositories/stateArchiveIndex.ts +18 -0
  662. package/src/db/repositories/voluntaryExit.ts +15 -0
  663. package/src/db/single/index.ts +2 -0
  664. package/src/db/single/preGenesisState.ts +37 -0
  665. package/src/db/single/preGenesisStateLastProcessedBlock.ts +34 -0
  666. package/src/eth1/errors.ts +40 -0
  667. package/src/eth1/eth1DataCache.ts +26 -0
  668. package/src/eth1/eth1DepositDataTracker.ts +410 -0
  669. package/src/eth1/eth1DepositsCache.ts +141 -0
  670. package/src/eth1/eth1MergeBlockTracker.ts +328 -0
  671. package/src/eth1/index.ts +157 -0
  672. package/src/eth1/interface.ts +131 -0
  673. package/src/eth1/options.ts +28 -0
  674. package/src/eth1/provider/eth1Provider.ts +229 -0
  675. package/src/eth1/provider/jsonRpcHttpClient.ts +390 -0
  676. package/src/eth1/provider/jwt.ts +36 -0
  677. package/src/eth1/provider/utils.ts +136 -0
  678. package/src/eth1/stream.ts +75 -0
  679. package/src/eth1/utils/depositContract.ts +37 -0
  680. package/src/eth1/utils/deposits.ts +70 -0
  681. package/src/eth1/utils/eth1Data.ts +100 -0
  682. package/src/eth1/utils/eth1DepositEvent.ts +12 -0
  683. package/src/eth1/utils/eth1Vote.ts +142 -0
  684. package/src/eth1/utils/groupDepositEventsByBlock.ts +19 -0
  685. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +18 -0
  686. package/src/execution/builder/cache.ts +39 -0
  687. package/src/execution/builder/http.ts +229 -0
  688. package/src/execution/builder/index.ts +27 -0
  689. package/src/execution/builder/interface.ts +49 -0
  690. package/src/execution/builder/utils.ts +19 -0
  691. package/src/execution/engine/disabled.ts +35 -0
  692. package/src/execution/engine/http.ts +644 -0
  693. package/src/execution/engine/index.ts +63 -0
  694. package/src/execution/engine/interface.ts +199 -0
  695. package/src/execution/engine/mock.ts +493 -0
  696. package/src/execution/engine/payloadIdCache.ts +54 -0
  697. package/src/execution/engine/types.ts +640 -0
  698. package/src/execution/engine/utils.ts +136 -0
  699. package/src/execution/index.ts +4 -0
  700. package/src/index.ts +20 -0
  701. package/src/metrics/index.ts +4 -0
  702. package/src/metrics/metrics/beacon.ts +390 -0
  703. package/src/metrics/metrics/lodestar.ts +1870 -0
  704. package/src/metrics/metrics.ts +43 -0
  705. package/src/metrics/nodeJsMetrics.ts +19 -0
  706. package/src/metrics/options.ts +22 -0
  707. package/src/metrics/server/http.ts +114 -0
  708. package/src/metrics/server/index.ts +1 -0
  709. package/src/metrics/utils/avgMinMax.ts +87 -0
  710. package/src/metrics/utils/gauge.ts +22 -0
  711. package/src/metrics/utils/registryMetricCreator.ts +41 -0
  712. package/src/monitoring/clientStats.ts +297 -0
  713. package/src/monitoring/index.ts +2 -0
  714. package/src/monitoring/options.ts +19 -0
  715. package/src/monitoring/properties.ts +152 -0
  716. package/src/monitoring/service.ts +235 -0
  717. package/src/monitoring/system.ts +146 -0
  718. package/src/monitoring/types.ts +21 -0
  719. package/src/network/core/events.ts +59 -0
  720. package/src/network/core/index.ts +3 -0
  721. package/src/network/core/metrics.ts +304 -0
  722. package/src/network/core/networkCore.ts +599 -0
  723. package/src/network/core/networkCoreWorker.ts +176 -0
  724. package/src/network/core/networkCoreWorkerHandler.ts +284 -0
  725. package/src/network/core/types.ts +119 -0
  726. package/src/network/discv5/index.ts +132 -0
  727. package/src/network/discv5/types.ts +74 -0
  728. package/src/network/discv5/utils.ts +50 -0
  729. package/src/network/discv5/worker.ts +137 -0
  730. package/src/network/events.ts +51 -0
  731. package/src/network/forks.ts +94 -0
  732. package/src/network/gossip/constants.ts +15 -0
  733. package/src/network/gossip/encoding.ts +111 -0
  734. package/src/network/gossip/errors.ts +7 -0
  735. package/src/network/gossip/gossipsub.ts +384 -0
  736. package/src/network/gossip/index.ts +4 -0
  737. package/src/network/gossip/interface.ts +215 -0
  738. package/src/network/gossip/metrics.ts +71 -0
  739. package/src/network/gossip/scoringParameters.ts +333 -0
  740. package/src/network/gossip/topic.ts +332 -0
  741. package/src/network/index.ts +8 -0
  742. package/src/network/interface.ts +134 -0
  743. package/src/network/libp2p/error.ts +55 -0
  744. package/src/network/libp2p/index.ts +153 -0
  745. package/src/network/metadata.ts +162 -0
  746. package/src/network/network.ts +767 -0
  747. package/src/network/networkConfig.ts +12 -0
  748. package/src/network/options.ts +70 -0
  749. package/src/network/peers/client.ts +29 -0
  750. package/src/network/peers/datastore.ts +188 -0
  751. package/src/network/peers/discover.ts +647 -0
  752. package/src/network/peers/index.ts +2 -0
  753. package/src/network/peers/peerManager.ts +899 -0
  754. package/src/network/peers/peersData.ts +65 -0
  755. package/src/network/peers/score/constants.ts +34 -0
  756. package/src/network/peers/score/index.ts +4 -0
  757. package/src/network/peers/score/interface.ts +74 -0
  758. package/src/network/peers/score/score.ts +200 -0
  759. package/src/network/peers/score/store.ts +95 -0
  760. package/src/network/peers/score/utils.ts +37 -0
  761. package/src/network/peers/utils/assertPeerRelevance.ts +99 -0
  762. package/src/network/peers/utils/enrSubnetsDeserialize.ts +27 -0
  763. package/src/network/peers/utils/getConnectedPeerIds.ts +33 -0
  764. package/src/network/peers/utils/index.ts +4 -0
  765. package/src/network/peers/utils/prioritizePeers.ts +627 -0
  766. package/src/network/peers/utils/subnetMap.ts +88 -0
  767. package/src/network/processor/aggregatorTracker.ts +38 -0
  768. package/src/network/processor/extractSlotRootFns.ts +64 -0
  769. package/src/network/processor/gossipHandlers.ts +951 -0
  770. package/src/network/processor/gossipQueues/index.ts +114 -0
  771. package/src/network/processor/gossipQueues/indexed.ts +219 -0
  772. package/src/network/processor/gossipQueues/linear.ts +162 -0
  773. package/src/network/processor/gossipQueues/types.ts +57 -0
  774. package/src/network/processor/gossipValidatorFn.ts +142 -0
  775. package/src/network/processor/index.ts +496 -0
  776. package/src/network/processor/types.ts +27 -0
  777. package/src/network/reqresp/ReqRespBeaconNode.ts +373 -0
  778. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +101 -0
  779. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +49 -0
  780. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +114 -0
  781. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +62 -0
  782. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +144 -0
  783. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +88 -0
  784. package/src/network/reqresp/handlers/index.ts +78 -0
  785. package/src/network/reqresp/handlers/lightClientBootstrap.ts +31 -0
  786. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +21 -0
  787. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +21 -0
  788. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +39 -0
  789. package/src/network/reqresp/index.ts +2 -0
  790. package/src/network/reqresp/interface.ts +45 -0
  791. package/src/network/reqresp/protocols.ts +146 -0
  792. package/src/network/reqresp/rateLimit.ts +112 -0
  793. package/src/network/reqresp/score.ts +70 -0
  794. package/src/network/reqresp/types.ts +174 -0
  795. package/src/network/reqresp/utils/collect.ts +84 -0
  796. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +57 -0
  797. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +99 -0
  798. package/src/network/statusCache.ts +17 -0
  799. package/src/network/subnets/attnetsService.ts +385 -0
  800. package/src/network/subnets/index.ts +2 -0
  801. package/src/network/subnets/interface.ts +66 -0
  802. package/src/network/subnets/syncnetsService.ts +147 -0
  803. package/src/network/subnets/util.ts +63 -0
  804. package/src/network/util.ts +29 -0
  805. package/src/node/index.ts +2 -0
  806. package/src/node/nodejs.ts +349 -0
  807. package/src/node/notifier.ts +206 -0
  808. package/src/node/options.ts +51 -0
  809. package/src/node/utils/interop/deposits.ts +53 -0
  810. package/src/node/utils/interop/state.ts +59 -0
  811. package/src/node/utils/lightclient.ts +7 -0
  812. package/src/node/utils/state.ts +37 -0
  813. package/src/sync/backfill/backfill.ts +893 -0
  814. package/src/sync/backfill/errors.ts +23 -0
  815. package/src/sync/backfill/index.ts +1 -0
  816. package/src/sync/backfill/verify.ts +58 -0
  817. package/src/sync/constants.ts +71 -0
  818. package/src/sync/index.ts +2 -0
  819. package/src/sync/interface.ts +55 -0
  820. package/src/sync/options.ts +45 -0
  821. package/src/sync/range/batch.ts +455 -0
  822. package/src/sync/range/chain.ts +715 -0
  823. package/src/sync/range/range.ts +354 -0
  824. package/src/sync/range/utils/batches.ts +119 -0
  825. package/src/sync/range/utils/chainTarget.ts +62 -0
  826. package/src/sync/range/utils/hashBlocks.ts +27 -0
  827. package/src/sync/range/utils/index.ts +5 -0
  828. package/src/sync/range/utils/peerBalancer.ts +184 -0
  829. package/src/sync/range/utils/updateChains.ts +66 -0
  830. package/src/sync/sync.ts +290 -0
  831. package/src/sync/types.ts +57 -0
  832. package/src/sync/unknownBlock.ts +859 -0
  833. package/src/sync/utils/downloadByRange.ts +808 -0
  834. package/src/sync/utils/downloadByRoot.ts +560 -0
  835. package/src/sync/utils/pendingBlocksTree.ts +97 -0
  836. package/src/sync/utils/remoteSyncType.ts +144 -0
  837. package/src/util/address.ts +3 -0
  838. package/src/util/array.ts +311 -0
  839. package/src/util/asyncIterableToEvents.ts +164 -0
  840. package/src/util/binarySearch.ts +48 -0
  841. package/src/util/bitArray.ts +84 -0
  842. package/src/util/blobs.ts +210 -0
  843. package/src/util/bufferPool.ts +95 -0
  844. package/src/util/bytes.ts +11 -0
  845. package/src/util/chunkify.ts +27 -0
  846. package/src/util/clock.ts +204 -0
  847. package/src/util/dataColumns.ts +415 -0
  848. package/src/util/dependentRoot.ts +47 -0
  849. package/src/util/enum.ts +17 -0
  850. package/src/util/error.ts +56 -0
  851. package/src/util/eventLoop.ts +22 -0
  852. package/src/util/execution.ts +223 -0
  853. package/src/util/file.ts +52 -0
  854. package/src/util/forkChoice.ts +5 -0
  855. package/src/util/forkName.ts +20 -0
  856. package/src/util/graffiti.ts +39 -0
  857. package/src/util/hex.ts +9 -0
  858. package/src/util/index.ts +2 -0
  859. package/src/util/ip.ts +6 -0
  860. package/src/util/itTrigger.ts +49 -0
  861. package/src/util/kzg.ts +3 -0
  862. package/src/util/map.ts +77 -0
  863. package/src/util/metadata.ts +22 -0
  864. package/src/util/multifork.ts +69 -0
  865. package/src/util/numpy.ts +8 -0
  866. package/src/util/peerId.ts +16 -0
  867. package/src/util/profile.ts +54 -0
  868. package/src/util/promises.ts +14 -0
  869. package/src/util/queue/errors.ts +14 -0
  870. package/src/util/queue/fnQueue.ts +16 -0
  871. package/src/util/queue/index.ts +4 -0
  872. package/src/util/queue/itemQueue.ts +128 -0
  873. package/src/util/queue/options.ts +37 -0
  874. package/src/util/serializedCache.ts +20 -0
  875. package/src/util/set.ts +62 -0
  876. package/src/util/shuffle.ts +21 -0
  877. package/src/util/sortBy.ts +19 -0
  878. package/src/util/sszBytes.ts +481 -0
  879. package/src/util/strictEvents.ts +8 -0
  880. package/src/util/time.ts +13 -0
  881. package/src/util/timeSeries.ts +118 -0
  882. package/src/util/types.ts +31 -0
  883. package/src/util/workerEvents.ts +142 -0
  884. package/src/util/wrapError.ts +27 -0
@@ -0,0 +1,354 @@
1
+ import {EventEmitter} from "node:events";
2
+ import {StrictEventEmitter} from "strict-event-emitter-types";
3
+ import {BeaconConfig} from "@lodestar/config";
4
+ import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
5
+ import {Epoch, Status, fulu} from "@lodestar/types";
6
+ import {Logger, toRootHex} from "@lodestar/utils";
7
+ import {IBlockInput} from "../../chain/blocks/blockInput/types.js";
8
+ import {AttestationImportOpt, ImportBlockOpts} from "../../chain/blocks/index.js";
9
+ import {IBeaconChain} from "../../chain/index.js";
10
+ import {Metrics} from "../../metrics/index.js";
11
+ import {INetwork} from "../../network/index.js";
12
+ import {PeerIdStr} from "../../util/peerId.js";
13
+ import {cacheByRangeResponses, downloadByRange} from "../utils/downloadByRange.js";
14
+ import {RangeSyncType, getRangeSyncTarget, rangeSyncTypes} from "../utils/remoteSyncType.js";
15
+ import {ChainTarget, SyncChain, SyncChainDebugState, SyncChainFns} from "./chain.js";
16
+ import {updateChains} from "./utils/index.js";
17
+
18
+ export enum RangeSyncEvent {
19
+ completedChain = "RangeSync-completedChain",
20
+ }
21
+
22
+ type RangeSyncEvents = {
23
+ [RangeSyncEvent.completedChain]: () => void;
24
+ };
25
+
26
+ type RangeSyncEmitter = StrictEventEmitter<EventEmitter, RangeSyncEvents>;
27
+
28
+ export enum RangeSyncStatus {
29
+ /** A finalized chain is being synced */
30
+ Finalized,
31
+ /** There are no finalized chains and we are syncing one more head chains */
32
+ Head,
33
+ /** There are no head or finalized chains and no long range sync is in progress */
34
+ Idle,
35
+ }
36
+
37
+ type RangeSyncState =
38
+ | {status: RangeSyncStatus.Finalized; target: ChainTarget}
39
+ | {status: RangeSyncStatus.Head; targets: ChainTarget[]}
40
+ | {status: RangeSyncStatus.Idle};
41
+
42
+ export type RangeSyncModules = {
43
+ chain: IBeaconChain;
44
+ network: INetwork;
45
+ metrics: Metrics | null;
46
+ config: BeaconConfig;
47
+ logger: Logger;
48
+ };
49
+
50
+ export type RangeSyncOpts = {
51
+ disableProcessAsChainSegment?: boolean;
52
+ };
53
+
54
+ /**
55
+ * RangeSync groups peers by their `status` into static target `SyncChain` instances
56
+ * Peers on each chain will be queried for batches until reaching their target.
57
+ *
58
+ * Not all SyncChain-s will sync at once, and are grouped by sync type:
59
+ * - Finalized Chain Sync
60
+ * - Head Chain Sync
61
+ *
62
+ * ### Finalized Chain Sync
63
+ *
64
+ * At least one peer's status finalized checkpoint is greater than ours. Then we'll form
65
+ * a chain starting from our finalized epoch and sync up to their finalized checkpoint.
66
+ * - Only one finalized chain can sync at a time
67
+ * - The finalized chain with the largest peer pool takes priority
68
+ * - As peers' status progresses we will switch to a SyncChain with a better target
69
+ *
70
+ * ### Head Chain Sync
71
+ *
72
+ * If no Finalized Chain Sync is active, and the peer's STATUS head is beyond
73
+ * `SLOT_IMPORT_TOLERANCE`, then we'll form a chain starting from our finalized epoch and sync
74
+ * up to their head.
75
+ * - More than one head chain can sync in parallel
76
+ * - If there are many head chains the ones with more peers take priority
77
+ */
78
+ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
79
+ private readonly chain: IBeaconChain;
80
+ private readonly network: INetwork;
81
+ private readonly metrics: Metrics | null;
82
+ private readonly config: BeaconConfig;
83
+ private readonly logger: Logger;
84
+ /** There is a single chain per type, 1 finalized sync, 1 head sync */
85
+ private readonly chains = new Map<RangeSyncType, SyncChain>();
86
+
87
+ private opts?: RangeSyncOpts;
88
+
89
+ constructor(modules: RangeSyncModules, opts?: RangeSyncOpts) {
90
+ super();
91
+ const {chain, network, metrics, config, logger} = modules;
92
+ this.chain = chain;
93
+ this.network = network;
94
+ this.metrics = metrics;
95
+ this.config = config;
96
+ this.logger = logger;
97
+ this.opts = opts;
98
+
99
+ if (metrics) {
100
+ metrics.syncStatus.addCollect(() => this.scrapeMetrics(metrics));
101
+ }
102
+ }
103
+
104
+ /** Throw / return all AsyncGenerators inside every SyncChain instance */
105
+ close(): void {
106
+ for (const chain of this.chains.values()) {
107
+ chain.remove();
108
+ }
109
+ }
110
+
111
+ /**
112
+ * A peer with a relevant STATUS message has been found, which also is advanced from us.
113
+ * Add this peer to an existing chain or create a new one. The update the chains status.
114
+ */
115
+ addPeer(peerId: PeerIdStr, localStatus: Status, peerStatus: Status): void {
116
+ // Compute if we should do a Finalized or Head sync with this peer
117
+ const {syncType, startEpoch, target} = getRangeSyncTarget(localStatus, peerStatus, this.chain.forkChoice);
118
+ this.logger.debug("Sync peer joined", {
119
+ peer: peerId,
120
+ syncType,
121
+ startEpoch,
122
+ targetSlot: target.slot,
123
+ targetRoot: toRootHex(target.root),
124
+ earliestAvailableSlot: (peerStatus as fulu.Status).earliestAvailableSlot ?? Infinity,
125
+ });
126
+
127
+ // If the peer existed in any other chain, remove it.
128
+ // re-status'd peers can exist in multiple finalized chains, only one sync at a time
129
+ if (syncType === RangeSyncType.Head) {
130
+ this.removePeer(peerId);
131
+ }
132
+
133
+ this.addPeerOrCreateChain(startEpoch, target, peerId, syncType);
134
+ this.update(localStatus.finalizedEpoch);
135
+ }
136
+
137
+ /**
138
+ * Remove this peer from all head and finalized chains. A chain may become peer-empty and be dropped
139
+ */
140
+ removePeer(peerId: PeerIdStr): void {
141
+ for (const syncChain of this.chains.values()) {
142
+ syncChain.removePeer(peerId);
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Compute the current RangeSync state, not cached
148
+ */
149
+ get state(): RangeSyncState {
150
+ const syncingHeadTargets: ChainTarget[] = [];
151
+ for (const chain of this.chains.values()) {
152
+ if (chain.isSyncing) {
153
+ if (chain.syncType === RangeSyncType.Finalized) {
154
+ return {status: RangeSyncStatus.Finalized, target: chain.target};
155
+ }
156
+ syncingHeadTargets.push(chain.target);
157
+ }
158
+ }
159
+
160
+ if (syncingHeadTargets.length > 0) {
161
+ return {status: RangeSyncStatus.Head, targets: syncingHeadTargets};
162
+ }
163
+ return {status: RangeSyncStatus.Idle};
164
+ }
165
+
166
+ /** Full debug state for lodestar API */
167
+ getSyncChainsDebugState(): SyncChainDebugState[] {
168
+ return Array.from(this.chains.values())
169
+ .map((syncChain) => syncChain.getDebugState())
170
+ .reverse(); // Newest additions first
171
+ }
172
+
173
+ /** Convenience method for `SyncChain` */
174
+ private processChainSegment: SyncChainFns["processChainSegment"] = async (blocks, syncType) => {
175
+ // Not trusted, verify signatures
176
+ const flags: ImportBlockOpts = {
177
+ // Only skip importing attestations for finalized sync. For head sync attestation are valuable.
178
+ // Importing attestations also triggers a head update, see https://github.com/ChainSafe/lodestar/issues/3804
179
+ // TODO: Review if this is okay, can we prevent some attacks by importing attestations?
180
+ importAttestations: syncType === RangeSyncType.Finalized ? AttestationImportOpt.Skip : undefined,
181
+ // Ignores ALREADY_KNOWN or GENESIS_BLOCK errors, and continues with the next block in chain segment
182
+ ignoreIfKnown: true,
183
+ // Ignore WOULD_REVERT_FINALIZED_SLOT error, continue with the next block in chain segment
184
+ ignoreIfFinalized: true,
185
+ // We won't attest to this block so it's okay to ignore a SYNCING message from execution layer
186
+ fromRangeSync: true,
187
+ // when this runs, syncing is the most important thing and gossip is not likely to run
188
+ // so we can utilize worker threads to verify signatures
189
+ blsVerifyOnMainThread: false,
190
+ // we want to be safe to only persist blocks after verifying it to avoid any attacks that may cause our DB
191
+ // to grow too much
192
+ eagerPersistBlock: false,
193
+ };
194
+
195
+ if (this.opts?.disableProcessAsChainSegment) {
196
+ // Should only be used for debugging or testing
197
+ for (const block of blocks) await this.chain.processBlock(block, flags);
198
+ } else {
199
+ await this.chain.processChainSegment(blocks, flags);
200
+ }
201
+ };
202
+
203
+ private downloadByRange: SyncChainFns["downloadByRange"] = async (peer, batch) => {
204
+ const batchBlocks = batch.getBlocks();
205
+ const {result, warnings} = await downloadByRange({
206
+ config: this.config,
207
+ network: this.network,
208
+ logger: this.logger,
209
+ peerIdStr: peer.peerId,
210
+ batchBlocks,
211
+ ...batch.getRequestsForPeer(peer),
212
+ });
213
+ const cached = cacheByRangeResponses({
214
+ cache: this.chain.seenBlockInputCache,
215
+ peerIdStr: peer.peerId,
216
+ responses: result,
217
+ batchBlocks,
218
+ });
219
+ return {result: cached, warnings};
220
+ };
221
+
222
+ private pruneBlockInputs: SyncChainFns["pruneBlockInputs"] = (blocks: IBlockInput[]) => {
223
+ for (const block of blocks) {
224
+ this.chain.seenBlockInputCache.prune(block.blockRootHex);
225
+ }
226
+ };
227
+
228
+ /** Convenience method for `SyncChain` */
229
+ private reportPeer: SyncChainFns["reportPeer"] = (peer, action, actionName) => {
230
+ this.network.reportPeer(peer, action, actionName);
231
+ };
232
+
233
+ private getConnectedPeerSyncMeta: SyncChainFns["getConnectedPeerSyncMeta"] = (peerId) => {
234
+ return this.network.getConnectedPeerSyncMeta(peerId);
235
+ };
236
+
237
+ /** Convenience method for `SyncChain` */
238
+ private onSyncChainEnd: SyncChainFns["onEnd"] = (err, target) => {
239
+ this.update(this.chain.forkChoice.getFinalizedCheckpoint().epoch);
240
+ this.emit(RangeSyncEvent.completedChain);
241
+
242
+ if (err === null && target !== null) {
243
+ this.metrics?.syncRange.syncChainHighestTargetSlotCompleted.set(target.slot);
244
+ }
245
+ };
246
+
247
+ private addPeerOrCreateChain(startEpoch: Epoch, target: ChainTarget, peer: PeerIdStr, syncType: RangeSyncType): void {
248
+ let syncChain = this.chains.get(syncType);
249
+ if (!syncChain) {
250
+ syncChain = new SyncChain(
251
+ startEpoch,
252
+ target,
253
+ syncType,
254
+ {
255
+ processChainSegment: this.processChainSegment,
256
+ downloadByRange: this.downloadByRange,
257
+ reportPeer: this.reportPeer,
258
+ getConnectedPeerSyncMeta: this.getConnectedPeerSyncMeta,
259
+ pruneBlockInputs: this.pruneBlockInputs,
260
+ onEnd: this.onSyncChainEnd,
261
+ },
262
+ {
263
+ config: this.config,
264
+ clock: this.chain.clock,
265
+ logger: this.logger,
266
+ custodyConfig: this.chain.custodyConfig,
267
+ metrics: this.metrics,
268
+ }
269
+ );
270
+ this.chains.set(syncType, syncChain);
271
+
272
+ this.metrics?.syncRange.syncChainsEvents.inc({syncType: syncChain.syncType, event: "add"});
273
+ this.logger.debug("SyncChain added", {
274
+ syncType,
275
+ firstEpoch: syncChain.firstBatchEpoch,
276
+ targetSlot: syncChain.target.slot,
277
+ targetRoot: toRootHex(syncChain.target.root),
278
+ peer,
279
+ });
280
+ }
281
+
282
+ syncChain.addPeer(peer, target);
283
+ }
284
+
285
+ private update(localFinalizedEpoch: Epoch): void {
286
+ const localFinalizedSlot = computeStartSlotAtEpoch(localFinalizedEpoch);
287
+
288
+ // Remove chains that are out-dated, peer-empty, completed or failed
289
+ for (const [id, syncChain] of this.chains.entries()) {
290
+ // Checks if a Finalized or Head chain should be removed
291
+ if (
292
+ // Sync chain has completed syncing or encountered an error
293
+ syncChain.isRemovable ||
294
+ // Sync chain has no more peers to download from
295
+ syncChain.peers === 0 ||
296
+ // Outdated: our chain has progressed beyond this sync chain
297
+ syncChain.target.slot < localFinalizedSlot ||
298
+ this.chain.forkChoice.hasBlock(syncChain.target.root)
299
+ ) {
300
+ syncChain.remove();
301
+ this.chains.delete(id);
302
+
303
+ this.metrics?.syncRange.syncChainsEvents.inc({syncType: syncChain.syncType, event: "remove"});
304
+ this.logger.debug("SyncChain removed", {
305
+ id: syncChain.logId,
306
+ localFinalizedSlot,
307
+ lastValidatedSlot: syncChain.lastValidatedSlot,
308
+ firstEpoch: syncChain.firstBatchEpoch,
309
+ targetSlot: syncChain.target.slot,
310
+ targetRoot: toRootHex(syncChain.target.root),
311
+ validatedEpochs: syncChain.validatedEpochs,
312
+ });
313
+
314
+ // Re-status peers from successful chain. Potentially trigger a Head sync
315
+ this.network
316
+ .reStatusPeers(syncChain.getPeers())
317
+ .catch((e) => this.logger.error("Error resyncing peers", {}, e));
318
+ }
319
+ }
320
+
321
+ const {toStop, toStart} = updateChains(Array.from(this.chains.values()));
322
+
323
+ for (const syncChain of toStop) {
324
+ syncChain.stopSyncing();
325
+ if (syncChain.isSyncing) {
326
+ this.metrics?.syncRange.syncChainsEvents.inc({syncType: syncChain.syncType, event: "stop"});
327
+ }
328
+ }
329
+
330
+ for (const syncChain of toStart) {
331
+ syncChain.startSyncing(localFinalizedEpoch);
332
+ if (!syncChain.isSyncing) {
333
+ this.metrics?.syncRange.syncChainsEvents.inc({syncType: syncChain.syncType, event: "start"});
334
+ }
335
+ }
336
+ }
337
+
338
+ private scrapeMetrics(metrics: Metrics): void {
339
+ metrics.syncRange.syncChainsPeers.reset();
340
+ const syncChainsByType: Record<RangeSyncType, number> = {
341
+ [RangeSyncType.Finalized]: 0,
342
+ [RangeSyncType.Head]: 0,
343
+ };
344
+
345
+ for (const chain of this.chains.values()) {
346
+ metrics.syncRange.syncChainsPeers.observe({syncType: chain.syncType}, chain.peers);
347
+ syncChainsByType[chain.syncType]++;
348
+ }
349
+
350
+ for (const syncType of rangeSyncTypes) {
351
+ metrics.syncRange.syncChains.set({syncType}, syncChainsByType[syncType]);
352
+ }
353
+ }
354
+ }
@@ -0,0 +1,119 @@
1
+ import {SLOTS_PER_EPOCH} from "@lodestar/params";
2
+ import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
3
+ import {Epoch, Slot} from "@lodestar/types";
4
+ import {BATCH_SLOT_OFFSET, EPOCHS_PER_BATCH} from "../../constants.js";
5
+ import {Batch, BatchStatus} from "../batch.js";
6
+
7
+ /**
8
+ * Validates that the status and ordering of batches is valid
9
+ * ```
10
+ * [AwaitingValidation]* [Processing]? [AwaitingDownload,Downloading,AwaitingProcessing]*
11
+ * ```
12
+ */
13
+ export function validateBatchesStatus(batches: Batch[]): void {
14
+ let processing = 0;
15
+ let preProcessing = 0;
16
+ for (const batch of batches) {
17
+ const status = batch.state.status;
18
+ switch (status) {
19
+ case BatchStatus.AwaitingValidation:
20
+ if (processing > 0) throw Error("AwaitingValidation state found after Processing");
21
+ if (preProcessing > 0) throw Error("AwaitingValidation state found after PreProcessing");
22
+ break;
23
+
24
+ case BatchStatus.Processing:
25
+ if (preProcessing > 0) throw Error("Processing state found after PreProcessing");
26
+ if (processing > 0) throw Error("More than one Processing state found");
27
+ processing++;
28
+ break;
29
+
30
+ case BatchStatus.AwaitingDownload:
31
+ case BatchStatus.Downloading:
32
+ case BatchStatus.AwaitingProcessing:
33
+ preProcessing++;
34
+ break;
35
+
36
+ default:
37
+ throw Error(`Unknown status: ${status}`);
38
+ }
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Return the next batch to process if any.
44
+ * @see validateBatchesStatus for batches state description
45
+ */
46
+ export function getNextBatchToProcess(batches: Batch[]): Batch | null {
47
+ for (const batch of batches) {
48
+ switch (batch.state.status) {
49
+ // If an AwaitingProcessing batch exists it can only be preceeded by AwaitingValidation
50
+ case BatchStatus.AwaitingValidation:
51
+ break;
52
+
53
+ case BatchStatus.AwaitingProcessing:
54
+ return batch;
55
+
56
+ // There MUST be no AwaitingProcessing state after AwaitingDownload, Downloading, Processing
57
+ case BatchStatus.AwaitingDownload:
58
+ case BatchStatus.Downloading:
59
+ case BatchStatus.Processing:
60
+ return null;
61
+ }
62
+ }
63
+ // Exhausted batches
64
+ return null;
65
+ }
66
+
67
+ /**
68
+ * Compute the startEpoch of the next batch to be downloaded
69
+ */
70
+ export function toBeDownloadedStartEpoch(batches: Batch[], startEpoch: Epoch): Epoch {
71
+ // Note: batches are inserted in ascending `startEpoch` order
72
+ const lastBatch = batches.at(-1);
73
+ return lastBatch ? lastBatch.startEpoch + EPOCHS_PER_BATCH : startEpoch;
74
+ }
75
+
76
+ export function toArr<K, V>(map: Map<K, V>): V[] {
77
+ return Array.from(map.values());
78
+ }
79
+
80
+ export function getBatchSlotRange(startEpoch: Epoch): {startSlot: number; count: number} {
81
+ return {
82
+ startSlot: computeStartSlotAtEpoch(startEpoch) + BATCH_SLOT_OFFSET,
83
+ count: EPOCHS_PER_BATCH * SLOTS_PER_EPOCH,
84
+ };
85
+ }
86
+
87
+ /**
88
+ * Given a batch's startEpoch, return true if batch does not include slot and is strictly after
89
+ * ```
90
+ * Batch1 Batch2 Batch3
91
+ * ----|--------|-----X--|--------|---
92
+ * ```
93
+ * - Batch1 = not includes and before = false
94
+ * - Batch2 = includes = false
95
+ * - Batch3 = not includes and after = true
96
+ */
97
+ export function batchStartEpochIsAfterSlot(startEpoch: Epoch, targetSlot: Slot): boolean {
98
+ // The range of slots (inclusive) downloaded by a batch
99
+ const {startSlot} = getBatchSlotRange(startEpoch);
100
+
101
+ return startSlot > targetSlot;
102
+ }
103
+
104
+ /**
105
+ * Returns true if SyncChain has processed all possible blocks with slot <= target.slot
106
+ */
107
+ export function isSyncChainDone(batches: Batch[], lastEpochWithProcessBlocks: Epoch, targetSlot: Slot): boolean {
108
+ // In case of full epochs of skipped slots, lastEpochWithProcessBlocks won't be updated.
109
+ // In that case it is assumed that the batches are valid only to be able to mark this SyncChain as done
110
+ const lastAwaitingValidation = batches
111
+ .reverse()
112
+ .find((batch) => batch.state.status === BatchStatus.AwaitingValidation);
113
+
114
+ if (lastAwaitingValidation) {
115
+ return batchStartEpochIsAfterSlot(lastAwaitingValidation.startEpoch + EPOCHS_PER_BATCH, targetSlot);
116
+ }
117
+
118
+ return batchStartEpochIsAfterSlot(lastEpochWithProcessBlocks, targetSlot);
119
+ }
@@ -0,0 +1,62 @@
1
+ import {Root, Slot} from "@lodestar/types";
2
+ import {toRootHex} from "@lodestar/utils";
3
+
4
+ /**
5
+ * Sync this up to this target. Uses slot instead of epoch to re-use logic for finalized sync
6
+ * and head sync. The root is used to uniquely identify this chain on different forks
7
+ */
8
+ export type ChainTarget = {
9
+ slot: Slot;
10
+ root: Root;
11
+ };
12
+
13
+ /**
14
+ * Previously we use computeMostCommonTarget to compute the target for a chain.
15
+ * Starting from fulu, we use computeHighestTarget to compute the target for a chain.
16
+ */
17
+ export function computeHighestTarget(targets: ChainTarget[]): ChainTarget {
18
+ if (targets.length === 0) {
19
+ throw Error("Must provide at least one target");
20
+ }
21
+
22
+ let highestSlot = -1;
23
+ let highestTargets: ChainTarget[] = [];
24
+ for (const target of targets) {
25
+ if (target.slot > highestSlot) {
26
+ highestSlot = target.slot;
27
+ highestTargets = [target];
28
+ } else if (target.slot === highestSlot) {
29
+ highestTargets.push(target);
30
+ }
31
+ // ignore if target.slot < highestSlot
32
+ }
33
+
34
+ if (highestTargets.length === 1) {
35
+ return highestTargets[0];
36
+ }
37
+
38
+ return computeMostCommonTarget(highestTargets);
39
+ }
40
+
41
+ function computeMostCommonTarget(targets: ChainTarget[]): ChainTarget {
42
+ if (targets.length === 0) {
43
+ throw Error("Must provide at least one target");
44
+ }
45
+
46
+ const countById = new Map<string, number>();
47
+
48
+ let mostCommonTarget = targets[0];
49
+ let mostCommonCount = 0;
50
+
51
+ for (const target of targets) {
52
+ const targetId = `${target.slot}-${toRootHex(target.root)}`;
53
+ const count = 1 + (countById.get(targetId) ?? 0);
54
+ countById.set(targetId, count);
55
+ if (count > mostCommonCount) {
56
+ mostCommonCount = count;
57
+ mostCommonTarget = target;
58
+ }
59
+ }
60
+
61
+ return mostCommonTarget;
62
+ }
@@ -0,0 +1,27 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {RootHex, SignedBeaconBlock} from "@lodestar/types";
3
+ import {toRootHex} from "@lodestar/utils";
4
+ import {IBlockInput} from "../../../chain/blocks/blockInput/types.js";
5
+
6
+ /**
7
+ * String to uniquely identify block segments. Used for peer scoring and to compare if batches are equivalent.
8
+ */
9
+ export function hashBlocks(blocks: IBlockInput[], config: ChainForkConfig): RootHex {
10
+ switch (blocks.length) {
11
+ case 0:
12
+ return "0x";
13
+ case 1: {
14
+ const block0 = blocks[0].getBlock();
15
+ return toRootHex(config.getForkTypes(block0.message.slot).SignedBeaconBlock.hashTreeRoot(block0));
16
+ }
17
+ default: {
18
+ const block0 = blocks[0].getBlock();
19
+ const blockN = blocks.at(-1)?.getBlock() as SignedBeaconBlock;
20
+ return (
21
+ // TODO(fulu): should we be doing checks for presence to make sure these do not blow up?
22
+ toRootHex(config.getForkTypes(block0.message.slot).SignedBeaconBlock.hashTreeRoot(block0)) +
23
+ toRootHex(config.getForkTypes(blockN.message.slot).SignedBeaconBlock.hashTreeRoot(blockN))
24
+ );
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./batches.js";
2
+ export * from "./chainTarget.js";
3
+ export * from "./hashBlocks.js";
4
+ export * from "./peerBalancer.js";
5
+ export * from "./updateChains.js";