@lodestar/beacon-node 1.35.0-dev.f80d2d52da → 1.35.0-dev.fd1dac853d

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 (1374) hide show
  1. package/lib/api/impl/api.d.ts.map +1 -0
  2. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -0
  3. package/lib/api/impl/beacon/blocks/index.js +58 -46
  4. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  5. package/lib/api/impl/beacon/blocks/utils.d.ts.map +1 -0
  6. package/lib/api/impl/beacon/index.d.ts.map +1 -0
  7. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -0
  8. package/lib/api/impl/beacon/pool/index.js +3 -3
  9. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  10. package/lib/api/impl/beacon/rewards/index.d.ts.map +1 -0
  11. package/lib/api/impl/beacon/state/index.d.ts.map +1 -0
  12. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -0
  13. package/lib/api/impl/config/constants.d.ts +5 -0
  14. package/lib/api/impl/config/constants.d.ts.map +1 -0
  15. package/lib/api/impl/config/constants.js +6 -1
  16. package/lib/api/impl/config/constants.js.map +1 -1
  17. package/lib/api/impl/config/index.d.ts.map +1 -0
  18. package/lib/api/impl/debug/index.d.ts.map +1 -0
  19. package/lib/api/impl/debug/index.js +1 -1
  20. package/lib/api/impl/debug/index.js.map +1 -1
  21. package/lib/api/impl/errors.d.ts.map +1 -0
  22. package/lib/api/impl/errors.js +2 -0
  23. package/lib/api/impl/errors.js.map +1 -1
  24. package/lib/api/impl/events/index.d.ts.map +1 -0
  25. package/lib/api/impl/index.d.ts +3 -3
  26. package/lib/api/impl/index.d.ts.map +1 -0
  27. package/lib/api/impl/index.js +3 -3
  28. package/lib/api/impl/index.js.map +1 -1
  29. package/lib/api/impl/lightclient/index.d.ts.map +1 -0
  30. package/lib/api/impl/lodestar/index.d.ts.map +1 -0
  31. package/lib/api/impl/lodestar/index.js +2 -2
  32. package/lib/api/impl/lodestar/index.js.map +1 -1
  33. package/lib/api/impl/node/index.d.ts.map +1 -0
  34. package/lib/api/impl/node/utils.d.ts.map +1 -0
  35. package/lib/api/impl/proof/index.d.ts.map +1 -0
  36. package/lib/api/impl/types.d.ts.map +1 -0
  37. package/lib/api/impl/utils.d.ts.map +1 -0
  38. package/lib/api/impl/validator/index.d.ts.map +1 -0
  39. package/lib/api/impl/validator/index.js +22 -26
  40. package/lib/api/impl/validator/index.js.map +1 -1
  41. package/lib/api/impl/validator/utils.d.ts.map +1 -0
  42. package/lib/api/index.d.ts.map +1 -0
  43. package/lib/api/options.d.ts.map +1 -0
  44. package/lib/api/rest/activeSockets.d.ts.map +1 -0
  45. package/lib/api/rest/activeSockets.js +3 -2
  46. package/lib/api/rest/activeSockets.js.map +1 -1
  47. package/lib/api/rest/base.d.ts +1 -1
  48. package/lib/api/rest/base.d.ts.map +1 -0
  49. package/lib/api/rest/base.js +6 -2
  50. package/lib/api/rest/base.js.map +1 -1
  51. package/lib/api/rest/index.d.ts.map +1 -0
  52. package/lib/api/rest/index.js +2 -0
  53. package/lib/api/rest/index.js.map +1 -1
  54. package/lib/api/rest/swaggerUI.d.ts.map +1 -0
  55. package/lib/api/rest/swaggerUI.js +4 -2
  56. package/lib/api/rest/swaggerUI.js.map +1 -1
  57. package/lib/bun-wrappers/prometheus-gc-stats.d.ts +2 -0
  58. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +1 -0
  59. package/lib/bun-wrappers/prometheus-gc-stats.js +8 -0
  60. package/lib/bun-wrappers/prometheus-gc-stats.js.map +1 -0
  61. package/lib/chain/ColumnReconstructionTracker.d.ts +32 -0
  62. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -0
  63. package/lib/chain/ColumnReconstructionTracker.js +71 -0
  64. package/lib/chain/ColumnReconstructionTracker.js.map +1 -0
  65. package/lib/chain/GetBlobsTracker.d.ts +31 -0
  66. package/lib/chain/GetBlobsTracker.d.ts.map +1 -0
  67. package/lib/chain/GetBlobsTracker.js +82 -0
  68. package/lib/chain/GetBlobsTracker.js.map +1 -0
  69. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -0
  70. package/lib/chain/archiveStore/archiveStore.js +49 -38
  71. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  72. package/lib/chain/archiveStore/constants.d.ts.map +1 -0
  73. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -0
  74. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -0
  75. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +3 -0
  76. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  77. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -0
  78. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -0
  79. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +1 -0
  80. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  81. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  82. package/lib/chain/archiveStore/index.d.ts +1 -1
  83. package/lib/chain/archiveStore/index.d.ts.map +1 -0
  84. package/lib/chain/archiveStore/index.js +1 -1
  85. package/lib/chain/archiveStore/interface.d.ts.map +1 -0
  86. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -0
  87. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +5 -0
  88. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  89. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -0
  90. package/lib/chain/archiveStore/utils/archiveBlocks.js +5 -1
  91. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  92. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -0
  93. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +1 -0
  94. package/lib/chain/balancesCache.d.ts.map +1 -0
  95. package/lib/chain/balancesCache.js +1 -3
  96. package/lib/chain/balancesCache.js.map +1 -1
  97. package/lib/chain/beaconProposerCache.d.ts.map +1 -0
  98. package/lib/chain/beaconProposerCache.js +1 -0
  99. package/lib/chain/beaconProposerCache.js.map +1 -1
  100. package/lib/chain/blocks/blockInput/blockInput.d.ts +19 -7
  101. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -0
  102. package/lib/chain/blocks/blockInput/blockInput.js +133 -89
  103. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  104. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -0
  105. package/lib/chain/blocks/blockInput/index.d.ts +1 -1
  106. package/lib/chain/blocks/blockInput/index.d.ts.map +1 -0
  107. package/lib/chain/blocks/blockInput/index.js +1 -1
  108. package/lib/chain/blocks/blockInput/types.d.ts +19 -10
  109. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -0
  110. package/lib/chain/blocks/blockInput/types.js +1 -0
  111. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  112. package/lib/chain/blocks/blockInput/utils.d.ts +0 -4
  113. package/lib/chain/blocks/blockInput/utils.d.ts.map +1 -0
  114. package/lib/chain/blocks/blockInput/utils.js +6 -29
  115. package/lib/chain/blocks/blockInput/utils.js.map +1 -1
  116. package/lib/chain/blocks/importBlock.d.ts.map +1 -0
  117. package/lib/chain/blocks/importBlock.js +42 -37
  118. package/lib/chain/blocks/importBlock.js.map +1 -1
  119. package/lib/chain/blocks/index.d.ts +6 -5
  120. package/lib/chain/blocks/index.d.ts.map +1 -0
  121. package/lib/chain/blocks/index.js +5 -4
  122. package/lib/chain/blocks/index.js.map +1 -1
  123. package/lib/chain/blocks/types.d.ts +3 -108
  124. package/lib/chain/blocks/types.d.ts.map +1 -0
  125. package/lib/chain/blocks/types.js +0 -119
  126. package/lib/chain/blocks/types.js.map +1 -1
  127. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +1 -0
  128. package/lib/chain/blocks/utils/chainSegment.d.ts +2 -2
  129. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -0
  130. package/lib/chain/blocks/utils/chainSegment.js +2 -2
  131. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  132. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -0
  133. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +1 -0
  134. package/lib/chain/blocks/utils/ownBanner.d.ts.map +1 -0
  135. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +1 -0
  136. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +1 -0
  137. package/lib/chain/blocks/verifyBlock.d.ts +3 -3
  138. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -0
  139. package/lib/chain/blocks/verifyBlock.js +15 -14
  140. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  141. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts +7 -22
  142. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -0
  143. package/lib/chain/blocks/verifyBlocksDataAvailability.js +23 -108
  144. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  145. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +4 -3
  146. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -0
  147. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +24 -22
  148. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  149. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +4 -3
  150. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -0
  151. package/lib/chain/blocks/verifyBlocksSanityChecks.js +2 -2
  152. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  153. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -0
  154. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -2
  155. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -0
  156. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +2 -2
  157. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  158. package/lib/chain/blocks/writeBlockInputToDb.d.ts +3 -3
  159. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -0
  160. package/lib/chain/blocks/writeBlockInputToDb.js +56 -67
  161. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  162. package/lib/chain/bls/index.d.ts.map +1 -0
  163. package/lib/chain/bls/interface.d.ts.map +1 -0
  164. package/lib/chain/bls/maybeBatch.d.ts.map +1 -0
  165. package/lib/chain/bls/multithread/index.d.ts.map +1 -0
  166. package/lib/chain/bls/multithread/index.js +168 -163
  167. package/lib/chain/bls/multithread/index.js.map +1 -1
  168. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -0
  169. package/lib/chain/bls/multithread/poolSize.d.ts.map +1 -0
  170. package/lib/chain/bls/multithread/types.d.ts.map +1 -0
  171. package/lib/chain/bls/multithread/utils.d.ts.map +1 -0
  172. package/lib/chain/bls/multithread/worker.d.ts.map +1 -0
  173. package/lib/chain/bls/singleThread.d.ts.map +1 -0
  174. package/lib/chain/bls/singleThread.js +1 -0
  175. package/lib/chain/bls/singleThread.js.map +1 -1
  176. package/lib/chain/bls/utils.d.ts.map +1 -0
  177. package/lib/chain/chain.d.ts +13 -11
  178. package/lib/chain/chain.d.ts.map +1 -0
  179. package/lib/chain/chain.js +82 -24
  180. package/lib/chain/chain.js.map +1 -1
  181. package/lib/chain/emitter.d.ts +43 -2
  182. package/lib/chain/emitter.d.ts.map +1 -0
  183. package/lib/chain/emitter.js +18 -0
  184. package/lib/chain/emitter.js.map +1 -1
  185. package/lib/chain/errors/attestationError.d.ts.map +1 -0
  186. package/lib/chain/errors/attesterSlashingError.d.ts.map +1 -0
  187. package/lib/chain/errors/blobSidecarError.d.ts +24 -0
  188. package/lib/chain/errors/blobSidecarError.d.ts.map +1 -0
  189. package/lib/chain/errors/blobSidecarError.js +10 -0
  190. package/lib/chain/errors/blobSidecarError.js.map +1 -1
  191. package/lib/chain/errors/blockError.d.ts.map +1 -0
  192. package/lib/chain/errors/blockError.js +1 -0
  193. package/lib/chain/errors/blockError.js.map +1 -1
  194. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +1 -0
  195. package/lib/chain/errors/dataColumnSidecarError.d.ts +42 -0
  196. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -0
  197. package/lib/chain/errors/dataColumnSidecarError.js +14 -0
  198. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  199. package/lib/chain/errors/gossipValidation.d.ts.map +1 -0
  200. package/lib/chain/errors/gossipValidation.js +1 -0
  201. package/lib/chain/errors/gossipValidation.js.map +1 -1
  202. package/lib/chain/errors/index.d.ts +2 -2
  203. package/lib/chain/errors/index.d.ts.map +1 -0
  204. package/lib/chain/errors/index.js +2 -2
  205. package/lib/chain/errors/index.js.map +1 -1
  206. package/lib/chain/errors/lightClientError.d.ts.map +1 -0
  207. package/lib/chain/errors/proposerSlashingError.d.ts.map +1 -0
  208. package/lib/chain/errors/syncCommitteeError.d.ts.map +1 -0
  209. package/lib/chain/errors/voluntaryExitError.d.ts.map +1 -0
  210. package/lib/chain/forkChoice/index.d.ts.map +1 -0
  211. package/lib/chain/forkChoice/index.js.map +1 -1
  212. package/lib/chain/genesis/genesis.d.ts.map +1 -0
  213. package/lib/chain/genesis/genesis.js +16 -5
  214. package/lib/chain/genesis/genesis.js.map +1 -1
  215. package/lib/chain/genesis/interface.d.ts.map +1 -0
  216. package/lib/chain/index.d.ts +2 -2
  217. package/lib/chain/index.d.ts.map +1 -0
  218. package/lib/chain/index.js +2 -2
  219. package/lib/chain/index.js.map +1 -1
  220. package/lib/chain/initState.d.ts.map +1 -0
  221. package/lib/chain/interface.d.ts +12 -9
  222. package/lib/chain/interface.d.ts.map +1 -0
  223. package/lib/chain/interface.js.map +1 -1
  224. package/lib/chain/lightClient/index.d.ts.map +1 -0
  225. package/lib/chain/lightClient/index.js +16 -9
  226. package/lib/chain/lightClient/index.js.map +1 -1
  227. package/lib/chain/lightClient/proofs.d.ts.map +1 -0
  228. package/lib/chain/lightClient/proofs.js.map +1 -1
  229. package/lib/chain/lightClient/types.d.ts.map +1 -0
  230. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -0
  231. package/lib/chain/opPools/aggregatedAttestationPool.js +14 -9
  232. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  233. package/lib/chain/opPools/attestationPool.d.ts +2 -3
  234. package/lib/chain/opPools/attestationPool.d.ts.map +1 -0
  235. package/lib/chain/opPools/attestationPool.js +10 -7
  236. package/lib/chain/opPools/attestationPool.js.map +1 -1
  237. package/lib/chain/opPools/index.d.ts +1 -1
  238. package/lib/chain/opPools/index.d.ts.map +1 -0
  239. package/lib/chain/opPools/index.js +1 -1
  240. package/lib/chain/opPools/index.js.map +1 -1
  241. package/lib/chain/opPools/opPool.d.ts.map +1 -0
  242. package/lib/chain/opPools/opPool.js +10 -12
  243. package/lib/chain/opPools/opPool.js.map +1 -1
  244. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +3 -2
  245. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -0
  246. package/lib/chain/opPools/syncCommitteeMessagePool.js +14 -10
  247. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  248. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -0
  249. package/lib/chain/opPools/syncContributionAndProofPool.js +5 -2
  250. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  251. package/lib/chain/opPools/types.d.ts +1 -1
  252. package/lib/chain/opPools/types.d.ts.map +1 -0
  253. package/lib/chain/opPools/types.js +1 -1
  254. package/lib/chain/opPools/types.js.map +1 -1
  255. package/lib/chain/opPools/utils.d.ts.map +1 -0
  256. package/lib/chain/options.d.ts.map +1 -0
  257. package/lib/chain/options.js +1 -1
  258. package/lib/chain/options.js.map +1 -1
  259. package/lib/chain/prepareNextSlot.d.ts +3 -3
  260. package/lib/chain/prepareNextSlot.d.ts.map +1 -0
  261. package/lib/chain/prepareNextSlot.js +145 -140
  262. package/lib/chain/prepareNextSlot.js.map +1 -1
  263. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -0
  264. package/lib/chain/produceBlock/index.d.ts.map +1 -0
  265. package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -1
  266. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -0
  267. package/lib/chain/produceBlock/produceBlockBody.js +3 -10
  268. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  269. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +1 -0
  270. package/lib/chain/regen/errors.d.ts.map +1 -0
  271. package/lib/chain/regen/errors.js +1 -0
  272. package/lib/chain/regen/errors.js.map +1 -1
  273. package/lib/chain/regen/index.d.ts +1 -1
  274. package/lib/chain/regen/index.d.ts.map +1 -0
  275. package/lib/chain/regen/index.js +1 -1
  276. package/lib/chain/regen/index.js.map +1 -1
  277. package/lib/chain/regen/interface.d.ts.map +1 -0
  278. package/lib/chain/regen/queued.d.ts.map +1 -0
  279. package/lib/chain/regen/queued.js +35 -28
  280. package/lib/chain/regen/queued.js.map +1 -1
  281. package/lib/chain/regen/regen.d.ts.map +1 -0
  282. package/lib/chain/regen/regen.js +1 -0
  283. package/lib/chain/regen/regen.js.map +1 -1
  284. package/lib/chain/reprocess.d.ts.map +1 -0
  285. package/lib/chain/reprocess.js +3 -1
  286. package/lib/chain/reprocess.js.map +1 -1
  287. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -0
  288. package/lib/chain/rewards/blockRewards.d.ts.map +1 -0
  289. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -0
  290. package/lib/chain/seenCache/index.d.ts +1 -1
  291. package/lib/chain/seenCache/index.d.ts.map +1 -0
  292. package/lib/chain/seenCache/index.js +1 -1
  293. package/lib/chain/seenCache/index.js.map +1 -1
  294. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +1 -0
  295. package/lib/chain/seenCache/seenAggregateAndProof.js +7 -6
  296. package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
  297. package/lib/chain/seenCache/seenAttestationData.d.ts.map +1 -0
  298. package/lib/chain/seenCache/seenAttestationData.js +5 -2
  299. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  300. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -0
  301. package/lib/chain/seenCache/seenAttesters.js +2 -4
  302. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  303. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +1 -0
  304. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -0
  305. package/lib/chain/seenCache/seenBlockProposers.js +2 -4
  306. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  307. package/lib/chain/seenCache/seenCommittee.d.ts.map +1 -0
  308. package/lib/chain/seenCache/seenCommittee.js +1 -3
  309. package/lib/chain/seenCache/seenCommittee.js.map +1 -1
  310. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +1 -0
  311. package/lib/chain/seenCache/seenCommitteeContribution.js +3 -2
  312. package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
  313. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +74 -78
  314. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -0
  315. package/lib/chain/seenCache/seenGossipBlockInput.js +235 -369
  316. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  317. package/lib/chain/serializeState.d.ts.map +1 -0
  318. package/lib/chain/shufflingCache.d.ts.map +1 -0
  319. package/lib/chain/shufflingCache.js +5 -2
  320. package/lib/chain/shufflingCache.js.map +1 -1
  321. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +1 -0
  322. package/lib/chain/stateCache/blockStateCacheImpl.js +13 -7
  323. package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
  324. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -0
  325. package/lib/chain/stateCache/datastore/db.js +1 -0
  326. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  327. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -0
  328. package/lib/chain/stateCache/datastore/file.js +1 -0
  329. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  330. package/lib/chain/stateCache/datastore/index.d.ts +1 -1
  331. package/lib/chain/stateCache/datastore/index.d.ts.map +1 -0
  332. package/lib/chain/stateCache/datastore/index.js +1 -1
  333. package/lib/chain/stateCache/datastore/index.js.map +1 -1
  334. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -0
  335. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -0
  336. package/lib/chain/stateCache/fifoBlockStateCache.js +10 -0
  337. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  338. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +1 -0
  339. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +10 -4
  340. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
  341. package/lib/chain/stateCache/index.d.ts +1 -1
  342. package/lib/chain/stateCache/index.d.ts.map +1 -0
  343. package/lib/chain/stateCache/index.js +1 -1
  344. package/lib/chain/stateCache/index.js.map +1 -1
  345. package/lib/chain/stateCache/mapMetrics.d.ts.map +1 -0
  346. package/lib/chain/stateCache/mapMetrics.js +4 -4
  347. package/lib/chain/stateCache/mapMetrics.js.map +1 -1
  348. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -0
  349. package/lib/chain/stateCache/persistentCheckpointsCache.js +23 -14
  350. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  351. package/lib/chain/stateCache/types.d.ts.map +1 -0
  352. package/lib/chain/validation/aggregateAndProof.d.ts.map +1 -0
  353. package/lib/chain/validation/attestation.d.ts.map +1 -0
  354. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -0
  355. package/lib/chain/validation/blobSidecar.d.ts +8 -3
  356. package/lib/chain/validation/blobSidecar.d.ts.map +1 -0
  357. package/lib/chain/validation/blobSidecar.js +73 -31
  358. package/lib/chain/validation/blobSidecar.js.map +1 -1
  359. package/lib/chain/validation/block.d.ts.map +1 -0
  360. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -0
  361. package/lib/chain/validation/dataColumnSidecar.d.ts +7 -9
  362. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -0
  363. package/lib/chain/validation/dataColumnSidecar.js +95 -57
  364. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  365. package/lib/chain/validation/index.d.ts +1 -1
  366. package/lib/chain/validation/index.d.ts.map +1 -0
  367. package/lib/chain/validation/index.js +1 -1
  368. package/lib/chain/validation/index.js.map +1 -1
  369. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +1 -0
  370. package/lib/chain/validation/lightClientFinalityUpdate.js +4 -3
  371. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  372. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +6 -4
  373. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +1 -0
  374. package/lib/chain/validation/lightClientOptimisticUpdate.js +11 -11
  375. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  376. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -0
  377. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +1 -2
  378. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -0
  379. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  380. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -0
  381. package/lib/chain/validation/signatureSets/index.d.ts.map +1 -0
  382. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -0
  383. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -0
  384. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -0
  385. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -0
  386. package/lib/chain/validation/syncCommittee.d.ts.map +1 -0
  387. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -0
  388. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -0
  389. package/lib/chain/validatorMonitor.d.ts +1 -3
  390. package/lib/chain/validatorMonitor.d.ts.map +1 -0
  391. package/lib/chain/validatorMonitor.js +23 -16
  392. package/lib/chain/validatorMonitor.js.map +1 -1
  393. package/lib/constants/constants.d.ts.map +1 -0
  394. package/lib/constants/index.d.ts.map +1 -0
  395. package/lib/constants/network.d.ts.map +1 -0
  396. package/lib/db/beacon.d.ts.map +1 -0
  397. package/lib/db/beacon.js +24 -0
  398. package/lib/db/beacon.js.map +1 -1
  399. package/lib/db/buckets.d.ts +4 -4
  400. package/lib/db/buckets.d.ts.map +1 -0
  401. package/lib/db/buckets.js +4 -4
  402. package/lib/db/buckets.js.map +1 -1
  403. package/lib/db/index.d.ts +1 -1
  404. package/lib/db/index.d.ts.map +1 -0
  405. package/lib/db/index.js.map +1 -1
  406. package/lib/db/interface.d.ts.map +1 -0
  407. package/lib/db/options.d.ts.map +1 -0
  408. package/lib/db/repositories/attesterSlashing.d.ts.map +1 -0
  409. package/lib/db/repositories/backfilledRanges.d.ts.map +1 -0
  410. package/lib/db/repositories/blobSidecars.d.ts.map +1 -0
  411. package/lib/db/repositories/blobSidecars.js +1 -1
  412. package/lib/db/repositories/blobSidecars.js.map +1 -1
  413. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +1 -0
  414. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  415. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  416. package/lib/db/repositories/block.d.ts.map +1 -0
  417. package/lib/db/repositories/blockArchive.d.ts.map +1 -0
  418. package/lib/db/repositories/blockArchive.js +2 -3
  419. package/lib/db/repositories/blockArchive.js.map +1 -1
  420. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  421. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -0
  422. package/lib/db/repositories/blsToExecutionChange.d.ts.map +1 -0
  423. package/lib/db/repositories/checkpointState.d.ts.map +1 -0
  424. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -0
  425. package/lib/db/repositories/dataColumnSidecar.js +2 -2
  426. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  427. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -0
  428. package/lib/db/repositories/dataColumnSidecarArchive.js +2 -2
  429. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  430. package/lib/db/repositories/depositDataRoot.d.ts.map +1 -0
  431. package/lib/db/repositories/depositDataRoot.js +1 -0
  432. package/lib/db/repositories/depositDataRoot.js.map +1 -1
  433. package/lib/db/repositories/depositEvent.d.ts.map +1 -0
  434. package/lib/db/repositories/eth1Data.d.ts.map +1 -0
  435. package/lib/db/repositories/index.d.ts +10 -10
  436. package/lib/db/repositories/index.d.ts.map +1 -0
  437. package/lib/db/repositories/index.js +9 -9
  438. package/lib/db/repositories/index.js.map +1 -1
  439. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +1 -0
  440. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +1 -0
  441. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +1 -0
  442. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +1 -0
  443. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -0
  444. package/lib/db/repositories/stateArchive.d.ts.map +1 -0
  445. package/lib/db/repositories/stateArchiveIndex.d.ts.map +1 -0
  446. package/lib/db/repositories/voluntaryExit.d.ts.map +1 -0
  447. package/lib/db/single/index.d.ts.map +1 -0
  448. package/lib/db/single/preGenesisState.d.ts.map +1 -0
  449. package/lib/db/single/preGenesisState.js +6 -0
  450. package/lib/db/single/preGenesisState.js.map +1 -1
  451. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +1 -0
  452. package/lib/db/single/preGenesisStateLastProcessedBlock.js +5 -0
  453. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -1
  454. package/lib/eth1/errors.d.ts.map +1 -0
  455. package/lib/eth1/eth1DataCache.d.ts.map +1 -0
  456. package/lib/eth1/eth1DataCache.js +2 -0
  457. package/lib/eth1/eth1DataCache.js.map +1 -1
  458. package/lib/eth1/eth1DepositDataTracker.d.ts.map +1 -0
  459. package/lib/eth1/eth1DepositDataTracker.js +18 -5
  460. package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
  461. package/lib/eth1/eth1DepositsCache.d.ts.map +1 -0
  462. package/lib/eth1/eth1DepositsCache.js +3 -0
  463. package/lib/eth1/eth1DepositsCache.js.map +1 -1
  464. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +1 -0
  465. package/lib/eth1/eth1MergeBlockTracker.js +10 -4
  466. package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
  467. package/lib/eth1/index.d.ts.map +1 -0
  468. package/lib/eth1/index.js +2 -0
  469. package/lib/eth1/index.js.map +1 -1
  470. package/lib/eth1/interface.d.ts.map +1 -0
  471. package/lib/eth1/options.d.ts.map +1 -0
  472. package/lib/eth1/provider/eth1Provider.d.ts +1 -2
  473. package/lib/eth1/provider/eth1Provider.d.ts.map +1 -0
  474. package/lib/eth1/provider/eth1Provider.js +6 -2
  475. package/lib/eth1/provider/eth1Provider.js.map +1 -1
  476. package/lib/eth1/provider/jsonRpcHttpClient.d.ts +1 -1
  477. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +1 -0
  478. package/lib/eth1/provider/jsonRpcHttpClient.js +16 -2
  479. package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -1
  480. package/lib/eth1/provider/jwt.d.ts.map +1 -0
  481. package/lib/eth1/provider/jwt.js.map +1 -1
  482. package/lib/eth1/provider/utils.d.ts +5 -0
  483. package/lib/eth1/provider/utils.d.ts.map +1 -0
  484. package/lib/eth1/provider/utils.js +9 -1
  485. package/lib/eth1/provider/utils.js.map +1 -1
  486. package/lib/eth1/stream.d.ts.map +1 -0
  487. package/lib/eth1/utils/depositContract.d.ts.map +1 -0
  488. package/lib/eth1/utils/deposits.d.ts.map +1 -0
  489. package/lib/eth1/utils/deposits.js.map +1 -1
  490. package/lib/eth1/utils/eth1Data.d.ts.map +1 -0
  491. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +1 -0
  492. package/lib/eth1/utils/eth1Vote.d.ts.map +1 -0
  493. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +1 -0
  494. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +1 -0
  495. package/lib/execution/builder/cache.d.ts.map +1 -0
  496. package/lib/execution/builder/cache.js +6 -0
  497. package/lib/execution/builder/cache.js.map +1 -1
  498. package/lib/execution/builder/http.d.ts.map +1 -0
  499. package/lib/execution/builder/http.js +14 -8
  500. package/lib/execution/builder/http.js.map +1 -1
  501. package/lib/execution/builder/index.d.ts.map +1 -0
  502. package/lib/execution/builder/index.js.map +1 -1
  503. package/lib/execution/builder/interface.d.ts.map +1 -0
  504. package/lib/execution/builder/utils.d.ts.map +1 -0
  505. package/lib/execution/engine/disabled.d.ts.map +1 -0
  506. package/lib/execution/engine/disabled.js +2 -4
  507. package/lib/execution/engine/disabled.js.map +1 -1
  508. package/lib/execution/engine/http.d.ts +2 -2
  509. package/lib/execution/engine/http.d.ts.map +1 -0
  510. package/lib/execution/engine/http.js +43 -11
  511. package/lib/execution/engine/http.js.map +1 -1
  512. package/lib/execution/engine/index.d.ts.map +1 -0
  513. package/lib/execution/engine/interface.d.ts +2 -2
  514. package/lib/execution/engine/interface.d.ts.map +1 -0
  515. package/lib/execution/engine/interface.js.map +1 -1
  516. package/lib/execution/engine/mock.d.ts +1 -0
  517. package/lib/execution/engine/mock.d.ts.map +1 -0
  518. package/lib/execution/engine/mock.js +16 -12
  519. package/lib/execution/engine/mock.js.map +1 -1
  520. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -0
  521. package/lib/execution/engine/payloadIdCache.js +1 -3
  522. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  523. package/lib/execution/engine/types.d.ts +5 -1
  524. package/lib/execution/engine/types.d.ts.map +1 -0
  525. package/lib/execution/engine/types.js +37 -8
  526. package/lib/execution/engine/types.js.map +1 -1
  527. package/lib/execution/engine/utils.d.ts.map +1 -0
  528. package/lib/execution/engine/utils.js +3 -3
  529. package/lib/execution/engine/utils.js.map +1 -1
  530. package/lib/execution/index.d.ts +2 -2
  531. package/lib/execution/index.d.ts.map +1 -0
  532. package/lib/execution/index.js +2 -2
  533. package/lib/execution/index.js.map +1 -1
  534. package/lib/index.d.ts +6 -6
  535. package/lib/index.d.ts.map +1 -0
  536. package/lib/index.js +5 -5
  537. package/lib/index.js.map +1 -1
  538. package/lib/metrics/index.d.ts +1 -1
  539. package/lib/metrics/index.d.ts.map +1 -0
  540. package/lib/metrics/index.js +1 -1
  541. package/lib/metrics/index.js.map +1 -1
  542. package/lib/metrics/metrics/beacon.d.ts +11 -5
  543. package/lib/metrics/metrics/beacon.d.ts.map +1 -0
  544. package/lib/metrics/metrics/beacon.js +40 -20
  545. package/lib/metrics/metrics/beacon.js.map +1 -1
  546. package/lib/metrics/metrics/lodestar.d.ts +56 -14
  547. package/lib/metrics/metrics/lodestar.d.ts.map +1 -0
  548. package/lib/metrics/metrics/lodestar.js +87 -10
  549. package/lib/metrics/metrics/lodestar.js.map +1 -1
  550. package/lib/metrics/metrics.d.ts +1 -1
  551. package/lib/metrics/metrics.d.ts.map +1 -0
  552. package/lib/metrics/metrics.js.map +1 -1
  553. package/lib/metrics/nodeJsMetrics.d.ts.map +1 -0
  554. package/lib/metrics/nodeJsMetrics.js +1 -1
  555. package/lib/metrics/nodeJsMetrics.js.map +1 -1
  556. package/lib/metrics/options.d.ts.map +1 -0
  557. package/lib/metrics/server/http.d.ts +1 -1
  558. package/lib/metrics/server/http.d.ts.map +1 -0
  559. package/lib/metrics/server/index.d.ts.map +1 -0
  560. package/lib/metrics/utils/avgMinMax.d.ts +1 -1
  561. package/lib/metrics/utils/avgMinMax.d.ts.map +1 -0
  562. package/lib/metrics/utils/avgMinMax.js +10 -6
  563. package/lib/metrics/utils/avgMinMax.js.map +1 -1
  564. package/lib/metrics/utils/gauge.d.ts +1 -1
  565. package/lib/metrics/utils/gauge.d.ts.map +1 -0
  566. package/lib/metrics/utils/gauge.js +1 -4
  567. package/lib/metrics/utils/gauge.js.map +1 -1
  568. package/lib/metrics/utils/registryMetricCreator.d.ts +1 -1
  569. package/lib/metrics/utils/registryMetricCreator.d.ts.map +1 -0
  570. package/lib/metrics/utils/registryMetricCreator.js.map +1 -1
  571. package/lib/monitoring/clientStats.d.ts.map +1 -0
  572. package/lib/monitoring/index.d.ts.map +1 -0
  573. package/lib/monitoring/options.d.ts.map +1 -0
  574. package/lib/monitoring/properties.d.ts.map +1 -0
  575. package/lib/monitoring/properties.js +4 -0
  576. package/lib/monitoring/properties.js.map +1 -1
  577. package/lib/monitoring/service.d.ts.map +1 -0
  578. package/lib/monitoring/service.js +13 -1
  579. package/lib/monitoring/service.js.map +1 -1
  580. package/lib/monitoring/system.d.ts.map +1 -0
  581. package/lib/monitoring/system.js +25 -27
  582. package/lib/monitoring/system.js.map +1 -1
  583. package/lib/monitoring/types.d.ts.map +1 -0
  584. package/lib/network/core/events.d.ts.map +1 -0
  585. package/lib/network/core/index.d.ts.map +1 -0
  586. package/lib/network/core/metrics.d.ts.map +1 -0
  587. package/lib/network/core/networkCore.d.ts +2 -2
  588. package/lib/network/core/networkCore.d.ts.map +1 -0
  589. package/lib/network/core/networkCore.js +67 -50
  590. package/lib/network/core/networkCore.js.map +1 -1
  591. package/lib/network/core/networkCoreWorker.d.ts.map +1 -0
  592. package/lib/network/core/networkCoreWorker.js +1 -1
  593. package/lib/network/core/networkCoreWorker.js.map +1 -1
  594. package/lib/network/core/networkCoreWorkerHandler.d.ts +2 -2
  595. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -0
  596. package/lib/network/core/networkCoreWorkerHandler.js +14 -5
  597. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  598. package/lib/network/core/types.d.ts.map +1 -0
  599. package/lib/network/discv5/index.d.ts +2 -2
  600. package/lib/network/discv5/index.d.ts.map +1 -0
  601. package/lib/network/discv5/index.js +9 -3
  602. package/lib/network/discv5/index.js.map +1 -1
  603. package/lib/network/discv5/types.d.ts.map +1 -0
  604. package/lib/network/discv5/utils.d.ts.map +1 -0
  605. package/lib/network/discv5/worker.d.ts.map +1 -0
  606. package/lib/network/discv5/worker.js +3 -3
  607. package/lib/network/discv5/worker.js.map +1 -1
  608. package/lib/network/events.d.ts +2 -18
  609. package/lib/network/events.d.ts.map +1 -0
  610. package/lib/network/events.js +0 -7
  611. package/lib/network/events.js.map +1 -1
  612. package/lib/network/forks.d.ts.map +1 -0
  613. package/lib/network/gossip/constants.d.ts.map +1 -0
  614. package/lib/network/gossip/encoding.d.ts +1 -1
  615. package/lib/network/gossip/encoding.d.ts.map +1 -0
  616. package/lib/network/gossip/encoding.js +4 -2
  617. package/lib/network/gossip/encoding.js.map +1 -1
  618. package/lib/network/gossip/errors.d.ts.map +1 -0
  619. package/lib/network/gossip/errors.js +1 -0
  620. package/lib/network/gossip/errors.js.map +1 -1
  621. package/lib/network/gossip/gossipsub.d.ts +2 -1
  622. package/lib/network/gossip/gossipsub.d.ts.map +1 -0
  623. package/lib/network/gossip/gossipsub.js +44 -18
  624. package/lib/network/gossip/gossipsub.js.map +1 -1
  625. package/lib/network/gossip/index.d.ts +2 -2
  626. package/lib/network/gossip/index.d.ts.map +1 -0
  627. package/lib/network/gossip/index.js +2 -2
  628. package/lib/network/gossip/index.js.map +1 -1
  629. package/lib/network/gossip/interface.d.ts +2 -2
  630. package/lib/network/gossip/interface.d.ts.map +1 -0
  631. package/lib/network/gossip/metrics.d.ts +15 -7
  632. package/lib/network/gossip/metrics.d.ts.map +1 -0
  633. package/lib/network/gossip/metrics.js +16 -6
  634. package/lib/network/gossip/metrics.js.map +1 -1
  635. package/lib/network/gossip/scoringParameters.d.ts.map +1 -0
  636. package/lib/network/gossip/scoringParameters.js +4 -4
  637. package/lib/network/gossip/scoringParameters.js.map +1 -1
  638. package/lib/network/gossip/topic.d.ts +125 -105
  639. package/lib/network/gossip/topic.d.ts.map +1 -0
  640. package/lib/network/gossip/topic.js +2 -1
  641. package/lib/network/gossip/topic.js.map +1 -1
  642. package/lib/network/index.d.ts +3 -3
  643. package/lib/network/index.d.ts.map +1 -0
  644. package/lib/network/index.js +3 -3
  645. package/lib/network/index.js.map +1 -1
  646. package/lib/network/interface.d.ts +3 -2
  647. package/lib/network/interface.d.ts.map +1 -0
  648. package/lib/network/libp2p/error.d.ts.map +1 -0
  649. package/lib/network/libp2p/index.d.ts.map +1 -0
  650. package/lib/network/libp2p/index.js +11 -3
  651. package/lib/network/libp2p/index.js.map +1 -1
  652. package/lib/network/metadata.d.ts.map +1 -0
  653. package/lib/network/metadata.js +6 -1
  654. package/lib/network/metadata.js.map +1 -1
  655. package/lib/network/network.d.ts +5 -3
  656. package/lib/network/network.d.ts.map +1 -0
  657. package/lib/network/network.js +92 -76
  658. package/lib/network/network.js.map +1 -1
  659. package/lib/network/networkConfig.d.ts.map +1 -0
  660. package/lib/network/options.d.ts.map +1 -0
  661. package/lib/network/options.js +1 -1
  662. package/lib/network/options.js.map +1 -1
  663. package/lib/network/peers/client.d.ts.map +1 -0
  664. package/lib/network/peers/datastore.d.ts +2 -2
  665. package/lib/network/peers/datastore.d.ts.map +1 -0
  666. package/lib/network/peers/datastore.js +10 -4
  667. package/lib/network/peers/datastore.js.map +1 -1
  668. package/lib/network/peers/discover.d.ts.map +1 -0
  669. package/lib/network/peers/discover.js +75 -66
  670. package/lib/network/peers/discover.js.map +1 -1
  671. package/lib/network/peers/index.d.ts.map +1 -0
  672. package/lib/network/peers/peerManager.d.ts.map +1 -0
  673. package/lib/network/peers/peerManager.js +156 -131
  674. package/lib/network/peers/peerManager.js.map +1 -1
  675. package/lib/network/peers/peersData.d.ts +1 -1
  676. package/lib/network/peers/peersData.d.ts.map +1 -0
  677. package/lib/network/peers/peersData.js +1 -3
  678. package/lib/network/peers/peersData.js.map +1 -1
  679. package/lib/network/peers/score/constants.d.ts.map +1 -0
  680. package/lib/network/peers/score/index.d.ts +1 -1
  681. package/lib/network/peers/score/index.d.ts.map +1 -0
  682. package/lib/network/peers/score/index.js +1 -1
  683. package/lib/network/peers/score/index.js.map +1 -1
  684. package/lib/network/peers/score/interface.d.ts.map +1 -0
  685. package/lib/network/peers/score/score.d.ts.map +1 -0
  686. package/lib/network/peers/score/score.js +6 -0
  687. package/lib/network/peers/score/score.js.map +1 -1
  688. package/lib/network/peers/score/store.d.ts.map +1 -0
  689. package/lib/network/peers/score/store.js +3 -0
  690. package/lib/network/peers/score/store.js.map +1 -1
  691. package/lib/network/peers/score/utils.d.ts.map +1 -0
  692. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -0
  693. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -0
  694. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +1 -0
  695. package/lib/network/peers/utils/index.d.ts.map +1 -0
  696. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -0
  697. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  698. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -0
  699. package/lib/network/peers/utils/subnetMap.js +2 -4
  700. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  701. package/lib/network/processor/aggregatorTracker.d.ts.map +1 -0
  702. package/lib/network/processor/aggregatorTracker.js +1 -3
  703. package/lib/network/processor/aggregatorTracker.js.map +1 -1
  704. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -0
  705. package/lib/network/processor/gossipHandlers.d.ts.map +1 -0
  706. package/lib/network/processor/gossipHandlers.js +145 -165
  707. package/lib/network/processor/gossipHandlers.js.map +1 -1
  708. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -0
  709. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -0
  710. package/lib/network/processor/gossipQueues/indexed.js +11 -9
  711. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  712. package/lib/network/processor/gossipQueues/linear.d.ts.map +1 -0
  713. package/lib/network/processor/gossipQueues/linear.js +9 -8
  714. package/lib/network/processor/gossipQueues/linear.js.map +1 -1
  715. package/lib/network/processor/gossipQueues/types.d.ts.map +1 -0
  716. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -0
  717. package/lib/network/processor/index.d.ts +2 -1
  718. package/lib/network/processor/index.d.ts.map +1 -0
  719. package/lib/network/processor/index.js +21 -8
  720. package/lib/network/processor/index.js.map +1 -1
  721. package/lib/network/processor/types.d.ts.map +1 -0
  722. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
  723. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -0
  724. package/lib/network/reqresp/ReqRespBeaconNode.js +11 -2
  725. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  726. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -0
  727. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -0
  728. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -0
  729. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -0
  730. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -0
  731. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -0
  732. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  733. package/lib/network/reqresp/handlers/index.d.ts.map +1 -0
  734. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +1 -0
  735. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +1 -0
  736. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +1 -0
  737. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +1 -0
  738. package/lib/network/reqresp/index.d.ts +1 -3
  739. package/lib/network/reqresp/index.d.ts.map +1 -0
  740. package/lib/network/reqresp/index.js +1 -3
  741. package/lib/network/reqresp/index.js.map +1 -1
  742. package/lib/network/reqresp/interface.d.ts.map +1 -0
  743. package/lib/network/reqresp/protocols.d.ts.map +1 -0
  744. package/lib/network/reqresp/rateLimit.d.ts.map +1 -0
  745. package/lib/network/reqresp/rateLimit.js +11 -5
  746. package/lib/network/reqresp/rateLimit.js.map +1 -1
  747. package/lib/network/reqresp/score.d.ts.map +1 -0
  748. package/lib/network/reqresp/types.d.ts.map +1 -0
  749. package/lib/network/reqresp/utils/collect.d.ts.map +1 -0
  750. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +1 -0
  751. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -0
  752. package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
  753. package/lib/network/statusCache.d.ts.map +1 -0
  754. package/lib/network/statusCache.js +1 -0
  755. package/lib/network/statusCache.js.map +1 -1
  756. package/lib/network/subnets/attnetsService.d.ts.map +1 -0
  757. package/lib/network/subnets/attnetsService.js +73 -65
  758. package/lib/network/subnets/attnetsService.js.map +1 -1
  759. package/lib/network/subnets/index.d.ts.map +1 -0
  760. package/lib/network/subnets/interface.d.ts.map +1 -0
  761. package/lib/network/subnets/interface.js +1 -1
  762. package/lib/network/subnets/interface.js.map +1 -1
  763. package/lib/network/subnets/syncnetsService.d.ts.map +1 -0
  764. package/lib/network/subnets/syncnetsService.js +29 -22
  765. package/lib/network/subnets/syncnetsService.js.map +1 -1
  766. package/lib/network/subnets/util.d.ts.map +1 -0
  767. package/lib/network/subnets/util.js +1 -2
  768. package/lib/network/subnets/util.js.map +1 -1
  769. package/lib/network/util.d.ts.map +1 -0
  770. package/lib/node/index.d.ts.map +1 -0
  771. package/lib/node/nodejs.d.ts +1 -1
  772. package/lib/node/nodejs.d.ts.map +1 -0
  773. package/lib/node/nodejs.js +15 -0
  774. package/lib/node/nodejs.js.map +1 -1
  775. package/lib/node/notifier.d.ts.map +1 -0
  776. package/lib/node/notifier.js +2 -3
  777. package/lib/node/notifier.js.map +1 -1
  778. package/lib/node/options.d.ts.map +1 -0
  779. package/lib/node/options.js.map +1 -1
  780. package/lib/node/utils/interop/deposits.d.ts.map +1 -0
  781. package/lib/node/utils/interop/state.d.ts.map +1 -0
  782. package/lib/node/utils/interop/state.js +1 -2
  783. package/lib/node/utils/interop/state.js.map +1 -1
  784. package/lib/node/utils/lightclient.d.ts.map +1 -0
  785. package/lib/node/utils/state.d.ts.map +1 -0
  786. package/lib/sync/backfill/backfill.d.ts +1 -1
  787. package/lib/sync/backfill/backfill.d.ts.map +1 -0
  788. package/lib/sync/backfill/backfill.js +58 -16
  789. package/lib/sync/backfill/backfill.js.map +1 -1
  790. package/lib/sync/backfill/errors.d.ts.map +1 -0
  791. package/lib/sync/backfill/index.d.ts.map +1 -0
  792. package/lib/sync/backfill/verify.d.ts.map +1 -0
  793. package/lib/sync/constants.d.ts +2 -1
  794. package/lib/sync/constants.d.ts.map +1 -0
  795. package/lib/sync/constants.js +2 -1
  796. package/lib/sync/constants.js.map +1 -1
  797. package/lib/sync/index.d.ts.map +1 -0
  798. package/lib/sync/interface.d.ts +1 -59
  799. package/lib/sync/interface.d.ts.map +1 -0
  800. package/lib/sync/interface.js +0 -20
  801. package/lib/sync/interface.js.map +1 -1
  802. package/lib/sync/options.d.ts +1 -1
  803. package/lib/sync/options.d.ts.map +1 -0
  804. package/lib/sync/range/batch.d.ts +48 -32
  805. package/lib/sync/range/batch.d.ts.map +1 -0
  806. package/lib/sync/range/batch.js +201 -55
  807. package/lib/sync/range/batch.js.map +1 -1
  808. package/lib/sync/range/chain.d.ts +15 -10
  809. package/lib/sync/range/chain.d.ts.map +1 -0
  810. package/lib/sync/range/chain.js +141 -70
  811. package/lib/sync/range/chain.js.map +1 -1
  812. package/lib/sync/range/range.d.ts +3 -3
  813. package/lib/sync/range/range.d.ts.map +1 -0
  814. package/lib/sync/range/range.js +86 -54
  815. package/lib/sync/range/range.js.map +1 -1
  816. package/lib/sync/range/utils/batches.d.ts.map +1 -0
  817. package/lib/sync/range/utils/chainTarget.d.ts.map +1 -0
  818. package/lib/sync/range/utils/hashBlocks.d.ts +2 -2
  819. package/lib/sync/range/utils/hashBlocks.d.ts.map +1 -0
  820. package/lib/sync/range/utils/hashBlocks.js +6 -4
  821. package/lib/sync/range/utils/hashBlocks.js.map +1 -1
  822. package/lib/sync/range/utils/index.d.ts.map +1 -0
  823. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -0
  824. package/lib/sync/range/utils/peerBalancer.js +18 -13
  825. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  826. package/lib/sync/range/utils/updateChains.d.ts.map +1 -0
  827. package/lib/sync/sync.d.ts +1 -2
  828. package/lib/sync/sync.d.ts.map +1 -0
  829. package/lib/sync/sync.js +95 -87
  830. package/lib/sync/sync.js.map +1 -1
  831. package/lib/sync/types.d.ts +43 -0
  832. package/lib/sync/types.d.ts.map +1 -0
  833. package/lib/sync/types.js +34 -0
  834. package/lib/sync/types.js.map +1 -0
  835. package/lib/sync/unknownBlock.d.ts +42 -29
  836. package/lib/sync/unknownBlock.d.ts.map +1 -0
  837. package/lib/sync/unknownBlock.js +407 -462
  838. package/lib/sync/unknownBlock.js.map +1 -1
  839. package/lib/sync/utils/downloadByRange.d.ts +186 -0
  840. package/lib/sync/utils/downloadByRange.d.ts.map +1 -0
  841. package/lib/sync/utils/downloadByRange.js +457 -0
  842. package/lib/sync/utils/downloadByRange.js.map +1 -0
  843. package/lib/sync/utils/downloadByRoot.d.ts +121 -0
  844. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -0
  845. package/lib/sync/utils/downloadByRoot.js +346 -0
  846. package/lib/sync/utils/downloadByRoot.js.map +1 -0
  847. package/lib/sync/utils/pendingBlocksTree.d.ts +14 -6
  848. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -0
  849. package/lib/sync/utils/pendingBlocksTree.js +24 -18
  850. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  851. package/lib/sync/utils/remoteSyncType.d.ts.map +1 -0
  852. package/lib/util/address.d.ts.map +1 -0
  853. package/lib/util/array.d.ts.map +1 -0
  854. package/lib/util/array.js +7 -3
  855. package/lib/util/array.js.map +1 -1
  856. package/lib/util/asyncIterableToEvents.d.ts.map +1 -0
  857. package/lib/util/asyncIterableToEvents.js +6 -3
  858. package/lib/util/asyncIterableToEvents.js.map +1 -1
  859. package/lib/util/binarySearch.d.ts.map +1 -0
  860. package/lib/util/binarySearch.js +2 -0
  861. package/lib/util/binarySearch.js.map +1 -1
  862. package/lib/util/bitArray.d.ts.map +1 -0
  863. package/lib/util/blobs.d.ts +2 -2
  864. package/lib/util/blobs.d.ts.map +1 -0
  865. package/lib/util/blobs.js +9 -7
  866. package/lib/util/blobs.js.map +1 -1
  867. package/lib/util/bufferPool.d.ts.map +1 -0
  868. package/lib/util/bufferPool.js +7 -2
  869. package/lib/util/bufferPool.js.map +1 -1
  870. package/lib/util/bytes.d.ts.map +1 -0
  871. package/lib/util/chunkify.d.ts.map +1 -0
  872. package/lib/util/clock.d.ts +9 -4
  873. package/lib/util/clock.d.ts.map +1 -0
  874. package/lib/util/clock.js +30 -22
  875. package/lib/util/clock.js.map +1 -1
  876. package/lib/util/dataColumns.d.ts +13 -10
  877. package/lib/util/dataColumns.d.ts.map +1 -0
  878. package/lib/util/dataColumns.js +92 -134
  879. package/lib/util/dataColumns.js.map +1 -1
  880. package/lib/util/dependentRoot.d.ts.map +1 -0
  881. package/lib/util/enum.d.ts.map +1 -0
  882. package/lib/util/error.d.ts.map +1 -0
  883. package/lib/util/eventLoop.d.ts.map +1 -0
  884. package/lib/util/execution.d.ts +20 -0
  885. package/lib/util/execution.d.ts.map +1 -0
  886. package/lib/util/execution.js +165 -0
  887. package/lib/util/execution.js.map +1 -0
  888. package/lib/util/file.d.ts.map +1 -0
  889. package/lib/util/forkChoice.d.ts.map +1 -0
  890. package/lib/util/forkName.d.ts.map +1 -0
  891. package/lib/util/graffiti.d.ts.map +1 -0
  892. package/lib/util/hex.d.ts.map +1 -0
  893. package/lib/util/index.d.ts.map +1 -0
  894. package/lib/util/ip.d.ts.map +1 -0
  895. package/lib/util/itTrigger.d.ts.map +1 -0
  896. package/lib/util/itTrigger.js +4 -4
  897. package/lib/util/itTrigger.js.map +1 -1
  898. package/lib/util/kzg.d.ts.map +1 -0
  899. package/lib/util/map.d.ts.map +1 -0
  900. package/lib/util/map.js +2 -0
  901. package/lib/util/map.js.map +1 -1
  902. package/lib/util/metadata.d.ts.map +1 -0
  903. package/lib/util/multifork.d.ts.map +1 -0
  904. package/lib/util/numpy.d.ts.map +1 -0
  905. package/lib/util/peerId.d.ts.map +1 -0
  906. package/lib/util/profile.d.ts.map +1 -0
  907. package/lib/util/promises.d.ts.map +1 -0
  908. package/lib/util/queue/errors.d.ts.map +1 -0
  909. package/lib/util/queue/fnQueue.d.ts.map +1 -0
  910. package/lib/util/queue/index.d.ts +1 -1
  911. package/lib/util/queue/index.d.ts.map +1 -0
  912. package/lib/util/queue/index.js +1 -1
  913. package/lib/util/queue/index.js.map +1 -1
  914. package/lib/util/queue/itemQueue.d.ts.map +1 -0
  915. package/lib/util/queue/itemQueue.js +52 -49
  916. package/lib/util/queue/itemQueue.js.map +1 -1
  917. package/lib/util/queue/options.d.ts.map +1 -0
  918. package/lib/util/serializedCache.d.ts.map +1 -0
  919. package/lib/util/serializedCache.js +1 -3
  920. package/lib/util/serializedCache.js.map +1 -1
  921. package/lib/util/set.d.ts.map +1 -0
  922. package/lib/util/set.js +2 -0
  923. package/lib/util/set.js.map +1 -1
  924. package/lib/util/shuffle.d.ts.map +1 -0
  925. package/lib/util/sortBy.d.ts.map +1 -0
  926. package/lib/util/sszBytes.d.ts +1 -0
  927. package/lib/util/sszBytes.d.ts.map +1 -0
  928. package/lib/util/sszBytes.js +1 -1
  929. package/lib/util/sszBytes.js.map +1 -1
  930. package/lib/util/strictEvents.d.ts.map +1 -0
  931. package/lib/util/time.d.ts.map +1 -0
  932. package/lib/util/timeSeries.d.ts.map +1 -0
  933. package/lib/util/timeSeries.js +3 -1
  934. package/lib/util/timeSeries.js.map +1 -1
  935. package/lib/util/types.d.ts +1 -1
  936. package/lib/util/types.d.ts.map +1 -0
  937. package/lib/util/types.js +2 -2
  938. package/lib/util/types.js.map +1 -1
  939. package/lib/util/workerEvents.d.ts.map +1 -0
  940. package/lib/util/wrapError.d.ts +7 -0
  941. package/lib/util/wrapError.d.ts.map +1 -0
  942. package/package.json +40 -24
  943. package/src/api/impl/api.ts +26 -0
  944. package/src/api/impl/beacon/blocks/index.ts +744 -0
  945. package/src/api/impl/beacon/blocks/utils.ts +75 -0
  946. package/src/api/impl/beacon/index.ts +35 -0
  947. package/src/api/impl/beacon/pool/index.ts +314 -0
  948. package/src/api/impl/beacon/rewards/index.ts +30 -0
  949. package/src/api/impl/beacon/state/index.ts +406 -0
  950. package/src/api/impl/beacon/state/utils.ts +189 -0
  951. package/src/api/impl/config/constants.ts +127 -0
  952. package/src/api/impl/config/index.ts +59 -0
  953. package/src/api/impl/debug/index.ts +131 -0
  954. package/src/api/impl/errors.ts +50 -0
  955. package/src/api/impl/events/index.ts +33 -0
  956. package/src/api/impl/index.ts +6 -0
  957. package/src/api/impl/lightclient/index.ts +64 -0
  958. package/src/api/impl/lodestar/index.ts +257 -0
  959. package/src/api/impl/node/index.ts +88 -0
  960. package/src/api/impl/node/utils.ts +51 -0
  961. package/src/api/impl/proof/index.ts +60 -0
  962. package/src/api/impl/types.ts +17 -0
  963. package/src/api/impl/utils.ts +25 -0
  964. package/src/api/impl/validator/index.ts +1533 -0
  965. package/src/api/impl/validator/utils.ts +85 -0
  966. package/src/api/index.ts +2 -0
  967. package/src/api/options.ts +16 -0
  968. package/src/api/rest/activeSockets.ts +109 -0
  969. package/src/api/rest/base.ts +216 -0
  970. package/src/api/rest/index.ts +63 -0
  971. package/src/api/rest/swaggerUI.ts +80 -0
  972. package/src/bun-wrappers/prometheus-gc-stats.ts +7 -0
  973. package/src/chain/ColumnReconstructionTracker.ts +90 -0
  974. package/src/chain/GetBlobsTracker.ts +115 -0
  975. package/src/chain/archiveStore/archiveStore.ts +222 -0
  976. package/src/chain/archiveStore/constants.ts +5 -0
  977. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +116 -0
  978. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +68 -0
  979. package/src/chain/archiveStore/historicalState/metrics.ts +214 -0
  980. package/src/chain/archiveStore/historicalState/types.ts +41 -0
  981. package/src/chain/archiveStore/historicalState/worker.ts +77 -0
  982. package/src/chain/archiveStore/index.ts +3 -0
  983. package/src/chain/archiveStore/interface.ts +75 -0
  984. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +138 -0
  985. package/src/chain/archiveStore/utils/archiveBlocks.ts +437 -0
  986. package/src/chain/archiveStore/utils/pruneHistory.ts +56 -0
  987. package/src/chain/archiveStore/utils/updateBackfillRange.ts +50 -0
  988. package/src/chain/balancesCache.ts +52 -0
  989. package/src/chain/beaconProposerCache.ts +43 -0
  990. package/src/chain/blocks/blockInput/blockInput.ts +852 -0
  991. package/src/chain/blocks/blockInput/errors.ts +48 -0
  992. package/src/chain/blocks/blockInput/index.ts +4 -0
  993. package/src/chain/blocks/blockInput/types.ts +145 -0
  994. package/src/chain/blocks/blockInput/utils.ts +21 -0
  995. package/src/chain/blocks/importBlock.ts +599 -0
  996. package/src/chain/blocks/index.ts +179 -0
  997. package/src/chain/blocks/types.ts +101 -0
  998. package/src/chain/blocks/utils/blowfishBanner.ts +28 -0
  999. package/src/chain/blocks/utils/chainSegment.ts +29 -0
  1000. package/src/chain/blocks/utils/checkpoint.ts +25 -0
  1001. package/src/chain/blocks/utils/giraffeBanner.ts +30 -0
  1002. package/src/chain/blocks/utils/ownBanner.ts +20 -0
  1003. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +43 -0
  1004. package/src/chain/blocks/utils/zebraBanner.ts +45 -0
  1005. package/src/chain/blocks/verifyBlock.ts +242 -0
  1006. package/src/chain/blocks/verifyBlocksDataAvailability.ts +42 -0
  1007. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +438 -0
  1008. package/src/chain/blocks/verifyBlocksSanityChecks.ts +129 -0
  1009. package/src/chain/blocks/verifyBlocksSignatures.ts +105 -0
  1010. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +114 -0
  1011. package/src/chain/blocks/writeBlockInputToDb.ts +120 -0
  1012. package/src/chain/bls/index.ts +4 -0
  1013. package/src/chain/bls/interface.ts +68 -0
  1014. package/src/chain/bls/maybeBatch.ts +45 -0
  1015. package/src/chain/bls/multithread/index.ts +582 -0
  1016. package/src/chain/bls/multithread/jobItem.ts +119 -0
  1017. package/src/chain/bls/multithread/poolSize.ts +16 -0
  1018. package/src/chain/bls/multithread/types.ts +38 -0
  1019. package/src/chain/bls/multithread/utils.ts +19 -0
  1020. package/src/chain/bls/multithread/worker.ts +114 -0
  1021. package/src/chain/bls/singleThread.ts +87 -0
  1022. package/src/chain/bls/utils.ts +30 -0
  1023. package/src/chain/chain.ts +1354 -0
  1024. package/src/chain/emitter.ts +113 -0
  1025. package/src/chain/errors/attestationError.ts +194 -0
  1026. package/src/chain/errors/attesterSlashingError.ts +11 -0
  1027. package/src/chain/errors/blobSidecarError.ts +60 -0
  1028. package/src/chain/errors/blockError.ts +166 -0
  1029. package/src/chain/errors/blsToExecutionChangeError.ts +13 -0
  1030. package/src/chain/errors/dataColumnSidecarError.ts +80 -0
  1031. package/src/chain/errors/gossipValidation.ts +20 -0
  1032. package/src/chain/errors/index.ts +10 -0
  1033. package/src/chain/errors/lightClientError.ts +30 -0
  1034. package/src/chain/errors/proposerSlashingError.ts +11 -0
  1035. package/src/chain/errors/syncCommitteeError.ts +36 -0
  1036. package/src/chain/errors/voluntaryExitError.ts +13 -0
  1037. package/src/chain/forkChoice/index.ts +112 -0
  1038. package/src/chain/genesis/genesis.ts +190 -0
  1039. package/src/chain/genesis/interface.ts +14 -0
  1040. package/src/chain/index.ts +6 -0
  1041. package/src/chain/initState.ts +221 -0
  1042. package/src/chain/interface.ts +280 -0
  1043. package/src/chain/lightClient/index.ts +764 -0
  1044. package/src/chain/lightClient/proofs.ts +85 -0
  1045. package/src/chain/lightClient/types.ts +33 -0
  1046. package/src/chain/opPools/aggregatedAttestationPool.ts +1063 -0
  1047. package/src/chain/opPools/attestationPool.ts +282 -0
  1048. package/src/chain/opPools/index.ts +5 -0
  1049. package/src/chain/opPools/opPool.ts +462 -0
  1050. package/src/chain/opPools/syncCommitteeMessagePool.ts +169 -0
  1051. package/src/chain/opPools/syncContributionAndProofPool.ts +240 -0
  1052. package/src/chain/opPools/types.ts +35 -0
  1053. package/src/chain/opPools/utils.ts +65 -0
  1054. package/src/chain/options.ts +138 -0
  1055. package/src/chain/prepareNextSlot.ts +277 -0
  1056. package/src/chain/produceBlock/computeNewStateRoot.ts +55 -0
  1057. package/src/chain/produceBlock/index.ts +2 -0
  1058. package/src/chain/produceBlock/produceBlockBody.ts +797 -0
  1059. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +54 -0
  1060. package/src/chain/regen/errors.ts +30 -0
  1061. package/src/chain/regen/index.ts +4 -0
  1062. package/src/chain/regen/interface.ts +93 -0
  1063. package/src/chain/regen/queued.ts +317 -0
  1064. package/src/chain/regen/regen.ts +424 -0
  1065. package/src/chain/reprocess.ts +161 -0
  1066. package/src/chain/rewards/attestationsRewards.ts +196 -0
  1067. package/src/chain/rewards/blockRewards.ts +150 -0
  1068. package/src/chain/rewards/syncCommitteeRewards.ts +58 -0
  1069. package/src/chain/seenCache/index.ts +5 -0
  1070. package/src/chain/seenCache/seenAggregateAndProof.ts +120 -0
  1071. package/src/chain/seenCache/seenAttestationData.ts +145 -0
  1072. package/src/chain/seenCache/seenAttesters.ts +58 -0
  1073. package/src/chain/seenCache/seenBlockAttesters.ts +18 -0
  1074. package/src/chain/seenCache/seenBlockProposers.ts +48 -0
  1075. package/src/chain/seenCache/seenCommittee.ts +43 -0
  1076. package/src/chain/seenCache/seenCommitteeContribution.ts +104 -0
  1077. package/src/chain/seenCache/seenGossipBlockInput.ts +373 -0
  1078. package/src/chain/serializeState.ts +32 -0
  1079. package/src/chain/shufflingCache.ts +238 -0
  1080. package/src/chain/stateCache/blockStateCacheImpl.ts +150 -0
  1081. package/src/chain/stateCache/datastore/db.ts +36 -0
  1082. package/src/chain/stateCache/datastore/file.ts +53 -0
  1083. package/src/chain/stateCache/datastore/index.ts +2 -0
  1084. package/src/chain/stateCache/datastore/types.ts +13 -0
  1085. package/src/chain/stateCache/fifoBlockStateCache.ts +208 -0
  1086. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +198 -0
  1087. package/src/chain/stateCache/index.ts +3 -0
  1088. package/src/chain/stateCache/mapMetrics.ts +52 -0
  1089. package/src/chain/stateCache/persistentCheckpointsCache.ts +837 -0
  1090. package/src/chain/stateCache/types.ts +86 -0
  1091. package/src/chain/validation/aggregateAndProof.ts +258 -0
  1092. package/src/chain/validation/attestation.ts +885 -0
  1093. package/src/chain/validation/attesterSlashing.ts +61 -0
  1094. package/src/chain/validation/blobSidecar.ts +301 -0
  1095. package/src/chain/validation/block.ts +188 -0
  1096. package/src/chain/validation/blsToExecutionChange.ts +61 -0
  1097. package/src/chain/validation/dataColumnSidecar.ts +381 -0
  1098. package/src/chain/validation/index.ts +9 -0
  1099. package/src/chain/validation/lightClientFinalityUpdate.ts +46 -0
  1100. package/src/chain/validation/lightClientOptimisticUpdate.ts +68 -0
  1101. package/src/chain/validation/proposerSlashing.ts +54 -0
  1102. package/src/chain/validation/signatureSets/aggregateAndProof.ts +38 -0
  1103. package/src/chain/validation/signatureSets/contributionAndProof.ts +27 -0
  1104. package/src/chain/validation/signatureSets/index.ts +6 -0
  1105. package/src/chain/validation/signatureSets/selectionProof.ts +27 -0
  1106. package/src/chain/validation/signatureSets/syncCommittee.ts +22 -0
  1107. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +18 -0
  1108. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +27 -0
  1109. package/src/chain/validation/syncCommittee.ts +165 -0
  1110. package/src/chain/validation/syncCommitteeContributionAndProof.ts +122 -0
  1111. package/src/chain/validation/voluntaryExit.ts +58 -0
  1112. package/src/chain/validatorMonitor.ts +1310 -0
  1113. package/src/constants/constants.ts +15 -0
  1114. package/src/constants/index.ts +2 -0
  1115. package/src/constants/network.ts +52 -0
  1116. package/src/db/beacon.ts +113 -0
  1117. package/src/db/buckets.ts +80 -0
  1118. package/src/db/index.ts +2 -0
  1119. package/src/db/interface.ts +76 -0
  1120. package/src/db/options.ts +7 -0
  1121. package/src/db/repositories/attesterSlashing.ts +38 -0
  1122. package/src/db/repositories/backfilledRanges.ts +29 -0
  1123. package/src/db/repositories/blobSidecars.ts +37 -0
  1124. package/src/db/repositories/blobSidecarsArchive.ts +28 -0
  1125. package/src/db/repositories/block.ts +33 -0
  1126. package/src/db/repositories/blockArchive.ts +170 -0
  1127. package/src/db/repositories/blockArchiveIndex.ts +45 -0
  1128. package/src/db/repositories/blsToExecutionChange.ts +16 -0
  1129. package/src/db/repositories/checkpointState.ts +31 -0
  1130. package/src/db/repositories/dataColumnSidecar.ts +49 -0
  1131. package/src/db/repositories/dataColumnSidecarArchive.ts +56 -0
  1132. package/src/db/repositories/depositDataRoot.ts +80 -0
  1133. package/src/db/repositories/depositEvent.ts +32 -0
  1134. package/src/db/repositories/eth1Data.ts +33 -0
  1135. package/src/db/repositories/index.ts +20 -0
  1136. package/src/db/repositories/lightclientBestUpdate.ts +41 -0
  1137. package/src/db/repositories/lightclientCheckpointHeader.ts +32 -0
  1138. package/src/db/repositories/lightclientSyncCommittee.ts +16 -0
  1139. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +77 -0
  1140. package/src/db/repositories/proposerSlashing.ts +15 -0
  1141. package/src/db/repositories/stateArchive.ts +69 -0
  1142. package/src/db/repositories/stateArchiveIndex.ts +18 -0
  1143. package/src/db/repositories/voluntaryExit.ts +15 -0
  1144. package/src/db/single/index.ts +2 -0
  1145. package/src/db/single/preGenesisState.ts +37 -0
  1146. package/src/db/single/preGenesisStateLastProcessedBlock.ts +34 -0
  1147. package/src/eth1/errors.ts +40 -0
  1148. package/src/eth1/eth1DataCache.ts +26 -0
  1149. package/src/eth1/eth1DepositDataTracker.ts +410 -0
  1150. package/src/eth1/eth1DepositsCache.ts +141 -0
  1151. package/src/eth1/eth1MergeBlockTracker.ts +328 -0
  1152. package/src/eth1/index.ts +157 -0
  1153. package/src/eth1/interface.ts +131 -0
  1154. package/src/eth1/options.ts +28 -0
  1155. package/src/eth1/provider/eth1Provider.ts +229 -0
  1156. package/src/eth1/provider/jsonRpcHttpClient.ts +390 -0
  1157. package/src/eth1/provider/jwt.ts +36 -0
  1158. package/src/eth1/provider/utils.ts +136 -0
  1159. package/src/eth1/stream.ts +75 -0
  1160. package/src/eth1/utils/depositContract.ts +37 -0
  1161. package/src/eth1/utils/deposits.ts +70 -0
  1162. package/src/eth1/utils/eth1Data.ts +100 -0
  1163. package/src/eth1/utils/eth1DepositEvent.ts +12 -0
  1164. package/src/eth1/utils/eth1Vote.ts +142 -0
  1165. package/src/eth1/utils/groupDepositEventsByBlock.ts +19 -0
  1166. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +18 -0
  1167. package/src/execution/builder/cache.ts +39 -0
  1168. package/src/execution/builder/http.ts +229 -0
  1169. package/src/execution/builder/index.ts +27 -0
  1170. package/src/execution/builder/interface.ts +49 -0
  1171. package/src/execution/builder/utils.ts +19 -0
  1172. package/src/execution/engine/disabled.ts +35 -0
  1173. package/src/execution/engine/http.ts +644 -0
  1174. package/src/execution/engine/index.ts +63 -0
  1175. package/src/execution/engine/interface.ts +199 -0
  1176. package/src/execution/engine/mock.ts +493 -0
  1177. package/src/execution/engine/payloadIdCache.ts +54 -0
  1178. package/src/execution/engine/types.ts +640 -0
  1179. package/src/execution/engine/utils.ts +136 -0
  1180. package/src/execution/index.ts +4 -0
  1181. package/src/index.ts +20 -0
  1182. package/src/metrics/index.ts +4 -0
  1183. package/src/metrics/metrics/beacon.ts +390 -0
  1184. package/src/metrics/metrics/lodestar.ts +1870 -0
  1185. package/src/metrics/metrics.ts +43 -0
  1186. package/src/metrics/nodeJsMetrics.ts +19 -0
  1187. package/src/metrics/options.ts +22 -0
  1188. package/src/metrics/server/http.ts +114 -0
  1189. package/src/metrics/server/index.ts +1 -0
  1190. package/src/metrics/utils/avgMinMax.ts +87 -0
  1191. package/src/metrics/utils/gauge.ts +22 -0
  1192. package/src/metrics/utils/registryMetricCreator.ts +41 -0
  1193. package/src/monitoring/clientStats.ts +297 -0
  1194. package/src/monitoring/index.ts +2 -0
  1195. package/src/monitoring/options.ts +19 -0
  1196. package/src/monitoring/properties.ts +152 -0
  1197. package/src/monitoring/service.ts +235 -0
  1198. package/src/monitoring/system.ts +146 -0
  1199. package/src/monitoring/types.ts +21 -0
  1200. package/src/network/core/events.ts +59 -0
  1201. package/src/network/core/index.ts +3 -0
  1202. package/src/network/core/metrics.ts +304 -0
  1203. package/src/network/core/networkCore.ts +599 -0
  1204. package/src/network/core/networkCoreWorker.ts +176 -0
  1205. package/src/network/core/networkCoreWorkerHandler.ts +284 -0
  1206. package/src/network/core/types.ts +119 -0
  1207. package/src/network/discv5/index.ts +132 -0
  1208. package/src/network/discv5/types.ts +74 -0
  1209. package/src/network/discv5/utils.ts +50 -0
  1210. package/src/network/discv5/worker.ts +137 -0
  1211. package/src/network/events.ts +51 -0
  1212. package/src/network/forks.ts +94 -0
  1213. package/src/network/gossip/constants.ts +15 -0
  1214. package/src/network/gossip/encoding.ts +111 -0
  1215. package/src/network/gossip/errors.ts +7 -0
  1216. package/src/network/gossip/gossipsub.ts +384 -0
  1217. package/src/network/gossip/index.ts +4 -0
  1218. package/src/network/gossip/interface.ts +215 -0
  1219. package/src/network/gossip/metrics.ts +71 -0
  1220. package/src/network/gossip/scoringParameters.ts +333 -0
  1221. package/src/network/gossip/topic.ts +332 -0
  1222. package/src/network/index.ts +8 -0
  1223. package/src/network/interface.ts +134 -0
  1224. package/src/network/libp2p/error.ts +55 -0
  1225. package/src/network/libp2p/index.ts +153 -0
  1226. package/src/network/metadata.ts +162 -0
  1227. package/src/network/network.ts +767 -0
  1228. package/src/network/networkConfig.ts +12 -0
  1229. package/src/network/options.ts +70 -0
  1230. package/src/network/peers/client.ts +29 -0
  1231. package/src/network/peers/datastore.ts +188 -0
  1232. package/src/network/peers/discover.ts +647 -0
  1233. package/src/network/peers/index.ts +2 -0
  1234. package/src/network/peers/peerManager.ts +900 -0
  1235. package/src/network/peers/peersData.ts +65 -0
  1236. package/src/network/peers/score/constants.ts +34 -0
  1237. package/src/network/peers/score/index.ts +4 -0
  1238. package/src/network/peers/score/interface.ts +74 -0
  1239. package/src/network/peers/score/score.ts +200 -0
  1240. package/src/network/peers/score/store.ts +95 -0
  1241. package/src/network/peers/score/utils.ts +37 -0
  1242. package/src/network/peers/utils/assertPeerRelevance.ts +99 -0
  1243. package/src/network/peers/utils/enrSubnetsDeserialize.ts +27 -0
  1244. package/src/network/peers/utils/getConnectedPeerIds.ts +33 -0
  1245. package/src/network/peers/utils/index.ts +4 -0
  1246. package/src/network/peers/utils/prioritizePeers.ts +627 -0
  1247. package/src/network/peers/utils/subnetMap.ts +88 -0
  1248. package/src/network/processor/aggregatorTracker.ts +38 -0
  1249. package/src/network/processor/extractSlotRootFns.ts +64 -0
  1250. package/src/network/processor/gossipHandlers.ts +951 -0
  1251. package/src/network/processor/gossipQueues/index.ts +114 -0
  1252. package/src/network/processor/gossipQueues/indexed.ts +219 -0
  1253. package/src/network/processor/gossipQueues/linear.ts +162 -0
  1254. package/src/network/processor/gossipQueues/types.ts +57 -0
  1255. package/src/network/processor/gossipValidatorFn.ts +142 -0
  1256. package/src/network/processor/index.ts +496 -0
  1257. package/src/network/processor/types.ts +27 -0
  1258. package/src/network/reqresp/ReqRespBeaconNode.ts +373 -0
  1259. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +101 -0
  1260. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +49 -0
  1261. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +114 -0
  1262. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +62 -0
  1263. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +144 -0
  1264. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +88 -0
  1265. package/src/network/reqresp/handlers/index.ts +78 -0
  1266. package/src/network/reqresp/handlers/lightClientBootstrap.ts +31 -0
  1267. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +21 -0
  1268. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +21 -0
  1269. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +39 -0
  1270. package/src/network/reqresp/index.ts +2 -0
  1271. package/src/network/reqresp/interface.ts +45 -0
  1272. package/src/network/reqresp/protocols.ts +146 -0
  1273. package/src/network/reqresp/rateLimit.ts +112 -0
  1274. package/src/network/reqresp/score.ts +70 -0
  1275. package/src/network/reqresp/types.ts +174 -0
  1276. package/src/network/reqresp/utils/collect.ts +84 -0
  1277. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +57 -0
  1278. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +99 -0
  1279. package/src/network/statusCache.ts +17 -0
  1280. package/src/network/subnets/attnetsService.ts +382 -0
  1281. package/src/network/subnets/index.ts +2 -0
  1282. package/src/network/subnets/interface.ts +66 -0
  1283. package/src/network/subnets/syncnetsService.ts +147 -0
  1284. package/src/network/subnets/util.ts +63 -0
  1285. package/src/network/util.ts +29 -0
  1286. package/src/node/index.ts +2 -0
  1287. package/src/node/nodejs.ts +349 -0
  1288. package/src/node/notifier.ts +206 -0
  1289. package/src/node/options.ts +51 -0
  1290. package/src/node/utils/interop/deposits.ts +53 -0
  1291. package/src/node/utils/interop/state.ts +59 -0
  1292. package/src/node/utils/lightclient.ts +7 -0
  1293. package/src/node/utils/state.ts +37 -0
  1294. package/src/sync/backfill/backfill.ts +893 -0
  1295. package/src/sync/backfill/errors.ts +23 -0
  1296. package/src/sync/backfill/index.ts +1 -0
  1297. package/src/sync/backfill/verify.ts +58 -0
  1298. package/src/sync/constants.ts +71 -0
  1299. package/src/sync/index.ts +2 -0
  1300. package/src/sync/interface.ts +55 -0
  1301. package/src/sync/options.ts +45 -0
  1302. package/src/sync/range/batch.ts +455 -0
  1303. package/src/sync/range/chain.ts +715 -0
  1304. package/src/sync/range/range.ts +354 -0
  1305. package/src/sync/range/utils/batches.ts +119 -0
  1306. package/src/sync/range/utils/chainTarget.ts +62 -0
  1307. package/src/sync/range/utils/hashBlocks.ts +27 -0
  1308. package/src/sync/range/utils/index.ts +5 -0
  1309. package/src/sync/range/utils/peerBalancer.ts +184 -0
  1310. package/src/sync/range/utils/updateChains.ts +66 -0
  1311. package/src/sync/sync.ts +290 -0
  1312. package/src/sync/types.ts +57 -0
  1313. package/src/sync/unknownBlock.ts +860 -0
  1314. package/src/sync/utils/downloadByRange.ts +808 -0
  1315. package/src/sync/utils/downloadByRoot.ts +560 -0
  1316. package/src/sync/utils/pendingBlocksTree.ts +97 -0
  1317. package/src/sync/utils/remoteSyncType.ts +144 -0
  1318. package/src/util/address.ts +3 -0
  1319. package/src/util/array.ts +311 -0
  1320. package/src/util/asyncIterableToEvents.ts +164 -0
  1321. package/src/util/binarySearch.ts +48 -0
  1322. package/src/util/bitArray.ts +84 -0
  1323. package/src/util/blobs.ts +210 -0
  1324. package/src/util/bufferPool.ts +95 -0
  1325. package/src/util/bytes.ts +11 -0
  1326. package/src/util/chunkify.ts +27 -0
  1327. package/src/util/clock.ts +212 -0
  1328. package/src/util/dataColumns.ts +415 -0
  1329. package/src/util/dependentRoot.ts +47 -0
  1330. package/src/util/enum.ts +17 -0
  1331. package/src/util/error.ts +56 -0
  1332. package/src/util/eventLoop.ts +22 -0
  1333. package/src/util/execution.ts +223 -0
  1334. package/src/util/file.ts +52 -0
  1335. package/src/util/forkChoice.ts +5 -0
  1336. package/src/util/forkName.ts +20 -0
  1337. package/src/util/graffiti.ts +39 -0
  1338. package/src/util/hex.ts +9 -0
  1339. package/src/util/index.ts +2 -0
  1340. package/src/util/ip.ts +6 -0
  1341. package/src/util/itTrigger.ts +49 -0
  1342. package/src/util/kzg.ts +3 -0
  1343. package/src/util/map.ts +77 -0
  1344. package/src/util/metadata.ts +22 -0
  1345. package/src/util/multifork.ts +69 -0
  1346. package/src/util/numpy.ts +8 -0
  1347. package/src/util/peerId.ts +16 -0
  1348. package/src/util/profile.ts +54 -0
  1349. package/src/util/promises.ts +14 -0
  1350. package/src/util/queue/errors.ts +14 -0
  1351. package/src/util/queue/fnQueue.ts +16 -0
  1352. package/src/util/queue/index.ts +4 -0
  1353. package/src/util/queue/itemQueue.ts +128 -0
  1354. package/src/util/queue/options.ts +37 -0
  1355. package/src/util/serializedCache.ts +20 -0
  1356. package/src/util/set.ts +62 -0
  1357. package/src/util/shuffle.ts +21 -0
  1358. package/src/util/sortBy.ts +19 -0
  1359. package/src/util/sszBytes.ts +481 -0
  1360. package/src/util/strictEvents.ts +8 -0
  1361. package/src/util/time.ts +13 -0
  1362. package/src/util/timeSeries.ts +118 -0
  1363. package/src/util/types.ts +31 -0
  1364. package/src/util/workerEvents.ts +142 -0
  1365. package/src/util/wrapError.ts +27 -0
  1366. package/lib/chain/seenCache/seenBlockInput.d.ts +0 -84
  1367. package/lib/chain/seenCache/seenBlockInput.js +0 -225
  1368. package/lib/chain/seenCache/seenBlockInput.js.map +0 -1
  1369. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +0 -28
  1370. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +0 -328
  1371. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +0 -1
  1372. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +0 -49
  1373. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +0 -499
  1374. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +0 -1
