@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,885 +0,0 @@
1
- import {BitArray} from "@chainsafe/ssz";
2
- import {BeaconConfig} from "@lodestar/config";
3
- import {ProtoBlock} from "@lodestar/fork-choice";
4
- import {
5
- ATTESTATION_SUBNET_COUNT,
6
- DOMAIN_BEACON_ATTESTER,
7
- ForkName,
8
- ForkPostElectra,
9
- ForkPreElectra,
10
- ForkSeq,
11
- SLOTS_PER_EPOCH,
12
- isForkPostElectra,
13
- } from "@lodestar/params";
14
- import {
15
- EpochCacheError,
16
- EpochCacheErrorCode,
17
- EpochShuffling,
18
- SingleSignatureSet,
19
- computeEpochAtSlot,
20
- computeSigningRoot,
21
- computeStartSlotAtEpoch,
22
- createSingleSignatureSetFromComponents,
23
- } from "@lodestar/state-transition";
24
- import {
25
- CommitteeIndex,
26
- Epoch,
27
- IndexedAttestation,
28
- Root,
29
- RootHex,
30
- SingleAttestation,
31
- Slot,
32
- SubnetID,
33
- ValidatorIndex,
34
- isElectraSingleAttestation,
35
- phase0,
36
- ssz,
37
- } from "@lodestar/types";
38
- import {assert, toRootHex} from "@lodestar/utils";
39
- import {MAXIMUM_GOSSIP_CLOCK_DISPARITY_SEC} from "../../constants/index.js";
40
- import {sszDeserializeSingleAttestation} from "../../network/gossip/topic.js";
41
- import {getShufflingDependentRoot} from "../../util/dependentRoot.js";
42
- import {
43
- getAggregationBitsFromAttestationSerialized,
44
- getAttDataFromSignedAggregateAndProofElectra,
45
- getAttDataFromSignedAggregateAndProofPhase0,
46
- getAttesterIndexFromSingleAttestationSerialized,
47
- getCommitteeIndexFromSingleAttestationSerialized,
48
- getSignatureFromAttestationSerialized,
49
- getSignatureFromSingleAttestationSerialized,
50
- } from "../../util/sszBytes.js";
51
- import {Result, wrapError} from "../../util/wrapError.js";
52
- import {AttestationError, AttestationErrorCode, GossipAction} from "../errors/index.js";
53
- import {IBeaconChain} from "../interface.js";
54
- import {RegenCaller} from "../regen/index.js";
55
- import {
56
- AttestationDataCacheEntry,
57
- PRE_ELECTRA_SINGLE_ATTESTATION_COMMITTEE_INDEX,
58
- SeenAttDataKey,
59
- } from "../seenCache/seenAttestationData.js";
60
-
61
- export type BatchResult = {
62
- results: Result<AttestationValidationResult>[];
63
- batchableBls: boolean;
64
- };
65
-
66
- export type AttestationValidationResult = {
67
- attestation: SingleAttestation;
68
- indexedAttestation: IndexedAttestation;
69
- subnet: SubnetID;
70
- attDataRootHex: RootHex;
71
- committeeIndex: CommitteeIndex;
72
- validatorCommitteeIndex: number;
73
- committeeSize: number;
74
- };
75
-
76
- export type AttestationOrBytes = ApiAttestation | GossipAttestation;
77
-
78
- /** attestation from api */
79
- export type ApiAttestation = {attestation: SingleAttestation; serializedData: null};
80
-
81
- /** attestation from gossip */
82
- export type GossipAttestation = {
83
- attestation: null;
84
- serializedData: Uint8Array;
85
- // available in NetworkProcessor since we check for unknown block root attestations
86
- attSlot: Slot;
87
- // for indexed gossip queue we have attDataBase64
88
- attDataBase64: SeenAttDataKey;
89
- subnet: SubnetID;
90
- };
91
-
92
- export type Step0Result = AttestationValidationResult & {
93
- signatureSet: SingleSignatureSet;
94
- validatorIndex: number;
95
- };
96
-
97
- /**
98
- * Verify gossip attestations of the same attestation data. The main advantage is we can batch verify bls signatures
99
- * through verifySignatureSetsSameMessage bls api to improve performance.
100
- * - If there are less than 2 signatures (minSameMessageSignatureSetsToBatch), verify each signature individually with batchable = true
101
- * - do not prioritize bls signature set
102
- */
103
- export async function validateGossipAttestationsSameAttData(
104
- fork: ForkName,
105
- chain: IBeaconChain,
106
- attestationOrBytesArr: GossipAttestation[],
107
- // for unit test, consumers do not need to pass this
108
- step0ValidationFn = validateAttestationNoSignatureCheck
109
- ): Promise<BatchResult> {
110
- if (attestationOrBytesArr.length === 0) {
111
- return {results: [], batchableBls: false};
112
- }
113
-
114
- // step0: do all verifications except for signature verification
115
- // this for await pattern below seems to be bad but it's not
116
- // for seen AttestationData, it's the same to await Promise.all() pattern
117
- // for unseen AttestationData, the 1st call will be cached and the rest will be fast
118
- const step0ResultOrErrors: Result<Step0Result>[] = [];
119
- for (const attestationOrBytes of attestationOrBytesArr) {
120
- const {subnet} = attestationOrBytes;
121
- const resultOrError = await wrapError(step0ValidationFn(fork, chain, attestationOrBytes, subnet));
122
- step0ResultOrErrors.push(resultOrError);
123
- }
124
-
125
- // step1: verify signatures of all valid attestations
126
- // map new index to index in resultOrErrors
127
- const newIndexToOldIndex = new Map<number, number>();
128
- const signatureSets: SingleSignatureSet[] = [];
129
- let newIndex = 0;
130
- const step0Results: Step0Result[] = [];
131
- for (const [i, resultOrError] of step0ResultOrErrors.entries()) {
132
- if (resultOrError.err) {
133
- continue;
134
- }
135
- step0Results.push(resultOrError.result);
136
- newIndexToOldIndex.set(newIndex, i);
137
- signatureSets.push(resultOrError.result.signatureSet);
138
- newIndex++;
139
- }
140
-
141
- let signatureValids: boolean[];
142
- const batchableBls = signatureSets.length >= chain.opts.minSameMessageSignatureSetsToBatch;
143
- if (batchableBls) {
144
- // all signature sets should have same signing root since we filtered in network processor
145
- signatureValids = await chain.bls.verifySignatureSetsSameMessage(
146
- signatureSets.map((set) => ({publicKey: set.pubkey, signature: set.signature})),
147
- signatureSets[0].signingRoot
148
- );
149
- } else {
150
- // don't want to block the main thread if there are too few signatures
151
- signatureValids = await Promise.all(
152
- signatureSets.map((set) => chain.bls.verifySignatureSets([set], {batchable: true}))
153
- );
154
- }
155
-
156
- // phase0 post validation
157
- for (const [i, sigValid] of signatureValids.entries()) {
158
- const oldIndex = newIndexToOldIndex.get(i);
159
- if (oldIndex == null) {
160
- // should not happen
161
- throw Error(`Cannot get old index for index ${i}`);
162
- }
163
-
164
- const {validatorIndex, attestation} = step0Results[i];
165
- const targetEpoch = attestation.data.target.epoch;
166
- if (sigValid) {
167
- // Now that the attestation has been fully verified, store that we have received a valid attestation from this validator.
168
- //
169
- // It's important to double check that the attestation still hasn't been observed, since
170
- // there can be a race-condition if we receive two attestations at the same time and
171
- // process them in different threads.
172
- if (chain.seenAttesters.isKnown(targetEpoch, validatorIndex)) {
173
- step0ResultOrErrors[oldIndex] = {
174
- err: new AttestationError(GossipAction.IGNORE, {
175
- code: AttestationErrorCode.ATTESTATION_ALREADY_KNOWN,
176
- targetEpoch,
177
- validatorIndex,
178
- }),
179
- };
180
- }
181
-
182
- // valid
183
- chain.seenAttesters.add(targetEpoch, validatorIndex);
184
- } else {
185
- step0ResultOrErrors[oldIndex] = {
186
- err: new AttestationError(GossipAction.IGNORE, {
187
- code: AttestationErrorCode.INVALID_SIGNATURE,
188
- }),
189
- };
190
- }
191
- }
192
-
193
- return {
194
- results: step0ResultOrErrors,
195
- batchableBls,
196
- };
197
- }
198
-
199
- /**
200
- * Validate attestations from api
201
- * - no need to deserialize attestation
202
- * - no subnet
203
- * - prioritize bls signature set
204
- */
205
- export async function validateApiAttestation(
206
- fork: ForkName,
207
- chain: IBeaconChain,
208
- attestationOrBytes: ApiAttestation
209
- ): Promise<AttestationValidationResult> {
210
- const prioritizeBls = true;
211
- const subnet = null;
212
-
213
- try {
214
- const step0Result = await validateAttestationNoSignatureCheck(fork, chain, attestationOrBytes, subnet);
215
- const {attestation, signatureSet, validatorIndex} = step0Result;
216
- const isValid = await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls});
217
-
218
- if (isValid) {
219
- const targetEpoch = attestation.data.target.epoch;
220
- chain.seenAttesters.add(targetEpoch, validatorIndex);
221
- return step0Result;
222
- }
223
-
224
- throw new AttestationError(GossipAction.IGNORE, {
225
- code: AttestationErrorCode.INVALID_SIGNATURE,
226
- });
227
- } catch (err) {
228
- if (err instanceof EpochCacheError && err.type.code === EpochCacheErrorCode.COMMITTEE_INDEX_OUT_OF_RANGE) {
229
- throw new AttestationError(GossipAction.IGNORE, {
230
- code: AttestationErrorCode.BAD_TARGET_EPOCH,
231
- });
232
- }
233
- throw err;
234
- }
235
- }
236
-
237
- /**
238
- * Only deserialize the single attestation if needed, use the cached AttestationData instead
239
- * This is to avoid deserializing similar attestation multiple times which could help the gc
240
- */
241
- async function validateAttestationNoSignatureCheck(
242
- fork: ForkName,
243
- chain: IBeaconChain,
244
- attestationOrBytes: AttestationOrBytes,
245
- /** Optional, to allow verifying attestations through API with unknown subnet */
246
- subnet: SubnetID | null
247
- ): Promise<Step0Result> {
248
- // Do checks in this order:
249
- // - do early checks (w/o indexed attestation)
250
- // - > obtain indexed attestation and committes per slot
251
- // - do middle checks w/ indexed attestation
252
- // - > verify signature
253
- // - do late checks w/ a valid signature
254
-
255
- // verify_early_checks
256
- // Run the checks that happen before an indexed attestation is constructed.
257
-
258
- let attestationOrCache:
259
- | {attestation: SingleAttestation; cache: null}
260
- | {attestation: null; cache: AttestationDataCacheEntry; serializedData: Uint8Array};
261
- let attDataKey: SeenAttDataKey | null = null;
262
- if (attestationOrBytes.serializedData) {
263
- // gossip
264
- const attSlot = attestationOrBytes.attSlot;
265
- attDataKey = getSeenAttDataKeyFromGossipAttestation(attestationOrBytes);
266
- const committeeIndexForLookup = isForkPostElectra(fork)
267
- ? (getCommitteeIndexFromAttestationOrBytes(fork, attestationOrBytes) ?? 0)
268
- : PRE_ELECTRA_SINGLE_ATTESTATION_COMMITTEE_INDEX;
269
- const cachedAttData =
270
- attDataKey !== null ? chain.seenAttestationDatas.get(attSlot, committeeIndexForLookup, attDataKey) : null;
271
- if (cachedAttData === null) {
272
- const attestation = sszDeserializeSingleAttestation(fork, attestationOrBytes.serializedData);
273
- // only deserialize on the first AttestationData that's not cached
274
- attestationOrCache = {attestation, cache: null};
275
- } else {
276
- attestationOrCache = {attestation: null, cache: cachedAttData, serializedData: attestationOrBytes.serializedData};
277
- }
278
- } else {
279
- // api
280
- attDataKey = null;
281
- attestationOrCache = {attestation: attestationOrBytes.attestation, cache: null};
282
- }
283
-
284
- const attData: phase0.AttestationData = attestationOrCache.attestation
285
- ? attestationOrCache.attestation.data
286
- : attestationOrCache.cache.attestationData;
287
- const attSlot = attData.slot;
288
- const attEpoch = computeEpochAtSlot(attSlot);
289
- const attTarget = attData.target;
290
- const targetEpoch = attTarget.epoch;
291
- let committeeIndex: number | null;
292
- if (attestationOrCache.attestation) {
293
- if (isElectraSingleAttestation(attestationOrCache.attestation)) {
294
- // api or first time validation of a gossip attestation
295
- committeeIndex = attestationOrCache.attestation.committeeIndex;
296
-
297
- // [REJECT] attestation.data.index == 0
298
- if (attData.index !== 0) {
299
- throw new AttestationError(GossipAction.REJECT, {code: AttestationErrorCode.NON_ZERO_ATTESTATION_DATA_INDEX});
300
- }
301
- } else {
302
- // phase0 attestation
303
- committeeIndex = attData.index;
304
- }
305
- } else {
306
- // found a seen AttestationData
307
- committeeIndex = attestationOrCache.cache.committeeIndex;
308
- }
309
-
310
- chain.metrics?.gossipAttestation.attestationSlotToClockSlot.observe(
311
- {caller: RegenCaller.validateGossipAttestation},
312
- chain.clock.currentSlot - attSlot
313
- );
314
-
315
- if (!attestationOrCache.cache) {
316
- // [REJECT] The attestation's epoch matches its target -- i.e. attestation.data.target.epoch == compute_epoch_at_slot(attestation.data.slot)
317
- if (targetEpoch !== attEpoch) {
318
- throw new AttestationError(GossipAction.REJECT, {
319
- code: AttestationErrorCode.BAD_TARGET_EPOCH,
320
- });
321
- }
322
-
323
- // Pre-deneb:
324
- // [IGNORE] attestation.data.slot is within the last ATTESTATION_PROPAGATION_SLOT_RANGE slots (within a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance)
325
- // -- i.e. attestation.data.slot + ATTESTATION_PROPAGATION_SLOT_RANGE >= current_slot >= attestation.data.slot
326
- // (a client MAY queue future attestations for processing at the appropriate slot).
327
- // Post-deneb:
328
- // [IGNORE] `attestation.data.slot` is equal to or earlier than the `current_slot` (with a `MAXIMUM_GOSSIP_CLOCK_DISPARITY` allowance)
329
- // -- i.e. `attestation.data.slot <= current_slot`
330
- // (a client MAY queue future attestation for processing at the appropriate slot).
331
- // [IGNORE] the epoch of `attestation.data.slot` is either the current or previous epoch
332
- // (with a `MAXIMUM_GOSSIP_CLOCK_DISPARITY` allowance)
333
- // -- i.e. `compute_epoch_at_slot(attestation.data.slot) in (get_previous_epoch(state), get_current_epoch(state))`
334
- verifyPropagationSlotRange(fork, chain, attestationOrCache.attestation.data.slot);
335
- }
336
-
337
- let aggregationBits: BitArray | null = null;
338
- let validatorCommitteeIndex: number | null = null;
339
- if (!isForkPostElectra(fork)) {
340
- // [REJECT] The attestation is unaggregated -- that is, it has exactly one participating validator
341
- // (len([bit for bit in attestation.aggregation_bits if bit]) == 1, i.e. exactly 1 bit is set).
342
- // > TODO: Do this check **before** getting the target state but don't recompute zipIndexes
343
- aggregationBits = attestationOrCache.attestation
344
- ? (attestationOrCache.attestation as SingleAttestation<ForkPreElectra>).aggregationBits
345
- : getAggregationBitsFromAttestationSerialized(attestationOrCache.serializedData);
346
- if (aggregationBits === null) {
347
- throw new AttestationError(GossipAction.REJECT, {
348
- code: AttestationErrorCode.INVALID_SERIALIZED_BYTES,
349
- });
350
- }
351
-
352
- const bitIndex = aggregationBits.getSingleTrueBit();
353
- if (bitIndex === null) {
354
- throw new AttestationError(GossipAction.REJECT, {
355
- code: AttestationErrorCode.NOT_EXACTLY_ONE_AGGREGATION_BIT_SET,
356
- });
357
- }
358
- validatorCommitteeIndex = bitIndex;
359
- }
360
-
361
- let committeeValidatorIndices: Uint32Array;
362
- let getSigningRoot: () => Uint8Array;
363
- let expectedSubnet: SubnetID;
364
- if (attestationOrCache.cache) {
365
- committeeValidatorIndices = attestationOrCache.cache.committeeValidatorIndices;
366
- const signingRoot = attestationOrCache.cache.signingRoot;
367
- getSigningRoot = () => signingRoot;
368
- expectedSubnet = attestationOrCache.cache.subnet;
369
- } else {
370
- // Attestations must be for a known block. If the block is unknown, we simply drop the
371
- // attestation and do not delay consideration for later.
372
- //
373
- // TODO (LH): Enforce a maximum skip distance for unaggregated attestations.
374
-
375
- // [IGNORE] The block being voted for (attestation.data.beacon_block_root) has been seen (via both gossip
376
- // and non-gossip sources) (a client MAY queue attestations for processing once block is retrieved).
377
- const attHeadBlock = verifyHeadBlockAndTargetRoot(
378
- chain,
379
- attestationOrCache.attestation.data.beaconBlockRoot,
380
- attestationOrCache.attestation.data.target.root,
381
- attSlot,
382
- attEpoch,
383
- RegenCaller.validateGossipAttestation,
384
- chain.opts.maxSkipSlots
385
- );
386
-
387
- // [REJECT] The block being voted for (attestation.data.beacon_block_root) passes validation.
388
- // > Altready check in `verifyHeadBlockAndTargetRoot()`
389
-
390
- // [IGNORE] The current finalized_checkpoint is an ancestor of the block defined by attestation.data.beacon_block_root
391
- // -- i.e. get_ancestor(store, attestation.data.beacon_block_root, compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)) == store.finalized_checkpoint.root
392
- // > Altready check in `verifyHeadBlockAndTargetRoot()`
393
-
394
- // [REJECT] The attestation's target block is an ancestor of the block named in the LMD vote
395
- // --i.e. get_ancestor(store, attestation.data.beacon_block_root, compute_start_slot_at_epoch(attestation.data.target.epoch)) == attestation.data.target.root
396
- // > Altready check in `verifyHeadBlockAndTargetRoot()`
397
-
398
- const shuffling = await getShufflingForAttestationVerification(
399
- chain,
400
- attEpoch,
401
- attHeadBlock,
402
- RegenCaller.validateGossipAttestation
403
- );
404
-
405
- // [REJECT] The committee index is within the expected range
406
- // -- i.e. data.index < get_committee_count_per_slot(state, data.target.epoch)
407
- committeeValidatorIndices = getCommitteeValidatorIndices(shuffling, attSlot, committeeIndex);
408
- getSigningRoot = () => getAttestationDataSigningRoot(chain.config, attData);
409
- expectedSubnet = computeSubnetForSlot(shuffling, attSlot, committeeIndex);
410
- }
411
-
412
- let validatorIndex: number;
413
-
414
- if (!isForkPostElectra(fork)) {
415
- // The validity of aggregation bits are already checked above
416
- assert.notNull(aggregationBits);
417
- assert.notNull(validatorCommitteeIndex);
418
-
419
- validatorIndex = committeeValidatorIndices[validatorCommitteeIndex];
420
- // [REJECT] The number of aggregation bits matches the committee size
421
- // -- i.e. len(attestation.aggregation_bits) == len(get_beacon_committee(state, data.slot, data.index)).
422
- // > TODO: Is this necessary? Lighthouse does not do this check.
423
- if (aggregationBits.bitLen !== committeeValidatorIndices.length) {
424
- throw new AttestationError(GossipAction.REJECT, {
425
- code: AttestationErrorCode.WRONG_NUMBER_OF_AGGREGATION_BITS,
426
- });
427
- }
428
- } else {
429
- if (attestationOrCache.attestation) {
430
- validatorIndex = (attestationOrCache.attestation as SingleAttestation<ForkPostElectra>).attesterIndex;
431
- } else {
432
- const attesterIndex = getAttesterIndexFromSingleAttestationSerialized(attestationOrCache.serializedData);
433
- if (attesterIndex === null) {
434
- throw new AttestationError(GossipAction.REJECT, {
435
- code: AttestationErrorCode.INVALID_SERIALIZED_BYTES,
436
- });
437
- }
438
- validatorIndex = attesterIndex;
439
- }
440
-
441
- // [REJECT] The attester is a member of the committee -- i.e.
442
- // `attestation.attester_index in get_beacon_committee(state, attestation.data.slot, index)`.
443
- // Position of the validator in its committee
444
- validatorCommitteeIndex = committeeValidatorIndices.indexOf(validatorIndex);
445
- if (validatorCommitteeIndex === -1) {
446
- throw new AttestationError(GossipAction.REJECT, {
447
- code: AttestationErrorCode.ATTESTER_NOT_IN_COMMITTEE,
448
- });
449
- }
450
- }
451
-
452
- // LH > verify_middle_checks
453
- // Run the checks that apply to the indexed attestation before the signature is checked.
454
- // Check correct subnet
455
- // The attestation is the first valid attestation received for the participating validator for the slot, attestation.data.slot.
456
-
457
- // [REJECT] The attestation is for the correct subnet
458
- // -- i.e. compute_subnet_for_attestation(committees_per_slot, attestation.data.slot, attestation.data.index) == subnet_id,
459
- // where committees_per_slot = get_committee_count_per_slot(state, attestation.data.target.epoch),
460
- // which may be pre-computed along with the committee information for the signature check.
461
- if (subnet !== null && subnet !== expectedSubnet) {
462
- throw new AttestationError(GossipAction.REJECT, {
463
- code: AttestationErrorCode.INVALID_SUBNET_ID,
464
- received: subnet,
465
- expected: expectedSubnet,
466
- });
467
- }
468
-
469
- // [IGNORE] There has been no other valid attestation seen on an attestation subnet that has an
470
- // identical attestation.data.target.epoch and participating validator index.
471
- if (chain.seenAttesters.isKnown(targetEpoch, validatorIndex)) {
472
- throw new AttestationError(GossipAction.IGNORE, {
473
- code: AttestationErrorCode.ATTESTATION_ALREADY_KNOWN,
474
- targetEpoch,
475
- validatorIndex,
476
- });
477
- }
478
-
479
- // [REJECT] The signature of attestation is valid.
480
- const attestingIndices = [validatorIndex];
481
- let signatureSet: SingleSignatureSet;
482
- let attDataRootHex: RootHex;
483
- const signature = attestationOrCache.attestation
484
- ? attestationOrCache.attestation.signature
485
- : !isForkPostElectra(fork)
486
- ? getSignatureFromAttestationSerialized(attestationOrCache.serializedData)
487
- : getSignatureFromSingleAttestationSerialized(attestationOrCache.serializedData);
488
- if (signature === null) {
489
- throw new AttestationError(GossipAction.REJECT, {
490
- code: AttestationErrorCode.INVALID_SERIALIZED_BYTES,
491
- });
492
- }
493
-
494
- if (attestationOrCache.cache) {
495
- // there could be up to 6% of cpu time to compute signing root if we don't clone the signature set
496
- signatureSet = createSingleSignatureSetFromComponents(
497
- chain.index2pubkey[validatorIndex],
498
- attestationOrCache.cache.signingRoot,
499
- signature
500
- );
501
- attDataRootHex = attestationOrCache.cache.attDataRootHex;
502
- } else {
503
- signatureSet = createSingleSignatureSetFromComponents(
504
- chain.index2pubkey[validatorIndex],
505
- getSigningRoot(),
506
- signature
507
- );
508
-
509
- // add cached attestation data before verifying signature
510
- attDataRootHex = toRootHex(ssz.phase0.AttestationData.hashTreeRoot(attData));
511
- if (attDataKey) {
512
- // for pre-electra, committee index key is 0. See SeenAttestationDatas.add() documentation
513
- const committeeIndexKey = isForkPostElectra(fork)
514
- ? committeeIndex
515
- : PRE_ELECTRA_SINGLE_ATTESTATION_COMMITTEE_INDEX;
516
- chain.seenAttestationDatas.add(attSlot, committeeIndexKey, attDataKey, {
517
- committeeValidatorIndices,
518
- committeeIndex,
519
- signingRoot: signatureSet.signingRoot,
520
- subnet: expectedSubnet,
521
- // precompute this to be used in forkchoice
522
- // root of AttestationData was already cached during getIndexedAttestationSignatureSet
523
- attDataRootHex,
524
- attestationData: attData,
525
- });
526
- }
527
- }
528
-
529
- // no signature check, leave that for step1
530
- const indexedAttestation: IndexedAttestation = {
531
- attestingIndices,
532
- data: attData,
533
- signature,
534
- };
535
-
536
- const attestation: SingleAttestation = attestationOrCache.attestation
537
- ? attestationOrCache.attestation
538
- : !isForkPostElectra(fork)
539
- ? {
540
- // Aggregation bits are already asserted above to not be null
541
- aggregationBits: aggregationBits as BitArray,
542
- data: attData,
543
- signature,
544
- }
545
- : {
546
- committeeIndex,
547
- attesterIndex: validatorIndex,
548
- data: attData,
549
- signature,
550
- };
551
-
552
- return {
553
- attestation,
554
- indexedAttestation,
555
- subnet: expectedSubnet,
556
- attDataRootHex,
557
- signatureSet,
558
- validatorIndex,
559
- committeeIndex,
560
- validatorCommitteeIndex,
561
- committeeSize: committeeValidatorIndices.length,
562
- };
563
- }
564
-
565
- /**
566
- * Verify that the `attestation` is within the acceptable gossip propagation range, with reference
567
- * to the current slot of the `chain`.
568
- *
569
- * Accounts for `MAXIMUM_GOSSIP_CLOCK_DISPARITY`.
570
- * Note: We do not queue future attestations for later processing
571
- */
572
- export function verifyPropagationSlotRange(fork: ForkName, chain: IBeaconChain, attestationSlot: Slot): void {
573
- // slot with future tolerance of MAXIMUM_GOSSIP_CLOCK_DISPARITY_SEC
574
- const latestPermissibleSlot = chain.clock.slotWithFutureTolerance(MAXIMUM_GOSSIP_CLOCK_DISPARITY_SEC);
575
- if (attestationSlot > latestPermissibleSlot) {
576
- throw new AttestationError(GossipAction.IGNORE, {
577
- code: AttestationErrorCode.FUTURE_SLOT,
578
- latestPermissibleSlot,
579
- attestationSlot,
580
- });
581
- }
582
-
583
- // Post deneb the attestations are valid for current as well as previous epoch
584
- // while pre deneb they are valid for ATTESTATION_PROPAGATION_SLOT_RANGE
585
- //
586
- // see: https://github.com/ethereum/consensus-specs/pull/3360
587
- if (ForkSeq[fork] < ForkSeq.deneb) {
588
- const earliestPermissibleSlot = Math.max(
589
- // slot with past tolerance of MAXIMUM_GOSSIP_CLOCK_DISPARITY_SEC
590
- // ATTESTATION_PROPAGATION_SLOT_RANGE = SLOTS_PER_EPOCH
591
- chain.clock.slotWithPastTolerance(MAXIMUM_GOSSIP_CLOCK_DISPARITY_SEC) - SLOTS_PER_EPOCH,
592
- 0
593
- );
594
-
595
- if (attestationSlot < earliestPermissibleSlot) {
596
- throw new AttestationError(GossipAction.IGNORE, {
597
- code: AttestationErrorCode.PAST_SLOT,
598
- earliestPermissibleSlot,
599
- attestationSlot,
600
- });
601
- }
602
- } else {
603
- const attestationEpoch = computeEpochAtSlot(attestationSlot);
604
-
605
- // upper bound for current epoch is same as epoch of latestPermissibleSlot
606
- const latestPermissibleCurrentEpoch = computeEpochAtSlot(latestPermissibleSlot);
607
- if (attestationEpoch > latestPermissibleCurrentEpoch) {
608
- throw new AttestationError(GossipAction.IGNORE, {
609
- code: AttestationErrorCode.FUTURE_EPOCH,
610
- currentEpoch: latestPermissibleCurrentEpoch,
611
- attestationEpoch,
612
- });
613
- }
614
-
615
- // lower bound for previous epoch is same as epoch of earliestPermissibleSlot
616
- const currentEpochWithPastTolerance = computeEpochAtSlot(
617
- chain.clock.slotWithPastTolerance(MAXIMUM_GOSSIP_CLOCK_DISPARITY_SEC)
618
- );
619
-
620
- const earliestPermissiblePreviousEpoch = Math.max(currentEpochWithPastTolerance - 1, 0);
621
- if (attestationEpoch < earliestPermissiblePreviousEpoch) {
622
- throw new AttestationError(GossipAction.IGNORE, {
623
- code: AttestationErrorCode.PAST_EPOCH,
624
- previousEpoch: earliestPermissiblePreviousEpoch,
625
- attestationEpoch,
626
- });
627
- }
628
- }
629
- }
630
-
631
- /**
632
- * Verify:
633
- * 1. head block is known
634
- * 2. attestation's target block is an ancestor of the block named in the LMD vote
635
- */
636
- export function verifyHeadBlockAndTargetRoot(
637
- chain: IBeaconChain,
638
- beaconBlockRoot: Root,
639
- targetRoot: Root,
640
- attestationSlot: Slot,
641
- attestationEpoch: Epoch,
642
- caller: RegenCaller,
643
- maxSkipSlots?: number
644
- ): ProtoBlock {
645
- const headBlock = verifyHeadBlockIsKnown(chain, beaconBlockRoot);
646
- // Lighthouse rejects the attestation, however Lodestar only ignores considering it's not against the spec
647
- // it's more about a DOS protection to us
648
- // With verifyPropagationSlotRange() and maxSkipSlots = 32, it's unlikely we have to regenerate states in queue
649
- // to validate beacon_attestation and aggregate_and_proof
650
- const slotDistance = attestationSlot - headBlock.slot;
651
- chain.metrics?.gossipAttestation.headSlotToAttestationSlot.observe({caller}, slotDistance);
652
-
653
- if (maxSkipSlots !== undefined && slotDistance > maxSkipSlots) {
654
- throw new AttestationError(GossipAction.IGNORE, {
655
- code: AttestationErrorCode.TOO_MANY_SKIPPED_SLOTS,
656
- attestationSlot,
657
- headBlockSlot: headBlock.slot,
658
- });
659
- }
660
- verifyAttestationTargetRoot(headBlock, targetRoot, attestationEpoch);
661
- return headBlock;
662
- }
663
-
664
- /**
665
- * Get a shuffling for attestation verification from the ShufflingCache.
666
- * - if blockEpoch is attEpoch, use current shuffling of head state
667
- * - if blockEpoch is attEpoch - 1, use next shuffling of head state
668
- * - if blockEpoch is less than attEpoch - 1, dial head state to attEpoch - 1, and add to ShufflingCache
669
- *
670
- * This implementation does not require to dial head state to attSlot at fork boundary because we always get domain of attSlot
671
- * in consumer context.
672
- *
673
- * This is similar to the old getStateForAttestationVerification
674
- * see https://github.com/ChainSafe/lodestar/blob/v1.11.3/packages/beacon-node/src/chain/validation/attestation.ts#L566
675
- */
676
- export async function getShufflingForAttestationVerification(
677
- chain: IBeaconChain,
678
- attEpoch: Epoch,
679
- attHeadBlock: ProtoBlock,
680
- regenCaller: RegenCaller
681
- ): Promise<EpochShuffling> {
682
- const blockEpoch = computeEpochAtSlot(attHeadBlock.slot);
683
- const shufflingDependentRoot = getShufflingDependentRoot(chain.forkChoice, attEpoch, blockEpoch, attHeadBlock);
684
-
685
- const shuffling = await chain.shufflingCache.get(attEpoch, shufflingDependentRoot);
686
- if (shuffling) {
687
- // most of the time, we should get the shuffling from cache
688
- chain.metrics?.gossipAttestation.shufflingCacheHit.inc({caller: regenCaller});
689
- return shuffling;
690
- }
691
-
692
- chain.metrics?.gossipAttestation.shufflingCacheMiss.inc({caller: regenCaller});
693
- try {
694
- // for the 1st time of the same epoch and dependent root, it awaits for the regen state
695
- // from the 2nd time, it should use the same cached promise and it should reach the above code
696
- chain.metrics?.gossipAttestation.shufflingCacheRegenHit.inc({caller: regenCaller});
697
- return await chain.regenStateForAttestationVerification(
698
- attEpoch,
699
- shufflingDependentRoot,
700
- attHeadBlock,
701
- regenCaller
702
- );
703
- } catch (e) {
704
- chain.metrics?.gossipAttestation.shufflingCacheRegenMiss.inc({caller: regenCaller});
705
- throw new AttestationError(GossipAction.IGNORE, {
706
- code: AttestationErrorCode.MISSING_STATE_TO_VERIFY_ATTESTATION,
707
- error: e as Error,
708
- });
709
- }
710
- }
711
-
712
- /**
713
- * Different version of getAttestationDataSigningRoot in state-transition which doesn't require a state.
714
- */
715
- export function getAttestationDataSigningRoot(config: BeaconConfig, data: phase0.AttestationData): Uint8Array {
716
- const slot = computeStartSlotAtEpoch(data.target.epoch);
717
- // previously, we call `domain = config.getDomain(state.slot, DOMAIN_BEACON_ATTESTER, slot)`
718
- // at fork boundary, it's required to dial to target epoch https://github.com/ChainSafe/lodestar/blob/v1.11.3/packages/beacon-node/src/chain/validation/attestation.ts#L573
719
- // instead of that, just use the fork at slot in the attestation data
720
- const fork = config.getForkName(slot);
721
- const domain = config.getDomainAtFork(fork, DOMAIN_BEACON_ATTESTER);
722
- return computeSigningRoot(ssz.phase0.AttestationData, data, domain);
723
- }
724
-
725
- /**
726
- * Checks if the `attestation.data.beaconBlockRoot` is known to this chain.
727
- *
728
- * The block root may not be known for two reasons:
729
- *
730
- * 1. The block has never been verified by our application.
731
- * 2. The block is prior to the latest finalized block.
732
- *
733
- * Case (1) is the exact thing we're trying to detect. However case (2) is a little different, but
734
- * it's still fine to ignore here because there's no need for us to handle attestations that are
735
- * already finalized.
736
- */
737
- function verifyHeadBlockIsKnown(chain: IBeaconChain, beaconBlockRoot: Root): ProtoBlock {
738
- // TODO (LH): Enforce a maximum skip distance for unaggregated attestations.
739
-
740
- const headBlock = chain.forkChoice.getBlock(beaconBlockRoot);
741
- if (headBlock === null) {
742
- throw new AttestationError(GossipAction.IGNORE, {
743
- code: AttestationErrorCode.UNKNOWN_OR_PREFINALIZED_BEACON_BLOCK_ROOT,
744
- root: toRootHex(beaconBlockRoot),
745
- });
746
- }
747
-
748
- return headBlock;
749
- }
750
-
751
- /**
752
- * Verifies that the `attestation.data.target.root` is indeed the target root of the block at
753
- * `attestation.data.beacon_block_root`.
754
- */
755
- function verifyAttestationTargetRoot(headBlock: ProtoBlock, targetRoot: Root, attestationEpoch: Epoch): void {
756
- // Check the attestation target root.
757
- const headBlockEpoch = computeEpochAtSlot(headBlock.slot);
758
-
759
- if (headBlockEpoch > attestationEpoch) {
760
- // The epoch references an invalid head block from a future epoch.
761
- //
762
- // This check is not in the specification, however we guard against it since it opens us up
763
- // to weird edge cases during verification.
764
- //
765
- // Whilst this attestation *technically* could be used to add value to a block, it is
766
- // invalid in the spirit of the protocol. Here we choose safety over profit.
767
- //
768
- // Reference:
769
- // https://github.com/ethereum/consensus-specs/pull/2001#issuecomment-699246659
770
- throw new AttestationError(GossipAction.REJECT, {
771
- code: AttestationErrorCode.INVALID_TARGET_ROOT,
772
- targetRoot: toRootHex(targetRoot),
773
- expected: null,
774
- });
775
- }
776
-
777
- const expectedTargetRoot =
778
- headBlockEpoch === attestationEpoch
779
- ? // If the block is in the same epoch as the attestation, then use the target root
780
- // from the block.
781
- headBlock.targetRoot
782
- : // If the head block is from a previous epoch then skip slots will cause the head block
783
- // root to become the target block root.
784
- //
785
- // We know the head block is from a previous epoch due to a previous check.
786
- headBlock.blockRoot;
787
-
788
- // TODO: Do a fast comparision to convert and compare byte by byte
789
- if (expectedTargetRoot !== toRootHex(targetRoot)) {
790
- // Reject any attestation with an invalid target root.
791
- throw new AttestationError(GossipAction.REJECT, {
792
- code: AttestationErrorCode.INVALID_TARGET_ROOT,
793
- targetRoot: toRootHex(targetRoot),
794
- expected: expectedTargetRoot,
795
- });
796
- }
797
- }
798
-
799
- /**
800
- * Get a list of validator indices in the given committee
801
- * attestationIndex - Index of the committee in shuffling.committees
802
- */
803
- export function getCommitteeValidatorIndices(
804
- shuffling: EpochShuffling,
805
- attestationSlot: Slot,
806
- attestationIndex: number
807
- ): Uint32Array {
808
- const {committees} = shuffling;
809
- const slotCommittees = committees[attestationSlot % SLOTS_PER_EPOCH];
810
-
811
- if (attestationIndex >= slotCommittees.length) {
812
- throw new AttestationError(GossipAction.REJECT, {
813
- code: AttestationErrorCode.COMMITTEE_INDEX_OUT_OF_RANGE,
814
- index: attestationIndex,
815
- });
816
- }
817
- return slotCommittees[attestationIndex];
818
- }
819
-
820
- /**
821
- * Compute the correct subnet for a slot/committee index
822
- */
823
- export function computeSubnetForSlot(shuffling: EpochShuffling, slot: number, committeeIndex: number): SubnetID {
824
- const slotsSinceEpochStart = slot % SLOTS_PER_EPOCH;
825
- const committeesSinceEpochStart = shuffling.committeesPerSlot * slotsSinceEpochStart;
826
- return (committeesSinceEpochStart + committeeIndex) % ATTESTATION_SUBNET_COUNT;
827
- }
828
-
829
- /**
830
- * Return fork-dependent seen attestation key
831
- * - for pre-electra, it's the AttestationData base64 from Attestation
832
- * - for electra and later, it's the AttestationData base64 from SingleAttestation
833
- * - consumers need to also pass slot + committeeIndex to get the correct SeenAttestationData
834
- */
835
- export function getSeenAttDataKeyFromGossipAttestation(attestation: GossipAttestation): SeenAttDataKey | null {
836
- // SeenAttDataKey is the same as gossip index
837
- return attestation.attDataBase64;
838
- }
839
-
840
- /**
841
- * Extract attestation data key from SignedAggregateAndProof Uint8Array to use cached data from SeenAttestationDatas
842
- * - for both electra + pre-electra, it's the AttestationData base64
843
- * - consumers need to also pass slot + committeeIndex to get the correct SeenAttestationData
844
- */
845
- export function getSeenAttDataKeyFromSignedAggregateAndProof(
846
- fork: ForkName,
847
- aggregateAndProof: Uint8Array
848
- ): SeenAttDataKey | null {
849
- return isForkPostElectra(fork)
850
- ? getAttDataFromSignedAggregateAndProofElectra(aggregateAndProof)
851
- : getAttDataFromSignedAggregateAndProofPhase0(aggregateAndProof);
852
- }
853
-
854
- export function getCommitteeIndexFromAttestationOrBytes(
855
- fork: ForkName,
856
- attestationOrBytes: AttestationOrBytes
857
- ): CommitteeIndex | null {
858
- const isGossipAttestation = attestationOrBytes.serializedData !== null;
859
-
860
- if (isForkPostElectra(fork)) {
861
- if (isGossipAttestation) {
862
- return getCommitteeIndexFromSingleAttestationSerialized(ForkName.electra, attestationOrBytes.serializedData);
863
- }
864
- return (attestationOrBytes.attestation as SingleAttestation<ForkPostElectra>).committeeIndex;
865
- }
866
- if (isGossipAttestation) {
867
- return getCommitteeIndexFromSingleAttestationSerialized(ForkName.phase0, attestationOrBytes.serializedData);
868
- }
869
- return (attestationOrBytes.attestation as SingleAttestation<ForkPreElectra>).data.index;
870
- }
871
-
872
- /**
873
- * Convert pre-electra single attestation (`phase0.Attestation`) to post-electra `SingleAttestation`
874
- */
875
- export function toElectraSingleAttestation(
876
- attestation: SingleAttestation<ForkPreElectra>,
877
- attesterIndex: ValidatorIndex
878
- ): SingleAttestation<ForkPostElectra> {
879
- return {
880
- committeeIndex: attestation.data.index,
881
- attesterIndex,
882
- data: attestation.data,
883
- signature: attestation.signature,
884
- };
885
- }