@lodestar/beacon-node 1.35.0-dev.47c570ab76 → 1.35.0-dev.549f58dd39

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 (914) hide show
  1. package/lib/api/impl/api.d.ts.map +1 -0
  2. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -0
  3. package/lib/api/impl/beacon/blocks/utils.d.ts.map +1 -0
  4. package/lib/api/impl/beacon/index.d.ts.map +1 -0
  5. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -0
  6. package/lib/api/impl/beacon/rewards/index.d.ts.map +1 -0
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -0
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -0
  9. package/lib/api/impl/config/constants.d.ts.map +1 -0
  10. package/lib/api/impl/config/index.d.ts.map +1 -0
  11. package/lib/api/impl/debug/index.d.ts.map +1 -0
  12. package/lib/api/impl/errors.d.ts.map +1 -0
  13. package/lib/api/impl/events/index.d.ts.map +1 -0
  14. package/lib/api/impl/index.d.ts.map +1 -0
  15. package/lib/api/impl/lightclient/index.d.ts.map +1 -0
  16. package/lib/api/impl/lodestar/index.d.ts.map +1 -0
  17. package/lib/api/impl/node/index.d.ts.map +1 -0
  18. package/lib/api/impl/node/utils.d.ts.map +1 -0
  19. package/lib/api/impl/proof/index.d.ts.map +1 -0
  20. package/lib/api/impl/types.d.ts.map +1 -0
  21. package/lib/api/impl/utils.d.ts.map +1 -0
  22. package/lib/api/impl/validator/index.d.ts.map +1 -0
  23. package/lib/api/impl/validator/index.js +5 -3
  24. package/lib/api/impl/validator/index.js.map +1 -1
  25. package/lib/api/impl/validator/utils.d.ts.map +1 -0
  26. package/lib/api/index.d.ts.map +1 -0
  27. package/lib/api/options.d.ts.map +1 -0
  28. package/lib/api/rest/activeSockets.d.ts.map +1 -0
  29. package/lib/api/rest/base.d.ts.map +1 -0
  30. package/lib/api/rest/index.d.ts.map +1 -0
  31. package/lib/api/rest/swaggerUI.d.ts.map +1 -0
  32. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +1 -0
  33. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -0
  34. package/lib/chain/GetBlobsTracker.d.ts.map +1 -0
  35. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -0
  36. package/lib/chain/archiveStore/constants.d.ts.map +1 -0
  37. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -0
  38. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -0
  39. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -0
  40. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -0
  41. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +1 -0
  42. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  43. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  44. package/lib/chain/archiveStore/index.d.ts.map +1 -0
  45. package/lib/chain/archiveStore/interface.d.ts.map +1 -0
  46. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -0
  47. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -0
  48. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -0
  49. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +1 -0
  50. package/lib/chain/balancesCache.d.ts.map +1 -0
  51. package/lib/chain/beaconProposerCache.d.ts.map +1 -0
  52. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -0
  53. package/lib/chain/blocks/blockInput/blockInput.js +1 -1
  54. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  55. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -0
  56. package/lib/chain/blocks/blockInput/index.d.ts.map +1 -0
  57. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -0
  58. package/lib/chain/blocks/blockInput/utils.d.ts.map +1 -0
  59. package/lib/chain/blocks/importBlock.d.ts.map +1 -0
  60. package/lib/chain/blocks/importBlock.js +4 -3
  61. package/lib/chain/blocks/importBlock.js.map +1 -1
  62. package/lib/chain/blocks/index.d.ts.map +1 -0
  63. package/lib/chain/blocks/types.d.ts.map +1 -0
  64. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +1 -0
  65. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -0
  66. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -0
  67. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +1 -0
  68. package/lib/chain/blocks/utils/ownBanner.d.ts.map +1 -0
  69. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +1 -0
  70. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +1 -0
  71. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -0
  72. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -0
  73. package/lib/chain/blocks/verifyBlocksDataAvailability.js +8 -1
  74. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  75. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -0
  76. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -0
  77. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -0
  78. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -0
  79. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -0
  80. package/lib/chain/blocks/writeBlockInputToDb.js +1 -7
  81. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  82. package/lib/chain/bls/index.d.ts.map +1 -0
  83. package/lib/chain/bls/interface.d.ts.map +1 -0
  84. package/lib/chain/bls/maybeBatch.d.ts.map +1 -0
  85. package/lib/chain/bls/multithread/index.d.ts.map +1 -0
  86. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -0
  87. package/lib/chain/bls/multithread/poolSize.d.ts.map +1 -0
  88. package/lib/chain/bls/multithread/types.d.ts.map +1 -0
  89. package/lib/chain/bls/multithread/utils.d.ts.map +1 -0
  90. package/lib/chain/bls/multithread/worker.d.ts.map +1 -0
  91. package/lib/chain/bls/singleThread.d.ts.map +1 -0
  92. package/lib/chain/bls/utils.d.ts.map +1 -0
  93. package/lib/chain/chain.d.ts.map +1 -0
  94. package/lib/chain/chain.js +2 -3
  95. package/lib/chain/chain.js.map +1 -1
  96. package/lib/chain/emitter.d.ts +2 -2
  97. package/lib/chain/emitter.d.ts.map +1 -0
  98. package/lib/chain/errors/attestationError.d.ts.map +1 -0
  99. package/lib/chain/errors/attesterSlashingError.d.ts.map +1 -0
  100. package/lib/chain/errors/blobSidecarError.d.ts.map +1 -0
  101. package/lib/chain/errors/blockError.d.ts.map +1 -0
  102. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +1 -0
  103. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -0
  104. package/lib/chain/errors/gossipValidation.d.ts.map +1 -0
  105. package/lib/chain/errors/index.d.ts.map +1 -0
  106. package/lib/chain/errors/lightClientError.d.ts.map +1 -0
  107. package/lib/chain/errors/proposerSlashingError.d.ts.map +1 -0
  108. package/lib/chain/errors/syncCommitteeError.d.ts.map +1 -0
  109. package/lib/chain/errors/voluntaryExitError.d.ts.map +1 -0
  110. package/lib/chain/forkChoice/index.d.ts.map +1 -0
  111. package/lib/chain/genesis/genesis.d.ts.map +1 -0
  112. package/lib/chain/genesis/interface.d.ts.map +1 -0
  113. package/lib/chain/index.d.ts.map +1 -0
  114. package/lib/chain/initState.d.ts.map +1 -0
  115. package/lib/chain/interface.d.ts.map +1 -0
  116. package/lib/chain/lightClient/index.d.ts.map +1 -0
  117. package/lib/chain/lightClient/proofs.d.ts.map +1 -0
  118. package/lib/chain/lightClient/types.d.ts.map +1 -0
  119. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -0
  120. package/lib/chain/opPools/attestationPool.d.ts +2 -3
  121. package/lib/chain/opPools/attestationPool.d.ts.map +1 -0
  122. package/lib/chain/opPools/attestationPool.js +3 -5
  123. package/lib/chain/opPools/attestationPool.js.map +1 -1
  124. package/lib/chain/opPools/index.d.ts.map +1 -0
  125. package/lib/chain/opPools/opPool.d.ts.map +1 -0
  126. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +3 -2
  127. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -0
  128. package/lib/chain/opPools/syncCommitteeMessagePool.js +6 -5
  129. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  130. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -0
  131. package/lib/chain/opPools/types.d.ts +1 -1
  132. package/lib/chain/opPools/types.d.ts.map +1 -0
  133. package/lib/chain/opPools/types.js +1 -1
  134. package/lib/chain/opPools/types.js.map +1 -1
  135. package/lib/chain/opPools/utils.d.ts.map +1 -0
  136. package/lib/chain/options.d.ts.map +1 -0
  137. package/lib/chain/prepareNextSlot.d.ts +3 -3
  138. package/lib/chain/prepareNextSlot.d.ts.map +1 -0
  139. package/lib/chain/prepareNextSlot.js +8 -8
  140. package/lib/chain/prepareNextSlot.js.map +1 -1
  141. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -0
  142. package/lib/chain/produceBlock/index.d.ts.map +1 -0
  143. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -0
  144. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +1 -0
  145. package/lib/chain/regen/errors.d.ts.map +1 -0
  146. package/lib/chain/regen/index.d.ts.map +1 -0
  147. package/lib/chain/regen/interface.d.ts.map +1 -0
  148. package/lib/chain/regen/queued.d.ts.map +1 -0
  149. package/lib/chain/regen/regen.d.ts.map +1 -0
  150. package/lib/chain/reprocess.d.ts.map +1 -0
  151. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -0
  152. package/lib/chain/rewards/blockRewards.d.ts.map +1 -0
  153. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -0
  154. package/lib/chain/seenCache/index.d.ts.map +1 -0
  155. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +1 -0
  156. package/lib/chain/seenCache/seenAttestationData.d.ts.map +1 -0
  157. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -0
  158. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +1 -0
  159. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -0
  160. package/lib/chain/seenCache/seenCommittee.d.ts.map +1 -0
  161. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +1 -0
  162. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -0
  163. package/lib/chain/serializeState.d.ts.map +1 -0
  164. package/lib/chain/shufflingCache.d.ts.map +1 -0
  165. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +1 -0
  166. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -0
  167. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -0
  168. package/lib/chain/stateCache/datastore/index.d.ts.map +1 -0
  169. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -0
  170. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -0
  171. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +1 -0
  172. package/lib/chain/stateCache/index.d.ts.map +1 -0
  173. package/lib/chain/stateCache/mapMetrics.d.ts.map +1 -0
  174. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -0
  175. package/lib/chain/stateCache/persistentCheckpointsCache.js +9 -8
  176. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  177. package/lib/chain/stateCache/types.d.ts.map +1 -0
  178. package/lib/chain/validation/aggregateAndProof.d.ts.map +1 -0
  179. package/lib/chain/validation/attestation.d.ts.map +1 -0
  180. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -0
  181. package/lib/chain/validation/blobSidecar.d.ts.map +1 -0
  182. package/lib/chain/validation/block.d.ts.map +1 -0
  183. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -0
  184. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -0
  185. package/lib/chain/validation/index.d.ts.map +1 -0
  186. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +1 -0
  187. package/lib/chain/validation/lightClientFinalityUpdate.js +4 -3
  188. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  189. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +6 -4
  190. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +1 -0
  191. package/lib/chain/validation/lightClientOptimisticUpdate.js +11 -11
  192. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  193. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -0
  194. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -0
  195. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -0
  196. package/lib/chain/validation/signatureSets/index.d.ts.map +1 -0
  197. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -0
  198. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -0
  199. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -0
  200. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -0
  201. package/lib/chain/validation/syncCommittee.d.ts.map +1 -0
  202. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -0
  203. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -0
  204. package/lib/chain/validatorMonitor.d.ts.map +1 -0
  205. package/lib/chain/validatorMonitor.js +20 -14
  206. package/lib/chain/validatorMonitor.js.map +1 -1
  207. package/lib/constants/constants.d.ts.map +1 -0
  208. package/lib/constants/index.d.ts.map +1 -0
  209. package/lib/constants/network.d.ts.map +1 -0
  210. package/lib/db/beacon.d.ts.map +1 -0
  211. package/lib/db/buckets.d.ts +4 -4
  212. package/lib/db/buckets.d.ts.map +1 -0
  213. package/lib/db/buckets.js +4 -4
  214. package/lib/db/buckets.js.map +1 -1
  215. package/lib/db/index.d.ts.map +1 -0
  216. package/lib/db/interface.d.ts.map +1 -0
  217. package/lib/db/options.d.ts.map +1 -0
  218. package/lib/db/repositories/attesterSlashing.d.ts.map +1 -0
  219. package/lib/db/repositories/backfilledRanges.d.ts.map +1 -0
  220. package/lib/db/repositories/blobSidecars.d.ts.map +1 -0
  221. package/lib/db/repositories/blobSidecars.js +1 -1
  222. package/lib/db/repositories/blobSidecars.js.map +1 -1
  223. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +1 -0
  224. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  225. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  226. package/lib/db/repositories/block.d.ts.map +1 -0
  227. package/lib/db/repositories/blockArchive.d.ts.map +1 -0
  228. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  229. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -0
  230. package/lib/db/repositories/blsToExecutionChange.d.ts.map +1 -0
  231. package/lib/db/repositories/checkpointState.d.ts.map +1 -0
  232. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -0
  233. package/lib/db/repositories/dataColumnSidecar.js +1 -1
  234. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  235. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -0
  236. package/lib/db/repositories/dataColumnSidecarArchive.js +1 -1
  237. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  238. package/lib/db/repositories/depositDataRoot.d.ts.map +1 -0
  239. package/lib/db/repositories/depositEvent.d.ts.map +1 -0
  240. package/lib/db/repositories/eth1Data.d.ts.map +1 -0
  241. package/lib/db/repositories/index.d.ts.map +1 -0
  242. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +1 -0
  243. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +1 -0
  244. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +1 -0
  245. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +1 -0
  246. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -0
  247. package/lib/db/repositories/stateArchive.d.ts.map +1 -0
  248. package/lib/db/repositories/stateArchiveIndex.d.ts.map +1 -0
  249. package/lib/db/repositories/voluntaryExit.d.ts.map +1 -0
  250. package/lib/db/single/index.d.ts.map +1 -0
  251. package/lib/db/single/preGenesisState.d.ts.map +1 -0
  252. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +1 -0
  253. package/lib/eth1/errors.d.ts.map +1 -0
  254. package/lib/eth1/eth1DataCache.d.ts.map +1 -0
  255. package/lib/eth1/eth1DepositDataTracker.d.ts.map +1 -0
  256. package/lib/eth1/eth1DepositsCache.d.ts.map +1 -0
  257. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +1 -0
  258. package/lib/eth1/index.d.ts.map +1 -0
  259. package/lib/eth1/interface.d.ts.map +1 -0
  260. package/lib/eth1/options.d.ts.map +1 -0
  261. package/lib/eth1/provider/eth1Provider.d.ts.map +1 -0
  262. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +1 -0
  263. package/lib/eth1/provider/jwt.d.ts.map +1 -0
  264. package/lib/eth1/provider/utils.d.ts.map +1 -0
  265. package/lib/eth1/stream.d.ts.map +1 -0
  266. package/lib/eth1/utils/depositContract.d.ts.map +1 -0
  267. package/lib/eth1/utils/deposits.d.ts.map +1 -0
  268. package/lib/eth1/utils/eth1Data.d.ts.map +1 -0
  269. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +1 -0
  270. package/lib/eth1/utils/eth1Vote.d.ts.map +1 -0
  271. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +1 -0
  272. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +1 -0
  273. package/lib/execution/builder/cache.d.ts.map +1 -0
  274. package/lib/execution/builder/http.d.ts.map +1 -0
  275. package/lib/execution/builder/index.d.ts.map +1 -0
  276. package/lib/execution/builder/interface.d.ts.map +1 -0
  277. package/lib/execution/builder/utils.d.ts.map +1 -0
  278. package/lib/execution/engine/disabled.d.ts.map +1 -0
  279. package/lib/execution/engine/http.d.ts.map +1 -0
  280. package/lib/execution/engine/index.d.ts.map +1 -0
  281. package/lib/execution/engine/interface.d.ts.map +1 -0
  282. package/lib/execution/engine/mock.d.ts.map +1 -0
  283. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -0
  284. package/lib/execution/engine/types.d.ts.map +1 -0
  285. package/lib/execution/engine/utils.d.ts.map +1 -0
  286. package/lib/execution/index.d.ts.map +1 -0
  287. package/lib/index.d.ts.map +1 -0
  288. package/lib/metrics/index.d.ts.map +1 -0
  289. package/lib/metrics/metrics/beacon.d.ts.map +1 -0
  290. package/lib/metrics/metrics/lodestar.d.ts +1 -1
  291. package/lib/metrics/metrics/lodestar.d.ts.map +1 -0
  292. package/lib/metrics/metrics/lodestar.js +3 -3
  293. package/lib/metrics/metrics/lodestar.js.map +1 -1
  294. package/lib/metrics/metrics.d.ts.map +1 -0
  295. package/lib/metrics/nodeJsMetrics.d.ts.map +1 -0
  296. package/lib/metrics/options.d.ts.map +1 -0
  297. package/lib/metrics/server/http.d.ts.map +1 -0
  298. package/lib/metrics/server/index.d.ts.map +1 -0
  299. package/lib/metrics/utils/avgMinMax.d.ts.map +1 -0
  300. package/lib/metrics/utils/gauge.d.ts.map +1 -0
  301. package/lib/metrics/utils/registryMetricCreator.d.ts.map +1 -0
  302. package/lib/monitoring/clientStats.d.ts.map +1 -0
  303. package/lib/monitoring/index.d.ts.map +1 -0
  304. package/lib/monitoring/options.d.ts.map +1 -0
  305. package/lib/monitoring/properties.d.ts.map +1 -0
  306. package/lib/monitoring/service.d.ts.map +1 -0
  307. package/lib/monitoring/system.d.ts.map +1 -0
  308. package/lib/monitoring/types.d.ts.map +1 -0
  309. package/lib/network/core/events.d.ts.map +1 -0
  310. package/lib/network/core/index.d.ts.map +1 -0
  311. package/lib/network/core/metrics.d.ts.map +1 -0
  312. package/lib/network/core/networkCore.d.ts.map +1 -0
  313. package/lib/network/core/networkCoreWorker.d.ts.map +1 -0
  314. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -0
  315. package/lib/network/core/types.d.ts.map +1 -0
  316. package/lib/network/discv5/index.d.ts.map +1 -0
  317. package/lib/network/discv5/types.d.ts.map +1 -0
  318. package/lib/network/discv5/utils.d.ts.map +1 -0
  319. package/lib/network/discv5/worker.d.ts.map +1 -0
  320. package/lib/network/events.d.ts.map +1 -0
  321. package/lib/network/forks.d.ts.map +1 -0
  322. package/lib/network/gossip/constants.d.ts.map +1 -0
  323. package/lib/network/gossip/encoding.d.ts.map +1 -0
  324. package/lib/network/gossip/errors.d.ts.map +1 -0
  325. package/lib/network/gossip/gossipsub.d.ts.map +1 -0
  326. package/lib/network/gossip/index.d.ts.map +1 -0
  327. package/lib/network/gossip/interface.d.ts.map +1 -0
  328. package/lib/network/gossip/metrics.d.ts.map +1 -0
  329. package/lib/network/gossip/scoringParameters.d.ts.map +1 -0
  330. package/lib/network/gossip/topic.d.ts.map +1 -0
  331. package/lib/network/index.d.ts.map +1 -0
  332. package/lib/network/interface.d.ts.map +1 -0
  333. package/lib/network/libp2p/error.d.ts.map +1 -0
  334. package/lib/network/libp2p/index.d.ts.map +1 -0
  335. package/lib/network/metadata.d.ts.map +1 -0
  336. package/lib/network/network.d.ts +1 -1
  337. package/lib/network/network.d.ts.map +1 -0
  338. package/lib/network/network.js +11 -13
  339. package/lib/network/network.js.map +1 -1
  340. package/lib/network/networkConfig.d.ts.map +1 -0
  341. package/lib/network/options.d.ts.map +1 -0
  342. package/lib/network/peers/client.d.ts.map +1 -0
  343. package/lib/network/peers/datastore.d.ts.map +1 -0
  344. package/lib/network/peers/discover.d.ts.map +1 -0
  345. package/lib/network/peers/index.d.ts.map +1 -0
  346. package/lib/network/peers/peerManager.d.ts.map +1 -0
  347. package/lib/network/peers/peersData.d.ts.map +1 -0
  348. package/lib/network/peers/score/constants.d.ts.map +1 -0
  349. package/lib/network/peers/score/index.d.ts.map +1 -0
  350. package/lib/network/peers/score/interface.d.ts.map +1 -0
  351. package/lib/network/peers/score/score.d.ts.map +1 -0
  352. package/lib/network/peers/score/store.d.ts.map +1 -0
  353. package/lib/network/peers/score/utils.d.ts.map +1 -0
  354. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -0
  355. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -0
  356. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +1 -0
  357. package/lib/network/peers/utils/index.d.ts.map +1 -0
  358. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -0
  359. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -0
  360. package/lib/network/processor/aggregatorTracker.d.ts.map +1 -0
  361. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -0
  362. package/lib/network/processor/gossipHandlers.d.ts.map +1 -0
  363. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -0
  364. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -0
  365. package/lib/network/processor/gossipQueues/linear.d.ts.map +1 -0
  366. package/lib/network/processor/gossipQueues/types.d.ts.map +1 -0
  367. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -0
  368. package/lib/network/processor/index.d.ts +1 -1
  369. package/lib/network/processor/index.d.ts.map +1 -0
  370. package/lib/network/processor/index.js +2 -3
  371. package/lib/network/processor/index.js.map +1 -1
  372. package/lib/network/processor/types.d.ts.map +1 -0
  373. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -0
  374. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -0
  375. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -0
  376. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -0
  377. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -0
  378. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -0
  379. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -0
  380. package/lib/network/reqresp/handlers/index.d.ts.map +1 -0
  381. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +1 -0
  382. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +1 -0
  383. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +1 -0
  384. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +1 -0
  385. package/lib/network/reqresp/index.d.ts.map +1 -0
  386. package/lib/network/reqresp/interface.d.ts.map +1 -0
  387. package/lib/network/reqresp/protocols.d.ts.map +1 -0
  388. package/lib/network/reqresp/rateLimit.d.ts.map +1 -0
  389. package/lib/network/reqresp/score.d.ts.map +1 -0
  390. package/lib/network/reqresp/types.d.ts.map +1 -0
  391. package/lib/network/reqresp/utils/collect.d.ts.map +1 -0
  392. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +1 -0
  393. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -0
  394. package/lib/network/statusCache.d.ts.map +1 -0
  395. package/lib/network/subnets/attnetsService.d.ts.map +1 -0
  396. package/lib/network/subnets/index.d.ts.map +1 -0
  397. package/lib/network/subnets/interface.d.ts.map +1 -0
  398. package/lib/network/subnets/syncnetsService.d.ts.map +1 -0
  399. package/lib/network/subnets/util.d.ts.map +1 -0
  400. package/lib/network/util.d.ts.map +1 -0
  401. package/lib/node/index.d.ts.map +1 -0
  402. package/lib/node/nodejs.d.ts.map +1 -0
  403. package/lib/node/notifier.d.ts.map +1 -0
  404. package/lib/node/options.d.ts.map +1 -0
  405. package/lib/node/utils/interop/deposits.d.ts.map +1 -0
  406. package/lib/node/utils/interop/state.d.ts.map +1 -0
  407. package/lib/node/utils/lightclient.d.ts.map +1 -0
  408. package/lib/node/utils/state.d.ts.map +1 -0
  409. package/lib/sync/backfill/backfill.d.ts.map +1 -0
  410. package/lib/sync/backfill/errors.d.ts.map +1 -0
  411. package/lib/sync/backfill/index.d.ts.map +1 -0
  412. package/lib/sync/backfill/verify.d.ts.map +1 -0
  413. package/lib/sync/constants.d.ts.map +1 -0
  414. package/lib/sync/index.d.ts.map +1 -0
  415. package/lib/sync/interface.d.ts.map +1 -0
  416. package/lib/sync/options.d.ts.map +1 -0
  417. package/lib/sync/range/batch.d.ts.map +1 -0
  418. package/lib/sync/range/chain.d.ts.map +1 -0
  419. package/lib/sync/range/range.d.ts.map +1 -0
  420. package/lib/sync/range/utils/batches.d.ts.map +1 -0
  421. package/lib/sync/range/utils/chainTarget.d.ts.map +1 -0
  422. package/lib/sync/range/utils/hashBlocks.d.ts.map +1 -0
  423. package/lib/sync/range/utils/index.d.ts.map +1 -0
  424. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -0
  425. package/lib/sync/range/utils/updateChains.d.ts.map +1 -0
  426. package/lib/sync/sync.d.ts.map +1 -0
  427. package/lib/sync/types.d.ts +0 -1
  428. package/lib/sync/types.d.ts.map +1 -0
  429. package/lib/sync/types.js.map +1 -1
  430. package/lib/sync/unknownBlock.d.ts +0 -1
  431. package/lib/sync/unknownBlock.d.ts.map +1 -0
  432. package/lib/sync/unknownBlock.js +16 -19
  433. package/lib/sync/unknownBlock.js.map +1 -1
  434. package/lib/sync/utils/downloadByRange.d.ts.map +1 -0
  435. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -0
  436. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -0
  437. package/lib/sync/utils/remoteSyncType.d.ts.map +1 -0
  438. package/lib/util/address.d.ts.map +1 -0
  439. package/lib/util/array.d.ts.map +1 -0
  440. package/lib/util/asyncIterableToEvents.d.ts.map +1 -0
  441. package/lib/util/binarySearch.d.ts.map +1 -0
  442. package/lib/util/bitArray.d.ts.map +1 -0
  443. package/lib/util/blobs.d.ts.map +1 -0
  444. package/lib/util/blobs.js +5 -3
  445. package/lib/util/blobs.js.map +1 -1
  446. package/lib/util/bufferPool.d.ts.map +1 -0
  447. package/lib/util/bytes.d.ts.map +1 -0
  448. package/lib/util/chunkify.d.ts.map +1 -0
  449. package/lib/util/clock.d.ts +5 -0
  450. package/lib/util/clock.d.ts.map +1 -0
  451. package/lib/util/clock.js +3 -0
  452. package/lib/util/clock.js.map +1 -1
  453. package/lib/util/dataColumns.d.ts.map +1 -0
  454. package/lib/util/dependentRoot.d.ts.map +1 -0
  455. package/lib/util/enum.d.ts.map +1 -0
  456. package/lib/util/error.d.ts.map +1 -0
  457. package/lib/util/eventLoop.d.ts.map +1 -0
  458. package/lib/util/execution.d.ts.map +1 -0
  459. package/lib/util/file.d.ts.map +1 -0
  460. package/lib/util/forkChoice.d.ts.map +1 -0
  461. package/lib/util/forkName.d.ts.map +1 -0
  462. package/lib/util/graffiti.d.ts.map +1 -0
  463. package/lib/util/hex.d.ts.map +1 -0
  464. package/lib/util/index.d.ts.map +1 -0
  465. package/lib/util/ip.d.ts.map +1 -0
  466. package/lib/util/itTrigger.d.ts.map +1 -0
  467. package/lib/util/kzg.d.ts.map +1 -0
  468. package/lib/util/map.d.ts.map +1 -0
  469. package/lib/util/metadata.d.ts.map +1 -0
  470. package/lib/util/multifork.d.ts.map +1 -0
  471. package/lib/util/numpy.d.ts.map +1 -0
  472. package/lib/util/peerId.d.ts.map +1 -0
  473. package/lib/util/profile.d.ts.map +1 -0
  474. package/lib/util/promises.d.ts.map +1 -0
  475. package/lib/util/queue/errors.d.ts.map +1 -0
  476. package/lib/util/queue/fnQueue.d.ts.map +1 -0
  477. package/lib/util/queue/index.d.ts.map +1 -0
  478. package/lib/util/queue/itemQueue.d.ts.map +1 -0
  479. package/lib/util/queue/options.d.ts.map +1 -0
  480. package/lib/util/serializedCache.d.ts.map +1 -0
  481. package/lib/util/set.d.ts.map +1 -0
  482. package/lib/util/shuffle.d.ts.map +1 -0
  483. package/lib/util/sortBy.d.ts.map +1 -0
  484. package/lib/util/sszBytes.d.ts.map +1 -0
  485. package/lib/util/strictEvents.d.ts.map +1 -0
  486. package/lib/util/time.d.ts.map +1 -0
  487. package/lib/util/timeSeries.d.ts.map +1 -0
  488. package/lib/util/types.d.ts.map +1 -0
  489. package/lib/util/workerEvents.d.ts.map +1 -0
  490. package/lib/util/wrapError.d.ts.map +1 -0
  491. package/package.json +18 -20
  492. package/src/api/impl/api.ts +26 -0
  493. package/src/api/impl/beacon/blocks/index.ts +744 -0
  494. package/src/api/impl/beacon/blocks/utils.ts +75 -0
  495. package/src/api/impl/beacon/index.ts +35 -0
  496. package/src/api/impl/beacon/pool/index.ts +314 -0
  497. package/src/api/impl/beacon/rewards/index.ts +30 -0
  498. package/src/api/impl/beacon/state/index.ts +406 -0
  499. package/src/api/impl/beacon/state/utils.ts +189 -0
  500. package/src/api/impl/config/constants.ts +127 -0
  501. package/src/api/impl/config/index.ts +59 -0
  502. package/src/api/impl/debug/index.ts +131 -0
  503. package/src/api/impl/errors.ts +50 -0
  504. package/src/api/impl/events/index.ts +33 -0
  505. package/src/api/impl/index.ts +6 -0
  506. package/src/api/impl/lightclient/index.ts +64 -0
  507. package/src/api/impl/lodestar/index.ts +257 -0
  508. package/src/api/impl/node/index.ts +88 -0
  509. package/src/api/impl/node/utils.ts +51 -0
  510. package/src/api/impl/proof/index.ts +60 -0
  511. package/src/api/impl/types.ts +17 -0
  512. package/src/api/impl/utils.ts +25 -0
  513. package/src/api/impl/validator/index.ts +1540 -0
  514. package/src/api/impl/validator/utils.ts +85 -0
  515. package/src/api/index.ts +2 -0
  516. package/src/api/options.ts +16 -0
  517. package/src/api/rest/activeSockets.ts +109 -0
  518. package/src/api/rest/base.ts +216 -0
  519. package/src/api/rest/index.ts +63 -0
  520. package/src/api/rest/swaggerUI.ts +80 -0
  521. package/src/bun-wrappers/prometheus-gc-stats.ts +7 -0
  522. package/src/chain/ColumnReconstructionTracker.ts +90 -0
  523. package/src/chain/GetBlobsTracker.ts +115 -0
  524. package/src/chain/archiveStore/archiveStore.ts +222 -0
  525. package/src/chain/archiveStore/constants.ts +5 -0
  526. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +116 -0
  527. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +68 -0
  528. package/src/chain/archiveStore/historicalState/metrics.ts +214 -0
  529. package/src/chain/archiveStore/historicalState/types.ts +41 -0
  530. package/src/chain/archiveStore/historicalState/worker.ts +77 -0
  531. package/src/chain/archiveStore/index.ts +3 -0
  532. package/src/chain/archiveStore/interface.ts +75 -0
  533. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +138 -0
  534. package/src/chain/archiveStore/utils/archiveBlocks.ts +437 -0
  535. package/src/chain/archiveStore/utils/pruneHistory.ts +56 -0
  536. package/src/chain/archiveStore/utils/updateBackfillRange.ts +50 -0
  537. package/src/chain/balancesCache.ts +52 -0
  538. package/src/chain/beaconProposerCache.ts +43 -0
  539. package/src/chain/blocks/blockInput/blockInput.ts +852 -0
  540. package/src/chain/blocks/blockInput/errors.ts +48 -0
  541. package/src/chain/blocks/blockInput/index.ts +4 -0
  542. package/src/chain/blocks/blockInput/types.ts +145 -0
  543. package/src/chain/blocks/blockInput/utils.ts +21 -0
  544. package/src/chain/blocks/importBlock.ts +597 -0
  545. package/src/chain/blocks/index.ts +179 -0
  546. package/src/chain/blocks/types.ts +101 -0
  547. package/src/chain/blocks/utils/blowfishBanner.ts +28 -0
  548. package/src/chain/blocks/utils/chainSegment.ts +29 -0
  549. package/src/chain/blocks/utils/checkpoint.ts +25 -0
  550. package/src/chain/blocks/utils/giraffeBanner.ts +30 -0
  551. package/src/chain/blocks/utils/ownBanner.ts +20 -0
  552. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +43 -0
  553. package/src/chain/blocks/utils/zebraBanner.ts +45 -0
  554. package/src/chain/blocks/verifyBlock.ts +242 -0
  555. package/src/chain/blocks/verifyBlocksDataAvailability.ts +42 -0
  556. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +438 -0
  557. package/src/chain/blocks/verifyBlocksSanityChecks.ts +129 -0
  558. package/src/chain/blocks/verifyBlocksSignatures.ts +105 -0
  559. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +114 -0
  560. package/src/chain/blocks/writeBlockInputToDb.ts +120 -0
  561. package/src/chain/bls/index.ts +4 -0
  562. package/src/chain/bls/interface.ts +68 -0
  563. package/src/chain/bls/maybeBatch.ts +45 -0
  564. package/src/chain/bls/multithread/index.ts +582 -0
  565. package/src/chain/bls/multithread/jobItem.ts +119 -0
  566. package/src/chain/bls/multithread/poolSize.ts +16 -0
  567. package/src/chain/bls/multithread/types.ts +38 -0
  568. package/src/chain/bls/multithread/utils.ts +19 -0
  569. package/src/chain/bls/multithread/worker.ts +114 -0
  570. package/src/chain/bls/singleThread.ts +87 -0
  571. package/src/chain/bls/utils.ts +30 -0
  572. package/src/chain/chain.ts +1354 -0
  573. package/src/chain/emitter.ts +113 -0
  574. package/src/chain/errors/attestationError.ts +194 -0
  575. package/src/chain/errors/attesterSlashingError.ts +11 -0
  576. package/src/chain/errors/blobSidecarError.ts +60 -0
  577. package/src/chain/errors/blockError.ts +166 -0
  578. package/src/chain/errors/blsToExecutionChangeError.ts +13 -0
  579. package/src/chain/errors/dataColumnSidecarError.ts +80 -0
  580. package/src/chain/errors/gossipValidation.ts +20 -0
  581. package/src/chain/errors/index.ts +10 -0
  582. package/src/chain/errors/lightClientError.ts +30 -0
  583. package/src/chain/errors/proposerSlashingError.ts +11 -0
  584. package/src/chain/errors/syncCommitteeError.ts +36 -0
  585. package/src/chain/errors/voluntaryExitError.ts +13 -0
  586. package/src/chain/forkChoice/index.ts +112 -0
  587. package/src/chain/genesis/genesis.ts +190 -0
  588. package/src/chain/genesis/interface.ts +14 -0
  589. package/src/chain/index.ts +6 -0
  590. package/src/chain/initState.ts +221 -0
  591. package/src/chain/interface.ts +280 -0
  592. package/src/chain/lightClient/index.ts +764 -0
  593. package/src/chain/lightClient/proofs.ts +85 -0
  594. package/src/chain/lightClient/types.ts +33 -0
  595. package/src/chain/opPools/aggregatedAttestationPool.ts +1063 -0
  596. package/src/chain/opPools/attestationPool.ts +282 -0
  597. package/src/chain/opPools/index.ts +5 -0
  598. package/src/chain/opPools/opPool.ts +462 -0
  599. package/src/chain/opPools/syncCommitteeMessagePool.ts +169 -0
  600. package/src/chain/opPools/syncContributionAndProofPool.ts +240 -0
  601. package/src/chain/opPools/types.ts +35 -0
  602. package/src/chain/opPools/utils.ts +65 -0
  603. package/src/chain/options.ts +138 -0
  604. package/src/chain/prepareNextSlot.ts +277 -0
  605. package/src/chain/produceBlock/computeNewStateRoot.ts +55 -0
  606. package/src/chain/produceBlock/index.ts +2 -0
  607. package/src/chain/produceBlock/produceBlockBody.ts +797 -0
  608. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +54 -0
  609. package/src/chain/regen/errors.ts +30 -0
  610. package/src/chain/regen/index.ts +4 -0
  611. package/src/chain/regen/interface.ts +93 -0
  612. package/src/chain/regen/queued.ts +317 -0
  613. package/src/chain/regen/regen.ts +424 -0
  614. package/src/chain/reprocess.ts +161 -0
  615. package/src/chain/rewards/attestationsRewards.ts +196 -0
  616. package/src/chain/rewards/blockRewards.ts +150 -0
  617. package/src/chain/rewards/syncCommitteeRewards.ts +58 -0
  618. package/src/chain/seenCache/index.ts +5 -0
  619. package/src/chain/seenCache/seenAggregateAndProof.ts +120 -0
  620. package/src/chain/seenCache/seenAttestationData.ts +145 -0
  621. package/src/chain/seenCache/seenAttesters.ts +58 -0
  622. package/src/chain/seenCache/seenBlockAttesters.ts +18 -0
  623. package/src/chain/seenCache/seenBlockProposers.ts +48 -0
  624. package/src/chain/seenCache/seenCommittee.ts +43 -0
  625. package/src/chain/seenCache/seenCommitteeContribution.ts +104 -0
  626. package/src/chain/seenCache/seenGossipBlockInput.ts +373 -0
  627. package/src/chain/serializeState.ts +32 -0
  628. package/src/chain/shufflingCache.ts +238 -0
  629. package/src/chain/stateCache/blockStateCacheImpl.ts +150 -0
  630. package/src/chain/stateCache/datastore/db.ts +36 -0
  631. package/src/chain/stateCache/datastore/file.ts +53 -0
  632. package/src/chain/stateCache/datastore/index.ts +2 -0
  633. package/src/chain/stateCache/datastore/types.ts +13 -0
  634. package/src/chain/stateCache/fifoBlockStateCache.ts +208 -0
  635. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +198 -0
  636. package/src/chain/stateCache/index.ts +3 -0
  637. package/src/chain/stateCache/mapMetrics.ts +52 -0
  638. package/src/chain/stateCache/persistentCheckpointsCache.ts +837 -0
  639. package/src/chain/stateCache/types.ts +86 -0
  640. package/src/chain/validation/aggregateAndProof.ts +258 -0
  641. package/src/chain/validation/attestation.ts +885 -0
  642. package/src/chain/validation/attesterSlashing.ts +61 -0
  643. package/src/chain/validation/blobSidecar.ts +301 -0
  644. package/src/chain/validation/block.ts +188 -0
  645. package/src/chain/validation/blsToExecutionChange.ts +61 -0
  646. package/src/chain/validation/dataColumnSidecar.ts +381 -0
  647. package/src/chain/validation/index.ts +9 -0
  648. package/src/chain/validation/lightClientFinalityUpdate.ts +46 -0
  649. package/src/chain/validation/lightClientOptimisticUpdate.ts +68 -0
  650. package/src/chain/validation/proposerSlashing.ts +54 -0
  651. package/src/chain/validation/signatureSets/aggregateAndProof.ts +38 -0
  652. package/src/chain/validation/signatureSets/contributionAndProof.ts +27 -0
  653. package/src/chain/validation/signatureSets/index.ts +6 -0
  654. package/src/chain/validation/signatureSets/selectionProof.ts +27 -0
  655. package/src/chain/validation/signatureSets/syncCommittee.ts +22 -0
  656. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +18 -0
  657. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +27 -0
  658. package/src/chain/validation/syncCommittee.ts +165 -0
  659. package/src/chain/validation/syncCommitteeContributionAndProof.ts +122 -0
  660. package/src/chain/validation/voluntaryExit.ts +58 -0
  661. package/src/chain/validatorMonitor.ts +1309 -0
  662. package/src/constants/constants.ts +15 -0
  663. package/src/constants/index.ts +2 -0
  664. package/src/constants/network.ts +52 -0
  665. package/src/db/beacon.ts +113 -0
  666. package/src/db/buckets.ts +80 -0
  667. package/src/db/index.ts +2 -0
  668. package/src/db/interface.ts +76 -0
  669. package/src/db/options.ts +7 -0
  670. package/src/db/repositories/attesterSlashing.ts +38 -0
  671. package/src/db/repositories/backfilledRanges.ts +29 -0
  672. package/src/db/repositories/blobSidecars.ts +37 -0
  673. package/src/db/repositories/blobSidecarsArchive.ts +28 -0
  674. package/src/db/repositories/block.ts +33 -0
  675. package/src/db/repositories/blockArchive.ts +170 -0
  676. package/src/db/repositories/blockArchiveIndex.ts +45 -0
  677. package/src/db/repositories/blsToExecutionChange.ts +16 -0
  678. package/src/db/repositories/checkpointState.ts +31 -0
  679. package/src/db/repositories/dataColumnSidecar.ts +49 -0
  680. package/src/db/repositories/dataColumnSidecarArchive.ts +56 -0
  681. package/src/db/repositories/depositDataRoot.ts +80 -0
  682. package/src/db/repositories/depositEvent.ts +32 -0
  683. package/src/db/repositories/eth1Data.ts +33 -0
  684. package/src/db/repositories/index.ts +20 -0
  685. package/src/db/repositories/lightclientBestUpdate.ts +41 -0
  686. package/src/db/repositories/lightclientCheckpointHeader.ts +32 -0
  687. package/src/db/repositories/lightclientSyncCommittee.ts +16 -0
  688. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +77 -0
  689. package/src/db/repositories/proposerSlashing.ts +15 -0
  690. package/src/db/repositories/stateArchive.ts +69 -0
  691. package/src/db/repositories/stateArchiveIndex.ts +18 -0
  692. package/src/db/repositories/voluntaryExit.ts +15 -0
  693. package/src/db/single/index.ts +2 -0
  694. package/src/db/single/preGenesisState.ts +37 -0
  695. package/src/db/single/preGenesisStateLastProcessedBlock.ts +34 -0
  696. package/src/eth1/errors.ts +40 -0
  697. package/src/eth1/eth1DataCache.ts +26 -0
  698. package/src/eth1/eth1DepositDataTracker.ts +410 -0
  699. package/src/eth1/eth1DepositsCache.ts +141 -0
  700. package/src/eth1/eth1MergeBlockTracker.ts +328 -0
  701. package/src/eth1/index.ts +157 -0
  702. package/src/eth1/interface.ts +131 -0
  703. package/src/eth1/options.ts +28 -0
  704. package/src/eth1/provider/eth1Provider.ts +229 -0
  705. package/src/eth1/provider/jsonRpcHttpClient.ts +390 -0
  706. package/src/eth1/provider/jwt.ts +36 -0
  707. package/src/eth1/provider/utils.ts +136 -0
  708. package/src/eth1/stream.ts +75 -0
  709. package/src/eth1/utils/depositContract.ts +37 -0
  710. package/src/eth1/utils/deposits.ts +70 -0
  711. package/src/eth1/utils/eth1Data.ts +100 -0
  712. package/src/eth1/utils/eth1DepositEvent.ts +12 -0
  713. package/src/eth1/utils/eth1Vote.ts +142 -0
  714. package/src/eth1/utils/groupDepositEventsByBlock.ts +19 -0
  715. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +18 -0
  716. package/src/execution/builder/cache.ts +39 -0
  717. package/src/execution/builder/http.ts +229 -0
  718. package/src/execution/builder/index.ts +27 -0
  719. package/src/execution/builder/interface.ts +49 -0
  720. package/src/execution/builder/utils.ts +19 -0
  721. package/src/execution/engine/disabled.ts +35 -0
  722. package/src/execution/engine/http.ts +644 -0
  723. package/src/execution/engine/index.ts +63 -0
  724. package/src/execution/engine/interface.ts +199 -0
  725. package/src/execution/engine/mock.ts +493 -0
  726. package/src/execution/engine/payloadIdCache.ts +54 -0
  727. package/src/execution/engine/types.ts +640 -0
  728. package/src/execution/engine/utils.ts +136 -0
  729. package/src/execution/index.ts +4 -0
  730. package/src/index.ts +20 -0
  731. package/src/metrics/index.ts +4 -0
  732. package/src/metrics/metrics/beacon.ts +390 -0
  733. package/src/metrics/metrics/lodestar.ts +1870 -0
  734. package/src/metrics/metrics.ts +43 -0
  735. package/src/metrics/nodeJsMetrics.ts +19 -0
  736. package/src/metrics/options.ts +22 -0
  737. package/src/metrics/server/http.ts +114 -0
  738. package/src/metrics/server/index.ts +1 -0
  739. package/src/metrics/utils/avgMinMax.ts +87 -0
  740. package/src/metrics/utils/gauge.ts +22 -0
  741. package/src/metrics/utils/registryMetricCreator.ts +41 -0
  742. package/src/monitoring/clientStats.ts +297 -0
  743. package/src/monitoring/index.ts +2 -0
  744. package/src/monitoring/options.ts +19 -0
  745. package/src/monitoring/properties.ts +152 -0
  746. package/src/monitoring/service.ts +235 -0
  747. package/src/monitoring/system.ts +146 -0
  748. package/src/monitoring/types.ts +21 -0
  749. package/src/network/core/events.ts +59 -0
  750. package/src/network/core/index.ts +3 -0
  751. package/src/network/core/metrics.ts +304 -0
  752. package/src/network/core/networkCore.ts +599 -0
  753. package/src/network/core/networkCoreWorker.ts +176 -0
  754. package/src/network/core/networkCoreWorkerHandler.ts +284 -0
  755. package/src/network/core/types.ts +119 -0
  756. package/src/network/discv5/index.ts +132 -0
  757. package/src/network/discv5/types.ts +74 -0
  758. package/src/network/discv5/utils.ts +50 -0
  759. package/src/network/discv5/worker.ts +137 -0
  760. package/src/network/events.ts +51 -0
  761. package/src/network/forks.ts +94 -0
  762. package/src/network/gossip/constants.ts +15 -0
  763. package/src/network/gossip/encoding.ts +111 -0
  764. package/src/network/gossip/errors.ts +7 -0
  765. package/src/network/gossip/gossipsub.ts +384 -0
  766. package/src/network/gossip/index.ts +4 -0
  767. package/src/network/gossip/interface.ts +215 -0
  768. package/src/network/gossip/metrics.ts +71 -0
  769. package/src/network/gossip/scoringParameters.ts +333 -0
  770. package/src/network/gossip/topic.ts +332 -0
  771. package/src/network/index.ts +8 -0
  772. package/src/network/interface.ts +134 -0
  773. package/src/network/libp2p/error.ts +55 -0
  774. package/src/network/libp2p/index.ts +153 -0
  775. package/src/network/metadata.ts +162 -0
  776. package/src/network/network.ts +767 -0
  777. package/src/network/networkConfig.ts +12 -0
  778. package/src/network/options.ts +70 -0
  779. package/src/network/peers/client.ts +29 -0
  780. package/src/network/peers/datastore.ts +188 -0
  781. package/src/network/peers/discover.ts +647 -0
  782. package/src/network/peers/index.ts +2 -0
  783. package/src/network/peers/peerManager.ts +899 -0
  784. package/src/network/peers/peersData.ts +65 -0
  785. package/src/network/peers/score/constants.ts +34 -0
  786. package/src/network/peers/score/index.ts +4 -0
  787. package/src/network/peers/score/interface.ts +74 -0
  788. package/src/network/peers/score/score.ts +200 -0
  789. package/src/network/peers/score/store.ts +95 -0
  790. package/src/network/peers/score/utils.ts +37 -0
  791. package/src/network/peers/utils/assertPeerRelevance.ts +99 -0
  792. package/src/network/peers/utils/enrSubnetsDeserialize.ts +27 -0
  793. package/src/network/peers/utils/getConnectedPeerIds.ts +33 -0
  794. package/src/network/peers/utils/index.ts +4 -0
  795. package/src/network/peers/utils/prioritizePeers.ts +627 -0
  796. package/src/network/peers/utils/subnetMap.ts +88 -0
  797. package/src/network/processor/aggregatorTracker.ts +38 -0
  798. package/src/network/processor/extractSlotRootFns.ts +64 -0
  799. package/src/network/processor/gossipHandlers.ts +951 -0
  800. package/src/network/processor/gossipQueues/index.ts +114 -0
  801. package/src/network/processor/gossipQueues/indexed.ts +219 -0
  802. package/src/network/processor/gossipQueues/linear.ts +162 -0
  803. package/src/network/processor/gossipQueues/types.ts +57 -0
  804. package/src/network/processor/gossipValidatorFn.ts +142 -0
  805. package/src/network/processor/index.ts +496 -0
  806. package/src/network/processor/types.ts +27 -0
  807. package/src/network/reqresp/ReqRespBeaconNode.ts +373 -0
  808. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +101 -0
  809. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +49 -0
  810. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +114 -0
  811. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +62 -0
  812. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +144 -0
  813. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +88 -0
  814. package/src/network/reqresp/handlers/index.ts +78 -0
  815. package/src/network/reqresp/handlers/lightClientBootstrap.ts +31 -0
  816. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +21 -0
  817. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +21 -0
  818. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +39 -0
  819. package/src/network/reqresp/index.ts +2 -0
  820. package/src/network/reqresp/interface.ts +45 -0
  821. package/src/network/reqresp/protocols.ts +146 -0
  822. package/src/network/reqresp/rateLimit.ts +112 -0
  823. package/src/network/reqresp/score.ts +70 -0
  824. package/src/network/reqresp/types.ts +174 -0
  825. package/src/network/reqresp/utils/collect.ts +84 -0
  826. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +57 -0
  827. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +99 -0
  828. package/src/network/statusCache.ts +17 -0
  829. package/src/network/subnets/attnetsService.ts +385 -0
  830. package/src/network/subnets/index.ts +2 -0
  831. package/src/network/subnets/interface.ts +66 -0
  832. package/src/network/subnets/syncnetsService.ts +147 -0
  833. package/src/network/subnets/util.ts +63 -0
  834. package/src/network/util.ts +29 -0
  835. package/src/node/index.ts +2 -0
  836. package/src/node/nodejs.ts +349 -0
  837. package/src/node/notifier.ts +206 -0
  838. package/src/node/options.ts +51 -0
  839. package/src/node/utils/interop/deposits.ts +53 -0
  840. package/src/node/utils/interop/state.ts +59 -0
  841. package/src/node/utils/lightclient.ts +7 -0
  842. package/src/node/utils/state.ts +37 -0
  843. package/src/sync/backfill/backfill.ts +893 -0
  844. package/src/sync/backfill/errors.ts +23 -0
  845. package/src/sync/backfill/index.ts +1 -0
  846. package/src/sync/backfill/verify.ts +58 -0
  847. package/src/sync/constants.ts +71 -0
  848. package/src/sync/index.ts +2 -0
  849. package/src/sync/interface.ts +55 -0
  850. package/src/sync/options.ts +45 -0
  851. package/src/sync/range/batch.ts +455 -0
  852. package/src/sync/range/chain.ts +715 -0
  853. package/src/sync/range/range.ts +354 -0
  854. package/src/sync/range/utils/batches.ts +119 -0
  855. package/src/sync/range/utils/chainTarget.ts +62 -0
  856. package/src/sync/range/utils/hashBlocks.ts +27 -0
  857. package/src/sync/range/utils/index.ts +5 -0
  858. package/src/sync/range/utils/peerBalancer.ts +184 -0
  859. package/src/sync/range/utils/updateChains.ts +66 -0
  860. package/src/sync/sync.ts +290 -0
  861. package/src/sync/types.ts +57 -0
  862. package/src/sync/unknownBlock.ts +859 -0
  863. package/src/sync/utils/downloadByRange.ts +808 -0
  864. package/src/sync/utils/downloadByRoot.ts +560 -0
  865. package/src/sync/utils/pendingBlocksTree.ts +97 -0
  866. package/src/sync/utils/remoteSyncType.ts +144 -0
  867. package/src/util/address.ts +3 -0
  868. package/src/util/array.ts +311 -0
  869. package/src/util/asyncIterableToEvents.ts +164 -0
  870. package/src/util/binarySearch.ts +48 -0
  871. package/src/util/bitArray.ts +84 -0
  872. package/src/util/blobs.ts +210 -0
  873. package/src/util/bufferPool.ts +95 -0
  874. package/src/util/bytes.ts +11 -0
  875. package/src/util/chunkify.ts +27 -0
  876. package/src/util/clock.ts +212 -0
  877. package/src/util/dataColumns.ts +415 -0
  878. package/src/util/dependentRoot.ts +47 -0
  879. package/src/util/enum.ts +17 -0
  880. package/src/util/error.ts +56 -0
  881. package/src/util/eventLoop.ts +22 -0
  882. package/src/util/execution.ts +223 -0
  883. package/src/util/file.ts +52 -0
  884. package/src/util/forkChoice.ts +5 -0
  885. package/src/util/forkName.ts +20 -0
  886. package/src/util/graffiti.ts +39 -0
  887. package/src/util/hex.ts +9 -0
  888. package/src/util/index.ts +2 -0
  889. package/src/util/ip.ts +6 -0
  890. package/src/util/itTrigger.ts +49 -0
  891. package/src/util/kzg.ts +3 -0
  892. package/src/util/map.ts +77 -0
  893. package/src/util/metadata.ts +22 -0
  894. package/src/util/multifork.ts +69 -0
  895. package/src/util/numpy.ts +8 -0
  896. package/src/util/peerId.ts +16 -0
  897. package/src/util/profile.ts +54 -0
  898. package/src/util/promises.ts +14 -0
  899. package/src/util/queue/errors.ts +14 -0
  900. package/src/util/queue/fnQueue.ts +16 -0
  901. package/src/util/queue/index.ts +4 -0
  902. package/src/util/queue/itemQueue.ts +128 -0
  903. package/src/util/queue/options.ts +37 -0
  904. package/src/util/serializedCache.ts +20 -0
  905. package/src/util/set.ts +62 -0
  906. package/src/util/shuffle.ts +21 -0
  907. package/src/util/sortBy.ts +19 -0
  908. package/src/util/sszBytes.ts +481 -0
  909. package/src/util/strictEvents.ts +8 -0
  910. package/src/util/time.ts +13 -0
  911. package/src/util/timeSeries.ts +118 -0
  912. package/src/util/types.ts +31 -0
  913. package/src/util/workerEvents.ts +142 -0
  914. package/src/util/wrapError.ts +27 -0