@@ -0,0 +1,1063 @@
1
+ import {Signature, aggregateSignatures} from "@chainsafe/blst";
2
+ import {BitArray} from "@chainsafe/ssz";
3
+ import {ChainForkConfig} from "@lodestar/config";
4
+ import {IForkChoice} from "@lodestar/fork-choice";
5
+ import {
6
+ ForkName,
7
+ ForkSeq,
8
+ MAX_ATTESTATIONS,
9
+ MAX_ATTESTATIONS_ELECTRA,
10
+ MAX_COMMITTEES_PER_SLOT,
11
+ MIN_ATTESTATION_INCLUSION_DELAY,
12
+ SLOTS_PER_EPOCH,
13
+ TIMELY_HEAD_FLAG_INDEX,
14
+ TIMELY_HEAD_WEIGHT,
15
+ TIMELY_SOURCE_FLAG_INDEX,
16
+ TIMELY_SOURCE_WEIGHT,
17
+ TIMELY_TARGET_FLAG_INDEX,
18
+ TIMELY_TARGET_WEIGHT,
19
+ isForkPostDeneb,
20
+ isForkPostElectra,
21
+ } from "@lodestar/params";
22
+ import {
23
+ CachedBeaconStateAllForks,
24
+ CachedBeaconStateAltair,
25
+ CachedBeaconStatePhase0,
26
+ EffectiveBalanceIncrements,
27
+ RootCache,
28
+ computeEpochAtSlot,
29
+ computeSlotsSinceEpochStart,
30
+ computeStartSlotAtEpoch,
31
+ getAttestationParticipationStatus,
32
+ getBlockRootAtSlot,
33
+ } from "@lodestar/state-transition";
34
+ import {
35
+ Attestation,
36
+ Epoch,
37
+ RootHex,
38
+ Slot,
39
+ ValidatorIndex,
40
+ electra,
41
+ isElectraAttestation,
42
+ phase0,
43
+ ssz,
44
+ } from "@lodestar/types";
45
+ import {MapDef, assert, toRootHex} from "@lodestar/utils";
46
+ import {Metrics} from "../../metrics/metrics.js";
47
+ import {IntersectResult, intersectUint8Arrays} from "../../util/bitArray.js";
48
+ import {getShufflingDependentRoot} from "../../util/dependentRoot.js";
49
+ import {InsertOutcome} from "./types.js";
50
+ import {pruneBySlot, signatureFromBytesNoCheck} from "./utils.js";
51
+
52
+ type DataRootHex = string;
53
+
54
+ type CommitteeIndex = number;
55
+
56
+ // for pre-electra
57
+ type AttestationWithScore = {attestation: Attestation; score: number};
58
+ /**
59
+ * for electra, this is to consolidate aggregated attestations of the same attestation data into a single attestation to be included in block
60
+ * note that this is local definition in this file and it's NOT validator consolidation
61
+ */
62
+ export type AttestationsConsolidation = {
63
+ byCommittee: Map<CommitteeIndex, AttestationNonParticipant>;
64
+ attData: phase0.AttestationData;
65
+ totalNewSeenEffectiveBalance: number;
66
+ newSeenAttesters: number;
67
+ notSeenAttesters: number;
68
+ /** total number of attesters across all committees in this consolidation */
69
+ totalAttesters: number;
70
+ };
71
+
72
+ /**
73
+ * This function returns not seen participation for a given epoch and slot and committee index.
74
+ * Return null if all validators are seen or no info to check.
75
+ */
76
+ type GetNotSeenValidatorsFn = (epoch: Epoch, slot: Slot, committeeIndex: number) => Set<number> | null;
77
+
78
+ /**
79
+ * Invalid attestation data reasons, this is useful to track in metrics.
80
+ */
81
+ export enum InvalidAttestationData {
82
+ InvalidTargetEpoch = "invalid_target_epoch",
83
+ InvalidSourceCheckPoint = "invalid_source_checkpoint",
84
+ BlockNotInForkChoice = "block_not_in_fork_choice",
85
+ CannotGetShufflingDependentRoot = "cannot_get_shuffling_dependent_root",
86
+ IncorrectDependentRoot = "incorrect_dependent_root",
87
+ }
88
+
89
+ /**
90
+ * Validate attestation data for inclusion in a block.
91
+ * Returns InvalidAttestationData if attestation data is invalid, null otherwise.
92
+ */
93
+ type ValidateAttestationDataFn = (attData: phase0.AttestationData) => InvalidAttestationData | null;
94
+
95
+ /**
96
+ * Limit the max attestations with the same AttestationData.
97
+ * Processing cost increases with each new attestation. This number is not backed by data.
98
+ * After merging AggregatedAttestationPool, gather numbers from a real network and investigate
99
+ * how does participation looks like in attestations.
100
+ */
101
+ const MAX_RETAINED_ATTESTATIONS_PER_GROUP = 4;
102
+
103
+ /**
104
+ * This is the same to MAX_RETAINED_ATTESTATIONS_PER_GROUP but for electra.
105
+ * As monitored in hoodi, max attestations per group could be up to > 10. But since electra we can
106
+ * consolidate attestations across committees, so we can just pick up to 8 attestations per group.
107
+ * Also the MatchingDataAttestationGroup.getAttestationsForBlock() is improved not to have to scan each
108
+ * committee member for previous slot.
109
+ */
110
+ const MAX_RETAINED_ATTESTATIONS_PER_GROUP_ELECTRA = 8;
111
+
112
+ /**
113
+ * Pre-electra, each slot has 64 committees, and each block has 128 attestations max so in average
114
+ * we get 2 attestation per groups.
115
+ * Starting from Jan 2024, we have a performance issue getting attestations for a block. Based on the
116
+ * fact that lot of groups will have only 1 full participation attestation, increase this number
117
+ * a bit higher than average. This also help decrease number of slots to search for attestations.
118
+ */
119
+ const MAX_ATTESTATIONS_PER_GROUP = 3;
120
+
121
+ /**
122
+ * For electra, there is on chain aggregation of attestations across committees, so we can just pick up to 8
123
+ * attestations per group, sort by scores to get first 8.
124
+ * The new algorithm helps not to include useless attestations so we usually cannot get up to 8.
125
+ * The more consolidations we have per block, the less likely we have to scan all slots in the pool.
126
+ * This is max attestations returned per group, it does not make sense to have this number greater
127
+ * than MAX_RETAINED_ATTESTATIONS_PER_GROUP_ELECTRA or MAX_ATTESTATIONS_ELECTRA.
128
+ */
129
+ const MAX_ATTESTATIONS_PER_GROUP_ELECTRA = Math.min(
130
+ MAX_RETAINED_ATTESTATIONS_PER_GROUP_ELECTRA,
131
+ MAX_ATTESTATIONS_ELECTRA
132
+ );
133
+
134
+ /** Same to https://github.com/ethereum/consensus-specs/blob/v1.5.0/specs/altair/beacon-chain.md#has_flag */
135
+ const TIMELY_SOURCE = 1 << TIMELY_SOURCE_FLAG_INDEX;
136
+ const TIMELY_TARGET = 1 << TIMELY_TARGET_FLAG_INDEX;
137
+ const TIMELY_HEAD = 1 << TIMELY_HEAD_FLAG_INDEX;
138
+
139
+ export enum ScannedSlotsTerminationReason {
140
+ MaxConsolidationReached = "max_consolidation_reached",
141
+ ScannedAllSlots = "scanned_all_slots",
142
+ SlotBeforePreviousEpoch = "slot_before_previous_epoch",
143
+ }
144
+
145
+ /**
146
+ * Maintain a pool of aggregated attestations. Attestations can be retrieved for inclusion in a block
147
+ * or api. The returned attestations are aggregated to maximize the number of validators that can be
148
+ * included.
149
+ * Note that we want to remove attestations with attesters that were included in the chain.
150
+ */
151
+ export class AggregatedAttestationPool {
152
+ /**
153
+ * post electra, different committees could have the same AttData and we have to consolidate attestations of the same
154
+ * data to be included in block, so we should group by data before index
155
+ * // TODO: make sure it does not affect performance for pre electra forks
156
+ */
157
+ private readonly attestationGroupByIndexByDataHexBySlot = new MapDef<
158
+ Slot,
159
+ Map<DataRootHex, Map<CommitteeIndex, MatchingDataAttestationGroup>>
160
+ >(() => new Map<DataRootHex, Map<CommitteeIndex, MatchingDataAttestationGroup>>());
161
+ private lowestPermissibleSlot = 0;
162
+
163
+ constructor(
164
+ private readonly config: ChainForkConfig,
165
+ private readonly metrics: Metrics | null = null
166
+ ) {
167
+ metrics?.opPool.aggregatedAttestationPool.attDataPerSlot.addCollect(() => this.onScrapeMetrics(metrics));
168
+ }
169
+
170
+ add(
171
+ attestation: Attestation,
172
+ dataRootHex: RootHex,
173
+ attestingIndicesCount: number,
174
+ committee: Uint32Array
175
+ ): InsertOutcome {
176
+ const slot = attestation.data.slot;
177
+ const lowestPermissibleSlot = this.lowestPermissibleSlot;
178
+
179
+ // Reject any attestations that are too old.
180
+ if (slot < lowestPermissibleSlot) {
181
+ return InsertOutcome.Old;
182
+ }
183
+
184
+ const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.getOrDefault(slot);
185
+ let attestationGroupByIndex = attestationGroupByIndexByDataHash.get(dataRootHex);
186
+ if (!attestationGroupByIndex) {
187
+ attestationGroupByIndex = new Map<CommitteeIndex, MatchingDataAttestationGroup>();
188
+ attestationGroupByIndexByDataHash.set(dataRootHex, attestationGroupByIndex);
189
+ }
190
+
191
+ let committeeIndex: number | null;
192
+
193
+ if (isForkPostElectra(this.config.getForkName(slot))) {
194
+ if (!isElectraAttestation(attestation)) {
195
+ throw Error(`Attestation should be type electra.Attestation for slot ${slot}`);
196
+ }
197
+ committeeIndex = attestation.committeeBits.getSingleTrueBit();
198
+ } else {
199
+ if (isElectraAttestation(attestation)) {
200
+ throw Error(`Attestation should be type phase0.Attestation for slot ${slot}`);
201
+ }
202
+ committeeIndex = attestation.data.index;
203
+ }
204
+ // this should not happen because attestation should be validated before reaching this
205
+ assert.notNull(committeeIndex, "Committee index should not be null in aggregated attestation pool");
206
+ let attestationGroup = attestationGroupByIndex.get(committeeIndex);
207
+ if (!attestationGroup) {
208
+ attestationGroup = new MatchingDataAttestationGroup(this.config, committee, attestation.data);
209
+ attestationGroupByIndex.set(committeeIndex, attestationGroup);
210
+ }
211
+
212
+ return attestationGroup.add({
213
+ attestation,
214
+ trueBitsCount: attestingIndicesCount,
215
+ });
216
+ }
217
+
218
+ /** Remove attestations which are too old to be included in a block. */
219
+ prune(clockSlot: Slot): void {
220
+ const fork = this.config.getForkName(clockSlot);
221
+
222
+ const slotsToRetain = isForkPostDeneb(fork)
223
+ ? // Post deneb, attestations from current and previous epoch can be included
224
+ computeSlotsSinceEpochStart(clockSlot, computeEpochAtSlot(clockSlot) - 1)
225
+ : // Before deneb, only retain SLOTS_PER_EPOCH slots
226
+ SLOTS_PER_EPOCH;
227
+
228
+ pruneBySlot(this.attestationGroupByIndexByDataHexBySlot, clockSlot, slotsToRetain);
229
+ this.lowestPermissibleSlot = Math.max(clockSlot - slotsToRetain, 0);
230
+ }
231
+
232
+ getAttestationsForBlock(fork: ForkName, forkChoice: IForkChoice, state: CachedBeaconStateAllForks): Attestation[] {
233
+ const forkSeq = ForkSeq[fork];
234
+ return forkSeq >= ForkSeq.electra
235
+ ? this.getAttestationsForBlockElectra(fork, forkChoice, state)
236
+ : this.getAttestationsForBlockPreElectra(fork, forkChoice, state);
237
+ }
238
+
239
+ /**
240
+ * Get attestations to be included in a block pre-electra. Returns up to $MAX_ATTESTATIONS items
241
+ */
242
+ getAttestationsForBlockPreElectra(
243
+ fork: ForkName,
244
+ forkChoice: IForkChoice,
245
+ state: CachedBeaconStateAllForks
246
+ ): phase0.Attestation[] {
247
+ const stateSlot = state.slot;
248
+ const stateEpoch = state.epochCtx.epoch;
249
+ const statePrevEpoch = stateEpoch - 1;
250
+
251
+ const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
252
+ const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
253
+
254
+ const attestationsByScore: AttestationWithScore[] = [];
255
+
256
+ const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
257
+ let minScore = Number.MAX_SAFE_INTEGER;
258
+ let slotCount = 0;
259
+ slot: for (const slot of slots) {
260
+ slotCount++;
261
+ const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
262
+ // should not happen
263
+ if (!attestationGroupByIndexByDataHash) {
264
+ throw Error(`No aggregated attestation pool for slot=${slot}`);
265
+ }
266
+
267
+ const epoch = computeEpochAtSlot(slot);
268
+ // validateAttestation condition: Attestation target epoch not in previous or current epoch
269
+ if (!(epoch === stateEpoch || epoch === statePrevEpoch)) {
270
+ continue; // Invalid attestations
271
+ }
272
+ // validateAttestation condition: Attestation slot not within inclusion window
273
+ if (
274
+ !(
275
+ slot + MIN_ATTESTATION_INCLUSION_DELAY <= stateSlot &&
276
+ // Post deneb, attestations are valid for current and previous epoch
277
+ (ForkSeq[fork] >= ForkSeq.deneb || stateSlot <= slot + SLOTS_PER_EPOCH)
278
+ )
279
+ ) {
280
+ continue; // Invalid attestations
281
+ }
282
+
283
+ const inclusionDistance = stateSlot - slot;
284
+ for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
285
+ for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
286
+ const notSeenCommitteeMembers = notSeenValidatorsFn(epoch, slot, committeeIndex);
287
+ if (notSeenCommitteeMembers === null || notSeenCommitteeMembers.size === 0) {
288
+ continue;
289
+ }
290
+
291
+ if (
292
+ slotCount > 2 &&
293
+ attestationsByScore.length >= MAX_ATTESTATIONS &&
294
+ notSeenCommitteeMembers.size / inclusionDistance < minScore
295
+ ) {
296
+ // after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS attestations and break the for loop early
297
+ // if not, we may have to scan all slots in the pool
298
+ // if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
299
+ // otherwise it takes time to check attestation, add it and remove it later after the sort by score
300
+ continue;
301
+ }
302
+
303
+ if (validateAttestationDataFn(attestationGroup.data) !== null) {
304
+ continue;
305
+ }
306
+
307
+ // TODO: Is it necessary to validateAttestation for:
308
+ // - Attestation committee index not within current committee count
309
+ // - Attestation aggregation bits length does not match committee length
310
+ //
311
+ // These properties should not change after being validate in gossip
312
+ // IF they have to be validated, do it only with one attestation per group since same data
313
+ // The committeeCountPerSlot can be precomputed once per slot
314
+ const getAttestationsResult = attestationGroup.getAttestationsForBlock(
315
+ fork,
316
+ state.epochCtx.effectiveBalanceIncrements,
317
+ notSeenCommitteeMembers,
318
+ MAX_ATTESTATIONS_PER_GROUP
319
+ );
320
+ for (const {attestation, newSeenEffectiveBalance} of getAttestationsResult.result) {
321
+ const score = newSeenEffectiveBalance / inclusionDistance;
322
+ if (score < minScore) {
323
+ minScore = score;
324
+ }
325
+ attestationsByScore.push({
326
+ attestation,
327
+ score,
328
+ });
329
+ }
330
+
331
+ // Stop accumulating attestations there are enough that may have good scoring
332
+ if (attestationsByScore.length >= MAX_ATTESTATIONS * 2) {
333
+ break slot;
334
+ }
335
+ }
336
+ }
337
+ }
338
+
339
+ const sortedAttestationsByScore = attestationsByScore.sort((a, b) => b.score - a.score);
340
+ const attestationsForBlock: phase0.Attestation[] = [];
341
+ for (const [i, attestationWithScore] of sortedAttestationsByScore.entries()) {
342
+ if (i >= MAX_ATTESTATIONS) {
343
+ break;
344
+ }
345
+ // attestations could be modified in this op pool, so we need to clone for block
346
+ attestationsForBlock.push(ssz.phase0.Attestation.clone(attestationWithScore.attestation));
347
+ }
348
+ return attestationsForBlock;
349
+ }
350
+
351
+ /**
352
+ * Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items
353
+ */
354
+ getAttestationsForBlockElectra(
355
+ fork: ForkName,
356
+ forkChoice: IForkChoice,
357
+ state: CachedBeaconStateAllForks
358
+ ): electra.Attestation[] {
359
+ const stateSlot = state.slot;
360
+ const stateEpoch = state.epochCtx.epoch;
361
+ const statePrevEpoch = stateEpoch - 1;
362
+ const rootCache = new RootCache(state);
363
+
364
+ const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
365
+ const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
366
+
367
+ const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
368
+ // Track score of each `AttestationsConsolidation`
369
+ const consolidations = new Map<AttestationsConsolidation, number>();
370
+ let scannedSlots = 0;
371
+ let stopReason: ScannedSlotsTerminationReason | null = null;
372
+ slot: for (const slot of slots) {
373
+ const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
374
+ // should not happen
375
+ if (!attestationGroupByIndexByDataHash) {
376
+ throw Error(`No aggregated attestation pool for slot=${slot}`);
377
+ }
378
+
379
+ const epoch = computeEpochAtSlot(slot);
380
+ if (epoch < statePrevEpoch) {
381
+ // we process slot in desc order, this means next slot is not eligible, we should stop
382
+ stopReason = ScannedSlotsTerminationReason.SlotBeforePreviousEpoch;
383
+ break;
384
+ }
385
+
386
+ // validateAttestation condition: Attestation target epoch not in previous or current epoch
387
+ if (!(epoch === stateEpoch || epoch === statePrevEpoch)) {
388
+ continue; // Invalid attestations
389
+ }
390
+
391
+ // validateAttestation condition: Attestation slot not within inclusion window
392
+ if (!(slot + MIN_ATTESTATION_INCLUSION_DELAY <= stateSlot)) {
393
+ // this should not happen as slot is decreased so no need to track in metric
394
+ continue; // Invalid attestations
395
+ }
396
+
397
+ const inclusionDistance = stateSlot - slot;
398
+ let returnedAttestationsPerSlot = 0;
399
+ let totalAttestationsPerSlot = 0;
400
+ // CommitteeIndex 0 1 2 ... Consolidation (sameAttDataCons)
401
+ // Attestations att00 --- att10 --- att20 --- 0 (att 00 10 20)
402
+ // att01 --- - --- att21 --- 1 (att 01 __ 21)
403
+ // - --- - --- att22 --- 2 (att __ __ 22)
404
+ for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
405
+ // sameAttDataCons could be up to MAX_ATTESTATIONS_PER_GROUP_ELECTRA
406
+ const sameAttDataCons: AttestationsConsolidation[] = [];
407
+ const allAttestationGroups = Array.from(attestationGroupByIndex.values());
408
+ if (allAttestationGroups.length === 0) {
409
+ this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.emptyAttestationData.inc();
410
+ continue;
411
+ }
412
+
413
+ const invalidAttDataReason = validateAttestationDataFn(allAttestationGroups[0].data);
414
+ if (invalidAttDataReason !== null) {
415
+ this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.invalidAttestationData.inc({
416
+ reason: invalidAttDataReason,
417
+ });
418
+ continue;
419
+ }
420
+
421
+ for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
422
+ const notSeenCommitteeMembers = notSeenValidatorsFn(epoch, slot, committeeIndex);
423
+ if (notSeenCommitteeMembers === null || notSeenCommitteeMembers.size === 0) {
424
+ this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.seenCommittees.inc();
425
+ continue;
426
+ }
427
+
428
+ // cannot apply this optimization like pre-electra because consolidation needs to be done across committees:
429
+ // "after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS_ELECTRA attestations and break the for loop early"
430
+
431
+ // TODO: Is it necessary to validateAttestation for:
432
+ // - Attestation committee index not within current committee count
433
+ // - Attestation aggregation bits length does not match committee length
434
+ //
435
+ // These properties should not change after being validate in gossip
436
+ // IF they have to be validated, do it only with one attestation per group since same data
437
+ // The committeeCountPerSlot can be precomputed once per slot
438
+ const getAttestationGroupResult = attestationGroup.getAttestationsForBlock(
439
+ fork,
440
+ state.epochCtx.effectiveBalanceIncrements,
441
+ notSeenCommitteeMembers,
442
+ MAX_ATTESTATIONS_PER_GROUP_ELECTRA
443
+ );
444
+ const attestationsSameGroup = getAttestationGroupResult.result;
445
+ returnedAttestationsPerSlot += attestationsSameGroup.length;
446
+ totalAttestationsPerSlot += getAttestationGroupResult.totalAttestations;
447
+
448
+ for (const [i, attestationNonParticipation] of attestationsSameGroup.entries()) {
449
+ // sameAttDataCons shares the same index for different committees so we use index `i` here
450
+ if (sameAttDataCons[i] === undefined) {
451
+ sameAttDataCons[i] = {
452
+ byCommittee: new Map(),
453
+ attData: attestationNonParticipation.attestation.data,
454
+ totalNewSeenEffectiveBalance: 0,
455
+ newSeenAttesters: 0,
456
+ notSeenAttesters: 0,
457
+ totalAttesters: 0,
458
+ };
459
+ }
460
+ const sameAttDataCon = sameAttDataCons[i];
461
+ // committeeIndex was from a map so it should be unique, but just in case
462
+ if (!sameAttDataCon.byCommittee.has(committeeIndex)) {
463
+ sameAttDataCon.byCommittee.set(committeeIndex, attestationNonParticipation);
464
+ sameAttDataCon.totalNewSeenEffectiveBalance += attestationNonParticipation.newSeenEffectiveBalance;
465
+ sameAttDataCon.newSeenAttesters += attestationNonParticipation.newSeenAttesters;
466
+ sameAttDataCon.notSeenAttesters += attestationNonParticipation.notSeenCommitteeMembers.size;
467
+ sameAttDataCon.totalAttesters += attestationGroup.committee.length;
468
+ }
469
+ }
470
+ } // all committees are processed
471
+
472
+ this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.returnedAttestations.set(
473
+ {inclusionDistance},
474
+ returnedAttestationsPerSlot
475
+ );
476
+ this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.scannedAttestations.set(
477
+ {inclusionDistance},
478
+ totalAttestationsPerSlot
479
+ );
480
+
481
+ // after all committees are processed, we have a list of sameAttDataCons
482
+ for (const consolidation of sameAttDataCons) {
483
+ // Score attestations by profitability to maximize proposer reward
484
+ const flags = getAttestationParticipationStatus(
485
+ ForkSeq[fork],
486
+ consolidation.attData,
487
+ inclusionDistance,
488
+ stateEpoch,
489
+ rootCache
490
+ );
491
+
492
+ const weight =
493
+ ((flags & TIMELY_SOURCE) === TIMELY_SOURCE ? TIMELY_SOURCE_WEIGHT : 0) +
494
+ ((flags & TIMELY_TARGET) === TIMELY_TARGET ? TIMELY_TARGET_WEIGHT : 0) +
495
+ ((flags & TIMELY_HEAD) === TIMELY_HEAD ? TIMELY_HEAD_WEIGHT : 0);
496
+
497
+ const score = consolidation.totalNewSeenEffectiveBalance * weight;
498
+
499
+ consolidations.set(consolidation, score);
500
+ // Stop accumulating attestations there are enough that may have good scoring
501
+ if (consolidations.size >= MAX_ATTESTATIONS_ELECTRA * 2) {
502
+ stopReason = ScannedSlotsTerminationReason.MaxConsolidationReached;
503
+ break slot;
504
+ }
505
+ }
506
+ }
507
+
508
+ // finished processing a slot
509
+ scannedSlots++;
510
+ }
511
+
512
+ this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.totalConsolidations.set(consolidations.size);
513
+
514
+ const sortedConsolidationsByScore = Array.from(consolidations.entries())
515
+ .sort((a, b) => b[1] - a[1])
516
+ .map(([consolidation, _]) => consolidation)
517
+ .slice(0, MAX_ATTESTATIONS_ELECTRA);
518
+
519
+ // on chain aggregation is expensive, only do it after all
520
+ const packedAttestationsMetrics = this.metrics?.opPool.aggregatedAttestationPool.packedAttestations;
521
+ const packedAttestations: electra.Attestation[] = new Array(sortedConsolidationsByScore.length);
522
+ for (const [i, consolidation] of sortedConsolidationsByScore.entries()) {
523
+ packedAttestations[i] = aggregateConsolidation(consolidation);
524
+
525
+ // record metrics of packed attestations
526
+ packedAttestationsMetrics?.committeeCount.set({index: i}, consolidation.byCommittee.size);
527
+ packedAttestationsMetrics?.totalAttesters.set({index: i}, consolidation.totalAttesters);
528
+ packedAttestationsMetrics?.nonParticipation.set({index: i}, consolidation.notSeenAttesters);
529
+ packedAttestationsMetrics?.inclusionDistance.set({index: i}, stateSlot - packedAttestations[i].data.slot);
530
+ packedAttestationsMetrics?.newSeenAttesters.set({index: i}, consolidation.newSeenAttesters);
531
+ packedAttestationsMetrics?.totalEffectiveBalance.set({index: i}, consolidation.totalNewSeenEffectiveBalance);
532
+ }
533
+
534
+ if (stopReason === null) {
535
+ stopReason = ScannedSlotsTerminationReason.ScannedAllSlots;
536
+ }
537
+ packedAttestationsMetrics?.scannedSlots.set({reason: stopReason}, scannedSlots);
538
+ packedAttestationsMetrics?.poolSlots.set(slots.length);
539
+
540
+ return packedAttestations;
541
+ }
542
+
543
+ /**
544
+ * Get all attestations optionally filtered by `attestation.data.slot`
545
+ * Note this function is not fork aware and can potentially return a mix
546
+ * of phase0.Attestations and electra.Attestations.
547
+ * Caller of this function is expected to filtered result if they desire
548
+ * a homogenous array.
549
+ * @param bySlot slot to filter, `bySlot === attestation.data.slot`
550
+ */
551
+ getAll(bySlot?: Slot): Attestation[] {
552
+ let attestationGroupsArr: Map<CommitteeIndex, MatchingDataAttestationGroup>[];
553
+ if (bySlot === undefined) {
554
+ attestationGroupsArr = Array.from(this.attestationGroupByIndexByDataHexBySlot.values()).flatMap((byIndex) =>
555
+ Array.from(byIndex.values())
556
+ );
557
+ } else {
558
+ const attestationGroupsByIndex = this.attestationGroupByIndexByDataHexBySlot.get(bySlot);
559
+ if (!attestationGroupsByIndex) throw Error(`No attestations for slot ${bySlot}`);
560
+ attestationGroupsArr = Array.from(attestationGroupsByIndex.values());
561
+ }
562
+
563
+ const attestations: Attestation[] = [];
564
+ for (const attestationGroups of attestationGroupsArr) {
565
+ for (const attestationGroup of attestationGroups.values()) {
566
+ attestations.push(...attestationGroup.getAttestations());
567
+ }
568
+ }
569
+ return attestations;
570
+ }
571
+
572
+ private onScrapeMetrics(metrics: Metrics): void {
573
+ const poolMetrics = metrics.opPool.aggregatedAttestationPool;
574
+ const allSlots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys());
575
+
576
+ // last item is current slot, we want the previous one, if available.
577
+ const previousSlot = allSlots.length > 1 ? (allSlots.at(-2) ?? null) : null;
578
+
579
+ let attestationCount = 0;
580
+ let attestationDataCount = 0;
581
+
582
+ // always record the previous slot because the current slot may not be finished yet, we may receive more attestations
583
+ if (previousSlot !== null) {
584
+ const groupByIndexByDataHex = this.attestationGroupByIndexByDataHexBySlot.get(previousSlot);
585
+ if (groupByIndexByDataHex != null) {
586
+ poolMetrics.attDataPerSlot.set(groupByIndexByDataHex.size);
587
+
588
+ let maxAttestations = 0;
589
+ let committeeCount = 0;
590
+ for (const groupByIndex of groupByIndexByDataHex.values()) {
591
+ attestationDataCount += groupByIndex.size;
592
+ for (const group of groupByIndex.values()) {
593
+ const attestationCountInGroup = group.getAttestationCount();
594
+ maxAttestations = Math.max(maxAttestations, attestationCountInGroup);
595
+ poolMetrics.attestationsPerCommittee.observe(attestationCountInGroup);
596
+ committeeCount += 1;
597
+
598
+ attestationCount += attestationCountInGroup;
599
+ }
600
+ }
601
+ poolMetrics.maxAttestationsPerCommittee.set(maxAttestations);
602
+ poolMetrics.committeesPerSlot.set(committeeCount);
603
+ }
604
+ }
605
+
606
+ for (const [slot, attestationGroupByIndexByDataHex] of this.attestationGroupByIndexByDataHexBySlot) {
607
+ // We have already updated attestationDataCount and attestationCount when looping over `previousSlot`
608
+ if (slot === previousSlot) {
609
+ continue;
610
+ }
611
+ for (const attestationGroupByIndex of attestationGroupByIndexByDataHex.values()) {
612
+ attestationDataCount += attestationGroupByIndex.size;
613
+ for (const attestationGroup of attestationGroupByIndex.values()) {
614
+ attestationCount += attestationGroup.getAttestationCount();
615
+ }
616
+ }
617
+ }
618
+
619
+ poolMetrics.size.set(attestationCount);
620
+ poolMetrics.uniqueData.set(attestationDataCount);
621
+ }
622
+ }
623
+
624
+ interface AttestationWithIndex {
625
+ attestation: Attestation;
626
+ trueBitsCount: number;
627
+ }
628
+
629
+ type AttestationNonParticipant = {
630
+ attestation: Attestation;
631
+ // this was `notSeenAttesterCount` in pre-electra
632
+ // since electra, we prioritize total effective balance over attester count
633
+ // as attestation value can vary significantly between validators due to EIP-7251
634
+ // this is only updated and used in removeBySeenValidators function
635
+ newSeenEffectiveBalance: number;
636
+ newSeenAttesters: number;
637
+ notSeenCommitteeMembers: Set<number>;
638
+ };
639
+
640
+ type GetAttestationsGroupResult = {
641
+ result: AttestationNonParticipant[];
642
+ totalAttestations: number;
643
+ };
644
+
645
+ /**
646
+ * Maintain a pool of AggregatedAttestation which all share the same AttestationData.
647
+ * Preaggregate into smallest number of attestations.
648
+ * When getting attestations to be included in a block, sort by number of attesters.
649
+ * Use committee instead of aggregationBits to improve performance.
650
+ */
651
+ export class MatchingDataAttestationGroup {
652
+ private readonly attestations: AttestationWithIndex[] = [];
653
+
654
+ constructor(
655
+ private readonly config: ChainForkConfig,
656
+ readonly committee: Uint32Array,
657
+ readonly data: phase0.AttestationData
658
+ ) {}
659
+
660
+ getAttestationCount(): number {
661
+ return this.attestations.length;
662
+ }
663
+
664
+ /**
665
+ * Add an attestation.
666
+ * Try to preaggregate to existing attestations if possible.
667
+ * If it's a subset of an existing attestations, it's not neccesrary to add to our pool.
668
+ * If it's a superset of an existing attestation, remove the existing attestation and add new.
669
+ */
670
+ add(attestation: AttestationWithIndex): InsertOutcome {
671
+ const newBits = attestation.attestation.aggregationBits;
672
+
673
+ const indicesToRemove = [];
674
+
675
+ for (const [i, prevAttestation] of this.attestations.entries()) {
676
+ const prevBits = prevAttestation.attestation.aggregationBits;
677
+
678
+ switch (intersectUint8Arrays(newBits.uint8Array, prevBits.uint8Array)) {
679
+ case IntersectResult.Subset:
680
+ case IntersectResult.Equal:
681
+ // this new attestation is actually a subset of an existing one, don't want to add it
682
+ return InsertOutcome.AlreadyKnown;
683
+
684
+ case IntersectResult.Exclusive:
685
+ // no intersection
686
+ aggregateInto(prevAttestation, attestation);
687
+ return InsertOutcome.Aggregated;
688
+
689
+ case IntersectResult.Superset:
690
+ // newBits superset of prevBits
691
+ // this new attestation is superset of an existing one, remove existing one
692
+ indicesToRemove.push(i);
693
+ }
694
+ }
695
+
696
+ // Added new data
697
+ for (const index of indicesToRemove.reverse()) {
698
+ // TODO: .splice performance warning
699
+ this.attestations.splice(index, 1);
700
+ }
701
+
702
+ this.attestations.push(attestation);
703
+
704
+ const maxRetained = isForkPostElectra(this.config.getForkName(this.data.slot))
705
+ ? MAX_RETAINED_ATTESTATIONS_PER_GROUP_ELECTRA
706
+ : MAX_RETAINED_ATTESTATIONS_PER_GROUP;
707
+
708
+ // Remove the attestations with less participation
709
+ if (this.attestations.length > maxRetained) {
710
+ // ideally we should sort by effective balance but there is no state/effectiveBalance here
711
+ // it's rare to see > 8 attestations per group in electra anyway
712
+ this.attestations.sort((a, b) => b.trueBitsCount - a.trueBitsCount);
713
+ this.attestations.splice(maxRetained, this.attestations.length - maxRetained);
714
+ }
715
+
716
+ return InsertOutcome.NewData;
717
+ }
718
+
719
+ /**
720
+ * Get AttestationNonParticipant for this groups of same attestation data.
721
+ * @param notSeenCommitteeMembers not seen committee members, i.e. indices in the same committee (starting from 0 till (committee.size - 1))
722
+ * @returns an array of AttestationNonParticipant
723
+ */
724
+ getAttestationsForBlock(
725
+ fork: ForkName,
726
+ effectiveBalanceIncrements: EffectiveBalanceIncrements,
727
+ notSeenCommitteeMembers: Set<number>,
728
+ maxAttestation: number
729
+ ): GetAttestationsGroupResult {
730
+ const attestations: AttestationNonParticipant[] = [];
731
+ const excluded = new Set<Attestation>();
732
+ for (let i = 0; i < maxAttestation; i++) {
733
+ const mostValuableAttestation = this.getMostValuableAttestation(
734
+ fork,
735
+ effectiveBalanceIncrements,
736
+ notSeenCommitteeMembers,
737
+ excluded
738
+ );
739
+
740
+ if (mostValuableAttestation === null) {
741
+ // stop looking for attestation because all attesters are seen or no attestation has missing attesters
742
+ break;
743
+ }
744
+
745
+ attestations.push(mostValuableAttestation);
746
+ excluded.add(mostValuableAttestation.attestation);
747
+ // this will narrow down the notSeenCommitteeMembers for the next iteration
748
+ // so usually it will not take much time, however it could take more time during
749
+ // non-finality of the network when there is low participation, but in this case
750
+ // we pre-aggregate aggregated attestations and bound the total attestations per group
751
+ notSeenCommitteeMembers = mostValuableAttestation.notSeenCommitteeMembers;
752
+ }
753
+
754
+ return {result: attestations, totalAttestations: this.attestations.length};
755
+ }
756
+
757
+ /**
758
+ * Select the attestation with the highest total effective balance of not seen validators.
759
+ */
760
+ private getMostValuableAttestation(
761
+ fork: ForkName,
762
+ effectiveBalanceIncrements: EffectiveBalanceIncrements,
763
+ notSeenCommitteeMembers: Set<number>,
764
+ excluded: Set<Attestation>
765
+ ): AttestationNonParticipant | null {
766
+ if (notSeenCommitteeMembers.size === 0) {
767
+ // no more attesters to consider
768
+ return null;
769
+ }
770
+
771
+ const isPostElectra = isForkPostElectra(fork);
772
+
773
+ let maxNewSeenEffectiveBalance = 0;
774
+ let mostValuableAttestation: AttestationNonParticipant | null = null;
775
+ for (const {attestation} of this.attestations) {
776
+ if (
777
+ (isPostElectra && !isElectraAttestation(attestation)) ||
778
+ (!isPostElectra && isElectraAttestation(attestation))
779
+ ) {
780
+ continue;
781
+ }
782
+
783
+ if (excluded.has(attestation)) {
784
+ continue;
785
+ }
786
+
787
+ const notSeen = new Set<number>();
788
+
789
+ // we prioritize total effective balance over attester count
790
+ let newSeenEffectiveBalance = 0;
791
+ let newSeenAttesters = 0;
792
+ const {aggregationBits} = attestation;
793
+ for (const notSeenIndex of notSeenCommitteeMembers) {
794
+ if (aggregationBits.get(notSeenIndex)) {
795
+ newSeenEffectiveBalance += effectiveBalanceIncrements[this.committee[notSeenIndex]];
796
+ newSeenAttesters++;
797
+ } else {
798
+ notSeen.add(notSeenIndex);
799
+ }
800
+ }
801
+
802
+ if (newSeenEffectiveBalance > maxNewSeenEffectiveBalance) {
803
+ maxNewSeenEffectiveBalance = newSeenEffectiveBalance;
804
+ mostValuableAttestation = {
805
+ attestation,
806
+ newSeenEffectiveBalance,
807
+ newSeenAttesters,
808
+ notSeenCommitteeMembers: notSeen,
809
+ };
810
+ }
811
+ }
812
+
813
+ return mostValuableAttestation;
814
+ }
815
+
816
+ /** Get attestations for API. */
817
+ getAttestations(): Attestation[] {
818
+ return this.attestations.map((attestation) => attestation.attestation);
819
+ }
820
+ }
821
+
822
+ export function aggregateInto(attestation1: AttestationWithIndex, attestation2: AttestationWithIndex): void {
823
+ // Merge bits of attestation2 into attestation1
824
+ attestation1.attestation.aggregationBits.mergeOrWith(attestation2.attestation.aggregationBits);
825
+
826
+ const signature1 = signatureFromBytesNoCheck(attestation1.attestation.signature);
827
+ const signature2 = signatureFromBytesNoCheck(attestation2.attestation.signature);
828
+ attestation1.attestation.signature = aggregateSignatures([signature1, signature2]).toBytes();
829
+ }
830
+
831
+ /**
832
+ * Electra and after: Block proposer consolidates attestations with the same
833
+ * attestation data from different committee into a single attestation
834
+ * https://github.com/ethereum/consensus-specs/blob/aba6345776aa876dad368cab27fbbb23fae20455/specs/_features/eip7549/validator.md?plain=1#L39
835
+ */
836
+ export function aggregateConsolidation({byCommittee, attData}: AttestationsConsolidation): electra.Attestation {
837
+ const committeeBits = BitArray.fromBitLen(MAX_COMMITTEES_PER_SLOT);
838
+ // TODO: can we improve this?
839
+ let aggregationBits: boolean[] = [];
840
+ const signatures: Signature[] = [];
841
+ const sortedCommittees = Array.from(byCommittee.keys()).sort((a, b) => a - b);
842
+ for (const committeeIndex of sortedCommittees) {
843
+ const attestationNonParticipation = byCommittee.get(committeeIndex);
844
+ if (attestationNonParticipation !== undefined) {
845
+ const {attestation} = attestationNonParticipation;
846
+ committeeBits.set(committeeIndex, true);
847
+ aggregationBits = [...aggregationBits, ...attestation.aggregationBits.toBoolArray()];
848
+ signatures.push(signatureFromBytesNoCheck(attestation.signature));
849
+ }
850
+ }
851
+ return {
852
+ aggregationBits: BitArray.fromBoolArray(aggregationBits),
853
+ data: attData,
854
+ committeeBits,
855
+ signature: aggregateSignatures(signatures).toBytes(),
856
+ };
857
+ }
858
+
859
+ /**
860
+ * Pre-compute participation from a CachedBeaconStateAllForks, for use to check if an attestation's committee
861
+ * has already attested or not.
862
+ */
863
+ export function getNotSeenValidatorsFn(state: CachedBeaconStateAllForks): GetNotSeenValidatorsFn {
864
+ const stateSlot = state.slot;
865
+ if (state.config.getForkName(stateSlot) === ForkName.phase0) {
866
+ // Get attestations to be included in a phase0 block.
867
+ // As we are close to altair, this is not really important, it's mainly for e2e.
868
+ // The performance is not great due to the different BeaconState data structure to altair.
869
+ // check for phase0 block already
870
+ const phase0State = state as CachedBeaconStatePhase0;
871
+ const stateEpoch = computeEpochAtSlot(stateSlot);
872
+
873
+ const previousEpochParticipants = extractParticipationPhase0(
874
+ phase0State.previousEpochAttestations.getAllReadonly(),
875
+ state
876
+ );
877
+ const currentEpochParticipants = extractParticipationPhase0(
878
+ phase0State.currentEpochAttestations.getAllReadonly(),
879
+ state
880
+ );
881
+
882
+ return (epoch: Epoch, slot: Slot, committeeIndex: number) => {
883
+ const participants =
884
+ epoch === stateEpoch ? currentEpochParticipants : epoch === stateEpoch - 1 ? previousEpochParticipants : null;
885
+ if (participants === null) {
886
+ return null;
887
+ }
888
+ const committee = state.epochCtx.getBeaconCommittee(slot, committeeIndex);
889
+
890
+ const notSeenCommitteeMembers = new Set<number>();
891
+ for (const [i, validatorIndex] of committee.entries()) {
892
+ if (!participants.has(validatorIndex)) {
893
+ notSeenCommitteeMembers.add(i);
894
+ }
895
+ }
896
+ return notSeenCommitteeMembers.size === 0 ? null : notSeenCommitteeMembers;
897
+ };
898
+ }
899
+
900
+ // altair and future forks
901
+ // Get attestations to be included in an altair block.
902
+ // Attestations are sorted by inclusion distance then number of attesters.
903
+ // Attestations should pass the validation when processing attestations in state-transition.
904
+ // check for altair block already
905
+ const altairState = state as CachedBeaconStateAltair;
906
+ const previousParticipation = altairState.previousEpochParticipation.getAll();
907
+ const currentParticipation = altairState.currentEpochParticipation.getAll();
908
+ const stateEpoch = computeEpochAtSlot(stateSlot);
909
+ // this function could be called multiple times with same slot + committeeIndex
910
+ const cachedNotSeenValidators = new Map<string, Set<number>>();
911
+
912
+ return (epoch: Epoch, slot: Slot, committeeIndex: number) => {
913
+ const participationStatus =
914
+ epoch === stateEpoch ? currentParticipation : epoch === stateEpoch - 1 ? previousParticipation : null;
915
+
916
+ if (participationStatus === null) {
917
+ return null;
918
+ }
919
+ const cacheKey = slot + "_" + committeeIndex;
920
+ let notSeenCommitteeMembers = cachedNotSeenValidators.get(cacheKey);
921
+ if (notSeenCommitteeMembers != null) {
922
+ // if all validators are seen then return null, we don't need to check for any attestations of same committee again
923
+ return notSeenCommitteeMembers.size === 0 ? null : notSeenCommitteeMembers;
924
+ }
925
+
926
+ const committee = state.epochCtx.getBeaconCommittee(slot, committeeIndex);
927
+ notSeenCommitteeMembers = new Set<number>();
928
+ for (const [i, validatorIndex] of committee.entries()) {
929
+ // no need to check flagIsTimelySource as if validator is not seen, it's participation status is 0
930
+ // attestations for the previous slot are not included in the state, so we don't need to check for them
931
+ if (slot === stateSlot - 1 || participationStatus[validatorIndex] === 0) {
932
+ notSeenCommitteeMembers.add(i);
933
+ }
934
+ }
935
+ cachedNotSeenValidators.set(cacheKey, notSeenCommitteeMembers);
936
+ // if all validators are seen then return null, we don't need to check for any attestations of same committee again
937
+ return notSeenCommitteeMembers.size === 0 ? null : notSeenCommitteeMembers;
938
+ };
939
+ }
940
+
941
+ export function extractParticipationPhase0(
942
+ attestations: phase0.PendingAttestation[],
943
+ state: CachedBeaconStateAllForks
944
+ ): Set<ValidatorIndex> {
945
+ const {epochCtx} = state;
946
+ const allParticipants = new Set<ValidatorIndex>();
947
+ for (const att of attestations) {
948
+ const aggregationBits = att.aggregationBits;
949
+ const attData = att.data;
950
+ const attSlot = attData.slot;
951
+ const committeeIndex = attData.index;
952
+ const committee = epochCtx.getBeaconCommittee(attSlot, committeeIndex);
953
+ const participants = aggregationBits.intersectValues(committee);
954
+ for (const participant of participants) {
955
+ allParticipants.add(participant);
956
+ }
957
+ }
958
+ return allParticipants;
959
+ }
960
+
961
+ /**
962
+ * This returns a function to validate if an attestation data is compatible to a state.
963
+ *
964
+ * Attestation data is validated by:
965
+ * - Validate the source checkpoint
966
+ * - Validate shuffling using beacon block root and target epoch
967
+ *
968
+ * Here we always validate the source checkpoint, and cache beacon block root + target epoch
969
+ * to avoid running the same shuffling validation multiple times.
970
+ *
971
+ * See also: https://github.com/ChainSafe/lodestar/issues/4333
972
+ */
973
+ export function getValidateAttestationDataFn(
974
+ forkChoice: IForkChoice,
975
+ state: CachedBeaconStateAllForks
976
+ ): ValidateAttestationDataFn {
977
+ const cachedValidatedAttestationData = new Map<string, InvalidAttestationData | null>();
978
+ const {previousJustifiedCheckpoint, currentJustifiedCheckpoint} = state;
979
+ const stateEpoch = state.epochCtx.epoch;
980
+ return (attData: phase0.AttestationData) => {
981
+ const targetEpoch = attData.target.epoch;
982
+ let justifiedCheckpoint: phase0.Checkpoint;
983
+ // simple check first
984
+ if (targetEpoch === stateEpoch) {
985
+ justifiedCheckpoint = currentJustifiedCheckpoint;
986
+ } else if (targetEpoch === stateEpoch - 1) {
987
+ justifiedCheckpoint = previousJustifiedCheckpoint;
988
+ } else {
989
+ return InvalidAttestationData.InvalidTargetEpoch;
990
+ }
991
+
992
+ if (!ssz.phase0.Checkpoint.equals(attData.source, justifiedCheckpoint)) {
993
+ return InvalidAttestationData.InvalidSourceCheckPoint;
994
+ }
995
+
996
+ // Shuffling can't have changed if we're in the first few epochs
997
+ // Also we can't look back 2 epochs if target epoch is 1 or less
998
+ if (stateEpoch < 2 || targetEpoch < 2) {
999
+ // null means valid
1000
+ return null;
1001
+ }
1002
+
1003
+ // valid attestation data does not depend on slot and index
1004
+ const beaconBlockRootHex = toRootHex(attData.beaconBlockRoot);
1005
+ const cacheKey = beaconBlockRootHex + targetEpoch;
1006
+ let invalidReasonOrNull = cachedValidatedAttestationData.get(cacheKey);
1007
+ if (invalidReasonOrNull === undefined) {
1008
+ invalidReasonOrNull = isValidShuffling(forkChoice, state, beaconBlockRootHex, targetEpoch);
1009
+ cachedValidatedAttestationData.set(cacheKey, invalidReasonOrNull);
1010
+ }
1011
+ return invalidReasonOrNull;
1012
+ };
1013
+ }
1014
+
1015
+ /**
1016
+ * Validate the shuffling of an attestation data against the current state.
1017
+ * Return `null` if the shuffling is valid, otherwise return an `InvalidAttestationData` reason.
1018
+ */
1019
+ function isValidShuffling(
1020
+ forkChoice: IForkChoice,
1021
+ state: CachedBeaconStateAllForks,
1022
+ blockRootHex: RootHex,
1023
+ targetEpoch: Epoch
1024
+ ): InvalidAttestationData | null {
1025
+ // Otherwise the shuffling is determined by the block at the end of the target epoch
1026
+ // minus the shuffling lookahead (usually 2). We call this the "pivot".
1027
+ const pivotSlot = computeStartSlotAtEpoch(targetEpoch - 1) - 1;
1028
+ const stateDependentRoot = toRootHex(getBlockRootAtSlot(state, pivotSlot));
1029
+
1030
+ // Use fork choice's view of the block DAG to quickly evaluate whether the attestation's
1031
+ // pivot block is the same as the current state's pivot block. If it is, then the
1032
+ // attestation's shuffling is the same as the current state's.
1033
+ // To account for skipped slots, find the first block at *or before* the pivot slot.
1034
+ const beaconBlockRootHex = blockRootHex;
1035
+ const beaconBlock = forkChoice.getBlockHex(beaconBlockRootHex);
1036
+ if (!beaconBlock) {
1037
+ return InvalidAttestationData.BlockNotInForkChoice;
1038
+ }
1039
+
1040
+ let attestationDependentRoot: string;
1041
+ try {
1042
+ // should not use forkChoice.getDependentRoot directly, see https://github.com/ChainSafe/lodestar/issues/7651
1043
+ // attestationDependentRoot = forkChoice.getDependentRoot(beaconBlock, EpochDifference.previous);
1044
+ attestationDependentRoot = getShufflingDependentRoot(
1045
+ forkChoice,
1046
+ targetEpoch,
1047
+ computeEpochAtSlot(beaconBlock.slot),
1048
+ beaconBlock
1049
+ );
1050
+ } catch (_) {
1051
+ // getDependent root may throw error if the dependent root of attestation data is prior to finalized slot
1052
+ // ignore this attestation data in that case since we're not sure it's compatible to the state
1053
+ // see https://github.com/ChainSafe/lodestar/issues/4743
1054
+ return InvalidAttestationData.CannotGetShufflingDependentRoot;
1055
+ }
1056
+
1057
+ if (attestationDependentRoot !== stateDependentRoot) {
1058
+ return InvalidAttestationData.IncorrectDependentRoot;
1059
+ }
1060
+
1061
+ // If the dependent root matches, then the shuffling is valid.
1062
+ return null;
1063
+ }