@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,1310 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {ForkSeq, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH} from "@lodestar/params";
3
+ import {
4
+ CachedBeaconStateAllForks,
5
+ CachedBeaconStateAltair,
6
+ ParticipationFlags,
7
+ computeEpochAtSlot,
8
+ computeStartSlotAtEpoch,
9
+ computeTimeAtSlot,
10
+ getBlockRootAtSlot,
11
+ getCurrentSlot,
12
+ parseAttesterFlags,
13
+ parseParticipationFlags,
14
+ } from "@lodestar/state-transition";
15
+ import {
16
+ BeaconBlock,
17
+ Epoch,
18
+ IndexedAttestation,
19
+ RootHex,
20
+ SignedAggregateAndProof,
21
+ Slot,
22
+ SubnetID,
23
+ ValidatorIndex,
24
+ altair,
25
+ deneb,
26
+ } from "@lodestar/types";
27
+ import {LogData, LogHandler, LogLevel, Logger, MapDef, MapDefMax, toRootHex} from "@lodestar/utils";
28
+ import {GENESIS_SLOT} from "../constants/constants.js";
29
+ import {RegistryMetricCreator} from "../metrics/index.js";
30
+
31
+ /** The validator monitor collects per-epoch data about each monitored validator.
32
+ * Historical data will be kept around for `HISTORIC_EPOCHS` before it is pruned.
33
+ */
34
+ const MAX_CACHED_EPOCHS = 4;
35
+
36
+ const MAX_CACHED_DISTINCT_TARGETS = 4;
37
+
38
+ // TODO GLOAS: re-evaluate these timings
39
+ const LATE_ATTESTATION_SUBMISSION_BPS = 5000;
40
+ const LATE_BLOCK_SUBMISSION_BPS = 2500;
41
+
42
+ const RETAIN_REGISTERED_VALIDATORS_MS = 1 * 3600 * 1000; // 1 hour
43
+
44
+ type Seconds = number;
45
+ export enum OpSource {
46
+ api = "api",
47
+ gossip = "gossip",
48
+ }
49
+
50
+ export type ValidatorMonitor = {
51
+ registerLocalValidator(index: number): void;
52
+ registerLocalValidatorInSyncCommittee(index: number, untilEpoch: Epoch): void;
53
+ registerValidatorStatuses(
54
+ currentEpoch: Epoch,
55
+ inclusionDelays: number[],
56
+ flags: number[],
57
+ isActiveCurrEpoch: boolean[],
58
+ isActivePrevEpoch: boolean[],
59
+ balances?: number[]
60
+ ): void;
61
+ registerBeaconBlock(src: OpSource, delaySec: Seconds, block: BeaconBlock): void;
62
+ registerBlobSidecar(src: OpSource, seenTimestampSec: Seconds, blob: deneb.BlobSidecar): void;
63
+ registerImportedBlock(block: BeaconBlock, data: {proposerBalanceDelta: number}): void;
64
+ onPoolSubmitUnaggregatedAttestation(
65
+ seenTimestampSec: number,
66
+ indexedAttestation: IndexedAttestation,
67
+ subnet: SubnetID,
68
+ sentPeers: number
69
+ ): void;
70
+ onPoolSubmitAggregatedAttestation(
71
+ seenTimestampSec: number,
72
+ indexedAttestation: IndexedAttestation,
73
+ sentPeers: number
74
+ ): void;
75
+ registerGossipUnaggregatedAttestation(seenTimestampSec: Seconds, indexedAttestation: IndexedAttestation): void;
76
+ registerGossipAggregatedAttestation(
77
+ seenTimestampSec: Seconds,
78
+ signedAggregateAndProof: SignedAggregateAndProof,
79
+ indexedAttestation: IndexedAttestation
80
+ ): void;
81
+ registerAttestationInBlock(
82
+ indexedAttestation: IndexedAttestation,
83
+ parentSlot: Slot,
84
+ correctHead: boolean,
85
+ missedSlotVote: boolean,
86
+ inclusionBlockRoot: RootHex,
87
+ inclusionBlockSlot: Slot
88
+ ): void;
89
+ registerGossipSyncContributionAndProof(
90
+ syncContributionAndProof: altair.ContributionAndProof,
91
+ syncCommitteeParticipantIndices: ValidatorIndex[]
92
+ ): void;
93
+ registerSyncAggregateInBlock(
94
+ epoch: Epoch,
95
+ syncAggregate: altair.SyncAggregate,
96
+ syncCommitteeIndices: Uint32Array
97
+ ): void;
98
+ onceEveryEndOfEpoch(state: CachedBeaconStateAllForks): void;
99
+ scrapeMetrics(slotClock: Slot): void;
100
+ };
101
+
102
+ export type ValidatorMonitorOpts = {
103
+ /** Log validator monitor events as info */
104
+ validatorMonitorLogs?: boolean;
105
+ };
106
+
107
+ export const defaultValidatorMonitorOpts: ValidatorMonitorOpts = {
108
+ validatorMonitorLogs: false,
109
+ };
110
+
111
+ /** Information required to reward some validator during the current and previous epoch. */
112
+ type ValidatorStatus = {
113
+ /** True if the validator has been slashed, ever. */
114
+ isSlashed: boolean;
115
+ /** True if the validator was active in the state's _current_ epoch. */
116
+ isActiveInCurrentEpoch: boolean;
117
+ /** True if the validator was active in the state's _previous_ epoch. */
118
+ isActiveInPreviousEpoch: boolean;
119
+ /** The validator's effective balance in the _current_ epoch. */
120
+ currentEpochEffectiveBalance: number;
121
+
122
+ /** True if the validator had an attestation included in the _previous_ epoch. */
123
+ isPrevSourceAttester: boolean;
124
+ /** True if the validator's beacon block root attestation for the first slot of the _previous_
125
+ epoch matches the block root known to the state. */
126
+ isPrevTargetAttester: boolean;
127
+ /** True if the validator's beacon block root attestation in the _previous_ epoch at the
128
+ attestation's slot (`attestation_data.slot`) matches the block root known to the state. */
129
+ isPrevHeadAttester: boolean;
130
+
131
+ /** True if the validator had an attestation included in the _current_ epoch. */
132
+ isCurrSourceAttester: boolean;
133
+ /** True if the validator's beacon block root attestation for the first slot of the _current_
134
+ epoch matches the block root known to the state. */
135
+ isCurrTargetAttester: boolean;
136
+ /** True if the validator's beacon block root attestation in the _current_ epoch at the
137
+ attestation's slot (`attestation_data.slot`) matches the block root known to the state. */
138
+ isCurrHeadAttester: boolean;
139
+
140
+ /** The distance between the attestation slot and the slot that attestation was included in a block. */
141
+ inclusionDistance: number;
142
+ };
143
+
144
+ function statusToSummary(
145
+ inclusionDelay: number,
146
+ flag: number,
147
+ isActiveInCurrentEpoch: boolean,
148
+ isActiveInPreviousEpoch: boolean
149
+ ): ValidatorStatus {
150
+ const flags = parseAttesterFlags(flag);
151
+ return {
152
+ isSlashed: flags.unslashed,
153
+ isActiveInCurrentEpoch,
154
+ isActiveInPreviousEpoch,
155
+ // TODO: Implement
156
+ currentEpochEffectiveBalance: 0,
157
+
158
+ isPrevSourceAttester: flags.prevSourceAttester,
159
+ isPrevTargetAttester: flags.prevTargetAttester,
160
+ isPrevHeadAttester: flags.prevHeadAttester,
161
+ isCurrSourceAttester: flags.currSourceAttester,
162
+ isCurrTargetAttester: flags.currTargetAttester,
163
+ isCurrHeadAttester: flags.currHeadAttester,
164
+ inclusionDistance: inclusionDelay,
165
+ };
166
+ }
167
+
168
+ /** Contains data pertaining to one validator for one epoch. */
169
+ type EpochSummary = {
170
+ // Attestations with a target in the current epoch.
171
+ /** The number of attestations seen. */
172
+ attestations: number;
173
+ /** The delay between when the attestation should have been produced and when it was observed. */
174
+ attestationMinDelay: Seconds | null;
175
+ /** The number of times a validators attestation was seen in an aggregate. */
176
+ attestationAggregateInclusions: number;
177
+ /** The number of times a validators attestation was seen in a block. */
178
+ attestationBlockInclusions: number;
179
+ /** The minimum observed inclusion distance for an attestation for this epoch.. */
180
+ attestationMinBlockInclusionDistance: Slot | null;
181
+ /** The attestation contains the correct head or not */
182
+ attestationCorrectHead: boolean | null;
183
+ // Blocks with a slot in the current epoch.
184
+ /** The number of blocks observed. */
185
+ blocks: number;
186
+ /** The delay between when the block should have been produced and when it was observed. */
187
+ blockMinDelay: Seconds | null;
188
+ // Aggregates with a target in the current epoch
189
+ /** The number of signed aggregate and proofs observed. */
190
+ aggregates: number;
191
+ /** The delay between when the aggregate should have been produced and when it was observed. */
192
+ aggregateMinDelay: Seconds | null;
193
+ /** Count of times validator expected in sync aggregate participated */
194
+ syncCommitteeHits: number;
195
+ /** Count of times validator expected in sync aggregate failed to participate */
196
+ syncCommitteeMisses: number;
197
+ /** Number of times a validator's sync signature was seen in an aggregate */
198
+ syncSignatureAggregateInclusions: number;
199
+ /** Submitted proposals from this validator at this epoch */
200
+ blockProposals: BlockProposals[];
201
+ };
202
+
203
+ type BlockProposals = {
204
+ blockRoot: RootHex;
205
+ blockSlot: Slot;
206
+ poolSubmitDelaySec: number | null;
207
+ successfullyImported: boolean;
208
+ };
209
+
210
+ function getEpochSummary(validator: MonitoredValidator, epoch: Epoch): EpochSummary {
211
+ let summary = validator.summaries.get(epoch);
212
+ if (!summary) {
213
+ summary = {
214
+ attestations: 0,
215
+ attestationMinDelay: null,
216
+ attestationAggregateInclusions: 0,
217
+ attestationBlockInclusions: 0,
218
+ attestationMinBlockInclusionDistance: null,
219
+ blocks: 0,
220
+ blockMinDelay: null,
221
+ aggregates: 0,
222
+ aggregateMinDelay: null,
223
+ attestationCorrectHead: null,
224
+ syncCommitteeHits: 0,
225
+ syncCommitteeMisses: 0,
226
+ syncSignatureAggregateInclusions: 0,
227
+ blockProposals: [],
228
+ };
229
+ validator.summaries.set(epoch, summary);
230
+ }
231
+
232
+ // Prune
233
+ const toPrune = validator.summaries.size - MAX_CACHED_EPOCHS;
234
+ if (toPrune > 0) {
235
+ let pruned = 0;
236
+ for (const idx of validator.summaries.keys()) {
237
+ validator.summaries.delete(idx);
238
+ if (++pruned >= toPrune) break;
239
+ }
240
+ }
241
+
242
+ return summary;
243
+ }
244
+
245
+ // To uniquely identify an attestation:
246
+ // `index=$validator_index target=$target_epoch:$target_root
247
+ type AttestationSummary = {
248
+ poolSubmitDelayMinSec: number | null;
249
+ poolSubmitSentPeers: number | null;
250
+ aggregateInclusionDelaysSec: number[];
251
+ blockInclusions: AttestationBlockInclusion[];
252
+ };
253
+
254
+ type AttestationBlockInclusion = {
255
+ blockRoot: RootHex;
256
+ blockSlot: Slot;
257
+ votedCorrectHeadRoot: boolean;
258
+ votedForMissedSlot: boolean;
259
+ attestationSlot: Slot;
260
+ };
261
+
262
+ /** `$target_epoch:$target_root` */
263
+ type TargetRoot = string;
264
+
265
+ /// A validator that is being monitored by the `ValidatorMonitor`. */
266
+ type MonitoredValidator = {
267
+ /// A history of the validator over time. */
268
+ summaries: Map<Epoch, EpochSummary>;
269
+ inSyncCommitteeUntilEpoch: number;
270
+ // Unless the validator slashes itself, there MUST be one attestation per target checkpoint
271
+ attestations: MapDefMax<Epoch, MapDefMax<TargetRoot, AttestationSummary>>;
272
+ lastRegisteredTimeMs: number;
273
+ };
274
+
275
+ export function createValidatorMonitor(
276
+ metricsRegister: RegistryMetricCreator | null,
277
+ config: ChainForkConfig,
278
+ genesisTime: number,
279
+ logger: Logger,
280
+ opts: ValidatorMonitorOpts
281
+ ): ValidatorMonitor {
282
+ const logLevel = opts.validatorMonitorLogs ? LogLevel.info : LogLevel.debug;
283
+ const log: LogHandler = (message: string, context?: LogData) => {
284
+ logger[logLevel](message, context);
285
+ };
286
+
287
+ /** The validators that require additional monitoring. */
288
+ const validators = new MapDef<ValidatorIndex, MonitoredValidator>(() => ({
289
+ summaries: new Map<Epoch, EpochSummary>(),
290
+ inSyncCommitteeUntilEpoch: -1,
291
+ attestations: new MapDefMax(
292
+ () =>
293
+ new MapDefMax(
294
+ () => ({
295
+ poolSubmitDelayMinSec: null,
296
+ poolSubmitSentPeers: null,
297
+ aggregateInclusionDelaysSec: [],
298
+ blockInclusions: [],
299
+ }),
300
+ MAX_CACHED_DISTINCT_TARGETS
301
+ ),
302
+ MAX_CACHED_EPOCHS
303
+ ),
304
+ lastRegisteredTimeMs: 0,
305
+ }));
306
+
307
+ let lastRegisteredStatusEpoch = -1;
308
+
309
+ const validatorMonitorMetrics = metricsRegister ? createValidatorMonitorMetrics(metricsRegister) : null;
310
+
311
+ const validatorMonitor: ValidatorMonitor = {
312
+ registerLocalValidator(index) {
313
+ validators.getOrDefault(index).lastRegisteredTimeMs = Date.now();
314
+ },
315
+
316
+ registerLocalValidatorInSyncCommittee(index, untilEpoch) {
317
+ const validator = validators.get(index);
318
+ if (validator) {
319
+ validator.inSyncCommitteeUntilEpoch = Math.max(untilEpoch, validator.inSyncCommitteeUntilEpoch ?? -1);
320
+ }
321
+ },
322
+
323
+ registerValidatorStatuses(currentEpoch, inclusionDelays, flags, isActiveCurrEpoch, isActiveInPrevEpoch, balances) {
324
+ // Prevent registering status for the same epoch twice. processEpoch() may be ran more than once for the same epoch.
325
+ if (currentEpoch <= lastRegisteredStatusEpoch) {
326
+ return;
327
+ }
328
+ lastRegisteredStatusEpoch = currentEpoch;
329
+ const previousEpoch = currentEpoch - 1;
330
+
331
+ // There won't be any validator activity in epoch -1
332
+ if (previousEpoch === -1) {
333
+ return;
334
+ }
335
+
336
+ for (const [index, monitoredValidator] of validators.entries()) {
337
+ // We subtract two from the state of the epoch that generated these summaries.
338
+ //
339
+ // - One to account for it being the previous epoch.
340
+ // - One to account for the state advancing an epoch whilst generating the validator
341
+ // statuses.
342
+ const summary = statusToSummary(
343
+ inclusionDelays[index],
344
+ flags[index],
345
+ isActiveCurrEpoch[index],
346
+ isActiveInPrevEpoch[index]
347
+ );
348
+
349
+ if (summary.isPrevSourceAttester) {
350
+ validatorMonitorMetrics?.prevEpochOnChainSourceAttesterHit.inc();
351
+ } else {
352
+ validatorMonitorMetrics?.prevEpochOnChainSourceAttesterMiss.inc();
353
+ }
354
+ if (summary.isPrevHeadAttester) {
355
+ validatorMonitorMetrics?.prevEpochOnChainHeadAttesterHit.inc();
356
+ } else {
357
+ validatorMonitorMetrics?.prevEpochOnChainHeadAttesterMiss.inc();
358
+ }
359
+ if (summary.isPrevTargetAttester) {
360
+ validatorMonitorMetrics?.prevEpochOnChainTargetAttesterHit.inc();
361
+ } else {
362
+ validatorMonitorMetrics?.prevEpochOnChainTargetAttesterMiss.inc();
363
+ }
364
+
365
+ const prevEpochSummary = monitoredValidator.summaries.get(previousEpoch);
366
+ const attestationCorrectHead = prevEpochSummary?.attestationCorrectHead;
367
+ if (attestationCorrectHead !== null && attestationCorrectHead !== undefined) {
368
+ if (attestationCorrectHead) {
369
+ validatorMonitorMetrics?.prevOnChainAttesterCorrectHead.inc();
370
+ } else {
371
+ validatorMonitorMetrics?.prevOnChainAttesterIncorrectHead.inc();
372
+ }
373
+ }
374
+
375
+ const attestationMinBlockInclusionDistance = prevEpochSummary?.attestationMinBlockInclusionDistance;
376
+ const inclusionDistance =
377
+ attestationMinBlockInclusionDistance != null && attestationMinBlockInclusionDistance > 0
378
+ ? // altair, attestation is not missed
379
+ attestationMinBlockInclusionDistance
380
+ : summary.inclusionDistance
381
+ ? // phase0, this is from the state transition
382
+ summary.inclusionDistance
383
+ : null;
384
+
385
+ if (inclusionDistance !== null) {
386
+ validatorMonitorMetrics?.prevEpochOnChainInclusionDistance.observe(inclusionDistance);
387
+ validatorMonitorMetrics?.prevEpochOnChainAttesterHit.inc();
388
+ } else {
389
+ validatorMonitorMetrics?.prevEpochOnChainAttesterMiss.inc();
390
+ }
391
+
392
+ const balance = balances?.[index];
393
+ if (balance !== undefined) {
394
+ validatorMonitorMetrics?.prevEpochOnChainBalance.set({index}, balance);
395
+ }
396
+
397
+ if (!summary.isPrevSourceAttester || !summary.isPrevTargetAttester || !summary.isPrevHeadAttester) {
398
+ log("Failed attestation in previous epoch", {
399
+ validator: index,
400
+ prevEpoch: currentEpoch - 1,
401
+ isPrevSourceAttester: summary.isPrevSourceAttester,
402
+ isPrevHeadAttester: summary.isPrevHeadAttester,
403
+ isPrevTargetAttester: summary.isPrevTargetAttester,
404
+ // inclusionDistance is not available in summary since altair
405
+ inclusionDistance,
406
+ });
407
+ }
408
+ }
409
+ },
410
+
411
+ registerBeaconBlock(src, delaySec, block) {
412
+ const validator = validators.get(block.proposerIndex);
413
+ // Returns the delay between the start of `block.slot` and `seenTimestamp`.
414
+ if (validator) {
415
+ validatorMonitorMetrics?.beaconBlockTotal.inc({src});
416
+ validatorMonitorMetrics?.beaconBlockDelaySeconds.observe({src}, delaySec);
417
+
418
+ const summary = getEpochSummary(validator, computeEpochAtSlot(block.slot));
419
+ summary.blockProposals.push({
420
+ blockRoot: toRootHex(config.getForkTypes(block.slot).BeaconBlock.hashTreeRoot(block)),
421
+ blockSlot: block.slot,
422
+ poolSubmitDelaySec: delaySec,
423
+ successfullyImported: false,
424
+ });
425
+ }
426
+ },
427
+
428
+ registerBlobSidecar(_src, _seenTimestampSec, _blob) {
429
+ //TODO: freetheblobs
430
+ },
431
+
432
+ registerImportedBlock(block, {proposerBalanceDelta}) {
433
+ const validator = validators.get(block.proposerIndex);
434
+ if (validator) {
435
+ validatorMonitorMetrics?.proposerBalanceDeltaKnown.observe(proposerBalanceDelta);
436
+
437
+ // There should be alredy a summary for the block. Could be missing when using one VC multiple BNs
438
+ const summary = getEpochSummary(validator, computeEpochAtSlot(block.slot));
439
+ const proposal = summary.blockProposals.find((p) => p.blockSlot === block.slot);
440
+ if (proposal) {
441
+ proposal.successfullyImported = true;
442
+ } else {
443
+ summary.blockProposals.push({
444
+ blockRoot: toRootHex(config.getForkTypes(block.slot).BeaconBlock.hashTreeRoot(block)),
445
+ blockSlot: block.slot,
446
+ poolSubmitDelaySec: null,
447
+ successfullyImported: true,
448
+ });
449
+ }
450
+ }
451
+ },
452
+
453
+ onPoolSubmitUnaggregatedAttestation(seenTimestampSec, indexedAttestation, subnet, sentPeers) {
454
+ const data = indexedAttestation.data;
455
+ const fork = config.getForkName(data.slot);
456
+ // Returns the duration between when the attestation `data` could be produced (ATTESTATION_DUE_BPS through the slot) and `seenTimestamp`.
457
+ const delaySec =
458
+ seenTimestampSec -
459
+ (computeTimeAtSlot(config, data.slot, genesisTime) + config.getAttestationDueMs(fork) / 1000);
460
+ for (const index of indexedAttestation.attestingIndices) {
461
+ const validator = validators.get(index);
462
+ if (validator) {
463
+ validatorMonitorMetrics?.unaggregatedAttestationSubmittedSentPeers.observe(sentPeers);
464
+ validatorMonitorMetrics?.unaggregatedAttestationDelaySeconds.observe({src: OpSource.api}, delaySec);
465
+ log("Published unaggregated attestation", {
466
+ validator: index,
467
+ slot: data.slot,
468
+ committeeIndex: data.index,
469
+ subnet,
470
+ sentPeers,
471
+ delaySec: delaySec.toFixed(4),
472
+ });
473
+
474
+ const attestationSummary = validator.attestations
475
+ .getOrDefault(indexedAttestation.data.target.epoch)
476
+ .getOrDefault(toRootHex(indexedAttestation.data.target.root));
477
+ if (
478
+ attestationSummary.poolSubmitDelayMinSec === null ||
479
+ attestationSummary.poolSubmitDelayMinSec > delaySec
480
+ ) {
481
+ attestationSummary.poolSubmitDelayMinSec = delaySec;
482
+ }
483
+ }
484
+ }
485
+ },
486
+
487
+ registerGossipUnaggregatedAttestation(seenTimestampSec, indexedAttestation) {
488
+ const src = OpSource.gossip;
489
+ const data = indexedAttestation.data;
490
+ const epoch = computeEpochAtSlot(data.slot);
491
+ const fork = config.getForkName(data.slot);
492
+ // Returns the duration between when the attestation `data` could be produced (ATTESTATION_DUE_BPS through the slot) and `seenTimestamp`.
493
+ const delaySec =
494
+ seenTimestampSec -
495
+ (computeTimeAtSlot(config, data.slot, genesisTime) + config.getAttestationDueMs(fork) / 1000);
496
+
497
+ for (const index of indexedAttestation.attestingIndices) {
498
+ const validator = validators.get(index);
499
+ if (validator) {
500
+ validatorMonitorMetrics?.unaggregatedAttestationTotal.inc({src});
501
+ validatorMonitorMetrics?.unaggregatedAttestationDelaySeconds.observe({src}, delaySec);
502
+ const summary = getEpochSummary(validator, epoch);
503
+ summary.attestations += 1;
504
+ summary.attestationMinDelay = Math.min(delaySec, summary.attestationMinDelay ?? Infinity);
505
+ }
506
+ }
507
+ },
508
+
509
+ onPoolSubmitAggregatedAttestation(seenTimestampSec, indexedAttestation, sentPeers) {
510
+ const data = indexedAttestation.data;
511
+ const fork = config.getForkName(data.slot);
512
+ // Returns the duration between when a `AggregateAndproof` with `data` could be produced (AGGREGATE_DUE_BPS through the slot) and `seenTimestamp`.
513
+ const delaySec =
514
+ seenTimestampSec - (computeTimeAtSlot(config, data.slot, genesisTime) + config.getAggregateDueMs(fork) / 1000);
515
+
516
+ for (const index of indexedAttestation.attestingIndices) {
517
+ const validator = validators.get(index);
518
+ if (validator) {
519
+ validatorMonitorMetrics?.aggregatedAttestationDelaySeconds.observe({src: OpSource.api}, delaySec);
520
+ log("Published aggregated attestation", {
521
+ validator: index,
522
+ slot: data.slot,
523
+ committeeIndex: data.index,
524
+ sentPeers,
525
+ delaySec: delaySec.toFixed(4),
526
+ });
527
+
528
+ validator.attestations
529
+ .getOrDefault(indexedAttestation.data.target.epoch)
530
+ .getOrDefault(toRootHex(indexedAttestation.data.target.root))
531
+ .aggregateInclusionDelaysSec.push(delaySec);
532
+ }
533
+ }
534
+ },
535
+
536
+ registerGossipAggregatedAttestation(seenTimestampSec, signedAggregateAndProof, indexedAttestation) {
537
+ const src = OpSource.gossip;
538
+ const data = indexedAttestation.data;
539
+ const epoch = computeEpochAtSlot(data.slot);
540
+ const fork = config.getForkName(data.slot);
541
+ // Returns the duration between when a `AggregateAndproof` with `data` could be produced (AGGREGATE_DUE_BPS through the slot) and `seenTimestamp`.
542
+ const delaySec =
543
+ seenTimestampSec - (computeTimeAtSlot(config, data.slot, genesisTime) + config.getAggregateDueMs(fork) / 1000);
544
+
545
+ const aggregatorIndex = signedAggregateAndProof.message.aggregatorIndex;
546
+ const validatorAggregator = validators.get(aggregatorIndex);
547
+ if (validatorAggregator) {
548
+ validatorMonitorMetrics?.aggregatedAttestationTotal.inc({src});
549
+ validatorMonitorMetrics?.aggregatedAttestationDelaySeconds.observe({src}, delaySec);
550
+ const summary = getEpochSummary(validatorAggregator, epoch);
551
+ summary.aggregates += 1;
552
+ summary.aggregateMinDelay = Math.min(delaySec, summary.aggregateMinDelay ?? Infinity);
553
+ }
554
+
555
+ for (const index of indexedAttestation.attestingIndices) {
556
+ const validator = validators.get(index);
557
+ if (validator) {
558
+ validatorMonitorMetrics?.attestationInAggregateTotal.inc({src});
559
+ validatorMonitorMetrics?.attestationInAggregateDelaySeconds.observe({src}, delaySec);
560
+ const summary = getEpochSummary(validator, epoch);
561
+ summary.attestationAggregateInclusions += 1;
562
+ log("Attestation is included in aggregate", {
563
+ validator: index,
564
+ slot: data.slot,
565
+ committeeIndex: data.index,
566
+ aggregatorIndex,
567
+ });
568
+
569
+ validator.attestations
570
+ .getOrDefault(indexedAttestation.data.target.epoch)
571
+ .getOrDefault(toRootHex(indexedAttestation.data.target.root))
572
+ .aggregateInclusionDelaysSec.push(delaySec);
573
+ }
574
+ }
575
+ },
576
+
577
+ // Register that the `indexed_attestation` was included in a *valid* `BeaconBlock`.
578
+ registerAttestationInBlock(
579
+ indexedAttestation,
580
+ parentSlot,
581
+ correctHead,
582
+ missedSlotVote,
583
+ inclusionBlockRoot,
584
+ inclusionBlockSlot
585
+ ): void {
586
+ const data = indexedAttestation.data;
587
+ // optimal inclusion distance, not to count skipped slots between data.slot and blockSlot
588
+ const inclusionDistance = Math.max(parentSlot - data.slot, 0) + 1;
589
+ const delay = inclusionDistance - MIN_ATTESTATION_INCLUSION_DELAY;
590
+ const epoch = computeEpochAtSlot(data.slot);
591
+ const participants = indexedAttestation.attestingIndices.length;
592
+
593
+ for (const index of indexedAttestation.attestingIndices) {
594
+ const validator = validators.get(index);
595
+ if (validator) {
596
+ validatorMonitorMetrics?.attestationInBlockTotal.inc();
597
+ validatorMonitorMetrics?.attestationInBlockDelaySlots.observe(delay);
598
+ validatorMonitorMetrics?.attestationInBlockParticipants.observe(participants);
599
+
600
+ const summary = getEpochSummary(validator, epoch);
601
+ summary.attestationBlockInclusions += 1;
602
+ if (summary.attestationMinBlockInclusionDistance !== null) {
603
+ summary.attestationMinBlockInclusionDistance = Math.min(
604
+ summary.attestationMinBlockInclusionDistance,
605
+ inclusionDistance
606
+ );
607
+ } else {
608
+ summary.attestationMinBlockInclusionDistance = inclusionDistance;
609
+ }
610
+
611
+ summary.attestationCorrectHead = correctHead;
612
+
613
+ validator.attestations
614
+ .getOrDefault(indexedAttestation.data.target.epoch)
615
+ .getOrDefault(toRootHex(indexedAttestation.data.target.root))
616
+ .blockInclusions.push({
617
+ blockRoot: inclusionBlockRoot,
618
+ blockSlot: inclusionBlockSlot,
619
+ votedCorrectHeadRoot: correctHead,
620
+ votedForMissedSlot: missedSlotVote,
621
+ attestationSlot: indexedAttestation.data.slot,
622
+ });
623
+
624
+ log("Attestation is included in block", {
625
+ validator: index,
626
+ slot: data.slot,
627
+ committeeIndex: data.index,
628
+ inclusionDistance,
629
+ correctHead,
630
+ participants,
631
+ });
632
+ }
633
+ }
634
+ },
635
+
636
+ registerGossipSyncContributionAndProof(syncContributionAndProof, syncCommitteeParticipantIndices) {
637
+ const epoch = computeEpochAtSlot(syncContributionAndProof.contribution.slot);
638
+
639
+ for (const index of syncCommitteeParticipantIndices) {
640
+ const validator = validators.get(index);
641
+ if (validator) {
642
+ validatorMonitorMetrics?.syncSignatureInAggregateTotal.inc();
643
+
644
+ const summary = getEpochSummary(validator, epoch);
645
+ summary.syncSignatureAggregateInclusions += 1;
646
+ }
647
+ }
648
+ },
649
+
650
+ registerSyncAggregateInBlock(epoch, syncAggregate, syncCommitteeIndices) {
651
+ for (let i = 0; i < syncCommitteeIndices.length; i++) {
652
+ const validator = validators.get(syncCommitteeIndices[i]);
653
+ if (validator) {
654
+ const summary = getEpochSummary(validator, epoch);
655
+ if (syncAggregate.syncCommitteeBits.get(i)) {
656
+ summary.syncCommitteeHits++;
657
+ } else {
658
+ summary.syncCommitteeMisses++;
659
+ }
660
+ }
661
+ }
662
+ },
663
+
664
+ // Validator monitor tracks performance of validators in healthy network conditions.
665
+ // It does not attempt to track correctly duties on forking conditions deeper than 1 epoch.
666
+ // To guard against short re-orgs it will track the status of epoch N at the end of epoch N+1.
667
+ // This function **SHOULD** be called at the last slot of an epoch to have max possible information.
668
+ onceEveryEndOfEpoch(headState) {
669
+ if (headState.slot <= GENESIS_SLOT) {
670
+ // Before genesis, there won't be any validator activity
671
+ return;
672
+ }
673
+
674
+ // Prune validators not seen in a while
675
+ for (const [index, validator] of validators.entries()) {
676
+ if (Date.now() - validator.lastRegisteredTimeMs > RETAIN_REGISTERED_VALIDATORS_MS) {
677
+ validators.delete(index);
678
+ }
679
+ }
680
+
681
+ // Compute summaries of previous epoch attestation performance
682
+ const prevEpoch = computeEpochAtSlot(headState.slot) - 1;
683
+
684
+ // During the end of first epoch, the prev epoch with be -1
685
+ // Skip this as there is no attestation and block proposal summary in epoch -1
686
+ if (prevEpoch === -1) {
687
+ return;
688
+ }
689
+
690
+ const rootCache = new RootHexCache(headState);
691
+
692
+ if (config.getForkSeq(headState.slot) >= ForkSeq.altair) {
693
+ const {previousEpochParticipation} = headState as CachedBeaconStateAltair;
694
+ const prevEpochStartSlot = computeStartSlotAtEpoch(prevEpoch);
695
+ const prevEpochTargetRoot = toRootHex(getBlockRootAtSlot(headState, prevEpochStartSlot));
696
+
697
+ // Check attestation performance
698
+ for (const [index, validator] of validators.entries()) {
699
+ const flags = parseParticipationFlags(previousEpochParticipation.get(index));
700
+ const attestationSummary = validator.attestations.get(prevEpoch)?.get(prevEpochTargetRoot);
701
+ const summary = renderAttestationSummary(config, rootCache, attestationSummary, flags);
702
+ validatorMonitorMetrics?.prevEpochAttestationSummary.inc({summary});
703
+ log("Previous epoch attestation", {
704
+ validator: index,
705
+ epoch: prevEpoch,
706
+ summary,
707
+ });
708
+ }
709
+ }
710
+
711
+ if (headState.epochCtx.proposersPrevEpoch !== null) {
712
+ // proposersPrevEpoch is null on the first epoch of `headState` being generated
713
+ for (const [slotIndex, validatorIndex] of headState.epochCtx.proposersPrevEpoch.entries()) {
714
+ const validator = validators.get(validatorIndex);
715
+ if (validator) {
716
+ // If expected proposer is a tracked validator
717
+ const epochSummary = validator.summaries.get(prevEpoch);
718
+ const proposalSlot = SLOTS_PER_EPOCH * prevEpoch + slotIndex;
719
+ const summary = renderBlockProposalSummary(config, rootCache, epochSummary, proposalSlot);
720
+ validatorMonitorMetrics?.prevEpochBlockProposalSummary.inc({summary});
721
+ log("Previous epoch block proposal", {
722
+ validator: validatorIndex,
723
+ slot: proposalSlot,
724
+ epoch: prevEpoch,
725
+ summary,
726
+ });
727
+ }
728
+ }
729
+ }
730
+ },
731
+
732
+ /**
733
+ * Scrape `self` for metrics.
734
+ * Should be called whenever Prometheus is scraping.
735
+ */
736
+ scrapeMetrics(slotClock) {
737
+ validatorMonitorMetrics?.validatorsConnected.set(validators.size);
738
+
739
+ const epoch = computeEpochAtSlot(slotClock);
740
+ const slotInEpoch = slotClock % SLOTS_PER_EPOCH;
741
+
742
+ // Only start to report on the current epoch once we've progressed past the point where
743
+ // all attestation should be included in a block.
744
+ //
745
+ // This allows us to set alarms on Grafana to detect when an attestation has been
746
+ // missed. If we didn't delay beyond the attestation inclusion period then we could
747
+ // expect some occasional false-positives on attestation misses.
748
+ //
749
+ // I have chosen 3 as an arbitrary number where we *probably* shouldn't see that many
750
+ // skip slots on mainnet.
751
+ const previousEpoch = slotInEpoch > MIN_ATTESTATION_INCLUSION_DELAY + 3 ? epoch - 1 : epoch - 2;
752
+
753
+ // reset() to mimic the behaviour of an aggregated .set({index})
754
+ validatorMonitorMetrics?.prevEpochAttestations.reset();
755
+ validatorMonitorMetrics?.prevEpochAttestationsMinDelaySeconds.reset();
756
+ validatorMonitorMetrics?.prevEpochAttestationAggregateInclusions.reset();
757
+ validatorMonitorMetrics?.prevEpochAttestationBlockInclusions.reset();
758
+ validatorMonitorMetrics?.prevEpochAttestationBlockMinInclusionDistance.reset();
759
+ validatorMonitorMetrics?.prevEpochSyncSignatureAggregateInclusions.reset();
760
+
761
+ let validatorsInSyncCommittee = 0;
762
+ let prevEpochSyncCommitteeHits = 0;
763
+ let prevEpochSyncCommitteeMisses = 0;
764
+
765
+ for (const validator of validators.values()) {
766
+ // Participation in sync committee
767
+ const validatorInSyncCommittee = validator.inSyncCommitteeUntilEpoch >= epoch;
768
+ if (validatorInSyncCommittee) {
769
+ validatorsInSyncCommittee++;
770
+ }
771
+
772
+ // Prev-epoch summary
773
+ const summary = validator.summaries.get(previousEpoch);
774
+ if (!summary) {
775
+ continue;
776
+ }
777
+
778
+ // Attestations
779
+ validatorMonitorMetrics?.prevEpochAttestations.observe(summary.attestations);
780
+ if (summary.attestationMinDelay !== null)
781
+ validatorMonitorMetrics?.prevEpochAttestationsMinDelaySeconds.observe(summary.attestationMinDelay);
782
+ validatorMonitorMetrics?.prevEpochAttestationAggregateInclusions.observe(
783
+ summary.attestationAggregateInclusions
784
+ );
785
+ validatorMonitorMetrics?.prevEpochAttestationBlockInclusions.observe(summary.attestationBlockInclusions);
786
+ if (summary.attestationMinBlockInclusionDistance !== null) {
787
+ validatorMonitorMetrics?.prevEpochAttestationBlockMinInclusionDistance.observe(
788
+ summary.attestationMinBlockInclusionDistance
789
+ );
790
+ }
791
+
792
+ // Blocks
793
+ validatorMonitorMetrics?.prevEpochBeaconBlocks.observe(summary.blocks);
794
+ if (summary.blockMinDelay !== null)
795
+ validatorMonitorMetrics?.prevEpochBeaconBlocksMinDelaySeconds.observe(summary.blockMinDelay);
796
+
797
+ // Aggregates
798
+ validatorMonitorMetrics?.prevEpochAggregatesTotal.observe(summary.aggregates);
799
+ if (summary.aggregateMinDelay !== null)
800
+ validatorMonitorMetrics?.prevEpochAggregatesMinDelaySeconds.observe(summary.aggregateMinDelay);
801
+
802
+ // Sync committee
803
+ prevEpochSyncCommitteeHits += summary.syncCommitteeHits;
804
+ prevEpochSyncCommitteeMisses += summary.syncCommitteeMisses;
805
+
806
+ // Only observe if included in sync committee to prevent distorting metrics
807
+ if (validatorInSyncCommittee) {
808
+ validatorMonitorMetrics?.prevEpochSyncSignatureAggregateInclusions.observe(
809
+ summary.syncSignatureAggregateInclusions
810
+ );
811
+ }
812
+ }
813
+
814
+ validatorMonitorMetrics?.validatorsInSyncCommittee.set(validatorsInSyncCommittee);
815
+ validatorMonitorMetrics?.prevEpochSyncCommitteeHits.set(prevEpochSyncCommitteeHits);
816
+ validatorMonitorMetrics?.prevEpochSyncCommitteeMisses.set(prevEpochSyncCommitteeMisses);
817
+ },
818
+ };
819
+
820
+ // Register a single collect() function to run all validatorMonitor metrics
821
+ validatorMonitorMetrics?.validatorsConnected.addCollect(() => {
822
+ const clockSlot = getCurrentSlot(config, genesisTime);
823
+ validatorMonitor.scrapeMetrics(clockSlot);
824
+ });
825
+
826
+ return validatorMonitor;
827
+ }
828
+
829
+ /**
830
+ * Best guess to automatically debug why validators do not achieve expected rewards.
831
+ * Tries to answer common questions such as:
832
+ * - Did the validator submit the attestation to this block?
833
+ * - Was the attestation seen in an aggregate?
834
+ * - Was the attestation seen in a block?
835
+ */
836
+ function renderAttestationSummary(
837
+ config: ChainForkConfig,
838
+ rootCache: RootHexCache,
839
+ summary: AttestationSummary | undefined,
840
+ flags: ParticipationFlags
841
+ ): string {
842
+ // Reference https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md#get_attestation_participation_flag_indices
843
+ //
844
+ // is_matching_source = data.source == justified_checkpoint
845
+ // is_matching_target = is_matching_source and data.target.root == get_block_root(state, data.target.epoch)
846
+ // is_matching_head = is_matching_target and data.beacon_block_root == get_block_root_at_slot(state, data.slot)
847
+ //
848
+ // is_matching_source MUST be true for the attestation to be included in a block
849
+ //
850
+ // timely_source = is_matching_source and inclusion_delay <= integer_squareroot(SLOTS_PER_EPOCH):
851
+ // timely_target = is_matching_target and inclusion_delay <= SLOTS_PER_EPOCH:
852
+ // timely_head = is_matching_head and inclusion_delay == MIN_ATTESTATION_INCLUSION_DELAY:
853
+
854
+ if (flags.timelyHead) {
855
+ // NOTE: If timelyHead everything else MUST be true also
856
+ return "timely_head";
857
+ }
858
+
859
+ //
860
+ if (flags.timelyTarget) {
861
+ // timelyHead == false, means at least one is true
862
+ // - attestation voted incorrect head
863
+ // - attestation was included late
864
+
865
+ // Note: the same attestation can be included in multiple blocks. For example, block with parent A at slot N can
866
+ // include the attestation. Then block as slot N+1 re-orgs slot N setting as parent A and includes the attestations
867
+ // from block at slot N.
868
+ //
869
+ // TODO: Track block inclusions, and then check which ones are canonical
870
+
871
+ if (!summary) {
872
+ // In normal conditions should never happen, validator is expected to submit an attestation to the tracking node.
873
+ // If the validator is using multiple beacon nodes as fallback, this condition may be triggered.
874
+ return "unexpected_timely_target_without_summary";
875
+ }
876
+
877
+ const canonicalBlockInclusion = summary.blockInclusions.find((block) => isCanonical(rootCache, block));
878
+ if (!canonicalBlockInclusion) {
879
+ // Should never happen, because for a state to exist that registers a validator's participation this specific
880
+ // beacon node must have imported a block with the attestation that caused the change in participation.
881
+ return "unexpected_timely_target_without_canonical_inclusion";
882
+ }
883
+
884
+ const {votedCorrectHeadRoot, blockSlot, attestationSlot} = canonicalBlockInclusion;
885
+ const inclusionDistance = Math.max(blockSlot - attestationSlot - MIN_ATTESTATION_INCLUSION_DELAY, 0);
886
+
887
+ if (votedCorrectHeadRoot && inclusionDistance === 0) {
888
+ // Should never happen, in this case timelyHead must be true
889
+ return "unexpected_timely_head_as_timely_target";
890
+ }
891
+
892
+ // Why is the distance > 0?
893
+ // - Block that should have included the attestation was missed
894
+ // - Attestation was not included in any aggregate
895
+ // - Attestation was sent late
896
+
897
+ // Why is the head vote wrong?
898
+ // - We processed a block late and voted for the parent
899
+ // - We voted for a block that latter was missed
900
+ // - We voted for a block that was re-org for another chain
901
+
902
+ let out = "timely_target";
903
+
904
+ if (!votedCorrectHeadRoot) {
905
+ out += "_" + whyIsHeadVoteWrong(rootCache, canonicalBlockInclusion);
906
+ }
907
+
908
+ if (inclusionDistance > 0) {
909
+ out += "_" + whyIsDistanceNotOk(rootCache, canonicalBlockInclusion, summary);
910
+ }
911
+
912
+ return out;
913
+ }
914
+
915
+ //
916
+ if (flags.timelySource) {
917
+ // timelyTarget == false && timelySource == true means that
918
+ // - attestation voted the wrong target but distance is <= integer_squareroot(SLOTS_PER_EPOCH)
919
+ return "wrong_target_timely_source";
920
+ }
921
+
922
+ //
923
+ // timelySource == false, either:
924
+ // - attestation was not included in the block
925
+ // - included in block with wrong target (very unlikely)
926
+ // - included in block with distance > SLOTS_PER_EPOCH (very unlikely)
927
+
928
+ // Validator failed to submit an attestation for this epoch, validator client is probably offline
929
+ if (!summary || summary.poolSubmitDelayMinSec === null) {
930
+ return "no_submission";
931
+ }
932
+
933
+ const canonicalBlockInclusion = summary.blockInclusions.find((block) => isCanonical(rootCache, block));
934
+ if (canonicalBlockInclusion) {
935
+ // Canonical block inclusion with no participation flags set means wrong target + late source
936
+ return "wrong_target_late_source";
937
+ }
938
+
939
+ const submittedLate =
940
+ summary.poolSubmitDelayMinSec > config.getSlotComponentDurationMs(LATE_ATTESTATION_SUBMISSION_BPS) / 1000;
941
+
942
+ const aggregateInclusion = summary.aggregateInclusionDelaysSec.length > 0;
943
+
944
+ if (submittedLate && aggregateInclusion) {
945
+ return "late_submit";
946
+ }
947
+ if (submittedLate && !aggregateInclusion) {
948
+ return "late_submit_no_aggregate_inclusion";
949
+ }
950
+
951
+ if (!submittedLate && aggregateInclusion) {
952
+ // TODO: Why was it missed then?
953
+ if (summary.blockInclusions.length) {
954
+ return "block_inclusion_but_orphan";
955
+ }
956
+ return "aggregate_inclusion_but_missed";
957
+ // } else if (!submittedLate && !aggregateInclusion) {
958
+ }
959
+ // Did the node had enough peers?
960
+ if (summary.poolSubmitSentPeers === 0) {
961
+ return "sent_to_zero_peers";
962
+ }
963
+ return "no_aggregate_inclusion";
964
+ }
965
+
966
+ function whyIsHeadVoteWrong(rootCache: RootHexCache, canonicalBlockInclusion: AttestationBlockInclusion): string {
967
+ const {votedForMissedSlot, attestationSlot} = canonicalBlockInclusion;
968
+ const canonicalAttestationSlotMissed = isMissedSlot(rootCache, attestationSlot);
969
+
970
+ // __A_______C
971
+ // \_B1
972
+ // ^^ attestation slot
973
+ //
974
+ // We vote for B1, but the next proposer skips our voted block.
975
+ // This scenario happens sometimes when blocks are published late
976
+
977
+ // __A____________E
978
+ // \_B1__C__D
979
+ // ^^ attestation slot
980
+ //
981
+ // We vote for B1, and due to some issue a longer reorg happens orphaning our vote.
982
+ // This scenario is considered in the above
983
+ if (!votedForMissedSlot && canonicalAttestationSlotMissed) {
984
+ // TODO: Did the block arrive late?
985
+ return "vote_orphaned";
986
+ }
987
+
988
+ // __A__B1___C
989
+ // \_(A)
990
+ // ^^ attestation slot
991
+ //
992
+ // We vote for A assuming skip block, next proposer's view differs
993
+ // This scenario happens sometimes when blocks are published late
994
+ if (votedForMissedSlot && !canonicalAttestationSlotMissed) {
995
+ // TODO: Did the block arrive late?
996
+ return "wrong_skip_vote";
997
+ }
998
+
999
+ // __A__B2___C
1000
+ // \_B1
1001
+ // ^^ attestation slot
1002
+ //
1003
+ // We vote for B1, but the next proposer continues the chain on a competing block
1004
+ // This scenario is unlikely to happen in short re-orgs given no slashings, won't consider.
1005
+ //
1006
+ // __A____B_______C
1007
+ // \ \_(B)
1008
+ // \_(A)_(A)
1009
+ //
1010
+ // Vote for different heads on skipped slot
1011
+ return "wrong_head_vote";
1012
+ }
1013
+
1014
+ function whyIsDistanceNotOk(
1015
+ rootCache: RootHexCache,
1016
+ canonicalBlockInclusion: AttestationBlockInclusion,
1017
+ summary: AttestationSummary
1018
+ ): string {
1019
+ // If the attestation is not included in any aggregate it's likely because it was sent late.
1020
+ if (summary.aggregateInclusionDelaysSec.length === 0) {
1021
+ return "no_aggregate_inclusion";
1022
+ }
1023
+
1024
+ // If the next slot of an attestation is missed, distance will be > 0 even if everything else was timely
1025
+ if (isMissedSlot(rootCache, canonicalBlockInclusion.attestationSlot + 1)) {
1026
+ return "next_slot_missed";
1027
+ }
1028
+
1029
+ //
1030
+ return "late_unknown";
1031
+ }
1032
+
1033
+ /** Returns true if the state's root record includes `block` */
1034
+ function isCanonical(rootCache: RootHexCache, block: AttestationBlockInclusion): boolean {
1035
+ return rootCache.getBlockRootAtSlot(block.blockSlot) === block.blockRoot;
1036
+ }
1037
+
1038
+ /** Returns true if root at slot is the same at slot - 1 == there was no new block at slot */
1039
+ function isMissedSlot(rootCache: RootHexCache, slot: Slot): boolean {
1040
+ return slot > 0 && rootCache.getBlockRootAtSlot(slot) === rootCache.getBlockRootAtSlot(slot - 1);
1041
+ }
1042
+
1043
+ function renderBlockProposalSummary(
1044
+ config: ChainForkConfig,
1045
+ rootCache: RootHexCache,
1046
+ summary: EpochSummary | undefined,
1047
+ proposalSlot: Slot
1048
+ ): string {
1049
+ const proposal = summary?.blockProposals.find((proposal) => proposal.blockSlot === proposalSlot);
1050
+ if (!proposal) {
1051
+ return "not_submitted";
1052
+ }
1053
+
1054
+ if (rootCache.getBlockRootAtSlot(proposalSlot) === proposal.blockRoot) {
1055
+ // Canonical state includes our block
1056
+ return "canonical";
1057
+ }
1058
+
1059
+ let out = "orphaned";
1060
+
1061
+ if (isMissedSlot(rootCache, proposalSlot)) {
1062
+ out += "_missed";
1063
+ }
1064
+
1065
+ if (
1066
+ proposal.poolSubmitDelaySec !== null &&
1067
+ proposal.poolSubmitDelaySec > config.getSlotComponentDurationMs(LATE_BLOCK_SUBMISSION_BPS) / 1000
1068
+ ) {
1069
+ out += "_late";
1070
+ }
1071
+
1072
+ return out;
1073
+ }
1074
+
1075
+ /**
1076
+ * Cache to prevent accessing the state tree to fetch block roots repeteadly.
1077
+ * In normal network conditions the same root is read multiple times, specially the target.
1078
+ */
1079
+ export class RootHexCache {
1080
+ private readonly blockRootSlotCache = new Map<Slot, RootHex>();
1081
+
1082
+ constructor(private readonly state: CachedBeaconStateAllForks) {}
1083
+
1084
+ getBlockRootAtSlot(slot: Slot): RootHex {
1085
+ let root = this.blockRootSlotCache.get(slot);
1086
+ if (!root) {
1087
+ root = toRootHex(getBlockRootAtSlot(this.state, slot));
1088
+ this.blockRootSlotCache.set(slot, root);
1089
+ }
1090
+ return root;
1091
+ }
1092
+ }
1093
+
1094
+ function createValidatorMonitorMetrics(register: RegistryMetricCreator) {
1095
+ return {
1096
+ validatorsConnected: register.gauge({
1097
+ name: "validator_monitor_validators",
1098
+ help: "Count of validators that are specifically monitored by this beacon node",
1099
+ }),
1100
+
1101
+ validatorsInSyncCommittee: register.gauge({
1102
+ name: "validator_monitor_validators_in_sync_committee",
1103
+ help: "Count of validators monitored by this beacon node that are part of sync committee",
1104
+ }),
1105
+
1106
+ // Validator Monitor Metrics (per-epoch summaries)
1107
+ // Only track prevEpochOnChainBalance per index
1108
+ prevEpochOnChainBalance: register.gauge<{index: number}>({
1109
+ name: "validator_monitor_prev_epoch_on_chain_balance",
1110
+ help: "Balance of validator after an epoch",
1111
+ labelNames: ["index"],
1112
+ }),
1113
+ prevEpochOnChainAttesterHit: register.gauge({
1114
+ name: "validator_monitor_prev_epoch_on_chain_attester_hit_total",
1115
+ help: "Incremented if validator's submitted attestation is included in some blocks",
1116
+ }),
1117
+ prevEpochOnChainAttesterMiss: register.gauge({
1118
+ name: "validator_monitor_prev_epoch_on_chain_attester_miss_total",
1119
+ help: "Incremented if validator's submitted attestation is not included in any blocks",
1120
+ }),
1121
+ prevEpochOnChainSourceAttesterHit: register.gauge({
1122
+ name: "validator_monitor_prev_epoch_on_chain_source_attester_hit_total",
1123
+ help: "Incremented if the validator is flagged as a previous epoch source attester during per epoch processing",
1124
+ }),
1125
+ prevEpochOnChainSourceAttesterMiss: register.gauge({
1126
+ name: "validator_monitor_prev_epoch_on_chain_source_attester_miss_total",
1127
+ help: "Incremented if the validator is not flagged as a previous epoch source attester during per epoch processing",
1128
+ }),
1129
+ prevEpochOnChainHeadAttesterHit: register.gauge({
1130
+ name: "validator_monitor_prev_epoch_on_chain_head_attester_hit_total",
1131
+ help: "Incremented if the validator is flagged as a previous epoch head attester during per epoch processing",
1132
+ }),
1133
+ prevEpochOnChainHeadAttesterMiss: register.gauge({
1134
+ name: "validator_monitor_prev_epoch_on_chain_head_attester_miss_total",
1135
+ help: "Incremented if the validator is not flagged as a previous epoch head attester during per epoch processing",
1136
+ }),
1137
+ prevOnChainAttesterCorrectHead: register.gauge({
1138
+ name: "validator_monitor_prev_epoch_on_chain_attester_correct_head_total",
1139
+ help: "Total count of times a validator votes correct head",
1140
+ }),
1141
+ prevOnChainAttesterIncorrectHead: register.gauge({
1142
+ name: "validator_monitor_prev_epoch_on_chain_attester_incorrect_head_total",
1143
+ help: "Total count of times a validator votes incorrect head",
1144
+ }),
1145
+ prevEpochOnChainTargetAttesterHit: register.gauge({
1146
+ name: "validator_monitor_prev_epoch_on_chain_target_attester_hit_total",
1147
+ help: "Incremented if the validator is flagged as a previous epoch target attester during per epoch processing",
1148
+ }),
1149
+ prevEpochOnChainTargetAttesterMiss: register.gauge({
1150
+ name: "validator_monitor_prev_epoch_on_chain_target_attester_miss_total",
1151
+ help: "Incremented if the validator is not flagged as a previous epoch target attester during per epoch processing",
1152
+ }),
1153
+ prevEpochOnChainInclusionDistance: register.histogram({
1154
+ name: "validator_monitor_prev_epoch_on_chain_inclusion_distance",
1155
+ help: "The attestation inclusion distance calculated during per epoch processing",
1156
+ // min inclusion distance is 1, usual values are 1,2,3 max is 32 (1 epoch)
1157
+ buckets: [1, 2, 3, 5, 10, 32],
1158
+ }),
1159
+ prevEpochAttestations: register.histogram({
1160
+ name: "validator_monitor_prev_epoch_attestations",
1161
+ help: "The number of unagg. attestations seen in the previous epoch",
1162
+ buckets: [0, 1, 2, 3],
1163
+ }),
1164
+ prevEpochAttestationsMinDelaySeconds: register.histogram({
1165
+ name: "validator_monitor_prev_epoch_attestations_min_delay_seconds",
1166
+ help: "The min delay between when the validator should send the attestation and when it was received",
1167
+ buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1168
+ }),
1169
+ prevEpochAttestationAggregateInclusions: register.histogram({
1170
+ name: "validator_monitor_prev_epoch_attestation_aggregate_inclusions",
1171
+ help: "The count of times an attestation was seen inside an aggregate",
1172
+ buckets: [0, 1, 2, 3, 5, 10],
1173
+ }),
1174
+ prevEpochAttestationBlockInclusions: register.histogram({
1175
+ name: "validator_monitor_prev_epoch_attestation_block_inclusions",
1176
+ help: "The count of times an attestation was seen inside a block",
1177
+ buckets: [0, 1, 2, 3, 5],
1178
+ }),
1179
+ prevEpochAttestationBlockMinInclusionDistance: register.histogram({
1180
+ name: "validator_monitor_prev_epoch_attestation_block_min_inclusion_distance",
1181
+ help: "The minimum inclusion distance observed for the inclusion of an attestation in a block",
1182
+ buckets: [1, 2, 3, 5, 10, 32],
1183
+ }),
1184
+ prevEpochBeaconBlocks: register.histogram({
1185
+ name: "validator_monitor_prev_epoch_beacon_blocks",
1186
+ help: "The number of beacon_blocks seen in the previous epoch",
1187
+ buckets: [0, 1, 2, 3, 5, 10],
1188
+ }),
1189
+ prevEpochBeaconBlocksMinDelaySeconds: register.histogram({
1190
+ name: "validator_monitor_prev_epoch_beacon_blocks_min_delay_seconds",
1191
+ help: "The min delay between when the validator should send the block and when it was received",
1192
+ buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1193
+ }),
1194
+ prevEpochAggregatesTotal: register.histogram({
1195
+ name: "validator_monitor_prev_epoch_aggregates",
1196
+ help: "The number of aggregates seen in the previous epoch",
1197
+ buckets: [0, 1, 2, 3, 5, 10],
1198
+ }),
1199
+ prevEpochAggregatesMinDelaySeconds: register.histogram({
1200
+ name: "validator_monitor_prev_epoch_aggregates_min_delay_seconds",
1201
+ help: "The min delay between when the validator should send the aggregate and when it was received",
1202
+ buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1203
+ }),
1204
+ prevEpochSyncCommitteeHits: register.gauge({
1205
+ name: "validator_monitor_prev_epoch_sync_committee_hits",
1206
+ help: "Count of times in prev epoch connected validators participated in imported block's syncAggregate",
1207
+ }),
1208
+ prevEpochSyncCommitteeMisses: register.gauge({
1209
+ name: "validator_monitor_prev_epoch_sync_committee_misses",
1210
+ help: "Count of times in prev epoch connected validators fail to participate in imported block's syncAggregate",
1211
+ }),
1212
+ prevEpochSyncSignatureAggregateInclusions: register.histogram({
1213
+ name: "validator_monitor_prev_epoch_sync_signature_aggregate_inclusions",
1214
+ help: "The count of times a sync signature was seen inside an aggregate",
1215
+ buckets: [0, 1, 2, 3, 5, 10],
1216
+ }),
1217
+ prevEpochAttestationSummary: register.gauge<{summary: string}>({
1218
+ name: "validator_monitor_prev_epoch_attestation_summary",
1219
+ help: "Best guess of the node of the result of previous epoch validators attestation actions and causality",
1220
+ labelNames: ["summary"],
1221
+ }),
1222
+ prevEpochBlockProposalSummary: register.gauge<{summary: string}>({
1223
+ name: "validator_monitor_prev_epoch_block_proposal_summary",
1224
+ help: "Best guess of the node of the result of previous epoch validators block proposal actions and causality",
1225
+ labelNames: ["summary"],
1226
+ }),
1227
+
1228
+ // Validator Monitor Metrics (real-time)
1229
+
1230
+ unaggregatedAttestationTotal: register.gauge<{src: OpSource}>({
1231
+ name: "validator_monitor_unaggregated_attestation_total",
1232
+ help: "Number of unaggregated attestations seen",
1233
+ labelNames: ["src"],
1234
+ }),
1235
+ unaggregatedAttestationDelaySeconds: register.histogram<{src: OpSource}>({
1236
+ name: "validator_monitor_unaggregated_attestation_delay_seconds",
1237
+ help: "The delay between when the validator should send the attestation and when it was received",
1238
+ labelNames: ["src"],
1239
+ buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1240
+ }),
1241
+ unaggregatedAttestationSubmittedSentPeers: register.histogram({
1242
+ name: "validator_monitor_unaggregated_attestation_submitted_sent_peers_count",
1243
+ help: "Number of peers that an unaggregated attestation sent to",
1244
+ // as of Apr 2022, most of the time we sent to >30 peers per attestations
1245
+ // these bucket values just base on that fact to get equal range
1246
+ // refine if we want more reasonable values
1247
+ buckets: [0, 10, 20, 30],
1248
+ }),
1249
+ aggregatedAttestationTotal: register.gauge<{src: OpSource}>({
1250
+ name: "validator_monitor_aggregated_attestation_total",
1251
+ help: "Number of aggregated attestations seen",
1252
+ labelNames: ["src"],
1253
+ }),
1254
+ aggregatedAttestationDelaySeconds: register.histogram<{src: OpSource}>({
1255
+ name: "validator_monitor_aggregated_attestation_delay_seconds",
1256
+ help: "The delay between then the validator should send the aggregate and when it was received",
1257
+ labelNames: ["src"],
1258
+ buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1259
+ }),
1260
+ attestationInAggregateTotal: register.gauge<{src: OpSource}>({
1261
+ name: "validator_monitor_attestation_in_aggregate_total",
1262
+ help: "Number of times an attestation has been seen in an aggregate",
1263
+ labelNames: ["src"],
1264
+ }),
1265
+ attestationInAggregateDelaySeconds: register.histogram<{src: OpSource}>({
1266
+ name: "validator_monitor_attestation_in_aggregate_delay_seconds",
1267
+ help: "The delay between when the validator should send the aggregate and when it was received",
1268
+ labelNames: ["src"],
1269
+ buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1270
+ }),
1271
+ attestationInBlockTotal: register.gauge({
1272
+ name: "validator_monitor_attestation_in_block_total",
1273
+ help: "Number of times an attestation has been seen in a block",
1274
+ }),
1275
+ attestationInBlockDelaySlots: register.histogram({
1276
+ name: "validator_monitor_attestation_in_block_delay_slots",
1277
+ help: "The excess slots (beyond the minimum delay) between the attestation slot and the block slot",
1278
+ buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1279
+ }),
1280
+ attestationInBlockParticipants: register.histogram({
1281
+ name: "validator_monitor_attestation_in_block_participants",
1282
+ help: "The total participants in attestations of monitored validators included in blocks",
1283
+ buckets: [1, 5, 20, 50, 100, 200],
1284
+ }),
1285
+ syncSignatureInAggregateTotal: register.gauge({
1286
+ name: "validator_monitor_sync_signature_in_aggregate_total",
1287
+ help: "Number of times a sync signature has been seen in an aggregate",
1288
+ }),
1289
+ beaconBlockTotal: register.gauge<{src: OpSource}>({
1290
+ name: "validator_monitor_beacon_block_total",
1291
+ help: "Total number of beacon blocks seen",
1292
+ labelNames: ["src"],
1293
+ }),
1294
+ beaconBlockDelaySeconds: register.histogram<{src: OpSource}>({
1295
+ name: "validator_monitor_beacon_block_delay_seconds",
1296
+ help: "The delay between when the validator should send the block and when it was received",
1297
+ labelNames: ["src"],
1298
+ // we also want other nodes to received our published before 4s so add bucket 3 and 3.5
1299
+ buckets: [0.1, 0.25, 0.5, 1, 2, 3, 4, 6, 10],
1300
+ }),
1301
+
1302
+ // Only for known
1303
+ proposerBalanceDeltaKnown: register.histogram({
1304
+ name: "validator_monitor_proposer_balance_delta_known_gwei",
1305
+ help: "Balance delta of known block proposer after importing a valid block",
1306
+ // Jul22 mainnet block reward is consistently between 29,000,000-28,000,000 GWei
1307
+ buckets: [10_000, 100_000, 1e6, 10e6, 20e6, 50e6, 100e6, 1000e6],
1308
+ }),
1309
+ };
1310
+ }