@@ -0,0 +1,415 @@
1
+ import {digest} from "@chainsafe/as-sha256";
2
+ import {Tree} from "@chainsafe/persistent-merkle-tree";
3
+ import {ChainForkConfig} from "@lodestar/config";
4
+ import {ForkAll, ForkName, ForkPostFulu, KZG_COMMITMENTS_GINDEX, NUMBER_OF_COLUMNS} from "@lodestar/params";
5
+ import {signedBlockToSignedHeader} from "@lodestar/state-transition";
6
+ import {
7
+ BeaconBlockBody,
8
+ ColumnIndex,
9
+ CustodyIndex,
10
+ SSZTypesFor,
11
+ SignedBeaconBlock,
12
+ SignedBeaconBlockHeader,
13
+ deneb,
14
+ fulu,
15
+ ssz,
16
+ } from "@lodestar/types";
17
+ import {bytesToBigInt} from "@lodestar/utils";
18
+ import {BlockInputColumns} from "../chain/blocks/blockInput/blockInput.js";
19
+ import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
20
+ import {ChainEvent, ChainEventEmitter} from "../chain/emitter.js";
21
+ import {Metrics} from "../metrics/metrics.js";
22
+ import {NodeId} from "../network/subnets/index.js";
23
+ import {dataColumnMatrixRecovery} from "./blobs.js";
24
+ import {kzg} from "./kzg.js";
25
+
26
+ export enum RecoverResult {
27
+ // the recover is not attempted because we have less than `NUMBER_OF_COLUMNS / 2` columns
28
+ NotAttemptedLessThanHalf = "not_attempted_less_than_half",
29
+ // the recover is not attempted because it has full data columns
30
+ NotAttemptedFull = "not_attempted_full",
31
+ // the recover is a success and it helps resolve availability
32
+ SuccessResolved = "success_resolved",
33
+ // the recover is a success but it's late, availability is already resolved by either gossip or getBlobsV2
34
+ SuccessLate = "success_late",
35
+ // the recover failed
36
+ Failed = "failed",
37
+ }
38
+
39
+ export type CustodyConfigOpts = {
40
+ nodeId: NodeId;
41
+ config: ChainForkConfig;
42
+ initialCustodyGroupCount?: number;
43
+ };
44
+
45
+ export class CustodyConfig {
46
+ /**
47
+ * The number of custody groups the node should subscribe to
48
+ */
49
+ targetCustodyGroupCount: number;
50
+
51
+ /**
52
+ * The custody columns the node should subscribe to
53
+ */
54
+ custodyColumns: ColumnIndex[];
55
+
56
+ /**
57
+ * Custody columns map which column maps to which index in the array of columns custodied
58
+ * with zero representing it is not custodied
59
+ */
60
+ custodyColumnsIndex: Uint8Array;
61
+
62
+ /**
63
+ * The number of custody groups the node will sample
64
+ */
65
+ sampledGroupCount: number;
66
+
67
+ /**
68
+ * Custody groups sampled by the node as part of custody sampling
69
+ */
70
+ sampleGroups: CustodyIndex[];
71
+
72
+ /**
73
+ * Data columns sampled by the node as part of custody sampling
74
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/das-core.md#custody-sampling
75
+ *
76
+ * TODO: Consider race conditions if this updates during sync/backfill
77
+ */
78
+ sampledColumns: ColumnIndex[];
79
+
80
+ /**
81
+ * Subnets sampled by the node as part of custody sampling
82
+ */
83
+ sampledSubnets: number[];
84
+
85
+ private config: ChainForkConfig;
86
+ private nodeId: NodeId;
87
+
88
+ constructor(opts: CustodyConfigOpts) {
89
+ this.config = opts.config;
90
+ this.nodeId = opts.nodeId;
91
+ this.targetCustodyGroupCount = opts.initialCustodyGroupCount ?? this.config.CUSTODY_REQUIREMENT;
92
+ this.custodyColumns = getDataColumns(this.config, this.nodeId, this.targetCustodyGroupCount);
93
+ this.custodyColumnsIndex = this.getCustodyColumnsIndex(this.custodyColumns);
94
+ this.sampledGroupCount = Math.max(this.targetCustodyGroupCount, this.config.SAMPLES_PER_SLOT);
95
+ this.sampleGroups = getCustodyGroups(this.config, this.nodeId, this.sampledGroupCount);
96
+ this.sampledColumns = getDataColumns(this.config, this.nodeId, this.sampledGroupCount);
97
+ this.sampledSubnets = this.sampledColumns.map((columnIndex) =>
98
+ computeSubnetForDataColumn(this.config, columnIndex)
99
+ );
100
+ }
101
+
102
+ updateTargetCustodyGroupCount(targetCustodyGroupCount: number) {
103
+ this.targetCustodyGroupCount = targetCustodyGroupCount;
104
+ this.custodyColumns = getDataColumns(this.config, this.nodeId, this.targetCustodyGroupCount);
105
+ this.custodyColumnsIndex = this.getCustodyColumnsIndex(this.custodyColumns);
106
+ // TODO: Porting this over to match current behavior, but I think this incorrectly mixes units:
107
+ // SAMPLES_PER_SLOT is in columns, and CUSTODY_GROUP_COUNT is in groups
108
+ this.sampledGroupCount = Math.max(this.targetCustodyGroupCount, this.config.SAMPLES_PER_SLOT);
109
+ this.sampleGroups = getCustodyGroups(this.config, this.nodeId, this.sampledGroupCount);
110
+ this.sampledColumns = getDataColumns(this.config, this.nodeId, this.sampledGroupCount);
111
+ this.sampledSubnets = this.sampledColumns.map((columnIndex) =>
112
+ computeSubnetForDataColumn(this.config, columnIndex)
113
+ );
114
+ }
115
+
116
+ private getCustodyColumnsIndex(custodyColumns: ColumnIndex[]): Uint8Array {
117
+ // custody columns map which column maps to which index in the array of columns custodied
118
+ // with zero representing it is not custodied
119
+ const custodyColumnsIndex = new Uint8Array(NUMBER_OF_COLUMNS);
120
+ let custodyAtIndex = 1;
121
+ for (const columnIndex of custodyColumns) {
122
+ custodyColumnsIndex[columnIndex] = custodyAtIndex;
123
+ custodyAtIndex++;
124
+ }
125
+ return custodyColumnsIndex;
126
+ }
127
+ }
128
+
129
+ function computeSubnetForDataColumn(config: ChainForkConfig, columnIndex: ColumnIndex): number {
130
+ return columnIndex % config.DATA_COLUMN_SIDECAR_SUBNET_COUNT;
131
+ }
132
+
133
+ /**
134
+ * Calculate the number of custody groups the node should subscribe to based on the node's effective balance
135
+ *
136
+ * SPEC FUNCTION
137
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.3/specs/fulu/validator.md#validator-custody
138
+ */
139
+ export function getValidatorsCustodyRequirement(config: ChainForkConfig, effectiveBalances: number[]): number {
140
+ if (effectiveBalances.length === 0) {
141
+ return config.CUSTODY_REQUIREMENT;
142
+ }
143
+
144
+ const totalNodeEffectiveBalance = effectiveBalances.reduce((total, effectiveBalance) => {
145
+ return total + effectiveBalance;
146
+ }, 0);
147
+
148
+ // Must custody one group for every BALANCE_PER_ADDITIONAL_CUSTODY_GROUP of effective balance
149
+ let validatorsCustodyRequirement = Math.floor(
150
+ totalNodeEffectiveBalance / config.BALANCE_PER_ADDITIONAL_CUSTODY_GROUP
151
+ );
152
+
153
+ // Any node with at least 1 validator must custody at least VALIDATOR_CUSTODY_REQUIREMENT
154
+ validatorsCustodyRequirement = Math.max(validatorsCustodyRequirement, config.VALIDATOR_CUSTODY_REQUIREMENT);
155
+
156
+ // Cannot custody more than NUMBER_OF_CUSTODY_GROUPS
157
+ validatorsCustodyRequirement = Math.min(validatorsCustodyRequirement, config.NUMBER_OF_CUSTODY_GROUPS);
158
+
159
+ return validatorsCustodyRequirement;
160
+ }
161
+
162
+ /**
163
+ * Converts a custody group to an array of column indices. Should be 1-1 as long there are 128
164
+ * columns and 128 custody groups.
165
+ *
166
+ * SPEC FUNCTION
167
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/das-core.md#compute_columns_for_custody_group
168
+ */
169
+ export function computeColumnsForCustodyGroup(config: ChainForkConfig, custodyIndex: CustodyIndex): ColumnIndex[] {
170
+ if (custodyIndex >= config.NUMBER_OF_CUSTODY_GROUPS) {
171
+ throw Error(`Invalid custody index ${custodyIndex} >= ${config.NUMBER_OF_CUSTODY_GROUPS}`);
172
+ }
173
+ const columnsPerCustodyGroup = Number(NUMBER_OF_COLUMNS / config.NUMBER_OF_CUSTODY_GROUPS);
174
+ const columnIndexes = [];
175
+ for (let i = 0; i < columnsPerCustodyGroup; i++) {
176
+ columnIndexes.push(config.NUMBER_OF_CUSTODY_GROUPS * i + custodyIndex);
177
+ }
178
+ columnIndexes.sort((a, b) => a - b);
179
+ return columnIndexes;
180
+ }
181
+
182
+ /**
183
+ * Converts nodeId and a the number of custody groups to an array of custody indices. Indexes must be
184
+ * further converted to column indices
185
+ *
186
+ * SPEC FUNCTION
187
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/das-core.md#get_custody_groups
188
+ */
189
+ export function getCustodyGroups(config: ChainForkConfig, nodeId: NodeId, custodyGroupCount: number): CustodyIndex[] {
190
+ if (custodyGroupCount > config.NUMBER_OF_CUSTODY_GROUPS) {
191
+ throw Error(`Invalid custody group count ${custodyGroupCount} > ${config.NUMBER_OF_CUSTODY_GROUPS}`);
192
+ }
193
+
194
+ // Skip computation if all groups are custodied
195
+ if (custodyGroupCount === config.NUMBER_OF_CUSTODY_GROUPS) {
196
+ return Array.from({length: config.NUMBER_OF_CUSTODY_GROUPS}, (_, i) => i);
197
+ }
198
+
199
+ const custodyGroups: CustodyIndex[] = [];
200
+ // nodeId is in bigendian and all computes are in little endian
201
+ let currentId = bytesToBigInt(nodeId, "be");
202
+ while (custodyGroups.length < custodyGroupCount) {
203
+ // could be optimized
204
+ const currentIdBytes = ssz.UintBn256.serialize(currentId);
205
+ const custodyGroup = Number(
206
+ ssz.UintBn64.deserialize(digest(currentIdBytes).slice(0, 8)) % BigInt(config.NUMBER_OF_CUSTODY_GROUPS)
207
+ );
208
+
209
+ if (!custodyGroups.includes(custodyGroup)) {
210
+ custodyGroups.push(custodyGroup);
211
+ }
212
+
213
+ const willOverflow = currentIdBytes.reduce((acc, elem) => acc && elem === 0xff, true);
214
+ if (willOverflow) {
215
+ currentId = BigInt(0);
216
+ } else {
217
+ currentId++;
218
+ }
219
+ }
220
+
221
+ custodyGroups.sort((a, b) => a - b);
222
+ return custodyGroups;
223
+ }
224
+
225
+ export function computePostFuluKzgCommitmentsInclusionProof(
226
+ fork: ForkName,
227
+ body: BeaconBlockBody
228
+ ): fulu.KzgCommitmentsInclusionProof {
229
+ const bodyView = (ssz[fork].BeaconBlockBody as SSZTypesFor<ForkAll, "BeaconBlockBody">).toView(body);
230
+ return new Tree(bodyView.node).getSingleProof(BigInt(KZG_COMMITMENTS_GINDEX));
231
+ }
232
+
233
+ export function getDataColumns(config: ChainForkConfig, nodeId: NodeId, custodyGroupCount: number): ColumnIndex[] {
234
+ return getCustodyGroups(config, nodeId, custodyGroupCount)
235
+ .flatMap((custodyIndex) => computeColumnsForCustodyGroup(config, custodyIndex))
236
+ .sort((a, b) => a - b);
237
+ }
238
+
239
+ /**
240
+ * Computes the cells for each blob and combines them with cell proofs.
241
+ * Similar to the computeMatrix function described below.
242
+ *
243
+ * SPEC FUNCTION (note: spec currently computes proofs, but we already have them)
244
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/das-core.md#compute_matrix
245
+ */
246
+ export async function getCellsAndProofs(
247
+ blobBundles: fulu.BlobAndProofV2[]
248
+ ): Promise<{cells: Uint8Array[]; proofs: Uint8Array[]}[]> {
249
+ const blobsAndProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[] = [];
250
+ for (const {blob, proofs} of blobBundles) {
251
+ const cells = await kzg.asyncComputeCells(blob);
252
+ blobsAndProofs.push({cells, proofs});
253
+ }
254
+ return blobsAndProofs;
255
+ }
256
+
257
+ /**
258
+ * Given a signed block header and the commitments, inclusion proof, cells/proofs associated with
259
+ * each blob in the block, assemble the sidecars which can be distributed to peers.
260
+ *
261
+ * SPEC FUNCTION
262
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars
263
+ */
264
+ export function getDataColumnSidecars(
265
+ signedBlockHeader: SignedBeaconBlockHeader,
266
+ kzgCommitments: deneb.KZGCommitment[],
267
+ kzgCommitmentsInclusionProof: fulu.KzgCommitmentsInclusionProof,
268
+ cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
269
+ ): fulu.DataColumnSidecars {
270
+ if (cellsAndKzgProofs.length !== kzgCommitments.length) {
271
+ throw Error("Invalid cellsAndKzgProofs length for getDataColumnSidecars");
272
+ }
273
+
274
+ const sidecars: fulu.DataColumnSidecars = [];
275
+ for (let columnIndex = 0; columnIndex < NUMBER_OF_COLUMNS; columnIndex++) {
276
+ const columnCells = [];
277
+ const columnProofs = [];
278
+ for (const {cells, proofs} of cellsAndKzgProofs) {
279
+ columnCells.push(cells[columnIndex]);
280
+ columnProofs.push(proofs[columnIndex]);
281
+ }
282
+ sidecars.push({
283
+ index: columnIndex,
284
+ column: columnCells,
285
+ kzgCommitments,
286
+ kzgProofs: columnProofs,
287
+ signedBlockHeader,
288
+ kzgCommitmentsInclusionProof,
289
+ });
290
+ }
291
+ return sidecars;
292
+ }
293
+
294
+ /**
295
+ * Given a signed block and the cells/proofs associated with each blob in the
296
+ * block, assemble the sidecars which can be distributed to peers.
297
+ *
298
+ * SPEC FUNCTION
299
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars_from_block
300
+ */
301
+ export function getDataColumnSidecarsFromBlock(
302
+ config: ChainForkConfig,
303
+ signedBlock: SignedBeaconBlock<ForkPostFulu>,
304
+ cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
305
+ ): fulu.DataColumnSidecars {
306
+ const blobKzgCommitments = signedBlock.message.body.blobKzgCommitments;
307
+
308
+ // No need to create data column sidecars if there are no blobs
309
+ if (blobKzgCommitments.length === 0) {
310
+ return [];
311
+ }
312
+
313
+ const fork = config.getForkName(signedBlock.message.slot);
314
+ const signedBlockHeader = signedBlockToSignedHeader(config, signedBlock);
315
+
316
+ const kzgCommitmentsInclusionProof = computePostFuluKzgCommitmentsInclusionProof(fork, signedBlock.message.body);
317
+
318
+ return getDataColumnSidecars(signedBlockHeader, blobKzgCommitments, kzgCommitmentsInclusionProof, cellsAndKzgProofs);
319
+ }
320
+
321
+ /**
322
+ * Given a DataColumnSidecar and the cells/proofs associated with each blob corresponding
323
+ * to the commitments it contains, assemble all sidecars for distribution to peers.
324
+ *
325
+ * SPEC FUNCTION
326
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars_from_column_sidecar
327
+ */
328
+ export function getDataColumnSidecarsFromColumnSidecar(
329
+ sidecar: fulu.DataColumnSidecar,
330
+ cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
331
+ ): fulu.DataColumnSidecars {
332
+ return getDataColumnSidecars(
333
+ sidecar.signedBlockHeader,
334
+ sidecar.kzgCommitments,
335
+ sidecar.kzgCommitmentsInclusionProof,
336
+ cellsAndKzgProofs
337
+ );
338
+ }
339
+
340
+ /**
341
+ * If we receive more than half of NUMBER_OF_COLUMNS (64) we should recover all remaining columns
342
+ */
343
+ export async function recoverDataColumnSidecars(
344
+ blockInput: BlockInputColumns,
345
+ emitter: ChainEventEmitter,
346
+ metrics: Metrics | null
347
+ ): Promise<DataColumnReconstructionCode> {
348
+ const existingColumns = blockInput.getAllColumns();
349
+ const columnCount = existingColumns.length;
350
+ if (columnCount >= NUMBER_OF_COLUMNS) {
351
+ // We have all columns
352
+ return DataColumnReconstructionCode.NotAttemptedAlreadyFull;
353
+ }
354
+
355
+ if (columnCount < NUMBER_OF_COLUMNS / 2) {
356
+ // We don't have enough columns to recover
357
+ return DataColumnReconstructionCode.NotAttemptedHaveLessThanHalf;
358
+ }
359
+
360
+ metrics?.recoverDataColumnSidecars.custodyBeforeReconstruction.set(columnCount);
361
+ const partialSidecars = new Map<number, fulu.DataColumnSidecar>();
362
+ for (const columnSidecar of existingColumns) {
363
+ // the more columns we put, the slower the recover
364
+ if (partialSidecars.size >= NUMBER_OF_COLUMNS / 2) {
365
+ break;
366
+ }
367
+ partialSidecars.set(columnSidecar.index, columnSidecar);
368
+ }
369
+
370
+ const timer = metrics?.recoverDataColumnSidecars.recoverTime.startTimer();
371
+ // if this function throws, we catch at the consumer side
372
+ const fullSidecars = await dataColumnMatrixRecovery(partialSidecars).catch(() => null);
373
+ timer?.();
374
+ if (fullSidecars == null) {
375
+ return DataColumnReconstructionCode.NullReturned;
376
+ }
377
+
378
+ if (blockInput.getAllColumns().length === NUMBER_OF_COLUMNS) {
379
+ // either gossip or getBlobsV2 resolved availability while we were recovering
380
+ return DataColumnReconstructionCode.SuccessLate;
381
+ }
382
+
383
+ // Once the node obtains a column through reconstruction,
384
+ // the node MUST expose the new column as if it had received it over the network.
385
+ // If the node is subscribed to the subnet corresponding to the column,
386
+ // it MUST send the reconstructed DataColumnSidecar to its topic mesh neighbors.
387
+ // If instead the node is not subscribed to the corresponding subnet,
388
+ // it SHOULD still expose the availability of the DataColumnSidecar as part of the gossip emission process.
389
+ // After exposing the reconstructed DataColumnSidecar to the network,
390
+ // the node MAY delete the DataColumnSidecar if it is not part of the node's custody requirement.
391
+ const sidecarsToPublish = [];
392
+ for (const columnSidecar of fullSidecars) {
393
+ if (!blockInput.hasColumn(columnSidecar.index)) {
394
+ blockInput.addColumn({
395
+ blockRootHex: blockInput.blockRootHex,
396
+ columnSidecar,
397
+ seenTimestampSec: Date.now() / 1000,
398
+ source: BlockInputSource.recovery,
399
+ });
400
+ sidecarsToPublish.push(columnSidecar);
401
+ }
402
+ }
403
+ emitter.emit(ChainEvent.publishDataColumns, sidecarsToPublish);
404
+
405
+ return DataColumnReconstructionCode.SuccessResolved;
406
+ }
407
+
408
+ export enum DataColumnReconstructionCode {
409
+ NotAttemptedAlreadyFull = "not_attempted_full",
410
+ NotAttemptedHaveLessThanHalf = "not_attempted_less_than_half",
411
+ NullReturned = "null_returned",
412
+ SuccessLate = "success_late",
413
+ SuccessResolved = "success_resolved",
414
+ Failed = "failed",
415
+ }
@@ -0,0 +1,47 @@
1
+ import {EpochDifference, IForkChoice, ProtoBlock} from "@lodestar/fork-choice";
2
+ import {Epoch, RootHex} from "@lodestar/types";
3
+
4
+ /**
5
+ * Get dependent root of a shuffling given attestation epoch and head block.
6
+ */
7
+ export function getShufflingDependentRoot(
8
+ forkChoice: IForkChoice,
9
+ attEpoch: Epoch,
10
+ blockEpoch: Epoch,
11
+ attHeadBlock: ProtoBlock
12
+ ): RootHex {
13
+ let shufflingDependentRoot: RootHex;
14
+ if (blockEpoch === attEpoch) {
15
+ // current shuffling, this is equivalent to `headState.currentShuffling`
16
+ // given blockEpoch = attEpoch = n
17
+ // epoch: (n-2) (n-1) n (n+1)
18
+ // |-------|-------|-------|-------|
19
+ // attHeadBlock ------------------------^
20
+ // shufflingDependentRoot ------^
21
+ shufflingDependentRoot = forkChoice.getDependentRoot(attHeadBlock, EpochDifference.previous);
22
+ } else if (blockEpoch === attEpoch - 1) {
23
+ // next shuffling, this is equivalent to `headState.nextShuffling`
24
+ // given blockEpoch = n-1, attEpoch = n
25
+ // epoch: (n-2) (n-1) n (n+1)
26
+ // |-------|-------|-------|-------|
27
+ // attHeadBlock -------------------^
28
+ // shufflingDependentRoot ------^
29
+ shufflingDependentRoot = forkChoice.getDependentRoot(attHeadBlock, EpochDifference.current);
30
+ } else if (blockEpoch < attEpoch - 1) {
31
+ // this never happens with default chain option of maxSkipSlots = 32, however we still need to handle it
32
+ // check the verifyHeadBlockAndTargetRoot() function above
33
+ // given blockEpoch = n-2, attEpoch = n
34
+ // epoch: (n-2) (n-1) n (n+1)
35
+ // |-------|-------|-------|-------|
36
+ // attHeadBlock -----------^
37
+ // shufflingDependentRoot -----^
38
+ shufflingDependentRoot = attHeadBlock.blockRoot;
39
+ // use lodestar_gossip_attestation_head_slot_to_attestation_slot metric to track this case
40
+ } else {
41
+ // blockEpoch > attEpoch
42
+ // should not happen, handled in verifyAttestationTargetRoot
43
+ throw Error(`attestation epoch ${attEpoch} is before head block epoch ${blockEpoch}`);
44
+ }
45
+
46
+ return shufflingDependentRoot;
47
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Given an enum
3
+ * ```ts
4
+ * enum A {
5
+ * a = "a",
6
+ * b = "b"
7
+ * }
8
+ * ```
9
+ * returns
10
+ * ```ts
11
+ * { a: 0,
12
+ * b: 1 }
13
+ * ```
14
+ */
15
+ export function enumToIndexMap<T>(enumVar: T): Record<keyof T, number> {
16
+ return Object.fromEntries(Object.keys(enumVar as object).map((key, i) => [key, i])) as Record<keyof T, number>;
17
+ }
@@ -0,0 +1,56 @@
1
+ import {REQUEST_ERROR_CLASS_NAME, RESPONSE_ERROR_CLASS_NAME, RequestError, ResponseError} from "@lodestar/reqresp";
2
+ import {FromObjectFn, LodestarError, LodestarErrorObject} from "@lodestar/utils";
3
+
4
+ /**
5
+ * Error that can be passed across thread boundaries
6
+ */
7
+ export type ThreadBoundaryError = {error: null; object: LodestarErrorObject} | {error: Error; object: null};
8
+
9
+ /**
10
+ * Structured clone does not work with Error objects.
11
+ * For LodestarError, we want to specify the LodestarErrorObject with className so that we can deserialize later.
12
+ */
13
+ export function toThreadBoundaryError(error: Error): ThreadBoundaryError {
14
+ if (error instanceof LodestarError) {
15
+ return {error: null, object: error.toObject()};
16
+ }
17
+
18
+ // note that non-clonable errors will be deserialized as a generic Error object
19
+ return {error, object: null};
20
+ }
21
+
22
+ /**
23
+ * Only RequestError and ResponseError pass through thread boundaries.
24
+ * If we pass more errors in the future through thread boundaries, we need to add them here.
25
+ */
26
+ const fromObjectFnRegistry = new Map<string, FromObjectFn>([
27
+ [RESPONSE_ERROR_CLASS_NAME, ResponseError.fromObject],
28
+ [REQUEST_ERROR_CLASS_NAME, RequestError.fromObject],
29
+ ]);
30
+
31
+ /**
32
+ * If error is LodestarError, deserialize it from the LodestarErrorObject.
33
+ * Else use the generic Error object.
34
+ */
35
+ export function fromThreadBoundaryError(error: ThreadBoundaryError): Error {
36
+ if (error.error) {
37
+ // this is always a generic Error object
38
+ return error.error;
39
+ }
40
+
41
+ let clonedError: Error;
42
+ const fromObjectFn = fromObjectFnRegistry.get(error.object.className);
43
+ if (fromObjectFn) {
44
+ clonedError = fromObjectFn(error.object);
45
+ } else {
46
+ // should not happen as a LodestarError class should implement "fromObject" method and register it
47
+ // try our best to clone the error with the same stack trace
48
+ clonedError = new LodestarError(
49
+ {code: "UNKNOWN_ERROR_CLASS"},
50
+ `Unknown error class ${error.object.className}`,
51
+ error.object.stack
52
+ );
53
+ }
54
+
55
+ return clonedError;
56
+ }
@@ -0,0 +1,22 @@
1
+ import {sleep} from "@lodestar/utils";
2
+
3
+ /**
4
+ * Schedules in 1ms a Promise to be resolved during the `timers` phase.
5
+ * Awaiting this Promise will force the whole event queue to be executed.
6
+ *
7
+ * Caution: as the execution of the event queue might lead to new enqueuing, this might take significant time.
8
+ */
9
+ export function nextEventLoop(): Promise<void> {
10
+ // `setTimeout` delay is at least 1ms
11
+ // Say https://nodejs.org/api/timers.html#settimeoutcallback-delay-args
12
+ return sleep(0);
13
+ }
14
+
15
+ /**
16
+ * Schedules in 1ms a callback for execution during the next `timers` phase.
17
+ */
18
+ export function callInNextEventLoop(callback: () => void): void {
19
+ // `setTimeout` delay is at least 1ms
20
+ // Say https://nodejs.org/api/timers.html#settimeoutcallback-delay-args
21
+ setTimeout(callback, 0);
22
+ }