@lodestar/beacon-node 1.35.0-dev.fcf8d024ea → 1.35.0-dev.feed916580

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 (945) hide show
  1. package/lib/api/impl/config/constants.d.ts +0 -5
  2. package/lib/api/impl/config/constants.js +1 -6
  3. package/lib/api/impl/config/constants.js.map +1 -1
  4. package/lib/api/impl/validator/index.js +3 -5
  5. package/lib/api/impl/validator/index.js.map +1 -1
  6. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +0 -1
  7. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  8. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  9. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  10. package/lib/chain/blocks/blockInput/blockInput.js +1 -1
  11. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  12. package/lib/chain/blocks/importBlock.js +3 -4
  13. package/lib/chain/blocks/importBlock.js.map +1 -1
  14. package/lib/chain/blocks/verifyBlocksDataAvailability.js +1 -8
  15. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  16. package/lib/chain/blocks/writeBlockInputToDb.js +7 -1
  17. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  18. package/lib/chain/bls/multithread/index.js +0 -1
  19. package/lib/chain/bls/multithread/index.js.map +1 -1
  20. package/lib/chain/chain.js +3 -2
  21. package/lib/chain/chain.js.map +1 -1
  22. package/lib/chain/emitter.d.ts +2 -2
  23. package/lib/chain/opPools/attestationPool.d.ts +3 -2
  24. package/lib/chain/opPools/attestationPool.js +5 -3
  25. package/lib/chain/opPools/attestationPool.js.map +1 -1
  26. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +2 -3
  27. package/lib/chain/opPools/syncCommitteeMessagePool.js +5 -6
  28. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  29. package/lib/chain/opPools/types.d.ts +1 -1
  30. package/lib/chain/opPools/types.js +1 -1
  31. package/lib/chain/opPools/types.js.map +1 -1
  32. package/lib/chain/prepareNextSlot.d.ts +3 -3
  33. package/lib/chain/prepareNextSlot.js +8 -8
  34. package/lib/chain/prepareNextSlot.js.map +1 -1
  35. package/lib/chain/stateCache/persistentCheckpointsCache.js +8 -9
  36. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  37. package/lib/chain/validation/lightClientFinalityUpdate.js +3 -4
  38. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  39. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +4 -6
  40. package/lib/chain/validation/lightClientOptimisticUpdate.js +11 -11
  41. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  42. package/lib/chain/validatorMonitor.js +14 -20
  43. package/lib/chain/validatorMonitor.js.map +1 -1
  44. package/lib/db/buckets.d.ts +4 -4
  45. package/lib/db/buckets.js +4 -4
  46. package/lib/db/buckets.js.map +1 -1
  47. package/lib/db/repositories/blobSidecars.js +1 -1
  48. package/lib/db/repositories/blobSidecars.js.map +1 -1
  49. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  50. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  51. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  52. package/lib/db/repositories/dataColumnSidecar.js +1 -1
  53. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  54. package/lib/db/repositories/dataColumnSidecarArchive.js +1 -1
  55. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  56. package/lib/metrics/metrics/lodestar.d.ts +1 -1
  57. package/lib/metrics/metrics/lodestar.js +3 -3
  58. package/lib/metrics/metrics/lodestar.js.map +1 -1
  59. package/lib/network/core/networkCoreWorkerHandler.js +3 -9
  60. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  61. package/lib/network/discv5/index.js +1 -4
  62. package/lib/network/discv5/index.js.map +1 -1
  63. package/lib/network/gossip/gossipsub.d.ts +0 -1
  64. package/lib/network/gossip/gossipsub.js +16 -35
  65. package/lib/network/gossip/gossipsub.js.map +1 -1
  66. package/lib/network/gossip/metrics.d.ts +7 -15
  67. package/lib/network/gossip/metrics.js +6 -16
  68. package/lib/network/gossip/metrics.js.map +1 -1
  69. package/lib/network/libp2p/index.js +1 -9
  70. package/lib/network/libp2p/index.js.map +1 -1
  71. package/lib/network/metadata.js +1 -2
  72. package/lib/network/metadata.js.map +1 -1
  73. package/lib/network/network.d.ts +1 -1
  74. package/lib/network/network.js +13 -11
  75. package/lib/network/network.js.map +1 -1
  76. package/lib/network/peers/datastore.d.ts +2 -2
  77. package/lib/network/peers/datastore.js +2 -2
  78. package/lib/network/peers/datastore.js.map +1 -1
  79. package/lib/network/processor/index.d.ts +1 -1
  80. package/lib/network/processor/index.js +3 -2
  81. package/lib/network/processor/index.js.map +1 -1
  82. package/lib/sync/types.d.ts +1 -0
  83. package/lib/sync/types.js.map +1 -1
  84. package/lib/sync/unknownBlock.d.ts +1 -0
  85. package/lib/sync/unknownBlock.js +19 -17
  86. package/lib/sync/unknownBlock.js.map +1 -1
  87. package/lib/sync/utils/downloadByRoot.d.ts +1 -3
  88. package/lib/sync/utils/downloadByRoot.js +9 -36
  89. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  90. package/lib/util/blobs.js +3 -5
  91. package/lib/util/blobs.js.map +1 -1
  92. package/lib/util/clock.d.ts +0 -5
  93. package/lib/util/clock.js +0 -3
  94. package/lib/util/clock.js.map +1 -1
  95. package/lib/util/dataColumns.js +1 -1
  96. package/lib/util/dataColumns.js.map +1 -1
  97. package/lib/util/execution.js +2 -19
  98. package/lib/util/execution.js.map +1 -1
  99. package/package.json +22 -32
  100. package/lib/api/impl/api.d.ts.map +0 -1
  101. package/lib/api/impl/beacon/blocks/index.d.ts.map +0 -1
  102. package/lib/api/impl/beacon/blocks/utils.d.ts.map +0 -1
  103. package/lib/api/impl/beacon/index.d.ts.map +0 -1
  104. package/lib/api/impl/beacon/pool/index.d.ts.map +0 -1
  105. package/lib/api/impl/beacon/rewards/index.d.ts.map +0 -1
  106. package/lib/api/impl/beacon/state/index.d.ts.map +0 -1
  107. package/lib/api/impl/beacon/state/utils.d.ts.map +0 -1
  108. package/lib/api/impl/config/constants.d.ts.map +0 -1
  109. package/lib/api/impl/config/index.d.ts.map +0 -1
  110. package/lib/api/impl/debug/index.d.ts.map +0 -1
  111. package/lib/api/impl/errors.d.ts.map +0 -1
  112. package/lib/api/impl/events/index.d.ts.map +0 -1
  113. package/lib/api/impl/index.d.ts.map +0 -1
  114. package/lib/api/impl/lightclient/index.d.ts.map +0 -1
  115. package/lib/api/impl/lodestar/index.d.ts.map +0 -1
  116. package/lib/api/impl/node/index.d.ts.map +0 -1
  117. package/lib/api/impl/node/utils.d.ts.map +0 -1
  118. package/lib/api/impl/proof/index.d.ts.map +0 -1
  119. package/lib/api/impl/types.d.ts.map +0 -1
  120. package/lib/api/impl/utils.d.ts.map +0 -1
  121. package/lib/api/impl/validator/index.d.ts.map +0 -1
  122. package/lib/api/impl/validator/utils.d.ts.map +0 -1
  123. package/lib/api/index.d.ts.map +0 -1
  124. package/lib/api/options.d.ts.map +0 -1
  125. package/lib/api/rest/activeSockets.d.ts.map +0 -1
  126. package/lib/api/rest/base.d.ts.map +0 -1
  127. package/lib/api/rest/index.d.ts.map +0 -1
  128. package/lib/api/rest/swaggerUI.d.ts.map +0 -1
  129. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +0 -1
  130. package/lib/chain/ColumnReconstructionTracker.d.ts.map +0 -1
  131. package/lib/chain/GetBlobsTracker.d.ts.map +0 -1
  132. package/lib/chain/archiveStore/archiveStore.d.ts.map +0 -1
  133. package/lib/chain/archiveStore/constants.d.ts.map +0 -1
  134. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +0 -1
  135. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +0 -1
  136. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +0 -1
  137. package/lib/chain/archiveStore/historicalState/types.d.ts.map +0 -1
  138. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +0 -1
  139. package/lib/chain/archiveStore/index.d.ts.map +0 -1
  140. package/lib/chain/archiveStore/interface.d.ts.map +0 -1
  141. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +0 -1
  142. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +0 -1
  143. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +0 -1
  144. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +0 -1
  145. package/lib/chain/balancesCache.d.ts.map +0 -1
  146. package/lib/chain/beaconProposerCache.d.ts.map +0 -1
  147. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +0 -1
  148. package/lib/chain/blocks/blockInput/errors.d.ts.map +0 -1
  149. package/lib/chain/blocks/blockInput/index.d.ts.map +0 -1
  150. package/lib/chain/blocks/blockInput/types.d.ts.map +0 -1
  151. package/lib/chain/blocks/blockInput/utils.d.ts.map +0 -1
  152. package/lib/chain/blocks/importBlock.d.ts.map +0 -1
  153. package/lib/chain/blocks/index.d.ts.map +0 -1
  154. package/lib/chain/blocks/types.d.ts.map +0 -1
  155. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +0 -1
  156. package/lib/chain/blocks/utils/chainSegment.d.ts.map +0 -1
  157. package/lib/chain/blocks/utils/checkpoint.d.ts.map +0 -1
  158. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +0 -1
  159. package/lib/chain/blocks/utils/ownBanner.d.ts.map +0 -1
  160. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +0 -1
  161. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +0 -1
  162. package/lib/chain/blocks/verifyBlock.d.ts.map +0 -1
  163. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +0 -1
  164. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +0 -1
  165. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +0 -1
  166. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +0 -1
  167. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +0 -1
  168. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +0 -1
  169. package/lib/chain/bls/index.d.ts.map +0 -1
  170. package/lib/chain/bls/interface.d.ts.map +0 -1
  171. package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
  172. package/lib/chain/bls/multithread/index.d.ts.map +0 -1
  173. package/lib/chain/bls/multithread/jobItem.d.ts.map +0 -1
  174. package/lib/chain/bls/multithread/poolSize.d.ts.map +0 -1
  175. package/lib/chain/bls/multithread/types.d.ts.map +0 -1
  176. package/lib/chain/bls/multithread/utils.d.ts.map +0 -1
  177. package/lib/chain/bls/multithread/worker.d.ts.map +0 -1
  178. package/lib/chain/bls/singleThread.d.ts.map +0 -1
  179. package/lib/chain/bls/utils.d.ts.map +0 -1
  180. package/lib/chain/chain.d.ts.map +0 -1
  181. package/lib/chain/emitter.d.ts.map +0 -1
  182. package/lib/chain/errors/attestationError.d.ts.map +0 -1
  183. package/lib/chain/errors/attesterSlashingError.d.ts.map +0 -1
  184. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  185. package/lib/chain/errors/blockError.d.ts.map +0 -1
  186. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +0 -1
  187. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +0 -1
  188. package/lib/chain/errors/gossipValidation.d.ts.map +0 -1
  189. package/lib/chain/errors/index.d.ts.map +0 -1
  190. package/lib/chain/errors/lightClientError.d.ts.map +0 -1
  191. package/lib/chain/errors/proposerSlashingError.d.ts.map +0 -1
  192. package/lib/chain/errors/syncCommitteeError.d.ts.map +0 -1
  193. package/lib/chain/errors/voluntaryExitError.d.ts.map +0 -1
  194. package/lib/chain/forkChoice/index.d.ts.map +0 -1
  195. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  196. package/lib/chain/genesis/interface.d.ts.map +0 -1
  197. package/lib/chain/index.d.ts.map +0 -1
  198. package/lib/chain/initState.d.ts.map +0 -1
  199. package/lib/chain/interface.d.ts.map +0 -1
  200. package/lib/chain/lightClient/index.d.ts.map +0 -1
  201. package/lib/chain/lightClient/proofs.d.ts.map +0 -1
  202. package/lib/chain/lightClient/types.d.ts.map +0 -1
  203. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +0 -1
  204. package/lib/chain/opPools/attestationPool.d.ts.map +0 -1
  205. package/lib/chain/opPools/index.d.ts.map +0 -1
  206. package/lib/chain/opPools/opPool.d.ts.map +0 -1
  207. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +0 -1
  208. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +0 -1
  209. package/lib/chain/opPools/types.d.ts.map +0 -1
  210. package/lib/chain/opPools/utils.d.ts.map +0 -1
  211. package/lib/chain/options.d.ts.map +0 -1
  212. package/lib/chain/prepareNextSlot.d.ts.map +0 -1
  213. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +0 -1
  214. package/lib/chain/produceBlock/index.d.ts.map +0 -1
  215. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +0 -1
  216. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +0 -1
  217. package/lib/chain/regen/errors.d.ts.map +0 -1
  218. package/lib/chain/regen/index.d.ts.map +0 -1
  219. package/lib/chain/regen/interface.d.ts.map +0 -1
  220. package/lib/chain/regen/queued.d.ts.map +0 -1
  221. package/lib/chain/regen/regen.d.ts.map +0 -1
  222. package/lib/chain/reprocess.d.ts.map +0 -1
  223. package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
  224. package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
  225. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
  226. package/lib/chain/seenCache/index.d.ts.map +0 -1
  227. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +0 -1
  228. package/lib/chain/seenCache/seenAttestationData.d.ts.map +0 -1
  229. package/lib/chain/seenCache/seenAttesters.d.ts.map +0 -1
  230. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +0 -1
  231. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +0 -1
  232. package/lib/chain/seenCache/seenCommittee.d.ts.map +0 -1
  233. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +0 -1
  234. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +0 -1
  235. package/lib/chain/serializeState.d.ts.map +0 -1
  236. package/lib/chain/shufflingCache.d.ts.map +0 -1
  237. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
  238. package/lib/chain/stateCache/datastore/db.d.ts.map +0 -1
  239. package/lib/chain/stateCache/datastore/file.d.ts.map +0 -1
  240. package/lib/chain/stateCache/datastore/index.d.ts.map +0 -1
  241. package/lib/chain/stateCache/datastore/types.d.ts.map +0 -1
  242. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +0 -1
  243. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
  244. package/lib/chain/stateCache/index.d.ts.map +0 -1
  245. package/lib/chain/stateCache/mapMetrics.d.ts.map +0 -1
  246. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +0 -1
  247. package/lib/chain/stateCache/types.d.ts.map +0 -1
  248. package/lib/chain/validation/aggregateAndProof.d.ts.map +0 -1
  249. package/lib/chain/validation/attestation.d.ts.map +0 -1
  250. package/lib/chain/validation/attesterSlashing.d.ts.map +0 -1
  251. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  252. package/lib/chain/validation/block.d.ts.map +0 -1
  253. package/lib/chain/validation/blsToExecutionChange.d.ts.map +0 -1
  254. package/lib/chain/validation/dataColumnSidecar.d.ts.map +0 -1
  255. package/lib/chain/validation/index.d.ts.map +0 -1
  256. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +0 -1
  257. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +0 -1
  258. package/lib/chain/validation/proposerSlashing.d.ts.map +0 -1
  259. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +0 -1
  260. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +0 -1
  261. package/lib/chain/validation/signatureSets/index.d.ts.map +0 -1
  262. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +0 -1
  263. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +0 -1
  264. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +0 -1
  265. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +0 -1
  266. package/lib/chain/validation/syncCommittee.d.ts.map +0 -1
  267. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +0 -1
  268. package/lib/chain/validation/voluntaryExit.d.ts.map +0 -1
  269. package/lib/chain/validatorMonitor.d.ts.map +0 -1
  270. package/lib/constants/constants.d.ts.map +0 -1
  271. package/lib/constants/index.d.ts.map +0 -1
  272. package/lib/constants/network.d.ts.map +0 -1
  273. package/lib/db/beacon.d.ts.map +0 -1
  274. package/lib/db/buckets.d.ts.map +0 -1
  275. package/lib/db/index.d.ts.map +0 -1
  276. package/lib/db/interface.d.ts.map +0 -1
  277. package/lib/db/options.d.ts.map +0 -1
  278. package/lib/db/repositories/attesterSlashing.d.ts.map +0 -1
  279. package/lib/db/repositories/backfilledRanges.d.ts.map +0 -1
  280. package/lib/db/repositories/blobSidecars.d.ts.map +0 -1
  281. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +0 -1
  282. package/lib/db/repositories/block.d.ts.map +0 -1
  283. package/lib/db/repositories/blockArchive.d.ts.map +0 -1
  284. package/lib/db/repositories/blockArchiveIndex.d.ts.map +0 -1
  285. package/lib/db/repositories/blsToExecutionChange.d.ts.map +0 -1
  286. package/lib/db/repositories/checkpointState.d.ts.map +0 -1
  287. package/lib/db/repositories/dataColumnSidecar.d.ts.map +0 -1
  288. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +0 -1
  289. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  290. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  291. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  292. package/lib/db/repositories/index.d.ts.map +0 -1
  293. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +0 -1
  294. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +0 -1
  295. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +0 -1
  296. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +0 -1
  297. package/lib/db/repositories/proposerSlashing.d.ts.map +0 -1
  298. package/lib/db/repositories/stateArchive.d.ts.map +0 -1
  299. package/lib/db/repositories/stateArchiveIndex.d.ts.map +0 -1
  300. package/lib/db/repositories/voluntaryExit.d.ts.map +0 -1
  301. package/lib/db/single/index.d.ts.map +0 -1
  302. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  303. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  304. package/lib/eth1/errors.d.ts.map +0 -1
  305. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  306. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  307. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  308. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
  309. package/lib/eth1/index.d.ts.map +0 -1
  310. package/lib/eth1/interface.d.ts.map +0 -1
  311. package/lib/eth1/options.d.ts.map +0 -1
  312. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  313. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  314. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  315. package/lib/eth1/provider/utils.d.ts.map +0 -1
  316. package/lib/eth1/stream.d.ts.map +0 -1
  317. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  318. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  319. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  320. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  321. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  322. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  323. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  324. package/lib/execution/builder/cache.d.ts.map +0 -1
  325. package/lib/execution/builder/http.d.ts.map +0 -1
  326. package/lib/execution/builder/index.d.ts.map +0 -1
  327. package/lib/execution/builder/interface.d.ts.map +0 -1
  328. package/lib/execution/builder/utils.d.ts.map +0 -1
  329. package/lib/execution/engine/disabled.d.ts.map +0 -1
  330. package/lib/execution/engine/http.d.ts.map +0 -1
  331. package/lib/execution/engine/index.d.ts.map +0 -1
  332. package/lib/execution/engine/interface.d.ts.map +0 -1
  333. package/lib/execution/engine/mock.d.ts.map +0 -1
  334. package/lib/execution/engine/payloadIdCache.d.ts.map +0 -1
  335. package/lib/execution/engine/types.d.ts.map +0 -1
  336. package/lib/execution/engine/utils.d.ts.map +0 -1
  337. package/lib/execution/index.d.ts.map +0 -1
  338. package/lib/index.d.ts.map +0 -1
  339. package/lib/metrics/index.d.ts.map +0 -1
  340. package/lib/metrics/metrics/beacon.d.ts.map +0 -1
  341. package/lib/metrics/metrics/lodestar.d.ts.map +0 -1
  342. package/lib/metrics/metrics.d.ts.map +0 -1
  343. package/lib/metrics/nodeJsMetrics.d.ts.map +0 -1
  344. package/lib/metrics/options.d.ts.map +0 -1
  345. package/lib/metrics/server/http.d.ts.map +0 -1
  346. package/lib/metrics/server/index.d.ts.map +0 -1
  347. package/lib/metrics/utils/avgMinMax.d.ts.map +0 -1
  348. package/lib/metrics/utils/gauge.d.ts.map +0 -1
  349. package/lib/metrics/utils/registryMetricCreator.d.ts.map +0 -1
  350. package/lib/monitoring/clientStats.d.ts.map +0 -1
  351. package/lib/monitoring/index.d.ts.map +0 -1
  352. package/lib/monitoring/options.d.ts.map +0 -1
  353. package/lib/monitoring/properties.d.ts.map +0 -1
  354. package/lib/monitoring/service.d.ts.map +0 -1
  355. package/lib/monitoring/system.d.ts.map +0 -1
  356. package/lib/monitoring/types.d.ts.map +0 -1
  357. package/lib/network/core/events.d.ts.map +0 -1
  358. package/lib/network/core/index.d.ts.map +0 -1
  359. package/lib/network/core/metrics.d.ts.map +0 -1
  360. package/lib/network/core/networkCore.d.ts.map +0 -1
  361. package/lib/network/core/networkCoreWorker.d.ts.map +0 -1
  362. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +0 -1
  363. package/lib/network/core/types.d.ts.map +0 -1
  364. package/lib/network/discv5/index.d.ts.map +0 -1
  365. package/lib/network/discv5/types.d.ts.map +0 -1
  366. package/lib/network/discv5/utils.d.ts.map +0 -1
  367. package/lib/network/discv5/worker.d.ts.map +0 -1
  368. package/lib/network/events.d.ts.map +0 -1
  369. package/lib/network/forks.d.ts.map +0 -1
  370. package/lib/network/gossip/constants.d.ts.map +0 -1
  371. package/lib/network/gossip/encoding.d.ts.map +0 -1
  372. package/lib/network/gossip/errors.d.ts.map +0 -1
  373. package/lib/network/gossip/gossipsub.d.ts.map +0 -1
  374. package/lib/network/gossip/index.d.ts.map +0 -1
  375. package/lib/network/gossip/interface.d.ts.map +0 -1
  376. package/lib/network/gossip/metrics.d.ts.map +0 -1
  377. package/lib/network/gossip/scoringParameters.d.ts.map +0 -1
  378. package/lib/network/gossip/topic.d.ts.map +0 -1
  379. package/lib/network/index.d.ts.map +0 -1
  380. package/lib/network/interface.d.ts.map +0 -1
  381. package/lib/network/libp2p/error.d.ts.map +0 -1
  382. package/lib/network/libp2p/index.d.ts.map +0 -1
  383. package/lib/network/metadata.d.ts.map +0 -1
  384. package/lib/network/network.d.ts.map +0 -1
  385. package/lib/network/networkConfig.d.ts.map +0 -1
  386. package/lib/network/options.d.ts.map +0 -1
  387. package/lib/network/peers/client.d.ts.map +0 -1
  388. package/lib/network/peers/datastore.d.ts.map +0 -1
  389. package/lib/network/peers/discover.d.ts.map +0 -1
  390. package/lib/network/peers/index.d.ts.map +0 -1
  391. package/lib/network/peers/peerManager.d.ts.map +0 -1
  392. package/lib/network/peers/peersData.d.ts.map +0 -1
  393. package/lib/network/peers/score/constants.d.ts.map +0 -1
  394. package/lib/network/peers/score/index.d.ts.map +0 -1
  395. package/lib/network/peers/score/interface.d.ts.map +0 -1
  396. package/lib/network/peers/score/score.d.ts.map +0 -1
  397. package/lib/network/peers/score/store.d.ts.map +0 -1
  398. package/lib/network/peers/score/utils.d.ts.map +0 -1
  399. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +0 -1
  400. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +0 -1
  401. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +0 -1
  402. package/lib/network/peers/utils/index.d.ts.map +0 -1
  403. package/lib/network/peers/utils/prioritizePeers.d.ts.map +0 -1
  404. package/lib/network/peers/utils/subnetMap.d.ts.map +0 -1
  405. package/lib/network/processor/aggregatorTracker.d.ts.map +0 -1
  406. package/lib/network/processor/extractSlotRootFns.d.ts.map +0 -1
  407. package/lib/network/processor/gossipHandlers.d.ts.map +0 -1
  408. package/lib/network/processor/gossipQueues/index.d.ts.map +0 -1
  409. package/lib/network/processor/gossipQueues/indexed.d.ts.map +0 -1
  410. package/lib/network/processor/gossipQueues/linear.d.ts.map +0 -1
  411. package/lib/network/processor/gossipQueues/types.d.ts.map +0 -1
  412. package/lib/network/processor/gossipValidatorFn.d.ts.map +0 -1
  413. package/lib/network/processor/index.d.ts.map +0 -1
  414. package/lib/network/processor/types.d.ts.map +0 -1
  415. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +0 -1
  416. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +0 -1
  417. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +0 -1
  418. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  419. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  420. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +0 -1
  421. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +0 -1
  422. package/lib/network/reqresp/handlers/index.d.ts.map +0 -1
  423. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +0 -1
  424. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +0 -1
  425. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +0 -1
  426. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +0 -1
  427. package/lib/network/reqresp/index.d.ts.map +0 -1
  428. package/lib/network/reqresp/interface.d.ts.map +0 -1
  429. package/lib/network/reqresp/protocols.d.ts.map +0 -1
  430. package/lib/network/reqresp/rateLimit.d.ts.map +0 -1
  431. package/lib/network/reqresp/score.d.ts.map +0 -1
  432. package/lib/network/reqresp/types.d.ts.map +0 -1
  433. package/lib/network/reqresp/utils/collect.d.ts.map +0 -1
  434. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +0 -1
  435. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +0 -1
  436. package/lib/network/statusCache.d.ts.map +0 -1
  437. package/lib/network/subnets/attnetsService.d.ts.map +0 -1
  438. package/lib/network/subnets/index.d.ts.map +0 -1
  439. package/lib/network/subnets/interface.d.ts.map +0 -1
  440. package/lib/network/subnets/syncnetsService.d.ts.map +0 -1
  441. package/lib/network/subnets/util.d.ts.map +0 -1
  442. package/lib/network/util.d.ts.map +0 -1
  443. package/lib/node/index.d.ts.map +0 -1
  444. package/lib/node/nodejs.d.ts.map +0 -1
  445. package/lib/node/notifier.d.ts.map +0 -1
  446. package/lib/node/options.d.ts.map +0 -1
  447. package/lib/node/utils/interop/deposits.d.ts.map +0 -1
  448. package/lib/node/utils/interop/state.d.ts.map +0 -1
  449. package/lib/node/utils/lightclient.d.ts.map +0 -1
  450. package/lib/node/utils/state.d.ts.map +0 -1
  451. package/lib/sync/backfill/backfill.d.ts.map +0 -1
  452. package/lib/sync/backfill/errors.d.ts.map +0 -1
  453. package/lib/sync/backfill/index.d.ts.map +0 -1
  454. package/lib/sync/backfill/verify.d.ts.map +0 -1
  455. package/lib/sync/constants.d.ts.map +0 -1
  456. package/lib/sync/index.d.ts.map +0 -1
  457. package/lib/sync/interface.d.ts.map +0 -1
  458. package/lib/sync/options.d.ts.map +0 -1
  459. package/lib/sync/range/batch.d.ts.map +0 -1
  460. package/lib/sync/range/chain.d.ts.map +0 -1
  461. package/lib/sync/range/range.d.ts.map +0 -1
  462. package/lib/sync/range/utils/batches.d.ts.map +0 -1
  463. package/lib/sync/range/utils/chainTarget.d.ts.map +0 -1
  464. package/lib/sync/range/utils/hashBlocks.d.ts.map +0 -1
  465. package/lib/sync/range/utils/index.d.ts.map +0 -1
  466. package/lib/sync/range/utils/peerBalancer.d.ts.map +0 -1
  467. package/lib/sync/range/utils/updateChains.d.ts.map +0 -1
  468. package/lib/sync/sync.d.ts.map +0 -1
  469. package/lib/sync/types.d.ts.map +0 -1
  470. package/lib/sync/unknownBlock.d.ts.map +0 -1
  471. package/lib/sync/utils/downloadByRange.d.ts.map +0 -1
  472. package/lib/sync/utils/downloadByRoot.d.ts.map +0 -1
  473. package/lib/sync/utils/pendingBlocksTree.d.ts.map +0 -1
  474. package/lib/sync/utils/remoteSyncType.d.ts.map +0 -1
  475. package/lib/util/address.d.ts.map +0 -1
  476. package/lib/util/array.d.ts.map +0 -1
  477. package/lib/util/asyncIterableToEvents.d.ts.map +0 -1
  478. package/lib/util/binarySearch.d.ts.map +0 -1
  479. package/lib/util/bitArray.d.ts.map +0 -1
  480. package/lib/util/blobs.d.ts.map +0 -1
  481. package/lib/util/bufferPool.d.ts.map +0 -1
  482. package/lib/util/bytes.d.ts.map +0 -1
  483. package/lib/util/chunkify.d.ts.map +0 -1
  484. package/lib/util/clock.d.ts.map +0 -1
  485. package/lib/util/dataColumns.d.ts.map +0 -1
  486. package/lib/util/dependentRoot.d.ts.map +0 -1
  487. package/lib/util/enum.d.ts.map +0 -1
  488. package/lib/util/error.d.ts.map +0 -1
  489. package/lib/util/eventLoop.d.ts.map +0 -1
  490. package/lib/util/execution.d.ts.map +0 -1
  491. package/lib/util/file.d.ts.map +0 -1
  492. package/lib/util/forkChoice.d.ts.map +0 -1
  493. package/lib/util/forkName.d.ts.map +0 -1
  494. package/lib/util/graffiti.d.ts.map +0 -1
  495. package/lib/util/hex.d.ts.map +0 -1
  496. package/lib/util/index.d.ts.map +0 -1
  497. package/lib/util/ip.d.ts.map +0 -1
  498. package/lib/util/itTrigger.d.ts.map +0 -1
  499. package/lib/util/kzg.d.ts.map +0 -1
  500. package/lib/util/map.d.ts.map +0 -1
  501. package/lib/util/metadata.d.ts.map +0 -1
  502. package/lib/util/multifork.d.ts.map +0 -1
  503. package/lib/util/numpy.d.ts.map +0 -1
  504. package/lib/util/peerId.d.ts.map +0 -1
  505. package/lib/util/profile.d.ts.map +0 -1
  506. package/lib/util/promises.d.ts.map +0 -1
  507. package/lib/util/queue/errors.d.ts.map +0 -1
  508. package/lib/util/queue/fnQueue.d.ts.map +0 -1
  509. package/lib/util/queue/index.d.ts.map +0 -1
  510. package/lib/util/queue/itemQueue.d.ts.map +0 -1
  511. package/lib/util/queue/options.d.ts.map +0 -1
  512. package/lib/util/serializedCache.d.ts.map +0 -1
  513. package/lib/util/set.d.ts.map +0 -1
  514. package/lib/util/shuffle.d.ts.map +0 -1
  515. package/lib/util/sortBy.d.ts.map +0 -1
  516. package/lib/util/sszBytes.d.ts.map +0 -1
  517. package/lib/util/strictEvents.d.ts.map +0 -1
  518. package/lib/util/time.d.ts.map +0 -1
  519. package/lib/util/timeSeries.d.ts.map +0 -1
  520. package/lib/util/types.d.ts.map +0 -1
  521. package/lib/util/workerEvents.d.ts.map +0 -1
  522. package/lib/util/wrapError.d.ts.map +0 -1
  523. package/src/api/impl/api.ts +0 -26
  524. package/src/api/impl/beacon/blocks/index.ts +0 -744
  525. package/src/api/impl/beacon/blocks/utils.ts +0 -75
  526. package/src/api/impl/beacon/index.ts +0 -35
  527. package/src/api/impl/beacon/pool/index.ts +0 -314
  528. package/src/api/impl/beacon/rewards/index.ts +0 -30
  529. package/src/api/impl/beacon/state/index.ts +0 -406
  530. package/src/api/impl/beacon/state/utils.ts +0 -189
  531. package/src/api/impl/config/constants.ts +0 -127
  532. package/src/api/impl/config/index.ts +0 -59
  533. package/src/api/impl/debug/index.ts +0 -131
  534. package/src/api/impl/errors.ts +0 -50
  535. package/src/api/impl/events/index.ts +0 -33
  536. package/src/api/impl/index.ts +0 -6
  537. package/src/api/impl/lightclient/index.ts +0 -64
  538. package/src/api/impl/lodestar/index.ts +0 -257
  539. package/src/api/impl/node/index.ts +0 -88
  540. package/src/api/impl/node/utils.ts +0 -51
  541. package/src/api/impl/proof/index.ts +0 -60
  542. package/src/api/impl/types.ts +0 -17
  543. package/src/api/impl/utils.ts +0 -25
  544. package/src/api/impl/validator/index.ts +0 -1540
  545. package/src/api/impl/validator/utils.ts +0 -85
  546. package/src/api/index.ts +0 -2
  547. package/src/api/options.ts +0 -16
  548. package/src/api/rest/activeSockets.ts +0 -109
  549. package/src/api/rest/base.ts +0 -216
  550. package/src/api/rest/index.ts +0 -63
  551. package/src/api/rest/swaggerUI.ts +0 -80
  552. package/src/bun-wrappers/prometheus-gc-stats.ts +0 -7
  553. package/src/chain/ColumnReconstructionTracker.ts +0 -90
  554. package/src/chain/GetBlobsTracker.ts +0 -115
  555. package/src/chain/archiveStore/archiveStore.ts +0 -222
  556. package/src/chain/archiveStore/constants.ts +0 -5
  557. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +0 -116
  558. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +0 -68
  559. package/src/chain/archiveStore/historicalState/metrics.ts +0 -214
  560. package/src/chain/archiveStore/historicalState/types.ts +0 -41
  561. package/src/chain/archiveStore/historicalState/worker.ts +0 -77
  562. package/src/chain/archiveStore/index.ts +0 -3
  563. package/src/chain/archiveStore/interface.ts +0 -75
  564. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +0 -138
  565. package/src/chain/archiveStore/utils/archiveBlocks.ts +0 -437
  566. package/src/chain/archiveStore/utils/pruneHistory.ts +0 -56
  567. package/src/chain/archiveStore/utils/updateBackfillRange.ts +0 -50
  568. package/src/chain/balancesCache.ts +0 -52
  569. package/src/chain/beaconProposerCache.ts +0 -43
  570. package/src/chain/blocks/blockInput/blockInput.ts +0 -852
  571. package/src/chain/blocks/blockInput/errors.ts +0 -48
  572. package/src/chain/blocks/blockInput/index.ts +0 -4
  573. package/src/chain/blocks/blockInput/types.ts +0 -145
  574. package/src/chain/blocks/blockInput/utils.ts +0 -21
  575. package/src/chain/blocks/importBlock.ts +0 -597
  576. package/src/chain/blocks/index.ts +0 -179
  577. package/src/chain/blocks/types.ts +0 -101
  578. package/src/chain/blocks/utils/blowfishBanner.ts +0 -28
  579. package/src/chain/blocks/utils/chainSegment.ts +0 -29
  580. package/src/chain/blocks/utils/checkpoint.ts +0 -25
  581. package/src/chain/blocks/utils/giraffeBanner.ts +0 -30
  582. package/src/chain/blocks/utils/ownBanner.ts +0 -20
  583. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +0 -43
  584. package/src/chain/blocks/utils/zebraBanner.ts +0 -45
  585. package/src/chain/blocks/verifyBlock.ts +0 -242
  586. package/src/chain/blocks/verifyBlocksDataAvailability.ts +0 -42
  587. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +0 -438
  588. package/src/chain/blocks/verifyBlocksSanityChecks.ts +0 -129
  589. package/src/chain/blocks/verifyBlocksSignatures.ts +0 -105
  590. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +0 -114
  591. package/src/chain/blocks/writeBlockInputToDb.ts +0 -120
  592. package/src/chain/bls/index.ts +0 -4
  593. package/src/chain/bls/interface.ts +0 -68
  594. package/src/chain/bls/maybeBatch.ts +0 -45
  595. package/src/chain/bls/multithread/index.ts +0 -582
  596. package/src/chain/bls/multithread/jobItem.ts +0 -119
  597. package/src/chain/bls/multithread/poolSize.ts +0 -16
  598. package/src/chain/bls/multithread/types.ts +0 -38
  599. package/src/chain/bls/multithread/utils.ts +0 -19
  600. package/src/chain/bls/multithread/worker.ts +0 -114
  601. package/src/chain/bls/singleThread.ts +0 -87
  602. package/src/chain/bls/utils.ts +0 -30
  603. package/src/chain/chain.ts +0 -1354
  604. package/src/chain/emitter.ts +0 -113
  605. package/src/chain/errors/attestationError.ts +0 -194
  606. package/src/chain/errors/attesterSlashingError.ts +0 -11
  607. package/src/chain/errors/blobSidecarError.ts +0 -60
  608. package/src/chain/errors/blockError.ts +0 -166
  609. package/src/chain/errors/blsToExecutionChangeError.ts +0 -13
  610. package/src/chain/errors/dataColumnSidecarError.ts +0 -80
  611. package/src/chain/errors/gossipValidation.ts +0 -20
  612. package/src/chain/errors/index.ts +0 -10
  613. package/src/chain/errors/lightClientError.ts +0 -30
  614. package/src/chain/errors/proposerSlashingError.ts +0 -11
  615. package/src/chain/errors/syncCommitteeError.ts +0 -36
  616. package/src/chain/errors/voluntaryExitError.ts +0 -13
  617. package/src/chain/forkChoice/index.ts +0 -112
  618. package/src/chain/genesis/genesis.ts +0 -190
  619. package/src/chain/genesis/interface.ts +0 -14
  620. package/src/chain/index.ts +0 -6
  621. package/src/chain/initState.ts +0 -221
  622. package/src/chain/interface.ts +0 -280
  623. package/src/chain/lightClient/index.ts +0 -764
  624. package/src/chain/lightClient/proofs.ts +0 -85
  625. package/src/chain/lightClient/types.ts +0 -33
  626. package/src/chain/opPools/aggregatedAttestationPool.ts +0 -1063
  627. package/src/chain/opPools/attestationPool.ts +0 -282
  628. package/src/chain/opPools/index.ts +0 -5
  629. package/src/chain/opPools/opPool.ts +0 -462
  630. package/src/chain/opPools/syncCommitteeMessagePool.ts +0 -169
  631. package/src/chain/opPools/syncContributionAndProofPool.ts +0 -240
  632. package/src/chain/opPools/types.ts +0 -35
  633. package/src/chain/opPools/utils.ts +0 -65
  634. package/src/chain/options.ts +0 -138
  635. package/src/chain/prepareNextSlot.ts +0 -277
  636. package/src/chain/produceBlock/computeNewStateRoot.ts +0 -55
  637. package/src/chain/produceBlock/index.ts +0 -2
  638. package/src/chain/produceBlock/produceBlockBody.ts +0 -797
  639. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +0 -54
  640. package/src/chain/regen/errors.ts +0 -30
  641. package/src/chain/regen/index.ts +0 -4
  642. package/src/chain/regen/interface.ts +0 -93
  643. package/src/chain/regen/queued.ts +0 -317
  644. package/src/chain/regen/regen.ts +0 -424
  645. package/src/chain/reprocess.ts +0 -161
  646. package/src/chain/rewards/attestationsRewards.ts +0 -196
  647. package/src/chain/rewards/blockRewards.ts +0 -150
  648. package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
  649. package/src/chain/seenCache/index.ts +0 -5
  650. package/src/chain/seenCache/seenAggregateAndProof.ts +0 -120
  651. package/src/chain/seenCache/seenAttestationData.ts +0 -145
  652. package/src/chain/seenCache/seenAttesters.ts +0 -58
  653. package/src/chain/seenCache/seenBlockAttesters.ts +0 -18
  654. package/src/chain/seenCache/seenBlockProposers.ts +0 -48
  655. package/src/chain/seenCache/seenCommittee.ts +0 -43
  656. package/src/chain/seenCache/seenCommitteeContribution.ts +0 -104
  657. package/src/chain/seenCache/seenGossipBlockInput.ts +0 -373
  658. package/src/chain/serializeState.ts +0 -32
  659. package/src/chain/shufflingCache.ts +0 -238
  660. package/src/chain/stateCache/blockStateCacheImpl.ts +0 -150
  661. package/src/chain/stateCache/datastore/db.ts +0 -36
  662. package/src/chain/stateCache/datastore/file.ts +0 -53
  663. package/src/chain/stateCache/datastore/index.ts +0 -2
  664. package/src/chain/stateCache/datastore/types.ts +0 -13
  665. package/src/chain/stateCache/fifoBlockStateCache.ts +0 -208
  666. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -198
  667. package/src/chain/stateCache/index.ts +0 -3
  668. package/src/chain/stateCache/mapMetrics.ts +0 -52
  669. package/src/chain/stateCache/persistentCheckpointsCache.ts +0 -837
  670. package/src/chain/stateCache/types.ts +0 -86
  671. package/src/chain/validation/aggregateAndProof.ts +0 -258
  672. package/src/chain/validation/attestation.ts +0 -885
  673. package/src/chain/validation/attesterSlashing.ts +0 -61
  674. package/src/chain/validation/blobSidecar.ts +0 -301
  675. package/src/chain/validation/block.ts +0 -188
  676. package/src/chain/validation/blsToExecutionChange.ts +0 -61
  677. package/src/chain/validation/dataColumnSidecar.ts +0 -381
  678. package/src/chain/validation/index.ts +0 -9
  679. package/src/chain/validation/lightClientFinalityUpdate.ts +0 -46
  680. package/src/chain/validation/lightClientOptimisticUpdate.ts +0 -68
  681. package/src/chain/validation/proposerSlashing.ts +0 -54
  682. package/src/chain/validation/signatureSets/aggregateAndProof.ts +0 -38
  683. package/src/chain/validation/signatureSets/contributionAndProof.ts +0 -27
  684. package/src/chain/validation/signatureSets/index.ts +0 -6
  685. package/src/chain/validation/signatureSets/selectionProof.ts +0 -27
  686. package/src/chain/validation/signatureSets/syncCommittee.ts +0 -22
  687. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +0 -18
  688. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +0 -27
  689. package/src/chain/validation/syncCommittee.ts +0 -165
  690. package/src/chain/validation/syncCommitteeContributionAndProof.ts +0 -122
  691. package/src/chain/validation/voluntaryExit.ts +0 -58
  692. package/src/chain/validatorMonitor.ts +0 -1309
  693. package/src/constants/constants.ts +0 -15
  694. package/src/constants/index.ts +0 -2
  695. package/src/constants/network.ts +0 -52
  696. package/src/db/beacon.ts +0 -113
  697. package/src/db/buckets.ts +0 -80
  698. package/src/db/index.ts +0 -2
  699. package/src/db/interface.ts +0 -76
  700. package/src/db/options.ts +0 -7
  701. package/src/db/repositories/attesterSlashing.ts +0 -38
  702. package/src/db/repositories/backfilledRanges.ts +0 -29
  703. package/src/db/repositories/blobSidecars.ts +0 -37
  704. package/src/db/repositories/blobSidecarsArchive.ts +0 -28
  705. package/src/db/repositories/block.ts +0 -33
  706. package/src/db/repositories/blockArchive.ts +0 -170
  707. package/src/db/repositories/blockArchiveIndex.ts +0 -45
  708. package/src/db/repositories/blsToExecutionChange.ts +0 -16
  709. package/src/db/repositories/checkpointState.ts +0 -31
  710. package/src/db/repositories/dataColumnSidecar.ts +0 -49
  711. package/src/db/repositories/dataColumnSidecarArchive.ts +0 -56
  712. package/src/db/repositories/depositDataRoot.ts +0 -80
  713. package/src/db/repositories/depositEvent.ts +0 -32
  714. package/src/db/repositories/eth1Data.ts +0 -33
  715. package/src/db/repositories/index.ts +0 -20
  716. package/src/db/repositories/lightclientBestUpdate.ts +0 -41
  717. package/src/db/repositories/lightclientCheckpointHeader.ts +0 -32
  718. package/src/db/repositories/lightclientSyncCommittee.ts +0 -16
  719. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +0 -77
  720. package/src/db/repositories/proposerSlashing.ts +0 -15
  721. package/src/db/repositories/stateArchive.ts +0 -69
  722. package/src/db/repositories/stateArchiveIndex.ts +0 -18
  723. package/src/db/repositories/voluntaryExit.ts +0 -15
  724. package/src/db/single/index.ts +0 -2
  725. package/src/db/single/preGenesisState.ts +0 -37
  726. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  727. package/src/eth1/errors.ts +0 -40
  728. package/src/eth1/eth1DataCache.ts +0 -26
  729. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  730. package/src/eth1/eth1DepositsCache.ts +0 -141
  731. package/src/eth1/eth1MergeBlockTracker.ts +0 -328
  732. package/src/eth1/index.ts +0 -157
  733. package/src/eth1/interface.ts +0 -131
  734. package/src/eth1/options.ts +0 -28
  735. package/src/eth1/provider/eth1Provider.ts +0 -229
  736. package/src/eth1/provider/jsonRpcHttpClient.ts +0 -390
  737. package/src/eth1/provider/jwt.ts +0 -36
  738. package/src/eth1/provider/utils.ts +0 -136
  739. package/src/eth1/stream.ts +0 -75
  740. package/src/eth1/utils/depositContract.ts +0 -37
  741. package/src/eth1/utils/deposits.ts +0 -70
  742. package/src/eth1/utils/eth1Data.ts +0 -100
  743. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  744. package/src/eth1/utils/eth1Vote.ts +0 -142
  745. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  746. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  747. package/src/execution/builder/cache.ts +0 -39
  748. package/src/execution/builder/http.ts +0 -229
  749. package/src/execution/builder/index.ts +0 -27
  750. package/src/execution/builder/interface.ts +0 -49
  751. package/src/execution/builder/utils.ts +0 -19
  752. package/src/execution/engine/disabled.ts +0 -35
  753. package/src/execution/engine/http.ts +0 -644
  754. package/src/execution/engine/index.ts +0 -63
  755. package/src/execution/engine/interface.ts +0 -199
  756. package/src/execution/engine/mock.ts +0 -493
  757. package/src/execution/engine/payloadIdCache.ts +0 -54
  758. package/src/execution/engine/types.ts +0 -640
  759. package/src/execution/engine/utils.ts +0 -136
  760. package/src/execution/index.ts +0 -4
  761. package/src/index.ts +0 -20
  762. package/src/metrics/index.ts +0 -4
  763. package/src/metrics/metrics/beacon.ts +0 -390
  764. package/src/metrics/metrics/lodestar.ts +0 -1870
  765. package/src/metrics/metrics.ts +0 -43
  766. package/src/metrics/nodeJsMetrics.ts +0 -19
  767. package/src/metrics/options.ts +0 -22
  768. package/src/metrics/server/http.ts +0 -114
  769. package/src/metrics/server/index.ts +0 -1
  770. package/src/metrics/utils/avgMinMax.ts +0 -87
  771. package/src/metrics/utils/gauge.ts +0 -22
  772. package/src/metrics/utils/registryMetricCreator.ts +0 -41
  773. package/src/monitoring/clientStats.ts +0 -297
  774. package/src/monitoring/index.ts +0 -2
  775. package/src/monitoring/options.ts +0 -19
  776. package/src/monitoring/properties.ts +0 -152
  777. package/src/monitoring/service.ts +0 -235
  778. package/src/monitoring/system.ts +0 -146
  779. package/src/monitoring/types.ts +0 -21
  780. package/src/network/core/events.ts +0 -59
  781. package/src/network/core/index.ts +0 -3
  782. package/src/network/core/metrics.ts +0 -304
  783. package/src/network/core/networkCore.ts +0 -599
  784. package/src/network/core/networkCoreWorker.ts +0 -176
  785. package/src/network/core/networkCoreWorkerHandler.ts +0 -284
  786. package/src/network/core/types.ts +0 -119
  787. package/src/network/discv5/index.ts +0 -132
  788. package/src/network/discv5/types.ts +0 -74
  789. package/src/network/discv5/utils.ts +0 -50
  790. package/src/network/discv5/worker.ts +0 -137
  791. package/src/network/events.ts +0 -51
  792. package/src/network/forks.ts +0 -94
  793. package/src/network/gossip/constants.ts +0 -15
  794. package/src/network/gossip/encoding.ts +0 -111
  795. package/src/network/gossip/errors.ts +0 -7
  796. package/src/network/gossip/gossipsub.ts +0 -384
  797. package/src/network/gossip/index.ts +0 -4
  798. package/src/network/gossip/interface.ts +0 -215
  799. package/src/network/gossip/metrics.ts +0 -71
  800. package/src/network/gossip/scoringParameters.ts +0 -333
  801. package/src/network/gossip/topic.ts +0 -332
  802. package/src/network/index.ts +0 -8
  803. package/src/network/interface.ts +0 -134
  804. package/src/network/libp2p/error.ts +0 -55
  805. package/src/network/libp2p/index.ts +0 -153
  806. package/src/network/metadata.ts +0 -162
  807. package/src/network/network.ts +0 -767
  808. package/src/network/networkConfig.ts +0 -12
  809. package/src/network/options.ts +0 -70
  810. package/src/network/peers/client.ts +0 -29
  811. package/src/network/peers/datastore.ts +0 -188
  812. package/src/network/peers/discover.ts +0 -647
  813. package/src/network/peers/index.ts +0 -2
  814. package/src/network/peers/peerManager.ts +0 -899
  815. package/src/network/peers/peersData.ts +0 -65
  816. package/src/network/peers/score/constants.ts +0 -34
  817. package/src/network/peers/score/index.ts +0 -4
  818. package/src/network/peers/score/interface.ts +0 -74
  819. package/src/network/peers/score/score.ts +0 -200
  820. package/src/network/peers/score/store.ts +0 -95
  821. package/src/network/peers/score/utils.ts +0 -37
  822. package/src/network/peers/utils/assertPeerRelevance.ts +0 -99
  823. package/src/network/peers/utils/enrSubnetsDeserialize.ts +0 -27
  824. package/src/network/peers/utils/getConnectedPeerIds.ts +0 -33
  825. package/src/network/peers/utils/index.ts +0 -4
  826. package/src/network/peers/utils/prioritizePeers.ts +0 -627
  827. package/src/network/peers/utils/subnetMap.ts +0 -88
  828. package/src/network/processor/aggregatorTracker.ts +0 -38
  829. package/src/network/processor/extractSlotRootFns.ts +0 -64
  830. package/src/network/processor/gossipHandlers.ts +0 -951
  831. package/src/network/processor/gossipQueues/index.ts +0 -114
  832. package/src/network/processor/gossipQueues/indexed.ts +0 -219
  833. package/src/network/processor/gossipQueues/linear.ts +0 -162
  834. package/src/network/processor/gossipQueues/types.ts +0 -57
  835. package/src/network/processor/gossipValidatorFn.ts +0 -142
  836. package/src/network/processor/index.ts +0 -496
  837. package/src/network/processor/types.ts +0 -27
  838. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -373
  839. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +0 -101
  840. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +0 -49
  841. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -114
  842. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -62
  843. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +0 -144
  844. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +0 -88
  845. package/src/network/reqresp/handlers/index.ts +0 -78
  846. package/src/network/reqresp/handlers/lightClientBootstrap.ts +0 -31
  847. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +0 -21
  848. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +0 -21
  849. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +0 -39
  850. package/src/network/reqresp/index.ts +0 -2
  851. package/src/network/reqresp/interface.ts +0 -45
  852. package/src/network/reqresp/protocols.ts +0 -146
  853. package/src/network/reqresp/rateLimit.ts +0 -112
  854. package/src/network/reqresp/score.ts +0 -70
  855. package/src/network/reqresp/types.ts +0 -174
  856. package/src/network/reqresp/utils/collect.ts +0 -84
  857. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +0 -57
  858. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +0 -99
  859. package/src/network/statusCache.ts +0 -17
  860. package/src/network/subnets/attnetsService.ts +0 -385
  861. package/src/network/subnets/index.ts +0 -2
  862. package/src/network/subnets/interface.ts +0 -66
  863. package/src/network/subnets/syncnetsService.ts +0 -147
  864. package/src/network/subnets/util.ts +0 -63
  865. package/src/network/util.ts +0 -29
  866. package/src/node/index.ts +0 -2
  867. package/src/node/nodejs.ts +0 -349
  868. package/src/node/notifier.ts +0 -206
  869. package/src/node/options.ts +0 -51
  870. package/src/node/utils/interop/deposits.ts +0 -53
  871. package/src/node/utils/interop/state.ts +0 -59
  872. package/src/node/utils/lightclient.ts +0 -7
  873. package/src/node/utils/state.ts +0 -37
  874. package/src/sync/backfill/backfill.ts +0 -893
  875. package/src/sync/backfill/errors.ts +0 -23
  876. package/src/sync/backfill/index.ts +0 -1
  877. package/src/sync/backfill/verify.ts +0 -58
  878. package/src/sync/constants.ts +0 -71
  879. package/src/sync/index.ts +0 -2
  880. package/src/sync/interface.ts +0 -55
  881. package/src/sync/options.ts +0 -45
  882. package/src/sync/range/batch.ts +0 -455
  883. package/src/sync/range/chain.ts +0 -715
  884. package/src/sync/range/range.ts +0 -354
  885. package/src/sync/range/utils/batches.ts +0 -119
  886. package/src/sync/range/utils/chainTarget.ts +0 -62
  887. package/src/sync/range/utils/hashBlocks.ts +0 -27
  888. package/src/sync/range/utils/index.ts +0 -5
  889. package/src/sync/range/utils/peerBalancer.ts +0 -184
  890. package/src/sync/range/utils/updateChains.ts +0 -66
  891. package/src/sync/sync.ts +0 -290
  892. package/src/sync/types.ts +0 -57
  893. package/src/sync/unknownBlock.ts +0 -859
  894. package/src/sync/utils/downloadByRange.ts +0 -808
  895. package/src/sync/utils/downloadByRoot.ts +0 -560
  896. package/src/sync/utils/pendingBlocksTree.ts +0 -97
  897. package/src/sync/utils/remoteSyncType.ts +0 -144
  898. package/src/util/address.ts +0 -3
  899. package/src/util/array.ts +0 -311
  900. package/src/util/asyncIterableToEvents.ts +0 -164
  901. package/src/util/binarySearch.ts +0 -48
  902. package/src/util/bitArray.ts +0 -84
  903. package/src/util/blobs.ts +0 -210
  904. package/src/util/bufferPool.ts +0 -95
  905. package/src/util/bytes.ts +0 -11
  906. package/src/util/chunkify.ts +0 -27
  907. package/src/util/clock.ts +0 -212
  908. package/src/util/dataColumns.ts +0 -415
  909. package/src/util/dependentRoot.ts +0 -47
  910. package/src/util/enum.ts +0 -17
  911. package/src/util/error.ts +0 -56
  912. package/src/util/eventLoop.ts +0 -22
  913. package/src/util/execution.ts +0 -223
  914. package/src/util/file.ts +0 -52
  915. package/src/util/forkChoice.ts +0 -5
  916. package/src/util/forkName.ts +0 -20
  917. package/src/util/graffiti.ts +0 -39
  918. package/src/util/hex.ts +0 -9
  919. package/src/util/index.ts +0 -2
  920. package/src/util/ip.ts +0 -6
  921. package/src/util/itTrigger.ts +0 -49
  922. package/src/util/kzg.ts +0 -3
  923. package/src/util/map.ts +0 -77
  924. package/src/util/metadata.ts +0 -22
  925. package/src/util/multifork.ts +0 -69
  926. package/src/util/numpy.ts +0 -8
  927. package/src/util/peerId.ts +0 -16
  928. package/src/util/profile.ts +0 -54
  929. package/src/util/promises.ts +0 -14
  930. package/src/util/queue/errors.ts +0 -14
  931. package/src/util/queue/fnQueue.ts +0 -16
  932. package/src/util/queue/index.ts +0 -4
  933. package/src/util/queue/itemQueue.ts +0 -128
  934. package/src/util/queue/options.ts +0 -37
  935. package/src/util/serializedCache.ts +0 -20
  936. package/src/util/set.ts +0 -62
  937. package/src/util/shuffle.ts +0 -21
  938. package/src/util/sortBy.ts +0 -19
  939. package/src/util/sszBytes.ts +0 -481
  940. package/src/util/strictEvents.ts +0 -8
  941. package/src/util/time.ts +0 -13
  942. package/src/util/timeSeries.ts +0 -118
  943. package/src/util/types.ts +0 -31
  944. package/src/util/workerEvents.ts +0 -142
  945. package/src/util/wrapError.ts +0 -27
@@ -1,1354 +0,0 @@
1
- import path from "node:path";
2
- import {PrivateKey} from "@libp2p/interface";
3
- import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
4
- import {CompositeTypeAny, TreeView, Type} from "@chainsafe/ssz";
5
- import {BeaconConfig} from "@lodestar/config";
6
- import {CheckpointWithHex, ExecutionStatus, IForkChoice, ProtoBlock, UpdateHeadOpt} from "@lodestar/fork-choice";
7
- import {LoggerNode} from "@lodestar/logger/node";
8
- import {EFFECTIVE_BALANCE_INCREMENT, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra} from "@lodestar/params";
9
- import {
10
- BeaconStateAllForks,
11
- BeaconStateElectra,
12
- CachedBeaconStateAllForks,
13
- EffectiveBalanceIncrements,
14
- EpochShuffling,
15
- Index2PubkeyCache,
16
- computeAnchorCheckpoint,
17
- computeEndSlotAtEpoch,
18
- computeEpochAtSlot,
19
- computeStartSlotAtEpoch,
20
- createCachedBeaconState,
21
- getEffectiveBalanceIncrementsZeroInactive,
22
- getEffectiveBalancesFromStateBytes,
23
- isCachedBeaconState,
24
- processSlots,
25
- } from "@lodestar/state-transition";
26
- import {
27
- BeaconBlock,
28
- BlindedBeaconBlock,
29
- BlindedBeaconBlockBody,
30
- Epoch,
31
- Root,
32
- RootHex,
33
- SignedBeaconBlock,
34
- Slot,
35
- Status,
36
- UintNum64,
37
- ValidatorIndex,
38
- Wei,
39
- isBlindedBeaconBlock,
40
- } from "@lodestar/types";
41
- import {Logger, fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRootHex} from "@lodestar/utils";
42
- import {ProcessShutdownCallback} from "@lodestar/validator";
43
- import {GENESIS_EPOCH, ZERO_HASH} from "../constants/index.js";
44
- import {IBeaconDb} from "../db/index.js";
45
- import {IEth1ForBlockProduction} from "../eth1/index.js";
46
- import {BuilderStatus} from "../execution/builder/http.js";
47
- import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
48
- import {Metrics} from "../metrics/index.js";
49
- import {computeNodeIdFromPrivateKey} from "../network/subnets/interface.js";
50
- import {BufferPool} from "../util/bufferPool.js";
51
- import {Clock, ClockEvent, IClock} from "../util/clock.js";
52
- import {CustodyConfig, getValidatorsCustodyRequirement} from "../util/dataColumns.js";
53
- import {ensureDir, writeIfNotExist} from "../util/file.js";
54
- import {isOptimisticBlock} from "../util/forkChoice.js";
55
- import {SerializedCache} from "../util/serializedCache.js";
56
- import {ArchiveStore} from "./archiveStore/archiveStore.js";
57
- import {CheckpointBalancesCache} from "./balancesCache.js";
58
- import {BeaconProposerCache} from "./beaconProposerCache.js";
59
- import {IBlockInput} from "./blocks/blockInput/index.js";
60
- import {BlockProcessor, ImportBlockOpts} from "./blocks/index.js";
61
- import {BlsMultiThreadWorkerPool, BlsSingleThreadVerifier, IBlsVerifier} from "./bls/index.js";
62
- import {ColumnReconstructionTracker} from "./ColumnReconstructionTracker.js";
63
- import {ChainEvent, ChainEventEmitter} from "./emitter.js";
64
- import {ForkchoiceCaller, initializeForkChoice} from "./forkChoice/index.js";
65
- import {GetBlobsTracker} from "./GetBlobsTracker.js";
66
- import {CommonBlockBody, FindHeadFnName, IBeaconChain, ProposerPreparationData, StateGetOpts} from "./interface.js";
67
- import {LightClientServer} from "./lightClient/index.js";
68
- import {
69
- AggregatedAttestationPool,
70
- AttestationPool,
71
- OpPool,
72
- SyncCommitteeMessagePool,
73
- SyncContributionAndProofPool,
74
- } from "./opPools/index.js";
75
- import {IChainOptions} from "./options.js";
76
- import {PrepareNextSlotScheduler} from "./prepareNextSlot.js";
77
- import {computeNewStateRoot} from "./produceBlock/computeNewStateRoot.js";
78
- import {AssembledBlockType, BlockType, ProduceResult} from "./produceBlock/index.js";
79
- import {BlockAttributes, produceBlockBody, produceCommonBlockBody} from "./produceBlock/produceBlockBody.js";
80
- import {QueuedStateRegenerator, RegenCaller} from "./regen/index.js";
81
- import {ReprocessController} from "./reprocess.js";
82
- import {AttestationsRewards, computeAttestationsRewards} from "./rewards/attestationsRewards.js";
83
- import {BlockRewards, computeBlockRewards} from "./rewards/blockRewards.js";
84
- import {SyncCommitteeRewards, computeSyncCommitteeRewards} from "./rewards/syncCommitteeRewards.js";
85
- import {
86
- SeenAggregators,
87
- SeenAttesters,
88
- SeenBlockProposers,
89
- SeenContributionAndProof,
90
- SeenSyncCommitteeMessages,
91
- } from "./seenCache/index.js";
92
- import {SeenAggregatedAttestations} from "./seenCache/seenAggregateAndProof.js";
93
- import {SeenAttestationDatas} from "./seenCache/seenAttestationData.js";
94
- import {SeenBlockAttesters} from "./seenCache/seenBlockAttesters.js";
95
- import {SeenBlockInput} from "./seenCache/seenGossipBlockInput.js";
96
- import {ShufflingCache} from "./shufflingCache.js";
97
- import {BlockStateCacheImpl} from "./stateCache/blockStateCacheImpl.js";
98
- import {DbCPStateDatastore} from "./stateCache/datastore/db.js";
99
- import {FileCPStateDatastore} from "./stateCache/datastore/file.js";
100
- import {FIFOBlockStateCache} from "./stateCache/fifoBlockStateCache.js";
101
- import {InMemoryCheckpointStateCache} from "./stateCache/inMemoryCheckpointsCache.js";
102
- import {PersistentCheckpointStateCache} from "./stateCache/persistentCheckpointsCache.js";
103
- import {ValidatorMonitor} from "./validatorMonitor.js";
104
-
105
- /**
106
- * The maximum number of cached produced results to keep in memory.
107
- *
108
- * Arbitrary constant. Blobs and payloads should be consumed immediately in the same slot
109
- * they are produced. A value of 1 would probably be sufficient. However it's sensible to
110
- * allow some margin if the node overloads.
111
- */
112
- const DEFAULT_MAX_CACHED_PRODUCED_RESULTS = 4;
113
-
114
- export class BeaconChain implements IBeaconChain {
115
- readonly genesisTime: UintNum64;
116
- readonly genesisValidatorsRoot: Root;
117
- readonly eth1: IEth1ForBlockProduction;
118
- readonly executionEngine: IExecutionEngine;
119
- readonly executionBuilder?: IExecutionBuilder;
120
- // Expose config for convenience in modularized functions
121
- readonly config: BeaconConfig;
122
- readonly custodyConfig: CustodyConfig;
123
- readonly logger: Logger;
124
- readonly metrics: Metrics | null;
125
- readonly validatorMonitor: ValidatorMonitor | null;
126
- readonly bufferPool: BufferPool | null;
127
-
128
- readonly anchorStateLatestBlockSlot: Slot;
129
-
130
- readonly bls: IBlsVerifier;
131
- readonly forkChoice: IForkChoice;
132
- readonly clock: IClock;
133
- readonly emitter: ChainEventEmitter;
134
- readonly regen: QueuedStateRegenerator;
135
- readonly lightClientServer?: LightClientServer;
136
- readonly reprocessController: ReprocessController;
137
- readonly archiveStore: ArchiveStore;
138
-
139
- // Ops pool
140
- readonly attestationPool: AttestationPool;
141
- readonly aggregatedAttestationPool: AggregatedAttestationPool;
142
- readonly syncCommitteeMessagePool: SyncCommitteeMessagePool;
143
- readonly syncContributionAndProofPool;
144
- readonly opPool = new OpPool();
145
-
146
- // Gossip seen cache
147
- readonly seenAttesters = new SeenAttesters();
148
- readonly seenAggregators = new SeenAggregators();
149
- readonly seenAggregatedAttestations: SeenAggregatedAttestations;
150
- readonly seenBlockProposers = new SeenBlockProposers();
151
- readonly seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
152
- readonly seenContributionAndProof: SeenContributionAndProof;
153
- readonly seenAttestationDatas: SeenAttestationDatas;
154
- readonly seenBlockInputCache: SeenBlockInput;
155
- // Seen cache for liveness checks
156
- readonly seenBlockAttesters = new SeenBlockAttesters();
157
-
158
- // Global state caches
159
- readonly pubkey2index: PubkeyIndexMap;
160
- readonly index2pubkey: Index2PubkeyCache;
161
-
162
- readonly beaconProposerCache: BeaconProposerCache;
163
- readonly checkpointBalancesCache: CheckpointBalancesCache;
164
- readonly shufflingCache: ShufflingCache;
165
-
166
- /**
167
- * Cache produced results (ExecutionPayload, DA Data) from the local execution so that we can send
168
- * and get signed/published blinded versions which beacon node can
169
- * assemble into full blocks before publishing to the network.
170
- */
171
- readonly blockProductionCache = new Map<RootHex, ProduceResult>();
172
-
173
- readonly blacklistedBlocks: Map<RootHex, Slot | null>;
174
-
175
- readonly serializedCache: SerializedCache;
176
-
177
- readonly getBlobsTracker: GetBlobsTracker;
178
- readonly columnReconstructionTracker: ColumnReconstructionTracker;
179
-
180
- readonly opts: IChainOptions;
181
-
182
- protected readonly blockProcessor: BlockProcessor;
183
- protected readonly db: IBeaconDb;
184
- private abortController = new AbortController();
185
- private processShutdownCallback: ProcessShutdownCallback;
186
- private _earliestAvailableSlot: Slot;
187
-
188
- get earliestAvailableSlot(): Slot {
189
- return this._earliestAvailableSlot;
190
- }
191
-
192
- set earliestAvailableSlot(slot: Slot) {
193
- if (this._earliestAvailableSlot !== slot) {
194
- this._earliestAvailableSlot = slot;
195
- this.emitter.emit(ChainEvent.updateStatus);
196
- }
197
- }
198
-
199
- constructor(
200
- opts: IChainOptions,
201
- {
202
- privateKey,
203
- config,
204
- db,
205
- dbName,
206
- dataDir,
207
- logger,
208
- processShutdownCallback,
209
- clock,
210
- metrics,
211
- validatorMonitor,
212
- anchorState,
213
- eth1,
214
- executionEngine,
215
- executionBuilder,
216
- }: {
217
- privateKey: PrivateKey;
218
- config: BeaconConfig;
219
- db: IBeaconDb;
220
- dbName: string;
221
- dataDir: string;
222
- logger: Logger;
223
- processShutdownCallback: ProcessShutdownCallback;
224
- /** Used for testing to supply fake clock */
225
- clock?: IClock;
226
- metrics: Metrics | null;
227
- validatorMonitor: ValidatorMonitor | null;
228
- anchorState: BeaconStateAllForks;
229
- eth1: IEth1ForBlockProduction;
230
- executionEngine: IExecutionEngine;
231
- executionBuilder?: IExecutionBuilder;
232
- }
233
- ) {
234
- this.opts = opts;
235
- this.config = config;
236
- this.db = db;
237
- this.logger = logger;
238
- this.processShutdownCallback = processShutdownCallback;
239
- this.metrics = metrics;
240
- this.validatorMonitor = validatorMonitor;
241
- this.genesisTime = anchorState.genesisTime;
242
- this.anchorStateLatestBlockSlot = anchorState.latestBlockHeader.slot;
243
- this.genesisValidatorsRoot = anchorState.genesisValidatorsRoot;
244
- this.eth1 = eth1;
245
- this.executionEngine = executionEngine;
246
- this.executionBuilder = executionBuilder;
247
- const signal = this.abortController.signal;
248
- const emitter = new ChainEventEmitter();
249
- // by default, verify signatures on both main threads and worker threads
250
- const bls = opts.blsVerifyAllMainThread
251
- ? new BlsSingleThreadVerifier({metrics})
252
- : new BlsMultiThreadWorkerPool(opts, {logger, metrics});
253
-
254
- if (!clock) clock = new Clock({config, genesisTime: this.genesisTime, signal});
255
-
256
- this.blacklistedBlocks = new Map((opts.blacklistedBlocks ?? []).map((hex) => [hex, null]));
257
- this.attestationPool = new AttestationPool(config, clock, this.opts?.preaggregateSlotDistance, metrics);
258
- this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config, metrics);
259
- this.syncCommitteeMessagePool = new SyncCommitteeMessagePool(config, clock, this.opts?.preaggregateSlotDistance);
260
- this.syncContributionAndProofPool = new SyncContributionAndProofPool(clock, metrics, logger);
261
-
262
- this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
263
- this.seenContributionAndProof = new SeenContributionAndProof(metrics);
264
- this.seenAttestationDatas = new SeenAttestationDatas(metrics, this.opts?.attDataCacheSlotDistance);
265
-
266
- const nodeId = computeNodeIdFromPrivateKey(privateKey);
267
- const initialCustodyGroupCount =
268
- opts.initialCustodyGroupCount ?? (opts.supernode ? config.NUMBER_OF_CUSTODY_GROUPS : config.CUSTODY_REQUIREMENT);
269
- this.metrics?.peerDas.targetCustodyGroupCount.set(initialCustodyGroupCount);
270
- this.custodyConfig = new CustodyConfig({
271
- nodeId,
272
- config,
273
- initialCustodyGroupCount,
274
- });
275
-
276
- this.beaconProposerCache = new BeaconProposerCache(opts);
277
- this.checkpointBalancesCache = new CheckpointBalancesCache();
278
- this.seenBlockInputCache = new SeenBlockInput({
279
- config,
280
- custodyConfig: this.custodyConfig,
281
- clock,
282
- chainEvents: emitter,
283
- signal,
284
- metrics,
285
- logger,
286
- });
287
-
288
- // Restore state caches
289
- // anchorState may already by a CachedBeaconState. If so, don't create the cache again, since deserializing all
290
- // pubkeys takes ~30 seconds for 350k keys (mainnet 2022Q2).
291
- // When the BeaconStateCache is created in eth1 genesis builder it may be incorrect. Until we can ensure that
292
- // it's safe to re-use _ANY_ BeaconStateCache, this option is disabled by default and only used in tests.
293
- const cachedState =
294
- isCachedBeaconState(anchorState) && opts.skipCreateStateCacheIfAvailable
295
- ? anchorState
296
- : createCachedBeaconState(anchorState, {
297
- config,
298
- pubkey2index: new PubkeyIndexMap(),
299
- index2pubkey: [],
300
- });
301
- this._earliestAvailableSlot = cachedState.slot;
302
-
303
- this.shufflingCache = cachedState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
304
- {
305
- shuffling: cachedState.epochCtx.previousShuffling,
306
- decisionRoot: cachedState.epochCtx.previousDecisionRoot,
307
- },
308
- {
309
- shuffling: cachedState.epochCtx.currentShuffling,
310
- decisionRoot: cachedState.epochCtx.currentDecisionRoot,
311
- },
312
- {
313
- shuffling: cachedState.epochCtx.nextShuffling,
314
- decisionRoot: cachedState.epochCtx.nextDecisionRoot,
315
- },
316
- ]);
317
-
318
- // Persist single global instance of state caches
319
- this.pubkey2index = cachedState.epochCtx.pubkey2index;
320
- this.index2pubkey = cachedState.epochCtx.index2pubkey;
321
-
322
- const fileDataStore = opts.nHistoricalStatesFileDataStore ?? true;
323
- const blockStateCache = this.opts.nHistoricalStates
324
- ? new FIFOBlockStateCache(this.opts, {metrics})
325
- : new BlockStateCacheImpl({metrics});
326
- this.bufferPool = this.opts.nHistoricalStates
327
- ? new BufferPool(anchorState.type.tree_serializedSize(anchorState.node), metrics)
328
- : null;
329
- const checkpointStateCache = this.opts.nHistoricalStates
330
- ? new PersistentCheckpointStateCache(
331
- {
332
- metrics,
333
- logger,
334
- clock,
335
- blockStateCache,
336
- bufferPool: this.bufferPool,
337
- datastore: fileDataStore
338
- ? // debug option if we want to investigate any issues with the DB
339
- new FileCPStateDatastore(dataDir)
340
- : // production option
341
- new DbCPStateDatastore(this.db),
342
- },
343
- this.opts
344
- )
345
- : new InMemoryCheckpointStateCache({metrics});
346
- const {checkpoint} = computeAnchorCheckpoint(config, anchorState);
347
- blockStateCache.add(cachedState);
348
- blockStateCache.setHeadState(cachedState);
349
- checkpointStateCache.add(checkpoint, cachedState);
350
-
351
- const forkChoice = initializeForkChoice(
352
- config,
353
- emitter,
354
- clock.currentSlot,
355
- cachedState,
356
- opts,
357
- this.justifiedBalancesGetter.bind(this),
358
- metrics,
359
- logger
360
- );
361
- const regen = new QueuedStateRegenerator({
362
- config,
363
- forkChoice,
364
- blockStateCache,
365
- checkpointStateCache,
366
- db,
367
- metrics,
368
- validatorMonitor,
369
- logger,
370
- emitter,
371
- signal,
372
- });
373
-
374
- if (!opts.disableLightClientServer) {
375
- this.lightClientServer = new LightClientServer(opts, {config, db, metrics, emitter, logger});
376
- }
377
-
378
- this.reprocessController = new ReprocessController(this.metrics);
379
-
380
- this.blockProcessor = new BlockProcessor(this, metrics, opts, signal);
381
-
382
- this.forkChoice = forkChoice;
383
- this.clock = clock;
384
- this.regen = regen;
385
- this.bls = bls;
386
- this.emitter = emitter;
387
-
388
- this.serializedCache = new SerializedCache();
389
-
390
- this.getBlobsTracker = new GetBlobsTracker({
391
- logger,
392
- executionEngine: this.executionEngine,
393
- emitter,
394
- metrics,
395
- config,
396
- });
397
- this.columnReconstructionTracker = new ColumnReconstructionTracker({
398
- logger,
399
- emitter,
400
- metrics,
401
- config,
402
- });
403
-
404
- this.archiveStore = new ArchiveStore(
405
- {db, chain: this, logger: logger as LoggerNode, metrics},
406
- {...opts, dbName, anchorState: {finalizedCheckpoint: anchorState.finalizedCheckpoint}},
407
- signal
408
- );
409
-
410
- // Stop polling eth1 data if anchor state is in Electra AND deposit_requests_start_index is reached
411
- const anchorStateFork = this.config.getForkName(anchorState.slot);
412
- if (isForkPostElectra(anchorStateFork)) {
413
- const {eth1DepositIndex, depositRequestsStartIndex} = anchorState as BeaconStateElectra;
414
- if (eth1DepositIndex === Number(depositRequestsStartIndex)) {
415
- this.eth1.stopPollingEth1Data();
416
- }
417
- }
418
-
419
- // always run PrepareNextSlotScheduler except for fork_choice spec tests
420
- if (!opts?.disablePrepareNextSlot) {
421
- new PrepareNextSlotScheduler(this, this.config, metrics, this.logger, signal);
422
- }
423
-
424
- if (metrics) {
425
- metrics.clockSlot.addCollect(() => this.onScrapeMetrics(metrics));
426
- }
427
-
428
- // Event handlers. emitter is created internally and dropped on close(). Not need to .removeListener()
429
- clock.addListener(ClockEvent.slot, this.onClockSlot.bind(this));
430
- clock.addListener(ClockEvent.epoch, this.onClockEpoch.bind(this));
431
- emitter.addListener(ChainEvent.forkChoiceFinalized, this.onForkChoiceFinalized.bind(this));
432
- emitter.addListener(ChainEvent.forkChoiceJustified, this.onForkChoiceJustified.bind(this));
433
- }
434
-
435
- async init(): Promise<void> {
436
- await this.archiveStore.init();
437
- await this.loadFromDisk();
438
- }
439
-
440
- async close(): Promise<void> {
441
- await this.archiveStore.close();
442
- await this.bls.close();
443
- this.abortController.abort();
444
- }
445
-
446
- seenBlock(blockRoot: RootHex): boolean {
447
- return this.seenBlockInputCache.has(blockRoot) || this.forkChoice.hasBlockHex(blockRoot);
448
- }
449
-
450
- regenCanAcceptWork(): boolean {
451
- return this.regen.canAcceptWork();
452
- }
453
-
454
- blsThreadPoolCanAcceptWork(): boolean {
455
- return this.bls.canAcceptWork();
456
- }
457
-
458
- validatorSeenAtEpoch(index: ValidatorIndex, epoch: Epoch): boolean {
459
- // Caller must check that epoch is not older that current epoch - 1
460
- // else the caches for that epoch may already be pruned.
461
-
462
- return (
463
- // Dedicated cache for liveness checks, registers attesters seen through blocks.
464
- // Note: this check should be cheaper + overlap with counting participants of aggregates from gossip.
465
- this.seenBlockAttesters.isKnown(epoch, index) ||
466
- //
467
- // Re-use gossip caches. Populated on validation of gossip + API messages
468
- // seenAttesters = single signer of unaggregated attestations
469
- this.seenAttesters.isKnown(epoch, index) ||
470
- // seenAggregators = single aggregator index, not participants of the aggregate
471
- this.seenAggregators.isKnown(epoch, index) ||
472
- // seenBlockProposers = single block proposer
473
- this.seenBlockProposers.seenAtEpoch(epoch, index)
474
- );
475
- }
476
-
477
- /** Populate in-memory caches with persisted data. Call at least once on startup */
478
- async loadFromDisk(): Promise<void> {
479
- await this.regen.init();
480
- await this.opPool.fromPersisted(this.db);
481
- }
482
-
483
- /** Persist in-memory data to the DB. Call at least once before stopping the process */
484
- async persistToDisk(): Promise<void> {
485
- await this.archiveStore.persistToDisk();
486
- await this.opPool.toPersisted(this.db);
487
- }
488
-
489
- getHeadState(): CachedBeaconStateAllForks {
490
- // head state should always exist
491
- const head = this.forkChoice.getHead();
492
- const headState = this.regen.getClosestHeadState(head);
493
- if (!headState) {
494
- throw Error(`headState does not exist for head root=${head.blockRoot} slot=${head.slot}`);
495
- }
496
- return headState;
497
- }
498
-
499
- async getHeadStateAtCurrentEpoch(regenCaller: RegenCaller): Promise<CachedBeaconStateAllForks> {
500
- return this.getHeadStateAtEpoch(this.clock.currentEpoch, regenCaller);
501
- }
502
-
503
- async getHeadStateAtEpoch(epoch: Epoch, regenCaller: RegenCaller): Promise<CachedBeaconStateAllForks> {
504
- // using getHeadState() means we'll use checkpointStateCache if it's available
505
- const headState = this.getHeadState();
506
- // head state is in the same epoch, or we pulled up head state already from past epoch
507
- if (epoch <= computeEpochAtSlot(headState.slot)) {
508
- // should go to this most of the time
509
- return headState;
510
- }
511
- // only use regen queue if necessary, it'll cache in checkpointStateCache if regen gets through epoch transition
512
- const head = this.forkChoice.getHead();
513
- const startSlot = computeStartSlotAtEpoch(epoch);
514
- return this.regen.getBlockSlotState(head.blockRoot, startSlot, {dontTransferCache: true}, regenCaller);
515
- }
516
-
517
- async getStateBySlot(
518
- slot: Slot,
519
- opts?: StateGetOpts
520
- ): Promise<{state: BeaconStateAllForks; executionOptimistic: boolean; finalized: boolean} | null> {
521
- const finalizedBlock = this.forkChoice.getFinalizedBlock();
522
-
523
- if (slot < finalizedBlock.slot) {
524
- // request for finalized state not supported in this API
525
- // fall back to caller to look in db or getHistoricalStateBySlot
526
- return null;
527
- }
528
-
529
- if (opts?.allowRegen) {
530
- // Find closest canonical block to slot, then trigger regen
531
- const block = this.forkChoice.getCanonicalBlockClosestLteSlot(slot) ?? finalizedBlock;
532
- const state = await this.regen.getBlockSlotState(
533
- block.blockRoot,
534
- slot,
535
- {dontTransferCache: true},
536
- RegenCaller.restApi
537
- );
538
- return {
539
- state,
540
- executionOptimistic: isOptimisticBlock(block),
541
- finalized: slot === finalizedBlock.slot && finalizedBlock.slot !== GENESIS_SLOT,
542
- };
543
- }
544
-
545
- // Just check if state is already in the cache. If it's not dialed to the correct slot,
546
- // do not bother in advancing the state. restApiCanTriggerRegen == false means do no work
547
- const block = this.forkChoice.getCanonicalBlockAtSlot(slot);
548
- if (!block) {
549
- return null;
550
- }
551
-
552
- const state = this.regen.getStateSync(block.stateRoot);
553
- return (
554
- state && {
555
- state,
556
- executionOptimistic: isOptimisticBlock(block),
557
- finalized: slot === finalizedBlock.slot && finalizedBlock.slot !== GENESIS_SLOT,
558
- }
559
- );
560
- }
561
-
562
- async getHistoricalStateBySlot(
563
- slot: number
564
- ): Promise<{state: Uint8Array; executionOptimistic: boolean; finalized: boolean} | null> {
565
- if (!this.opts.serveHistoricalState) {
566
- throw Error("Historical state regen is not enabled, set --serveHistoricalState to fetch this data");
567
- }
568
-
569
- return this.archiveStore.getHistoricalStateBySlot(slot);
570
- }
571
-
572
- async getStateByStateRoot(
573
- stateRoot: RootHex,
574
- opts?: StateGetOpts
575
- ): Promise<{state: BeaconStateAllForks; executionOptimistic: boolean; finalized: boolean} | null> {
576
- if (opts?.allowRegen) {
577
- const state = await this.regen.getState(stateRoot, RegenCaller.restApi);
578
- const block = this.forkChoice.getBlock(state.latestBlockHeader.hashTreeRoot());
579
- const finalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
580
- return {
581
- state,
582
- executionOptimistic: block != null && isOptimisticBlock(block),
583
- finalized: state.epochCtx.epoch <= finalizedEpoch && finalizedEpoch !== GENESIS_EPOCH,
584
- };
585
- }
586
-
587
- // TODO: This can only fulfill requests for a very narrow set of roots.
588
- // - very recent states that happen to be in the cache
589
- // - 1 every 100s of states that are persisted in the archive state
590
-
591
- // TODO: This is very inneficient for debug requests of serialized content, since it deserializes to serialize again
592
- const cachedStateCtx = this.regen.getStateSync(stateRoot);
593
- if (cachedStateCtx) {
594
- const block = this.forkChoice.getBlock(cachedStateCtx.latestBlockHeader.hashTreeRoot());
595
- const finalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
596
- return {
597
- state: cachedStateCtx,
598
- executionOptimistic: block != null && isOptimisticBlock(block),
599
- finalized: cachedStateCtx.epochCtx.epoch <= finalizedEpoch && finalizedEpoch !== GENESIS_EPOCH,
600
- };
601
- }
602
-
603
- const data = await this.db.stateArchive.getByRoot(fromHex(stateRoot));
604
- return data && {state: data, executionOptimistic: false, finalized: true};
605
- }
606
-
607
- getStateByCheckpoint(
608
- checkpoint: CheckpointWithHex
609
- ): {state: BeaconStateAllForks; executionOptimistic: boolean; finalized: boolean} | null {
610
- // finalized or justified checkpoint states maynot be available with PersistentCheckpointStateCache, use getCheckpointStateOrBytes() api to get Uint8Array
611
- const cachedStateCtx = this.regen.getCheckpointStateSync(checkpoint);
612
- if (cachedStateCtx) {
613
- const block = this.forkChoice.getBlock(cachedStateCtx.latestBlockHeader.hashTreeRoot());
614
- const finalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
615
- return {
616
- state: cachedStateCtx,
617
- executionOptimistic: block != null && isOptimisticBlock(block),
618
- finalized: cachedStateCtx.epochCtx.epoch <= finalizedEpoch && finalizedEpoch !== GENESIS_EPOCH,
619
- };
620
- }
621
-
622
- return null;
623
- }
624
-
625
- async getStateOrBytesByCheckpoint(
626
- checkpoint: CheckpointWithHex
627
- ): Promise<{state: CachedBeaconStateAllForks | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null> {
628
- const cachedStateCtx = await this.regen.getCheckpointStateOrBytes(checkpoint);
629
- if (cachedStateCtx) {
630
- const block = this.forkChoice.getBlock(checkpoint.root);
631
- const finalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
632
- return {
633
- state: cachedStateCtx,
634
- executionOptimistic: block != null && isOptimisticBlock(block),
635
- finalized: checkpoint.epoch <= finalizedEpoch && finalizedEpoch !== GENESIS_EPOCH,
636
- };
637
- }
638
-
639
- return null;
640
- }
641
-
642
- async getCanonicalBlockAtSlot(
643
- slot: Slot
644
- ): Promise<{block: SignedBeaconBlock; executionOptimistic: boolean; finalized: boolean} | null> {
645
- const finalizedBlock = this.forkChoice.getFinalizedBlock();
646
- if (slot > finalizedBlock.slot) {
647
- // Unfinalized slot, attempt to find in fork-choice
648
- const block = this.forkChoice.getCanonicalBlockAtSlot(slot);
649
- if (block) {
650
- const data = await this.db.block.get(fromHex(block.blockRoot));
651
- if (data) {
652
- return {block: data, executionOptimistic: isOptimisticBlock(block), finalized: false};
653
- }
654
- }
655
- // A non-finalized slot expected to be found in the hot db, could be archived during
656
- // this function runtime, so if not found in the hot db, fallback to the cold db
657
- // TODO: Add a lock to the archiver to have determinstic behaviour on where are blocks
658
- }
659
-
660
- const data = await this.db.blockArchive.get(slot);
661
- return data && {block: data, executionOptimistic: false, finalized: true};
662
- }
663
-
664
- async getBlockByRoot(
665
- root: string
666
- ): Promise<{block: SignedBeaconBlock; executionOptimistic: boolean; finalized: boolean} | null> {
667
- const block = this.forkChoice.getBlockHex(root);
668
- if (block) {
669
- const data = await this.db.block.get(fromHex(root));
670
- if (data) {
671
- return {block: data, executionOptimistic: isOptimisticBlock(block), finalized: false};
672
- }
673
- // If block is not found in hot db, try cold db since there could be an archive cycle happening
674
- // TODO: Add a lock to the archiver to have deterministic behavior on where are blocks
675
- }
676
-
677
- const data = await this.db.blockArchive.getByRoot(fromHex(root));
678
- return data && {block: data, executionOptimistic: false, finalized: true};
679
- }
680
-
681
- async produceCommonBlockBody(blockAttributes: BlockAttributes): Promise<CommonBlockBody> {
682
- const {slot, parentBlockRoot} = blockAttributes;
683
- const state = await this.regen.getBlockSlotState(
684
- toRootHex(parentBlockRoot),
685
- slot,
686
- {dontTransferCache: true},
687
- RegenCaller.produceBlock
688
- );
689
-
690
- // TODO: To avoid breaking changes for metric define this attribute
691
- const blockType = BlockType.Full;
692
-
693
- return produceCommonBlockBody.call(this, blockType, state, blockAttributes);
694
- }
695
-
696
- produceBlock(blockAttributes: BlockAttributes & {commonBlockBodyPromise: Promise<CommonBlockBody>}): Promise<{
697
- block: BeaconBlock;
698
- executionPayloadValue: Wei;
699
- consensusBlockValue: Wei;
700
- shouldOverrideBuilder?: boolean;
701
- }> {
702
- return this.produceBlockWrapper<BlockType.Full>(BlockType.Full, blockAttributes);
703
- }
704
-
705
- produceBlindedBlock(blockAttributes: BlockAttributes & {commonBlockBodyPromise: Promise<CommonBlockBody>}): Promise<{
706
- block: BlindedBeaconBlock;
707
- executionPayloadValue: Wei;
708
- consensusBlockValue: Wei;
709
- }> {
710
- return this.produceBlockWrapper<BlockType.Blinded>(BlockType.Blinded, blockAttributes);
711
- }
712
-
713
- async produceBlockWrapper<T extends BlockType>(
714
- blockType: T,
715
- {
716
- randaoReveal,
717
- graffiti,
718
- slot,
719
- feeRecipient,
720
- commonBlockBodyPromise,
721
- parentBlockRoot,
722
- parentSlot,
723
- }: BlockAttributes & {commonBlockBodyPromise: Promise<CommonBlockBody>}
724
- ): Promise<{
725
- block: AssembledBlockType<T>;
726
- executionPayloadValue: Wei;
727
- consensusBlockValue: Wei;
728
- shouldOverrideBuilder?: boolean;
729
- }> {
730
- const state = await this.regen.getBlockSlotState(
731
- toRootHex(parentBlockRoot),
732
- slot,
733
- {dontTransferCache: true},
734
- RegenCaller.produceBlock
735
- );
736
- const proposerIndex = state.epochCtx.getBeaconProposer(slot);
737
- const proposerPubKey = state.epochCtx.index2pubkey[proposerIndex].toBytes();
738
-
739
- const {body, produceResult, executionPayloadValue, shouldOverrideBuilder} = await produceBlockBody.call(
740
- this,
741
- blockType,
742
- state,
743
- {
744
- randaoReveal,
745
- graffiti,
746
- slot,
747
- feeRecipient,
748
- parentSlot,
749
- parentBlockRoot,
750
- proposerIndex,
751
- proposerPubKey,
752
- commonBlockBodyPromise,
753
- }
754
- );
755
-
756
- // The hashtree root computed here for debug log will get cached and hence won't introduce additional delays
757
- const bodyRoot =
758
- produceResult.type === BlockType.Full
759
- ? this.config.getForkTypes(slot).BeaconBlockBody.hashTreeRoot(body)
760
- : this.config
761
- .getPostBellatrixForkTypes(slot)
762
- .BlindedBeaconBlockBody.hashTreeRoot(body as BlindedBeaconBlockBody);
763
- this.logger.debug("Computing block post state from the produced body", {
764
- slot,
765
- bodyRoot: toRootHex(bodyRoot),
766
- blockType,
767
- });
768
-
769
- const block = {
770
- slot,
771
- proposerIndex,
772
- parentRoot: parentBlockRoot,
773
- stateRoot: ZERO_HASH,
774
- body,
775
- } as AssembledBlockType<T>;
776
-
777
- const {newStateRoot, proposerReward} = computeNewStateRoot(this.metrics, state, block);
778
- block.stateRoot = newStateRoot;
779
- const blockRoot =
780
- produceResult.type === BlockType.Full
781
- ? this.config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block)
782
- : this.config.getPostBellatrixForkTypes(slot).BlindedBeaconBlock.hashTreeRoot(block as BlindedBeaconBlock);
783
- const blockRootHex = toRootHex(blockRoot);
784
-
785
- // Track the produced block for consensus broadcast validations, later validation, etc.
786
- this.blockProductionCache.set(blockRootHex, produceResult);
787
- this.metrics?.blockProductionCacheSize.set(this.blockProductionCache.size);
788
-
789
- return {block, executionPayloadValue, consensusBlockValue: gweiToWei(proposerReward), shouldOverrideBuilder};
790
- }
791
-
792
- async processBlock(block: IBlockInput, opts?: ImportBlockOpts): Promise<void> {
793
- return this.blockProcessor.processBlocksJob([block], opts);
794
- }
795
-
796
- async processChainSegment(blocks: IBlockInput[], opts?: ImportBlockOpts): Promise<void> {
797
- return this.blockProcessor.processBlocksJob(blocks, opts);
798
- }
799
-
800
- getStatus(): Status {
801
- const head = this.forkChoice.getHead();
802
- const finalizedCheckpoint = this.forkChoice.getFinalizedCheckpoint();
803
- const boundary = this.config.getForkBoundaryAtEpoch(this.clock.currentEpoch);
804
- return {
805
- // fork_digest: The node's ForkDigest (compute_fork_digest(current_fork_version, genesis_validators_root)) where
806
- // - current_fork_version is the fork version at the node's current epoch defined by the wall-clock time (not necessarily the epoch to which the node is sync)
807
- // - genesis_validators_root is the static Root found in state.genesis_validators_root
808
- // - epoch of fork boundary is used to get blob parameters of current Blob Parameter Only (BPO) fork
809
- forkDigest: this.config.forkBoundary2ForkDigest(boundary),
810
- // finalized_root: state.finalized_checkpoint.root for the state corresponding to the head block (Note this defaults to Root(b'\x00' * 32) for the genesis finalized checkpoint).
811
- finalizedRoot: finalizedCheckpoint.epoch === GENESIS_EPOCH ? ZERO_HASH : finalizedCheckpoint.root,
812
- finalizedEpoch: finalizedCheckpoint.epoch,
813
- // TODO: PERFORMANCE: Memoize to prevent re-computing every time
814
- headRoot: fromHex(head.blockRoot),
815
- headSlot: head.slot,
816
- earliestAvailableSlot: this._earliestAvailableSlot,
817
- };
818
- }
819
-
820
- recomputeForkChoiceHead(caller: ForkchoiceCaller): ProtoBlock {
821
- this.metrics?.forkChoice.requests.inc();
822
- const timer = this.metrics?.forkChoice.findHead.startTimer({caller});
823
-
824
- try {
825
- return this.forkChoice.updateAndGetHead({mode: UpdateHeadOpt.GetCanonicalHead}).head;
826
- } catch (e) {
827
- this.metrics?.forkChoice.errors.inc({entrypoint: UpdateHeadOpt.GetCanonicalHead});
828
- throw e;
829
- } finally {
830
- timer?.();
831
- }
832
- }
833
-
834
- predictProposerHead(slot: Slot): ProtoBlock {
835
- this.metrics?.forkChoice.requests.inc();
836
- const timer = this.metrics?.forkChoice.findHead.startTimer({caller: FindHeadFnName.predictProposerHead});
837
- const secFromSlot = this.clock.secFromSlot(slot);
838
-
839
- try {
840
- return this.forkChoice.updateAndGetHead({mode: UpdateHeadOpt.GetPredictedProposerHead, secFromSlot, slot}).head;
841
- } catch (e) {
842
- this.metrics?.forkChoice.errors.inc({entrypoint: UpdateHeadOpt.GetPredictedProposerHead});
843
- throw e;
844
- } finally {
845
- timer?.();
846
- }
847
- }
848
-
849
- getProposerHead(slot: Slot): ProtoBlock {
850
- this.metrics?.forkChoice.requests.inc();
851
- const timer = this.metrics?.forkChoice.findHead.startTimer({caller: FindHeadFnName.getProposerHead});
852
- const secFromSlot = this.clock.secFromSlot(slot);
853
-
854
- try {
855
- const {head, isHeadTimely, notReorgedReason} = this.forkChoice.updateAndGetHead({
856
- mode: UpdateHeadOpt.GetProposerHead,
857
- secFromSlot,
858
- slot,
859
- });
860
-
861
- if (isHeadTimely && notReorgedReason !== undefined) {
862
- this.metrics?.forkChoice.notReorgedReason.inc({reason: notReorgedReason});
863
- }
864
- return head;
865
- } catch (e) {
866
- this.metrics?.forkChoice.errors.inc({entrypoint: UpdateHeadOpt.GetProposerHead});
867
- throw e;
868
- } finally {
869
- timer?.();
870
- }
871
- }
872
-
873
- /**
874
- * Returns Promise that resolves either on block found or once 1 slot passes.
875
- * Used to handle unknown block root for both unaggregated and aggregated attestations.
876
- * @returns true if blockFound
877
- */
878
- waitForBlock(slot: Slot, root: RootHex): Promise<boolean> {
879
- return this.reprocessController.waitForBlockOfAttestation(slot, root);
880
- }
881
-
882
- persistBlock(data: BeaconBlock | BlindedBeaconBlock, suffix?: string): void {
883
- const slot = data.slot;
884
- if (isBlindedBeaconBlock(data)) {
885
- const sszType = this.config.getPostBellatrixForkTypes(slot).BlindedBeaconBlock;
886
- void this.persistSszObject("BlindedBeaconBlock", sszType.serialize(data), sszType.hashTreeRoot(data), suffix);
887
- } else {
888
- const sszType = this.config.getForkTypes(slot).BeaconBlock;
889
- void this.persistSszObject("BeaconBlock", sszType.serialize(data), sszType.hashTreeRoot(data), suffix);
890
- }
891
- }
892
-
893
- /**
894
- * Invalid state root error is critical and it causes the node to stale most of the time so we want to always
895
- * persist preState, postState and block for further investigation.
896
- */
897
- async persistInvalidStateRoot(
898
- preState: CachedBeaconStateAllForks,
899
- postState: CachedBeaconStateAllForks,
900
- block: SignedBeaconBlock
901
- ): Promise<void> {
902
- const blockSlot = block.message.slot;
903
- const blockType = this.config.getForkTypes(blockSlot).SignedBeaconBlock;
904
- const postStateRoot = postState.hashTreeRoot();
905
- const logStr = `slot_${blockSlot}_invalid_state_root_${toRootHex(postStateRoot)}`;
906
- await Promise.all([
907
- this.persistSszObject(
908
- `SignedBeaconBlock_slot_${blockSlot}`,
909
- blockType.serialize(block),
910
- blockType.hashTreeRoot(block),
911
- `${logStr}_block`
912
- ),
913
- this.persistSszObject(
914
- `preState_slot_${preState.slot}_${preState.type.typeName}`,
915
- preState.serialize(),
916
- preState.hashTreeRoot(),
917
- `${logStr}_pre_state`
918
- ),
919
- this.persistSszObject(
920
- `postState_slot_${postState.slot}_${postState.type.typeName}`,
921
- postState.serialize(),
922
- postState.hashTreeRoot(),
923
- `${logStr}_post_state`
924
- ),
925
- ]);
926
- }
927
-
928
- persistInvalidSszValue<T>(type: Type<T>, sszObject: T, suffix?: string): void {
929
- if (this.opts.persistInvalidSszObjects) {
930
- void this.persistSszObject(type.typeName, type.serialize(sszObject), type.hashTreeRoot(sszObject), suffix);
931
- }
932
- }
933
-
934
- persistInvalidSszBytes(typeName: string, sszBytes: Uint8Array, suffix?: string): void {
935
- if (this.opts.persistInvalidSszObjects) {
936
- void this.persistSszObject(typeName, sszBytes, sszBytes, suffix);
937
- }
938
- }
939
-
940
- persistInvalidSszView(view: TreeView<CompositeTypeAny>, suffix?: string): void {
941
- if (this.opts.persistInvalidSszObjects) {
942
- void this.persistSszObject(view.type.typeName, view.serialize(), view.hashTreeRoot(), suffix);
943
- }
944
- }
945
-
946
- /**
947
- * Regenerate state for attestation verification, this does not happen with default chain option of maxSkipSlots = 32 .
948
- * However, need to handle just in case. Lodestar doesn't support multiple regen state requests for attestation verification
949
- * at the same time, bounded inside "ShufflingCache.insertPromise()" function.
950
- * Leave this function in chain instead of attestatation verification code to make sure we're aware of its performance impact.
951
- */
952
- async regenStateForAttestationVerification(
953
- attEpoch: Epoch,
954
- shufflingDependentRoot: RootHex,
955
- attHeadBlock: ProtoBlock,
956
- regenCaller: RegenCaller
957
- ): Promise<EpochShuffling> {
958
- // this is to prevent multiple calls to get shuffling for the same epoch and dependent root
959
- // any subsequent calls of the same epoch and dependent root will wait for this promise to resolve
960
- this.shufflingCache.insertPromise(attEpoch, shufflingDependentRoot);
961
- const blockEpoch = computeEpochAtSlot(attHeadBlock.slot);
962
-
963
- let state: CachedBeaconStateAllForks;
964
- if (blockEpoch < attEpoch - 1) {
965
- // thanks to one epoch look ahead, we don't need to dial up to attEpoch
966
- const targetSlot = computeStartSlotAtEpoch(attEpoch - 1);
967
- this.metrics?.gossipAttestation.useHeadBlockStateDialedToTargetEpoch.inc({caller: regenCaller});
968
- state = await this.regen.getBlockSlotState(
969
- attHeadBlock.blockRoot,
970
- targetSlot,
971
- {dontTransferCache: true},
972
- regenCaller
973
- );
974
- } else if (blockEpoch > attEpoch) {
975
- // should not happen, handled inside attestation verification code
976
- throw Error(`Block epoch ${blockEpoch} is after attestation epoch ${attEpoch}`);
977
- } else {
978
- // should use either current or next shuffling of head state
979
- // it's not likely to hit this since these shufflings are cached already
980
- // so handle just in case
981
- this.metrics?.gossipAttestation.useHeadBlockState.inc({caller: regenCaller});
982
- state = await this.regen.getState(attHeadBlock.stateRoot, regenCaller);
983
- }
984
-
985
- // should always be the current epoch of the active context so no need to await a result from the ShufflingCache
986
- return state.epochCtx.getShufflingAtEpoch(attEpoch);
987
- }
988
-
989
- /**
990
- * `ForkChoice.onBlock` must never throw for a block that is valid with respect to the network
991
- * `justifiedBalancesGetter()` must never throw and it should always return a state.
992
- * @param blockState state that declares justified checkpoint `checkpoint`
993
- */
994
- private justifiedBalancesGetter(
995
- checkpoint: CheckpointWithHex,
996
- blockState: CachedBeaconStateAllForks
997
- ): EffectiveBalanceIncrements {
998
- this.metrics?.balancesCache.requests.inc();
999
-
1000
- const effectiveBalances = this.checkpointBalancesCache.get(checkpoint);
1001
- if (effectiveBalances) {
1002
- return effectiveBalances;
1003
- }
1004
- // not expected, need metrics
1005
- this.metrics?.balancesCache.misses.inc();
1006
- this.logger.debug("checkpointBalances cache miss", {
1007
- epoch: checkpoint.epoch,
1008
- root: checkpoint.rootHex,
1009
- });
1010
-
1011
- const {state, stateId, shouldWarn} = this.closestJustifiedBalancesStateToCheckpoint(checkpoint, blockState);
1012
- this.metrics?.balancesCache.closestStateResult.inc({stateId});
1013
- if (shouldWarn) {
1014
- this.logger.warn("currentJustifiedCheckpoint state not avail, using closest state", {
1015
- checkpointEpoch: checkpoint.epoch,
1016
- checkpointRoot: checkpoint.rootHex,
1017
- stateId,
1018
- stateSlot: state.slot,
1019
- stateRoot: toRootHex(state.hashTreeRoot()),
1020
- });
1021
- }
1022
-
1023
- return getEffectiveBalanceIncrementsZeroInactive(state);
1024
- }
1025
-
1026
- /**
1027
- * - Assumptions + invariant this function is based on:
1028
- * - Our cache can only persist X states at once to prevent OOM
1029
- * - Some old states (including to-be justified checkpoint) may / must be dropped from the cache
1030
- * - Thus, there is no guarantee that the state for a justified checkpoint will be available in the cache
1031
- * @param blockState state that declares justified checkpoint `checkpoint`
1032
- */
1033
- private closestJustifiedBalancesStateToCheckpoint(
1034
- checkpoint: CheckpointWithHex,
1035
- blockState: CachedBeaconStateAllForks
1036
- ): {state: CachedBeaconStateAllForks; stateId: string; shouldWarn: boolean} {
1037
- const state = this.regen.getCheckpointStateSync(checkpoint);
1038
- if (state) {
1039
- return {state, stateId: "checkpoint_state", shouldWarn: false};
1040
- }
1041
-
1042
- // Check if blockState is in the same epoch, not need to iterate the fork-choice then
1043
- if (computeEpochAtSlot(blockState.slot) === checkpoint.epoch) {
1044
- return {state: blockState, stateId: "block_state_same_epoch", shouldWarn: true};
1045
- }
1046
-
1047
- // Find a state in the same branch of checkpoint at same epoch. Balances should exactly the same
1048
- for (const descendantBlock of this.forkChoice.forwardIterateDescendants(checkpoint.rootHex)) {
1049
- if (computeEpochAtSlot(descendantBlock.slot) === checkpoint.epoch) {
1050
- const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
1051
- if (descendantBlockState) {
1052
- return {state: descendantBlockState, stateId: "descendant_state_same_epoch", shouldWarn: true};
1053
- }
1054
- }
1055
- }
1056
-
1057
- // Check if blockState is in the next epoch, not need to iterate the fork-choice then
1058
- if (computeEpochAtSlot(blockState.slot) === checkpoint.epoch + 1) {
1059
- return {state: blockState, stateId: "block_state_next_epoch", shouldWarn: true};
1060
- }
1061
-
1062
- // Find a state in the same branch of checkpoint at a latter epoch. Balances are not the same, but should be close
1063
- // Note: must call .forwardIterateDescendants() again since nodes are not sorted
1064
- for (const descendantBlock of this.forkChoice.forwardIterateDescendants(checkpoint.rootHex)) {
1065
- if (computeEpochAtSlot(descendantBlock.slot) > checkpoint.epoch) {
1066
- const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
1067
- if (descendantBlockState) {
1068
- return {state: blockState, stateId: "descendant_state_latter_epoch", shouldWarn: true};
1069
- }
1070
- }
1071
- }
1072
-
1073
- // If there's no state available in the same branch of checkpoint use blockState regardless of its epoch
1074
- return {state: blockState, stateId: "block_state_any_epoch", shouldWarn: true};
1075
- }
1076
-
1077
- private async persistSszObject(prefix: string, bytes: Uint8Array, root: Uint8Array, logStr?: string): Promise<void> {
1078
- const now = new Date();
1079
- // yyyy-MM-dd
1080
- const dateStr = now.toISOString().split("T")[0];
1081
-
1082
- // by default store to lodestar_archive of current dir
1083
- const dirpath = path.join(this.opts.persistInvalidSszObjectsDir ?? "invalid_ssz_objects", dateStr);
1084
- const filepath = path.join(dirpath, `${prefix}_${toRootHex(root)}.ssz`);
1085
-
1086
- await ensureDir(dirpath);
1087
-
1088
- // as of Feb 17 2022 there are a lot of duplicate files stored with different date suffixes
1089
- // remove date suffixes in file name, and check duplicate to avoid redundant persistence
1090
- await writeIfNotExist(filepath, bytes);
1091
-
1092
- this.logger.debug("Persisted invalid ssz object", {id: logStr, filepath});
1093
- }
1094
-
1095
- private onScrapeMetrics(metrics: Metrics): void {
1096
- // aggregatedAttestationPool tracks metrics on its own
1097
- metrics.opPool.attestationPool.size.set(this.attestationPool.getAttestationCount());
1098
- metrics.opPool.attesterSlashingPoolSize.set(this.opPool.attesterSlashingsSize);
1099
- metrics.opPool.proposerSlashingPoolSize.set(this.opPool.proposerSlashingsSize);
1100
- metrics.opPool.voluntaryExitPoolSize.set(this.opPool.voluntaryExitsSize);
1101
- metrics.opPool.syncCommitteeMessagePoolSize.set(this.syncCommitteeMessagePool.size);
1102
- // syncContributionAndProofPool tracks metrics on its own
1103
- metrics.opPool.blsToExecutionChangePoolSize.set(this.opPool.blsToExecutionChangeSize);
1104
- metrics.chain.blacklistedBlocks.set(this.blacklistedBlocks.size);
1105
-
1106
- const headState = this.getHeadState();
1107
- const fork = this.config.getForkName(headState.slot);
1108
-
1109
- if (isForkPostElectra(fork)) {
1110
- const headStateElectra = headState as BeaconStateElectra;
1111
- metrics.pendingDeposits.set(headStateElectra.pendingDeposits.length);
1112
- metrics.pendingPartialWithdrawals.set(headStateElectra.pendingPartialWithdrawals.length);
1113
- metrics.pendingConsolidations.set(headStateElectra.pendingConsolidations.length);
1114
- }
1115
- }
1116
-
1117
- private onClockSlot(slot: Slot): void {
1118
- this.logger.verbose("Clock slot", {slot});
1119
-
1120
- // CRITICAL UPDATE
1121
- if (this.forkChoice.irrecoverableError) {
1122
- this.processShutdownCallback(this.forkChoice.irrecoverableError);
1123
- }
1124
-
1125
- this.forkChoice.updateTime(slot);
1126
- this.metrics?.clockSlot.set(slot);
1127
-
1128
- this.attestationPool.prune(slot);
1129
- this.aggregatedAttestationPool.prune(slot);
1130
- this.syncCommitteeMessagePool.prune(slot);
1131
- this.seenSyncCommitteeMessages.prune(slot);
1132
- this.seenAttestationDatas.onSlot(slot);
1133
- this.reprocessController.onSlot(slot);
1134
-
1135
- // Prune old cached block production artifacts, those are only useful on their slot
1136
- pruneSetToMax(this.blockProductionCache, this.opts.maxCachedProducedRoots ?? DEFAULT_MAX_CACHED_PRODUCED_RESULTS);
1137
- this.metrics?.blockProductionCacheSize.set(this.blockProductionCache.size);
1138
-
1139
- const metrics = this.metrics;
1140
- if (metrics && (slot + 1) % SLOTS_PER_EPOCH === 0) {
1141
- // On the last slot of the epoch
1142
- sleep((1000 * this.config.SECONDS_PER_SLOT) / 2)
1143
- .then(() => this.validatorMonitor?.onceEveryEndOfEpoch(this.getHeadState()))
1144
- .catch((e) => {
1145
- if (!isErrorAborted(e)) this.logger.error("Error on validator monitor onceEveryEndOfEpoch", {slot}, e);
1146
- });
1147
- }
1148
- }
1149
-
1150
- private onClockEpoch(epoch: Epoch): void {
1151
- this.metrics?.clockEpoch.set(epoch);
1152
-
1153
- this.seenAttesters.prune(epoch);
1154
- this.seenAggregators.prune(epoch);
1155
- this.seenAggregatedAttestations.prune(epoch);
1156
- this.seenBlockAttesters.prune(epoch);
1157
- this.beaconProposerCache.prune(epoch);
1158
-
1159
- // Poll for merge block in the background to speed-up block production. Only if:
1160
- // - after BELLATRIX_FORK_EPOCH
1161
- // - Beacon node synced
1162
- // - head state not isMergeTransitionComplete
1163
- if (this.config.BELLATRIX_FORK_EPOCH - epoch < 1) {
1164
- const head = this.forkChoice.getHead();
1165
- if (epoch - computeEpochAtSlot(head.slot) < 5 && head.executionStatus === ExecutionStatus.PreMerge) {
1166
- this.eth1.startPollingMergeBlock();
1167
- }
1168
- }
1169
- }
1170
-
1171
- protected onNewHead(head: ProtoBlock): void {
1172
- this.syncContributionAndProofPool.prune(head.slot);
1173
- this.seenContributionAndProof.prune(head.slot);
1174
- }
1175
-
1176
- private onForkChoiceJustified(this: BeaconChain, cp: CheckpointWithHex): void {
1177
- this.logger.verbose("Fork choice justified", {epoch: cp.epoch, root: cp.rootHex});
1178
- }
1179
-
1180
- private async onForkChoiceFinalized(this: BeaconChain, cp: CheckpointWithHex): Promise<void> {
1181
- this.logger.verbose("Fork choice finalized", {epoch: cp.epoch, root: cp.rootHex});
1182
- this.seenBlockProposers.prune(computeStartSlotAtEpoch(cp.epoch));
1183
-
1184
- // Update validator custody to account for effective balance changes
1185
- await this.updateValidatorsCustodyRequirement(cp);
1186
-
1187
- // TODO: Improve using regen here
1188
- const {blockRoot, stateRoot, slot} = this.forkChoice.getHead();
1189
- const headState = this.regen.getStateSync(stateRoot);
1190
- const headBlock = await this.db.block.get(fromHex(blockRoot));
1191
- if (headBlock == null) {
1192
- throw Error(`Head block ${slot} ${headBlock} is not available in database`);
1193
- }
1194
-
1195
- if (headState) {
1196
- this.opPool.pruneAll(headBlock, headState);
1197
- }
1198
-
1199
- if (headState === null) {
1200
- this.logger.verbose("Head state is null");
1201
- }
1202
- }
1203
-
1204
- async updateBeaconProposerData(epoch: Epoch, proposers: ProposerPreparationData[]): Promise<void> {
1205
- const previousValidatorCount = this.beaconProposerCache.getValidatorIndices().length;
1206
-
1207
- for (const proposer of proposers) {
1208
- this.beaconProposerCache.add(epoch, proposer);
1209
- }
1210
-
1211
- const newValidatorCount = this.beaconProposerCache.getValidatorIndices().length;
1212
-
1213
- // Only update validator custody if we discovered new validators
1214
- if (newValidatorCount > previousValidatorCount) {
1215
- const finalizedCheckpoint = this.forkChoice.getFinalizedCheckpoint();
1216
- await this.updateValidatorsCustodyRequirement(finalizedCheckpoint);
1217
- }
1218
- }
1219
-
1220
- private async updateValidatorsCustodyRequirement(finalizedCheckpoint: CheckpointWithHex): Promise<void> {
1221
- if (this.opts.supernode) {
1222
- // Disable dynamic custody updates for supernodes since they must maintain custody
1223
- // of all custody groups regardless of validator effective balances
1224
- return;
1225
- }
1226
-
1227
- // Validators attached to the node
1228
- const validatorIndices = this.beaconProposerCache.getValidatorIndices();
1229
-
1230
- // Update custody requirement based on finalized state
1231
- let effectiveBalances: number[];
1232
- const effectiveBalanceIncrements = this.checkpointBalancesCache.get(finalizedCheckpoint);
1233
- if (effectiveBalanceIncrements) {
1234
- effectiveBalances = validatorIndices.map(
1235
- (index) => (effectiveBalanceIncrements[index] ?? 0) * EFFECTIVE_BALANCE_INCREMENT
1236
- );
1237
- } else {
1238
- // If there's no cached effective balances, get the state from disk and parse them out
1239
- this.logger.debug("No cached finalized effective balances to update target custody group count", {
1240
- finalizedEpoch: finalizedCheckpoint.epoch,
1241
- finalizedRoot: finalizedCheckpoint.rootHex,
1242
- });
1243
-
1244
- const stateOrBytes = (await this.getStateOrBytesByCheckpoint(finalizedCheckpoint))?.state;
1245
- if (!stateOrBytes) {
1246
- // If even the state is not available, we cannot update the custody group count
1247
- this.logger.debug("No finalized state or bytes available to update target custody group count", {
1248
- finalizedEpoch: finalizedCheckpoint.epoch,
1249
- finalizedRoot: finalizedCheckpoint.rootHex,
1250
- });
1251
- return;
1252
- }
1253
-
1254
- if (stateOrBytes instanceof Uint8Array) {
1255
- effectiveBalances = getEffectiveBalancesFromStateBytes(this.config, stateOrBytes, validatorIndices);
1256
- } else {
1257
- effectiveBalances = validatorIndices.map((index) => stateOrBytes.validators.get(index).effectiveBalance ?? 0);
1258
- }
1259
- }
1260
-
1261
- const targetCustodyGroupCount = getValidatorsCustodyRequirement(this.config, effectiveBalances);
1262
- // Only update if target is increased
1263
- if (targetCustodyGroupCount > this.custodyConfig.targetCustodyGroupCount) {
1264
- this.custodyConfig.updateTargetCustodyGroupCount(targetCustodyGroupCount);
1265
- this.metrics?.peerDas.targetCustodyGroupCount.set(targetCustodyGroupCount);
1266
- this.logger.verbose("Updated target custody group count", {
1267
- finalizedEpoch: finalizedCheckpoint.epoch,
1268
- validatorCount: validatorIndices.length,
1269
- targetCustodyGroupCount,
1270
- });
1271
- this.emitter.emit(ChainEvent.updateTargetCustodyGroupCount, targetCustodyGroupCount);
1272
- }
1273
- }
1274
-
1275
- updateBuilderStatus(clockSlot: Slot): void {
1276
- const executionBuilder = this.executionBuilder;
1277
- if (executionBuilder) {
1278
- const {faultInspectionWindow, allowedFaults} = executionBuilder;
1279
- const slotsPresent = this.forkChoice.getSlotsPresent(clockSlot - faultInspectionWindow);
1280
- const previousStatus = executionBuilder.status;
1281
- const shouldEnable = slotsPresent >= Math.min(faultInspectionWindow - allowedFaults, clockSlot);
1282
-
1283
- executionBuilder.updateStatus(shouldEnable ? BuilderStatus.enabled : BuilderStatus.circuitBreaker);
1284
- // The status changed we should log
1285
- const status = executionBuilder.status;
1286
- const builderLog = {
1287
- status,
1288
- slotsPresent,
1289
- faultInspectionWindow,
1290
- allowedFaults,
1291
- };
1292
- if (status !== previousStatus) {
1293
- this.logger.info("External builder status updated", builderLog);
1294
- } else {
1295
- this.logger.verbose("External builder status", builderLog);
1296
- }
1297
- }
1298
- }
1299
-
1300
- async getBlockRewards(block: BeaconBlock | BlindedBeaconBlock): Promise<BlockRewards> {
1301
- let preState = this.regen.getPreStateSync(block);
1302
-
1303
- if (preState === null) {
1304
- throw Error(`Pre-state is unavailable given block's parent root ${toRootHex(block.parentRoot)}`);
1305
- }
1306
-
1307
- preState = processSlots(preState, block.slot); // Dial preState's slot to block.slot
1308
-
1309
- const postState = this.regen.getStateSync(toRootHex(block.stateRoot)) ?? undefined;
1310
-
1311
- return computeBlockRewards(block, preState.clone(), postState?.clone());
1312
- }
1313
-
1314
- async getAttestationsRewards(
1315
- epoch: Epoch,
1316
- validatorIds?: (ValidatorIndex | string)[]
1317
- ): Promise<{rewards: AttestationsRewards; executionOptimistic: boolean; finalized: boolean}> {
1318
- // We use end slot of (epoch + 1) to ensure we have seen all attestations. On-time or late. Any late attestation beyond this slot is not considered
1319
- const slot = computeEndSlotAtEpoch(epoch + 1);
1320
- const stateResult = await this.getStateBySlot(slot, {allowRegen: false}); // No regen if state not in cache
1321
-
1322
- if (stateResult === null) {
1323
- throw Error(`State is unavailable for slot ${slot}`);
1324
- }
1325
-
1326
- const {executionOptimistic, finalized} = stateResult;
1327
- const stateRoot = toRootHex(stateResult.state.hashTreeRoot());
1328
-
1329
- const cachedState = this.regen.getStateSync(stateRoot);
1330
-
1331
- if (cachedState === null) {
1332
- throw Error(`State is not in cache for slot ${slot}`);
1333
- }
1334
-
1335
- const rewards = await computeAttestationsRewards(epoch, cachedState, this.config, validatorIds);
1336
-
1337
- return {rewards, executionOptimistic, finalized};
1338
- }
1339
-
1340
- async getSyncCommitteeRewards(
1341
- block: BeaconBlock | BlindedBeaconBlock,
1342
- validatorIds?: (ValidatorIndex | string)[]
1343
- ): Promise<SyncCommitteeRewards> {
1344
- let preState = this.regen.getPreStateSync(block);
1345
-
1346
- if (preState === null) {
1347
- throw Error(`Pre-state is unavailable given block's parent root ${toRootHex(block.parentRoot)}`);
1348
- }
1349
-
1350
- preState = processSlots(preState, block.slot); // Dial preState's slot to block.slot
1351
-
1352
- return computeSyncCommitteeRewards(block, preState.clone(), validatorIds);
1353
- }
1354
- }