@lodestar/beacon-node 1.35.0-dev.e18102ed8c → 1.35.0-dev.f45a2be721

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 (978) 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 +8 -2
  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/rewards/index.d.ts.map +1 -0
  9. package/lib/api/impl/beacon/state/index.d.ts.map +1 -0
  10. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -0
  11. package/lib/api/impl/config/constants.d.ts +9 -9
  12. package/lib/api/impl/config/constants.d.ts.map +1 -0
  13. package/lib/api/impl/config/constants.js +16 -9
  14. package/lib/api/impl/config/constants.js.map +1 -1
  15. package/lib/api/impl/config/index.d.ts.map +1 -0
  16. package/lib/api/impl/debug/index.d.ts.map +1 -0
  17. package/lib/api/impl/errors.d.ts.map +1 -0
  18. package/lib/api/impl/events/index.d.ts.map +1 -0
  19. package/lib/api/impl/index.d.ts.map +1 -0
  20. package/lib/api/impl/lightclient/index.d.ts.map +1 -0
  21. package/lib/api/impl/lodestar/index.d.ts.map +1 -0
  22. package/lib/api/impl/lodestar/index.js +1 -1
  23. package/lib/api/impl/lodestar/index.js.map +1 -1
  24. package/lib/api/impl/node/index.d.ts.map +1 -0
  25. package/lib/api/impl/node/utils.d.ts.map +1 -0
  26. package/lib/api/impl/proof/index.d.ts.map +1 -0
  27. package/lib/api/impl/types.d.ts.map +1 -0
  28. package/lib/api/impl/utils.d.ts.map +1 -0
  29. package/lib/api/impl/validator/index.d.ts.map +1 -0
  30. package/lib/api/impl/validator/index.js +24 -33
  31. package/lib/api/impl/validator/index.js.map +1 -1
  32. package/lib/api/impl/validator/utils.d.ts.map +1 -0
  33. package/lib/api/index.d.ts.map +1 -0
  34. package/lib/api/options.d.ts.map +1 -0
  35. package/lib/api/rest/activeSockets.d.ts.map +1 -0
  36. package/lib/api/rest/base.d.ts.map +1 -0
  37. package/lib/api/rest/index.d.ts.map +1 -0
  38. package/lib/api/rest/swaggerUI.d.ts.map +1 -0
  39. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +1 -0
  40. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -0
  41. package/lib/chain/GetBlobsTracker.d.ts.map +1 -0
  42. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -0
  43. package/lib/chain/archiveStore/constants.d.ts.map +1 -0
  44. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -0
  45. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -0
  46. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  47. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  48. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -0
  49. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -0
  50. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +1 -0
  51. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  52. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  53. package/lib/chain/archiveStore/index.d.ts.map +1 -0
  54. package/lib/chain/archiveStore/interface.d.ts.map +1 -0
  55. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -0
  56. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -0
  57. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -0
  58. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +1 -0
  59. package/lib/chain/balancesCache.d.ts.map +1 -0
  60. package/lib/chain/beaconProposerCache.d.ts.map +1 -0
  61. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -0
  62. package/lib/chain/blocks/blockInput/blockInput.js +3 -2
  63. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  64. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -0
  65. package/lib/chain/blocks/blockInput/index.d.ts.map +1 -0
  66. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -0
  67. package/lib/chain/blocks/blockInput/utils.d.ts.map +1 -0
  68. package/lib/chain/blocks/importBlock.d.ts.map +1 -0
  69. package/lib/chain/blocks/importBlock.js +7 -6
  70. package/lib/chain/blocks/importBlock.js.map +1 -1
  71. package/lib/chain/blocks/index.d.ts.map +1 -0
  72. package/lib/chain/blocks/types.d.ts.map +1 -0
  73. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +1 -0
  74. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -0
  75. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -0
  76. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +1 -0
  77. package/lib/chain/blocks/utils/ownBanner.d.ts.map +1 -0
  78. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +1 -0
  79. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +1 -0
  80. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -0
  81. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -0
  82. package/lib/chain/blocks/verifyBlocksDataAvailability.js +8 -1
  83. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  84. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -0
  85. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -0
  86. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -0
  87. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -0
  88. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -0
  89. package/lib/chain/blocks/writeBlockInputToDb.js +1 -7
  90. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  91. package/lib/chain/bls/index.d.ts.map +1 -0
  92. package/lib/chain/bls/interface.d.ts.map +1 -0
  93. package/lib/chain/bls/maybeBatch.d.ts.map +1 -0
  94. package/lib/chain/bls/multithread/index.d.ts.map +1 -0
  95. package/lib/chain/bls/multithread/index.js +1 -0
  96. package/lib/chain/bls/multithread/index.js.map +1 -1
  97. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -0
  98. package/lib/chain/bls/multithread/poolSize.d.ts.map +1 -0
  99. package/lib/chain/bls/multithread/types.d.ts.map +1 -0
  100. package/lib/chain/bls/multithread/utils.d.ts.map +1 -0
  101. package/lib/chain/bls/multithread/worker.d.ts.map +1 -0
  102. package/lib/chain/bls/singleThread.d.ts.map +1 -0
  103. package/lib/chain/bls/utils.d.ts.map +1 -0
  104. package/lib/chain/chain.d.ts +1 -1
  105. package/lib/chain/chain.d.ts.map +1 -0
  106. package/lib/chain/chain.js +4 -6
  107. package/lib/chain/chain.js.map +1 -1
  108. package/lib/chain/emitter.d.ts +2 -2
  109. package/lib/chain/emitter.d.ts.map +1 -0
  110. package/lib/chain/errors/attestationError.d.ts.map +1 -0
  111. package/lib/chain/errors/attesterSlashingError.d.ts.map +1 -0
  112. package/lib/chain/errors/blobSidecarError.d.ts.map +1 -0
  113. package/lib/chain/errors/blockError.d.ts.map +1 -0
  114. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +1 -0
  115. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -0
  116. package/lib/chain/errors/gossipValidation.d.ts.map +1 -0
  117. package/lib/chain/errors/index.d.ts.map +1 -0
  118. package/lib/chain/errors/lightClientError.d.ts.map +1 -0
  119. package/lib/chain/errors/proposerSlashingError.d.ts.map +1 -0
  120. package/lib/chain/errors/syncCommitteeError.d.ts.map +1 -0
  121. package/lib/chain/errors/voluntaryExitError.d.ts.map +1 -0
  122. package/lib/chain/forkChoice/index.d.ts.map +1 -0
  123. package/lib/chain/genesis/genesis.d.ts.map +1 -0
  124. package/lib/chain/genesis/interface.d.ts.map +1 -0
  125. package/lib/chain/index.d.ts.map +1 -0
  126. package/lib/chain/initState.d.ts.map +1 -0
  127. package/lib/chain/interface.d.ts.map +1 -0
  128. package/lib/chain/lightClient/index.d.ts +2 -2
  129. package/lib/chain/lightClient/index.d.ts.map +1 -0
  130. package/lib/chain/lightClient/index.js +2 -0
  131. package/lib/chain/lightClient/index.js.map +1 -1
  132. package/lib/chain/lightClient/proofs.d.ts.map +1 -0
  133. package/lib/chain/lightClient/types.d.ts.map +1 -0
  134. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -0
  135. package/lib/chain/opPools/attestationPool.d.ts +2 -3
  136. package/lib/chain/opPools/attestationPool.d.ts.map +1 -0
  137. package/lib/chain/opPools/attestationPool.js +3 -5
  138. package/lib/chain/opPools/attestationPool.js.map +1 -1
  139. package/lib/chain/opPools/index.d.ts.map +1 -0
  140. package/lib/chain/opPools/opPool.d.ts.map +1 -0
  141. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +3 -2
  142. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -0
  143. package/lib/chain/opPools/syncCommitteeMessagePool.js +6 -5
  144. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  145. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -0
  146. package/lib/chain/opPools/types.d.ts +1 -1
  147. package/lib/chain/opPools/types.d.ts.map +1 -0
  148. package/lib/chain/opPools/types.js +1 -1
  149. package/lib/chain/opPools/types.js.map +1 -1
  150. package/lib/chain/opPools/utils.d.ts.map +1 -0
  151. package/lib/chain/options.d.ts.map +1 -0
  152. package/lib/chain/prepareNextSlot.d.ts +3 -3
  153. package/lib/chain/prepareNextSlot.d.ts.map +1 -0
  154. package/lib/chain/prepareNextSlot.js +8 -8
  155. package/lib/chain/prepareNextSlot.js.map +1 -1
  156. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -0
  157. package/lib/chain/produceBlock/index.d.ts.map +1 -0
  158. package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -4
  159. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -0
  160. package/lib/chain/produceBlock/produceBlockBody.js +13 -4
  161. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  162. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +1 -0
  163. package/lib/chain/regen/errors.d.ts.map +1 -0
  164. package/lib/chain/regen/index.d.ts.map +1 -0
  165. package/lib/chain/regen/interface.d.ts +1 -0
  166. package/lib/chain/regen/interface.d.ts.map +1 -0
  167. package/lib/chain/regen/interface.js +1 -0
  168. package/lib/chain/regen/interface.js.map +1 -1
  169. package/lib/chain/regen/queued.d.ts.map +1 -0
  170. package/lib/chain/regen/regen.d.ts.map +1 -0
  171. package/lib/chain/reprocess.d.ts.map +1 -0
  172. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -0
  173. package/lib/chain/rewards/blockRewards.d.ts.map +1 -0
  174. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -0
  175. package/lib/chain/seenCache/index.d.ts.map +1 -0
  176. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +1 -0
  177. package/lib/chain/seenCache/seenAttestationData.d.ts.map +1 -0
  178. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -0
  179. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +1 -0
  180. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -0
  181. package/lib/chain/seenCache/seenCommittee.d.ts.map +1 -0
  182. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +1 -0
  183. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -0
  184. package/lib/chain/seenCache/seenGossipBlockInput.js +8 -1
  185. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  186. package/lib/chain/serializeState.d.ts.map +1 -0
  187. package/lib/chain/shufflingCache.d.ts.map +1 -0
  188. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +1 -0
  189. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -0
  190. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -0
  191. package/lib/chain/stateCache/datastore/index.d.ts.map +1 -0
  192. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -0
  193. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -0
  194. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +1 -0
  195. package/lib/chain/stateCache/index.d.ts.map +1 -0
  196. package/lib/chain/stateCache/mapMetrics.d.ts.map +1 -0
  197. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -0
  198. package/lib/chain/stateCache/persistentCheckpointsCache.js +9 -8
  199. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  200. package/lib/chain/stateCache/types.d.ts.map +1 -0
  201. package/lib/chain/validation/aggregateAndProof.d.ts.map +1 -0
  202. package/lib/chain/validation/attestation.d.ts.map +1 -0
  203. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -0
  204. package/lib/chain/validation/blobSidecar.d.ts.map +1 -0
  205. package/lib/chain/validation/block.d.ts.map +1 -0
  206. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -0
  207. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -0
  208. package/lib/chain/validation/dataColumnSidecar.js +1 -1
  209. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  210. package/lib/chain/validation/index.d.ts.map +1 -0
  211. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +1 -0
  212. package/lib/chain/validation/lightClientFinalityUpdate.js +4 -3
  213. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  214. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +6 -4
  215. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +1 -0
  216. package/lib/chain/validation/lightClientOptimisticUpdate.js +11 -11
  217. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  218. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -0
  219. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -0
  220. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -0
  221. package/lib/chain/validation/signatureSets/index.d.ts.map +1 -0
  222. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -0
  223. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -0
  224. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -0
  225. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -0
  226. package/lib/chain/validation/syncCommittee.d.ts.map +1 -0
  227. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -0
  228. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -0
  229. package/lib/chain/validatorMonitor.d.ts.map +1 -0
  230. package/lib/chain/validatorMonitor.js +21 -15
  231. package/lib/chain/validatorMonitor.js.map +1 -1
  232. package/lib/constants/constants.d.ts.map +1 -0
  233. package/lib/constants/index.d.ts.map +1 -0
  234. package/lib/constants/network.d.ts.map +1 -0
  235. package/lib/db/beacon.d.ts.map +1 -0
  236. package/lib/db/buckets.d.ts +4 -4
  237. package/lib/db/buckets.d.ts.map +1 -0
  238. package/lib/db/buckets.js +4 -4
  239. package/lib/db/buckets.js.map +1 -1
  240. package/lib/db/index.d.ts.map +1 -0
  241. package/lib/db/interface.d.ts.map +1 -0
  242. package/lib/db/options.d.ts.map +1 -0
  243. package/lib/db/repositories/attesterSlashing.d.ts.map +1 -0
  244. package/lib/db/repositories/backfilledRanges.d.ts.map +1 -0
  245. package/lib/db/repositories/blobSidecars.d.ts.map +1 -0
  246. package/lib/db/repositories/blobSidecars.js +1 -1
  247. package/lib/db/repositories/blobSidecars.js.map +1 -1
  248. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +1 -0
  249. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  250. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  251. package/lib/db/repositories/block.d.ts.map +1 -0
  252. package/lib/db/repositories/blockArchive.d.ts.map +1 -0
  253. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  254. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -0
  255. package/lib/db/repositories/blsToExecutionChange.d.ts.map +1 -0
  256. package/lib/db/repositories/checkpointState.d.ts.map +1 -0
  257. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -0
  258. package/lib/db/repositories/dataColumnSidecar.js +1 -1
  259. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  260. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -0
  261. package/lib/db/repositories/dataColumnSidecarArchive.js +1 -1
  262. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  263. package/lib/db/repositories/depositDataRoot.d.ts.map +1 -0
  264. package/lib/db/repositories/depositEvent.d.ts.map +1 -0
  265. package/lib/db/repositories/eth1Data.d.ts.map +1 -0
  266. package/lib/db/repositories/index.d.ts.map +1 -0
  267. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +1 -0
  268. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +1 -0
  269. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +1 -0
  270. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +1 -0
  271. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -0
  272. package/lib/db/repositories/stateArchive.d.ts.map +1 -0
  273. package/lib/db/repositories/stateArchiveIndex.d.ts.map +1 -0
  274. package/lib/db/repositories/voluntaryExit.d.ts.map +1 -0
  275. package/lib/db/single/index.d.ts.map +1 -0
  276. package/lib/db/single/preGenesisState.d.ts.map +1 -0
  277. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +1 -0
  278. package/lib/eth1/errors.d.ts.map +1 -0
  279. package/lib/eth1/eth1DataCache.d.ts.map +1 -0
  280. package/lib/eth1/eth1DepositDataTracker.d.ts.map +1 -0
  281. package/lib/eth1/eth1DepositsCache.d.ts.map +1 -0
  282. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +1 -0
  283. package/lib/eth1/index.d.ts.map +1 -0
  284. package/lib/eth1/interface.d.ts.map +1 -0
  285. package/lib/eth1/options.d.ts.map +1 -0
  286. package/lib/eth1/provider/eth1Provider.d.ts.map +1 -0
  287. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +1 -0
  288. package/lib/eth1/provider/jwt.d.ts.map +1 -0
  289. package/lib/eth1/provider/utils.d.ts.map +1 -0
  290. package/lib/eth1/stream.d.ts.map +1 -0
  291. package/lib/eth1/utils/depositContract.d.ts.map +1 -0
  292. package/lib/eth1/utils/deposits.d.ts.map +1 -0
  293. package/lib/eth1/utils/eth1Data.d.ts.map +1 -0
  294. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +1 -0
  295. package/lib/eth1/utils/eth1Vote.d.ts.map +1 -0
  296. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +1 -0
  297. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +1 -0
  298. package/lib/execution/builder/cache.d.ts.map +1 -0
  299. package/lib/execution/builder/http.d.ts.map +1 -0
  300. package/lib/execution/builder/index.d.ts.map +1 -0
  301. package/lib/execution/builder/interface.d.ts.map +1 -0
  302. package/lib/execution/builder/utils.d.ts.map +1 -0
  303. package/lib/execution/engine/disabled.d.ts.map +1 -0
  304. package/lib/execution/engine/http.d.ts.map +1 -0
  305. package/lib/execution/engine/index.d.ts.map +1 -0
  306. package/lib/execution/engine/interface.d.ts.map +1 -0
  307. package/lib/execution/engine/mock.d.ts.map +1 -0
  308. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -0
  309. package/lib/execution/engine/types.d.ts.map +1 -0
  310. package/lib/execution/engine/utils.d.ts.map +1 -0
  311. package/lib/execution/index.d.ts.map +1 -0
  312. package/lib/index.d.ts.map +1 -0
  313. package/lib/metrics/index.d.ts.map +1 -0
  314. package/lib/metrics/metrics/beacon.d.ts.map +1 -0
  315. package/lib/metrics/metrics/lodestar.d.ts +1 -1
  316. package/lib/metrics/metrics/lodestar.d.ts.map +1 -0
  317. package/lib/metrics/metrics/lodestar.js +3 -3
  318. package/lib/metrics/metrics/lodestar.js.map +1 -1
  319. package/lib/metrics/metrics.d.ts.map +1 -0
  320. package/lib/metrics/nodeJsMetrics.d.ts.map +1 -0
  321. package/lib/metrics/options.d.ts.map +1 -0
  322. package/lib/metrics/server/http.d.ts.map +1 -0
  323. package/lib/metrics/server/index.d.ts.map +1 -0
  324. package/lib/metrics/utils/avgMinMax.d.ts.map +1 -0
  325. package/lib/metrics/utils/gauge.d.ts.map +1 -0
  326. package/lib/metrics/utils/registryMetricCreator.d.ts.map +1 -0
  327. package/lib/monitoring/clientStats.d.ts.map +1 -0
  328. package/lib/monitoring/index.d.ts.map +1 -0
  329. package/lib/monitoring/options.d.ts.map +1 -0
  330. package/lib/monitoring/properties.d.ts.map +1 -0
  331. package/lib/monitoring/service.d.ts.map +1 -0
  332. package/lib/monitoring/system.d.ts.map +1 -0
  333. package/lib/monitoring/types.d.ts.map +1 -0
  334. package/lib/network/core/events.d.ts.map +1 -0
  335. package/lib/network/core/index.d.ts.map +1 -0
  336. package/lib/network/core/metrics.d.ts.map +1 -0
  337. package/lib/network/core/networkCore.d.ts.map +1 -0
  338. package/lib/network/core/networkCoreWorker.d.ts.map +1 -0
  339. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -0
  340. package/lib/network/core/networkCoreWorkerHandler.js +9 -3
  341. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  342. package/lib/network/core/types.d.ts.map +1 -0
  343. package/lib/network/discv5/index.d.ts.map +1 -0
  344. package/lib/network/discv5/index.js +4 -1
  345. package/lib/network/discv5/index.js.map +1 -1
  346. package/lib/network/discv5/types.d.ts.map +1 -0
  347. package/lib/network/discv5/utils.d.ts.map +1 -0
  348. package/lib/network/discv5/worker.d.ts.map +1 -0
  349. package/lib/network/events.d.ts.map +1 -0
  350. package/lib/network/forks.d.ts.map +1 -0
  351. package/lib/network/gossip/constants.d.ts.map +1 -0
  352. package/lib/network/gossip/encoding.d.ts.map +1 -0
  353. package/lib/network/gossip/errors.d.ts.map +1 -0
  354. package/lib/network/gossip/gossipsub.d.ts +1 -0
  355. package/lib/network/gossip/gossipsub.d.ts.map +1 -0
  356. package/lib/network/gossip/gossipsub.js +36 -17
  357. package/lib/network/gossip/gossipsub.js.map +1 -1
  358. package/lib/network/gossip/index.d.ts.map +1 -0
  359. package/lib/network/gossip/interface.d.ts.map +1 -0
  360. package/lib/network/gossip/metrics.d.ts +15 -7
  361. package/lib/network/gossip/metrics.d.ts.map +1 -0
  362. package/lib/network/gossip/metrics.js +16 -6
  363. package/lib/network/gossip/metrics.js.map +1 -1
  364. package/lib/network/gossip/scoringParameters.d.ts.map +1 -0
  365. package/lib/network/gossip/scoringParameters.js +4 -4
  366. package/lib/network/gossip/scoringParameters.js.map +1 -1
  367. package/lib/network/gossip/topic.d.ts.map +1 -0
  368. package/lib/network/gossip/topic.js +2 -2
  369. package/lib/network/gossip/topic.js.map +1 -1
  370. package/lib/network/index.d.ts.map +1 -0
  371. package/lib/network/interface.d.ts.map +1 -0
  372. package/lib/network/libp2p/error.d.ts.map +1 -0
  373. package/lib/network/libp2p/index.d.ts.map +1 -0
  374. package/lib/network/libp2p/index.js +9 -1
  375. package/lib/network/libp2p/index.js.map +1 -1
  376. package/lib/network/metadata.d.ts.map +1 -0
  377. package/lib/network/metadata.js +2 -1
  378. package/lib/network/metadata.js.map +1 -1
  379. package/lib/network/network.d.ts +1 -1
  380. package/lib/network/network.d.ts.map +1 -0
  381. package/lib/network/network.js +11 -13
  382. package/lib/network/network.js.map +1 -1
  383. package/lib/network/networkConfig.d.ts.map +1 -0
  384. package/lib/network/options.d.ts.map +1 -0
  385. package/lib/network/peers/client.d.ts.map +1 -0
  386. package/lib/network/peers/datastore.d.ts +2 -2
  387. package/lib/network/peers/datastore.d.ts.map +1 -0
  388. package/lib/network/peers/datastore.js +2 -2
  389. package/lib/network/peers/datastore.js.map +1 -1
  390. package/lib/network/peers/discover.d.ts.map +1 -0
  391. package/lib/network/peers/index.d.ts.map +1 -0
  392. package/lib/network/peers/peerManager.d.ts.map +1 -0
  393. package/lib/network/peers/peerManager.js +2 -1
  394. package/lib/network/peers/peerManager.js.map +1 -1
  395. package/lib/network/peers/peersData.d.ts.map +1 -0
  396. package/lib/network/peers/score/constants.d.ts.map +1 -0
  397. package/lib/network/peers/score/index.d.ts.map +1 -0
  398. package/lib/network/peers/score/interface.d.ts.map +1 -0
  399. package/lib/network/peers/score/score.d.ts.map +1 -0
  400. package/lib/network/peers/score/store.d.ts.map +1 -0
  401. package/lib/network/peers/score/utils.d.ts.map +1 -0
  402. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -0
  403. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -0
  404. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +1 -0
  405. package/lib/network/peers/utils/index.d.ts.map +1 -0
  406. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -0
  407. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -0
  408. package/lib/network/processor/aggregatorTracker.d.ts.map +1 -0
  409. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -0
  410. package/lib/network/processor/gossipHandlers.d.ts.map +1 -0
  411. package/lib/network/processor/gossipHandlers.js +1 -1
  412. package/lib/network/processor/gossipHandlers.js.map +1 -1
  413. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -0
  414. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -0
  415. package/lib/network/processor/gossipQueues/linear.d.ts.map +1 -0
  416. package/lib/network/processor/gossipQueues/types.d.ts.map +1 -0
  417. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -0
  418. package/lib/network/processor/index.d.ts +1 -1
  419. package/lib/network/processor/index.d.ts.map +1 -0
  420. package/lib/network/processor/index.js +2 -3
  421. package/lib/network/processor/index.js.map +1 -1
  422. package/lib/network/processor/types.d.ts.map +1 -0
  423. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -0
  424. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -0
  425. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -0
  426. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -0
  427. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -0
  428. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -0
  429. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -0
  430. package/lib/network/reqresp/handlers/index.d.ts.map +1 -0
  431. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +1 -0
  432. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +1 -0
  433. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +1 -0
  434. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +1 -0
  435. package/lib/network/reqresp/index.d.ts.map +1 -0
  436. package/lib/network/reqresp/interface.d.ts.map +1 -0
  437. package/lib/network/reqresp/protocols.d.ts.map +1 -0
  438. package/lib/network/reqresp/rateLimit.d.ts.map +1 -0
  439. package/lib/network/reqresp/score.d.ts.map +1 -0
  440. package/lib/network/reqresp/types.d.ts.map +1 -0
  441. package/lib/network/reqresp/utils/collect.d.ts.map +1 -0
  442. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +1 -0
  443. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -0
  444. package/lib/network/statusCache.d.ts.map +1 -0
  445. package/lib/network/subnets/attnetsService.d.ts.map +1 -0
  446. package/lib/network/subnets/attnetsService.js +1 -1
  447. package/lib/network/subnets/attnetsService.js.map +1 -1
  448. package/lib/network/subnets/index.d.ts.map +1 -0
  449. package/lib/network/subnets/interface.d.ts.map +1 -0
  450. package/lib/network/subnets/syncnetsService.d.ts.map +1 -0
  451. package/lib/network/subnets/util.d.ts.map +1 -0
  452. package/lib/network/util.d.ts.map +1 -0
  453. package/lib/node/index.d.ts.map +1 -0
  454. package/lib/node/nodejs.d.ts.map +1 -0
  455. package/lib/node/notifier.d.ts.map +1 -0
  456. package/lib/node/notifier.js +1 -1
  457. package/lib/node/notifier.js.map +1 -1
  458. package/lib/node/options.d.ts.map +1 -0
  459. package/lib/node/utils/interop/deposits.d.ts.map +1 -0
  460. package/lib/node/utils/interop/state.d.ts.map +1 -0
  461. package/lib/node/utils/lightclient.d.ts.map +1 -0
  462. package/lib/node/utils/state.d.ts.map +1 -0
  463. package/lib/sync/backfill/backfill.d.ts.map +1 -0
  464. package/lib/sync/backfill/errors.d.ts.map +1 -0
  465. package/lib/sync/backfill/index.d.ts.map +1 -0
  466. package/lib/sync/backfill/verify.d.ts.map +1 -0
  467. package/lib/sync/constants.d.ts.map +1 -0
  468. package/lib/sync/index.d.ts.map +1 -0
  469. package/lib/sync/interface.d.ts.map +1 -0
  470. package/lib/sync/options.d.ts.map +1 -0
  471. package/lib/sync/range/batch.d.ts.map +1 -0
  472. package/lib/sync/range/chain.d.ts.map +1 -0
  473. package/lib/sync/range/range.d.ts.map +1 -0
  474. package/lib/sync/range/utils/batches.d.ts.map +1 -0
  475. package/lib/sync/range/utils/chainTarget.d.ts.map +1 -0
  476. package/lib/sync/range/utils/hashBlocks.d.ts.map +1 -0
  477. package/lib/sync/range/utils/index.d.ts.map +1 -0
  478. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -0
  479. package/lib/sync/range/utils/updateChains.d.ts.map +1 -0
  480. package/lib/sync/sync.d.ts.map +1 -0
  481. package/lib/sync/types.d.ts +0 -1
  482. package/lib/sync/types.d.ts.map +1 -0
  483. package/lib/sync/types.js.map +1 -1
  484. package/lib/sync/unknownBlock.d.ts +0 -1
  485. package/lib/sync/unknownBlock.d.ts.map +1 -0
  486. package/lib/sync/unknownBlock.js +19 -20
  487. package/lib/sync/unknownBlock.js.map +1 -1
  488. package/lib/sync/utils/downloadByRange.d.ts +2 -1
  489. package/lib/sync/utils/downloadByRange.d.ts.map +1 -0
  490. package/lib/sync/utils/downloadByRange.js +8 -3
  491. package/lib/sync/utils/downloadByRange.js.map +1 -1
  492. package/lib/sync/utils/downloadByRoot.d.ts +3 -1
  493. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -0
  494. package/lib/sync/utils/downloadByRoot.js +34 -6
  495. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  496. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -0
  497. package/lib/sync/utils/remoteSyncType.d.ts.map +1 -0
  498. package/lib/util/address.d.ts.map +1 -0
  499. package/lib/util/array.d.ts.map +1 -0
  500. package/lib/util/asyncIterableToEvents.d.ts.map +1 -0
  501. package/lib/util/binarySearch.d.ts.map +1 -0
  502. package/lib/util/bitArray.d.ts.map +1 -0
  503. package/lib/util/blobs.d.ts.map +1 -0
  504. package/lib/util/blobs.js +5 -3
  505. package/lib/util/blobs.js.map +1 -1
  506. package/lib/util/bufferPool.d.ts.map +1 -0
  507. package/lib/util/bytes.d.ts.map +1 -0
  508. package/lib/util/chunkify.d.ts.map +1 -0
  509. package/lib/util/clock.d.ts +8 -3
  510. package/lib/util/clock.d.ts.map +1 -0
  511. package/lib/util/clock.js +8 -5
  512. package/lib/util/clock.js.map +1 -1
  513. package/lib/util/dataColumns.d.ts.map +1 -0
  514. package/lib/util/dataColumns.js +4 -2
  515. package/lib/util/dataColumns.js.map +1 -1
  516. package/lib/util/dependentRoot.d.ts.map +1 -0
  517. package/lib/util/enum.d.ts.map +1 -0
  518. package/lib/util/error.d.ts.map +1 -0
  519. package/lib/util/eventLoop.d.ts.map +1 -0
  520. package/lib/util/execution.d.ts.map +1 -0
  521. package/lib/util/execution.js +19 -2
  522. package/lib/util/execution.js.map +1 -1
  523. package/lib/util/file.d.ts.map +1 -0
  524. package/lib/util/forkChoice.d.ts.map +1 -0
  525. package/lib/util/forkName.d.ts.map +1 -0
  526. package/lib/util/graffiti.d.ts.map +1 -0
  527. package/lib/util/hex.d.ts.map +1 -0
  528. package/lib/util/index.d.ts.map +1 -0
  529. package/lib/util/ip.d.ts.map +1 -0
  530. package/lib/util/itTrigger.d.ts.map +1 -0
  531. package/lib/util/kzg.d.ts.map +1 -0
  532. package/lib/util/map.d.ts.map +1 -0
  533. package/lib/util/metadata.d.ts.map +1 -0
  534. package/lib/util/multifork.d.ts.map +1 -0
  535. package/lib/util/numpy.d.ts.map +1 -0
  536. package/lib/util/peerId.d.ts.map +1 -0
  537. package/lib/util/profile.d.ts.map +1 -0
  538. package/lib/util/promises.d.ts.map +1 -0
  539. package/lib/util/queue/errors.d.ts.map +1 -0
  540. package/lib/util/queue/fnQueue.d.ts.map +1 -0
  541. package/lib/util/queue/index.d.ts.map +1 -0
  542. package/lib/util/queue/itemQueue.d.ts.map +1 -0
  543. package/lib/util/queue/options.d.ts.map +1 -0
  544. package/lib/util/serializedCache.d.ts.map +1 -0
  545. package/lib/util/set.d.ts.map +1 -0
  546. package/lib/util/shuffle.d.ts.map +1 -0
  547. package/lib/util/sortBy.d.ts.map +1 -0
  548. package/lib/util/sszBytes.d.ts.map +1 -0
  549. package/lib/util/strictEvents.d.ts.map +1 -0
  550. package/lib/util/time.d.ts.map +1 -0
  551. package/lib/util/timeSeries.d.ts.map +1 -0
  552. package/lib/util/types.d.ts.map +1 -0
  553. package/lib/util/workerEvents.d.ts.map +1 -0
  554. package/lib/util/wrapError.d.ts.map +1 -0
  555. package/package.json +32 -22
  556. package/src/api/impl/api.ts +26 -0
  557. package/src/api/impl/beacon/blocks/index.ts +753 -0
  558. package/src/api/impl/beacon/blocks/utils.ts +75 -0
  559. package/src/api/impl/beacon/index.ts +35 -0
  560. package/src/api/impl/beacon/pool/index.ts +314 -0
  561. package/src/api/impl/beacon/rewards/index.ts +30 -0
  562. package/src/api/impl/beacon/state/index.ts +406 -0
  563. package/src/api/impl/beacon/state/utils.ts +189 -0
  564. package/src/api/impl/config/constants.ts +135 -0
  565. package/src/api/impl/config/index.ts +59 -0
  566. package/src/api/impl/debug/index.ts +131 -0
  567. package/src/api/impl/errors.ts +50 -0
  568. package/src/api/impl/events/index.ts +33 -0
  569. package/src/api/impl/index.ts +6 -0
  570. package/src/api/impl/lightclient/index.ts +64 -0
  571. package/src/api/impl/lodestar/index.ts +257 -0
  572. package/src/api/impl/node/index.ts +88 -0
  573. package/src/api/impl/node/utils.ts +51 -0
  574. package/src/api/impl/proof/index.ts +60 -0
  575. package/src/api/impl/types.ts +17 -0
  576. package/src/api/impl/utils.ts +25 -0
  577. package/src/api/impl/validator/index.ts +1526 -0
  578. package/src/api/impl/validator/utils.ts +85 -0
  579. package/src/api/index.ts +2 -0
  580. package/src/api/options.ts +16 -0
  581. package/src/api/rest/activeSockets.ts +109 -0
  582. package/src/api/rest/base.ts +216 -0
  583. package/src/api/rest/index.ts +63 -0
  584. package/src/api/rest/swaggerUI.ts +80 -0
  585. package/src/bun-wrappers/prometheus-gc-stats.ts +7 -0
  586. package/src/chain/ColumnReconstructionTracker.ts +90 -0
  587. package/src/chain/GetBlobsTracker.ts +115 -0
  588. package/src/chain/archiveStore/archiveStore.ts +222 -0
  589. package/src/chain/archiveStore/constants.ts +5 -0
  590. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +116 -0
  591. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +68 -0
  592. package/src/chain/archiveStore/historicalState/metrics.ts +214 -0
  593. package/src/chain/archiveStore/historicalState/types.ts +41 -0
  594. package/src/chain/archiveStore/historicalState/worker.ts +77 -0
  595. package/src/chain/archiveStore/index.ts +3 -0
  596. package/src/chain/archiveStore/interface.ts +75 -0
  597. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +138 -0
  598. package/src/chain/archiveStore/utils/archiveBlocks.ts +437 -0
  599. package/src/chain/archiveStore/utils/pruneHistory.ts +56 -0
  600. package/src/chain/archiveStore/utils/updateBackfillRange.ts +50 -0
  601. package/src/chain/balancesCache.ts +52 -0
  602. package/src/chain/beaconProposerCache.ts +43 -0
  603. package/src/chain/blocks/blockInput/blockInput.ts +854 -0
  604. package/src/chain/blocks/blockInput/errors.ts +48 -0
  605. package/src/chain/blocks/blockInput/index.ts +4 -0
  606. package/src/chain/blocks/blockInput/types.ts +145 -0
  607. package/src/chain/blocks/blockInput/utils.ts +21 -0
  608. package/src/chain/blocks/importBlock.ts +599 -0
  609. package/src/chain/blocks/index.ts +179 -0
  610. package/src/chain/blocks/types.ts +101 -0
  611. package/src/chain/blocks/utils/blowfishBanner.ts +28 -0
  612. package/src/chain/blocks/utils/chainSegment.ts +29 -0
  613. package/src/chain/blocks/utils/checkpoint.ts +25 -0
  614. package/src/chain/blocks/utils/giraffeBanner.ts +30 -0
  615. package/src/chain/blocks/utils/ownBanner.ts +20 -0
  616. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +43 -0
  617. package/src/chain/blocks/utils/zebraBanner.ts +45 -0
  618. package/src/chain/blocks/verifyBlock.ts +242 -0
  619. package/src/chain/blocks/verifyBlocksDataAvailability.ts +42 -0
  620. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +438 -0
  621. package/src/chain/blocks/verifyBlocksSanityChecks.ts +129 -0
  622. package/src/chain/blocks/verifyBlocksSignatures.ts +105 -0
  623. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +114 -0
  624. package/src/chain/blocks/writeBlockInputToDb.ts +120 -0
  625. package/src/chain/bls/index.ts +4 -0
  626. package/src/chain/bls/interface.ts +68 -0
  627. package/src/chain/bls/maybeBatch.ts +45 -0
  628. package/src/chain/bls/multithread/index.ts +582 -0
  629. package/src/chain/bls/multithread/jobItem.ts +119 -0
  630. package/src/chain/bls/multithread/poolSize.ts +16 -0
  631. package/src/chain/bls/multithread/types.ts +38 -0
  632. package/src/chain/bls/multithread/utils.ts +19 -0
  633. package/src/chain/bls/multithread/worker.ts +114 -0
  634. package/src/chain/bls/singleThread.ts +87 -0
  635. package/src/chain/bls/utils.ts +30 -0
  636. package/src/chain/chain.ts +1352 -0
  637. package/src/chain/emitter.ts +113 -0
  638. package/src/chain/errors/attestationError.ts +194 -0
  639. package/src/chain/errors/attesterSlashingError.ts +11 -0
  640. package/src/chain/errors/blobSidecarError.ts +60 -0
  641. package/src/chain/errors/blockError.ts +166 -0
  642. package/src/chain/errors/blsToExecutionChangeError.ts +13 -0
  643. package/src/chain/errors/dataColumnSidecarError.ts +80 -0
  644. package/src/chain/errors/gossipValidation.ts +20 -0
  645. package/src/chain/errors/index.ts +10 -0
  646. package/src/chain/errors/lightClientError.ts +30 -0
  647. package/src/chain/errors/proposerSlashingError.ts +11 -0
  648. package/src/chain/errors/syncCommitteeError.ts +36 -0
  649. package/src/chain/errors/voluntaryExitError.ts +13 -0
  650. package/src/chain/forkChoice/index.ts +112 -0
  651. package/src/chain/genesis/genesis.ts +190 -0
  652. package/src/chain/genesis/interface.ts +14 -0
  653. package/src/chain/index.ts +6 -0
  654. package/src/chain/initState.ts +221 -0
  655. package/src/chain/interface.ts +280 -0
  656. package/src/chain/lightClient/index.ts +772 -0
  657. package/src/chain/lightClient/proofs.ts +85 -0
  658. package/src/chain/lightClient/types.ts +33 -0
  659. package/src/chain/opPools/aggregatedAttestationPool.ts +1063 -0
  660. package/src/chain/opPools/attestationPool.ts +282 -0
  661. package/src/chain/opPools/index.ts +5 -0
  662. package/src/chain/opPools/opPool.ts +462 -0
  663. package/src/chain/opPools/syncCommitteeMessagePool.ts +169 -0
  664. package/src/chain/opPools/syncContributionAndProofPool.ts +240 -0
  665. package/src/chain/opPools/types.ts +35 -0
  666. package/src/chain/opPools/utils.ts +65 -0
  667. package/src/chain/options.ts +138 -0
  668. package/src/chain/prepareNextSlot.ts +277 -0
  669. package/src/chain/produceBlock/computeNewStateRoot.ts +55 -0
  670. package/src/chain/produceBlock/index.ts +2 -0
  671. package/src/chain/produceBlock/produceBlockBody.ts +799 -0
  672. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +54 -0
  673. package/src/chain/regen/errors.ts +30 -0
  674. package/src/chain/regen/index.ts +4 -0
  675. package/src/chain/regen/interface.ts +94 -0
  676. package/src/chain/regen/queued.ts +317 -0
  677. package/src/chain/regen/regen.ts +424 -0
  678. package/src/chain/reprocess.ts +161 -0
  679. package/src/chain/rewards/attestationsRewards.ts +196 -0
  680. package/src/chain/rewards/blockRewards.ts +150 -0
  681. package/src/chain/rewards/syncCommitteeRewards.ts +58 -0
  682. package/src/chain/seenCache/index.ts +5 -0
  683. package/src/chain/seenCache/seenAggregateAndProof.ts +120 -0
  684. package/src/chain/seenCache/seenAttestationData.ts +145 -0
  685. package/src/chain/seenCache/seenAttesters.ts +58 -0
  686. package/src/chain/seenCache/seenBlockAttesters.ts +18 -0
  687. package/src/chain/seenCache/seenBlockProposers.ts +48 -0
  688. package/src/chain/seenCache/seenCommittee.ts +43 -0
  689. package/src/chain/seenCache/seenCommitteeContribution.ts +104 -0
  690. package/src/chain/seenCache/seenGossipBlockInput.ts +381 -0
  691. package/src/chain/serializeState.ts +32 -0
  692. package/src/chain/shufflingCache.ts +238 -0
  693. package/src/chain/stateCache/blockStateCacheImpl.ts +150 -0
  694. package/src/chain/stateCache/datastore/db.ts +36 -0
  695. package/src/chain/stateCache/datastore/file.ts +53 -0
  696. package/src/chain/stateCache/datastore/index.ts +2 -0
  697. package/src/chain/stateCache/datastore/types.ts +13 -0
  698. package/src/chain/stateCache/fifoBlockStateCache.ts +208 -0
  699. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +198 -0
  700. package/src/chain/stateCache/index.ts +3 -0
  701. package/src/chain/stateCache/mapMetrics.ts +52 -0
  702. package/src/chain/stateCache/persistentCheckpointsCache.ts +837 -0
  703. package/src/chain/stateCache/types.ts +86 -0
  704. package/src/chain/validation/aggregateAndProof.ts +258 -0
  705. package/src/chain/validation/attestation.ts +885 -0
  706. package/src/chain/validation/attesterSlashing.ts +61 -0
  707. package/src/chain/validation/blobSidecar.ts +301 -0
  708. package/src/chain/validation/block.ts +188 -0
  709. package/src/chain/validation/blsToExecutionChange.ts +61 -0
  710. package/src/chain/validation/dataColumnSidecar.ts +381 -0
  711. package/src/chain/validation/index.ts +9 -0
  712. package/src/chain/validation/lightClientFinalityUpdate.ts +46 -0
  713. package/src/chain/validation/lightClientOptimisticUpdate.ts +68 -0
  714. package/src/chain/validation/proposerSlashing.ts +54 -0
  715. package/src/chain/validation/signatureSets/aggregateAndProof.ts +38 -0
  716. package/src/chain/validation/signatureSets/contributionAndProof.ts +27 -0
  717. package/src/chain/validation/signatureSets/index.ts +6 -0
  718. package/src/chain/validation/signatureSets/selectionProof.ts +27 -0
  719. package/src/chain/validation/signatureSets/syncCommittee.ts +22 -0
  720. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +18 -0
  721. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +27 -0
  722. package/src/chain/validation/syncCommittee.ts +165 -0
  723. package/src/chain/validation/syncCommitteeContributionAndProof.ts +122 -0
  724. package/src/chain/validation/voluntaryExit.ts +58 -0
  725. package/src/chain/validatorMonitor.ts +1310 -0
  726. package/src/constants/constants.ts +15 -0
  727. package/src/constants/index.ts +2 -0
  728. package/src/constants/network.ts +52 -0
  729. package/src/db/beacon.ts +113 -0
  730. package/src/db/buckets.ts +80 -0
  731. package/src/db/index.ts +2 -0
  732. package/src/db/interface.ts +76 -0
  733. package/src/db/options.ts +7 -0
  734. package/src/db/repositories/attesterSlashing.ts +38 -0
  735. package/src/db/repositories/backfilledRanges.ts +29 -0
  736. package/src/db/repositories/blobSidecars.ts +37 -0
  737. package/src/db/repositories/blobSidecarsArchive.ts +28 -0
  738. package/src/db/repositories/block.ts +33 -0
  739. package/src/db/repositories/blockArchive.ts +170 -0
  740. package/src/db/repositories/blockArchiveIndex.ts +45 -0
  741. package/src/db/repositories/blsToExecutionChange.ts +16 -0
  742. package/src/db/repositories/checkpointState.ts +31 -0
  743. package/src/db/repositories/dataColumnSidecar.ts +49 -0
  744. package/src/db/repositories/dataColumnSidecarArchive.ts +56 -0
  745. package/src/db/repositories/depositDataRoot.ts +80 -0
  746. package/src/db/repositories/depositEvent.ts +32 -0
  747. package/src/db/repositories/eth1Data.ts +33 -0
  748. package/src/db/repositories/index.ts +20 -0
  749. package/src/db/repositories/lightclientBestUpdate.ts +41 -0
  750. package/src/db/repositories/lightclientCheckpointHeader.ts +32 -0
  751. package/src/db/repositories/lightclientSyncCommittee.ts +16 -0
  752. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +77 -0
  753. package/src/db/repositories/proposerSlashing.ts +15 -0
  754. package/src/db/repositories/stateArchive.ts +69 -0
  755. package/src/db/repositories/stateArchiveIndex.ts +18 -0
  756. package/src/db/repositories/voluntaryExit.ts +15 -0
  757. package/src/db/single/index.ts +2 -0
  758. package/src/db/single/preGenesisState.ts +37 -0
  759. package/src/db/single/preGenesisStateLastProcessedBlock.ts +34 -0
  760. package/src/eth1/errors.ts +40 -0
  761. package/src/eth1/eth1DataCache.ts +26 -0
  762. package/src/eth1/eth1DepositDataTracker.ts +410 -0
  763. package/src/eth1/eth1DepositsCache.ts +141 -0
  764. package/src/eth1/eth1MergeBlockTracker.ts +328 -0
  765. package/src/eth1/index.ts +157 -0
  766. package/src/eth1/interface.ts +131 -0
  767. package/src/eth1/options.ts +28 -0
  768. package/src/eth1/provider/eth1Provider.ts +229 -0
  769. package/src/eth1/provider/jsonRpcHttpClient.ts +390 -0
  770. package/src/eth1/provider/jwt.ts +36 -0
  771. package/src/eth1/provider/utils.ts +136 -0
  772. package/src/eth1/stream.ts +75 -0
  773. package/src/eth1/utils/depositContract.ts +37 -0
  774. package/src/eth1/utils/deposits.ts +70 -0
  775. package/src/eth1/utils/eth1Data.ts +100 -0
  776. package/src/eth1/utils/eth1DepositEvent.ts +12 -0
  777. package/src/eth1/utils/eth1Vote.ts +142 -0
  778. package/src/eth1/utils/groupDepositEventsByBlock.ts +19 -0
  779. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +18 -0
  780. package/src/execution/builder/cache.ts +39 -0
  781. package/src/execution/builder/http.ts +229 -0
  782. package/src/execution/builder/index.ts +27 -0
  783. package/src/execution/builder/interface.ts +49 -0
  784. package/src/execution/builder/utils.ts +19 -0
  785. package/src/execution/engine/disabled.ts +35 -0
  786. package/src/execution/engine/http.ts +644 -0
  787. package/src/execution/engine/index.ts +63 -0
  788. package/src/execution/engine/interface.ts +199 -0
  789. package/src/execution/engine/mock.ts +493 -0
  790. package/src/execution/engine/payloadIdCache.ts +54 -0
  791. package/src/execution/engine/types.ts +640 -0
  792. package/src/execution/engine/utils.ts +136 -0
  793. package/src/execution/index.ts +4 -0
  794. package/src/index.ts +20 -0
  795. package/src/metrics/index.ts +4 -0
  796. package/src/metrics/metrics/beacon.ts +390 -0
  797. package/src/metrics/metrics/lodestar.ts +1870 -0
  798. package/src/metrics/metrics.ts +43 -0
  799. package/src/metrics/nodeJsMetrics.ts +19 -0
  800. package/src/metrics/options.ts +22 -0
  801. package/src/metrics/server/http.ts +114 -0
  802. package/src/metrics/server/index.ts +1 -0
  803. package/src/metrics/utils/avgMinMax.ts +87 -0
  804. package/src/metrics/utils/gauge.ts +22 -0
  805. package/src/metrics/utils/registryMetricCreator.ts +41 -0
  806. package/src/monitoring/clientStats.ts +297 -0
  807. package/src/monitoring/index.ts +2 -0
  808. package/src/monitoring/options.ts +19 -0
  809. package/src/monitoring/properties.ts +152 -0
  810. package/src/monitoring/service.ts +235 -0
  811. package/src/monitoring/system.ts +146 -0
  812. package/src/monitoring/types.ts +21 -0
  813. package/src/network/core/events.ts +59 -0
  814. package/src/network/core/index.ts +3 -0
  815. package/src/network/core/metrics.ts +304 -0
  816. package/src/network/core/networkCore.ts +599 -0
  817. package/src/network/core/networkCoreWorker.ts +176 -0
  818. package/src/network/core/networkCoreWorkerHandler.ts +284 -0
  819. package/src/network/core/types.ts +119 -0
  820. package/src/network/discv5/index.ts +132 -0
  821. package/src/network/discv5/types.ts +74 -0
  822. package/src/network/discv5/utils.ts +50 -0
  823. package/src/network/discv5/worker.ts +137 -0
  824. package/src/network/events.ts +51 -0
  825. package/src/network/forks.ts +94 -0
  826. package/src/network/gossip/constants.ts +15 -0
  827. package/src/network/gossip/encoding.ts +111 -0
  828. package/src/network/gossip/errors.ts +7 -0
  829. package/src/network/gossip/gossipsub.ts +384 -0
  830. package/src/network/gossip/index.ts +4 -0
  831. package/src/network/gossip/interface.ts +215 -0
  832. package/src/network/gossip/metrics.ts +71 -0
  833. package/src/network/gossip/scoringParameters.ts +333 -0
  834. package/src/network/gossip/topic.ts +332 -0
  835. package/src/network/index.ts +8 -0
  836. package/src/network/interface.ts +134 -0
  837. package/src/network/libp2p/error.ts +55 -0
  838. package/src/network/libp2p/index.ts +153 -0
  839. package/src/network/metadata.ts +162 -0
  840. package/src/network/network.ts +767 -0
  841. package/src/network/networkConfig.ts +12 -0
  842. package/src/network/options.ts +70 -0
  843. package/src/network/peers/client.ts +29 -0
  844. package/src/network/peers/datastore.ts +188 -0
  845. package/src/network/peers/discover.ts +647 -0
  846. package/src/network/peers/index.ts +2 -0
  847. package/src/network/peers/peerManager.ts +900 -0
  848. package/src/network/peers/peersData.ts +65 -0
  849. package/src/network/peers/score/constants.ts +34 -0
  850. package/src/network/peers/score/index.ts +4 -0
  851. package/src/network/peers/score/interface.ts +74 -0
  852. package/src/network/peers/score/score.ts +200 -0
  853. package/src/network/peers/score/store.ts +95 -0
  854. package/src/network/peers/score/utils.ts +37 -0
  855. package/src/network/peers/utils/assertPeerRelevance.ts +99 -0
  856. package/src/network/peers/utils/enrSubnetsDeserialize.ts +27 -0
  857. package/src/network/peers/utils/getConnectedPeerIds.ts +33 -0
  858. package/src/network/peers/utils/index.ts +4 -0
  859. package/src/network/peers/utils/prioritizePeers.ts +627 -0
  860. package/src/network/peers/utils/subnetMap.ts +88 -0
  861. package/src/network/processor/aggregatorTracker.ts +38 -0
  862. package/src/network/processor/extractSlotRootFns.ts +64 -0
  863. package/src/network/processor/gossipHandlers.ts +951 -0
  864. package/src/network/processor/gossipQueues/index.ts +114 -0
  865. package/src/network/processor/gossipQueues/indexed.ts +219 -0
  866. package/src/network/processor/gossipQueues/linear.ts +162 -0
  867. package/src/network/processor/gossipQueues/types.ts +57 -0
  868. package/src/network/processor/gossipValidatorFn.ts +142 -0
  869. package/src/network/processor/index.ts +496 -0
  870. package/src/network/processor/types.ts +27 -0
  871. package/src/network/reqresp/ReqRespBeaconNode.ts +373 -0
  872. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +101 -0
  873. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +49 -0
  874. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +114 -0
  875. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +62 -0
  876. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +144 -0
  877. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +88 -0
  878. package/src/network/reqresp/handlers/index.ts +78 -0
  879. package/src/network/reqresp/handlers/lightClientBootstrap.ts +31 -0
  880. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +21 -0
  881. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +21 -0
  882. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +39 -0
  883. package/src/network/reqresp/index.ts +2 -0
  884. package/src/network/reqresp/interface.ts +45 -0
  885. package/src/network/reqresp/protocols.ts +146 -0
  886. package/src/network/reqresp/rateLimit.ts +112 -0
  887. package/src/network/reqresp/score.ts +70 -0
  888. package/src/network/reqresp/types.ts +174 -0
  889. package/src/network/reqresp/utils/collect.ts +84 -0
  890. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +57 -0
  891. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +99 -0
  892. package/src/network/statusCache.ts +17 -0
  893. package/src/network/subnets/attnetsService.ts +382 -0
  894. package/src/network/subnets/index.ts +2 -0
  895. package/src/network/subnets/interface.ts +66 -0
  896. package/src/network/subnets/syncnetsService.ts +147 -0
  897. package/src/network/subnets/util.ts +63 -0
  898. package/src/network/util.ts +29 -0
  899. package/src/node/index.ts +2 -0
  900. package/src/node/nodejs.ts +349 -0
  901. package/src/node/notifier.ts +206 -0
  902. package/src/node/options.ts +51 -0
  903. package/src/node/utils/interop/deposits.ts +53 -0
  904. package/src/node/utils/interop/state.ts +59 -0
  905. package/src/node/utils/lightclient.ts +7 -0
  906. package/src/node/utils/state.ts +37 -0
  907. package/src/sync/backfill/backfill.ts +893 -0
  908. package/src/sync/backfill/errors.ts +23 -0
  909. package/src/sync/backfill/index.ts +1 -0
  910. package/src/sync/backfill/verify.ts +58 -0
  911. package/src/sync/constants.ts +71 -0
  912. package/src/sync/index.ts +2 -0
  913. package/src/sync/interface.ts +55 -0
  914. package/src/sync/options.ts +45 -0
  915. package/src/sync/range/batch.ts +455 -0
  916. package/src/sync/range/chain.ts +715 -0
  917. package/src/sync/range/range.ts +354 -0
  918. package/src/sync/range/utils/batches.ts +119 -0
  919. package/src/sync/range/utils/chainTarget.ts +62 -0
  920. package/src/sync/range/utils/hashBlocks.ts +27 -0
  921. package/src/sync/range/utils/index.ts +5 -0
  922. package/src/sync/range/utils/peerBalancer.ts +184 -0
  923. package/src/sync/range/utils/updateChains.ts +66 -0
  924. package/src/sync/sync.ts +290 -0
  925. package/src/sync/types.ts +57 -0
  926. package/src/sync/unknownBlock.ts +860 -0
  927. package/src/sync/utils/downloadByRange.ts +814 -0
  928. package/src/sync/utils/downloadByRoot.ts +568 -0
  929. package/src/sync/utils/pendingBlocksTree.ts +97 -0
  930. package/src/sync/utils/remoteSyncType.ts +144 -0
  931. package/src/util/address.ts +3 -0
  932. package/src/util/array.ts +311 -0
  933. package/src/util/asyncIterableToEvents.ts +164 -0
  934. package/src/util/binarySearch.ts +48 -0
  935. package/src/util/bitArray.ts +84 -0
  936. package/src/util/blobs.ts +210 -0
  937. package/src/util/bufferPool.ts +95 -0
  938. package/src/util/bytes.ts +11 -0
  939. package/src/util/chunkify.ts +27 -0
  940. package/src/util/clock.ts +212 -0
  941. package/src/util/dataColumns.ts +424 -0
  942. package/src/util/dependentRoot.ts +47 -0
  943. package/src/util/enum.ts +17 -0
  944. package/src/util/error.ts +56 -0
  945. package/src/util/eventLoop.ts +22 -0
  946. package/src/util/execution.ts +223 -0
  947. package/src/util/file.ts +52 -0
  948. package/src/util/forkChoice.ts +5 -0
  949. package/src/util/forkName.ts +20 -0
  950. package/src/util/graffiti.ts +39 -0
  951. package/src/util/hex.ts +9 -0
  952. package/src/util/index.ts +2 -0
  953. package/src/util/ip.ts +6 -0
  954. package/src/util/itTrigger.ts +49 -0
  955. package/src/util/kzg.ts +3 -0
  956. package/src/util/map.ts +77 -0
  957. package/src/util/metadata.ts +22 -0
  958. package/src/util/multifork.ts +69 -0
  959. package/src/util/numpy.ts +8 -0
  960. package/src/util/peerId.ts +16 -0
  961. package/src/util/profile.ts +54 -0
  962. package/src/util/promises.ts +14 -0
  963. package/src/util/queue/errors.ts +14 -0
  964. package/src/util/queue/fnQueue.ts +16 -0
  965. package/src/util/queue/index.ts +4 -0
  966. package/src/util/queue/itemQueue.ts +128 -0
  967. package/src/util/queue/options.ts +37 -0
  968. package/src/util/serializedCache.ts +20 -0
  969. package/src/util/set.ts +62 -0
  970. package/src/util/shuffle.ts +21 -0
  971. package/src/util/sortBy.ts +19 -0
  972. package/src/util/sszBytes.ts +481 -0
  973. package/src/util/strictEvents.ts +8 -0
  974. package/src/util/time.ts +13 -0
  975. package/src/util/timeSeries.ts +118 -0
  976. package/src/util/types.ts +31 -0
  977. package/src/util/workerEvents.ts +142 -0
  978. package/src/util/wrapError.ts +27 -0
@@ -0,0 +1,382 @@
1
+ import {BeaconConfig, ForkBoundary} from "@lodestar/config";
2
+ import {ATTESTATION_SUBNET_COUNT, EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION, SLOTS_PER_EPOCH} from "@lodestar/params";
3
+ import {computeEpochAtSlot} from "@lodestar/state-transition";
4
+ import {Epoch, Slot, SubnetID, ssz} from "@lodestar/types";
5
+ import {Logger, MapDef} from "@lodestar/utils";
6
+ import {ClockEvent, IClock} from "../../util/clock.js";
7
+ import {NetworkCoreMetrics} from "../core/metrics.js";
8
+ import {getActiveForkBoundaries} from "../forks.js";
9
+ import {GossipType} from "../gossip/index.js";
10
+ import {GOSSIP_D_LOW} from "../gossip/scoringParameters.js";
11
+ import {stringifyGossipTopic} from "../gossip/topic.js";
12
+ import {MetadataController} from "../metadata.js";
13
+ import {RequestedSubnet, SubnetMap} from "../peers/utils/index.js";
14
+ import {CommitteeSubscription, GossipSubscriber, IAttnetsService, NodeId, SubnetsServiceOpts} from "./interface.js";
15
+ import {computeSubscribedSubnet} from "./util.js";
16
+
17
+ const gossipType = GossipType.beacon_attestation;
18
+
19
+ export enum SubnetSource {
20
+ committee = "committee",
21
+ longLived = "long_lived",
22
+ }
23
+
24
+ // map of subnet to time to form stable mesh as seconds, null if not yet formed
25
+ type AggregatorDutyInfo = Map<SubnetID, number | null>;
26
+
27
+ /**
28
+ * This value means node is not able to form stable mesh.
29
+ */
30
+ const NOT_ABLE_TO_FORM_STABLE_MESH_SEC = -1;
31
+
32
+ /**
33
+ * Manage deleterministic long lived (DLL) subnets and short lived subnets.
34
+ * - PeerManager uses attnetsService to know which peers are required for duties and long lived subscriptions
35
+ * - Network call addCommitteeSubscriptions() from API calls
36
+ * - Gossip handler checks shouldProcess to know if validator is aggregator
37
+ */
38
+ export class AttnetsService implements IAttnetsService {
39
+ /** Committee subnets - PeerManager must find peers for those */
40
+ private committeeSubnets = new SubnetMap();
41
+ /**
42
+ * All currently subscribed short-lived subnets, for attestation aggregation
43
+ * This class will tell gossip to subscribe and un-subscribe
44
+ * If a value exists for `SubscriptionId` it means that gossip subscription is active in network.gossip
45
+ */
46
+ private shortLivedSubscriptions = new SubnetMap();
47
+ /** ${SUBNETS_PER_NODE} long lived subscriptions, may overlap with `shortLivedSubscriptions` */
48
+ private longLivedSubscriptions = new Set<number>();
49
+ /**
50
+ * Map of an aggregator at a slot and AggregatorDutyInfo
51
+ * Used to determine if we should process an attestation.
52
+ */
53
+ private aggregatorSlotSubnet = new MapDef<Slot, AggregatorDutyInfo>(() => new Map());
54
+
55
+ constructor(
56
+ private readonly config: BeaconConfig,
57
+ private readonly clock: IClock,
58
+ private readonly gossip: GossipSubscriber,
59
+ private readonly metadata: MetadataController,
60
+ private readonly logger: Logger,
61
+ private readonly metrics: NetworkCoreMetrics | null,
62
+ private readonly nodeId: NodeId | null,
63
+ private readonly opts: SubnetsServiceOpts
64
+ ) {
65
+ // if subscribeAllSubnets, we act like we have >= ATTESTATION_SUBNET_COUNT validators connecting to this node
66
+ // so that we have enough subnet topic peers, see https://github.com/ChainSafe/lodestar/issues/4921
67
+ if (this.opts.subscribeAllSubnets) {
68
+ for (let subnet = 0; subnet < ATTESTATION_SUBNET_COUNT; subnet++) {
69
+ this.committeeSubnets.request({subnet, toSlot: Infinity});
70
+ }
71
+ }
72
+
73
+ if (metrics) {
74
+ metrics.attnetsService.longLivedSubscriptions.addCollect(() => this.onScrapeLodestarMetrics(metrics));
75
+ }
76
+ this.recomputeLongLivedSubnets();
77
+ this.clock.on(ClockEvent.slot, this.onSlot);
78
+ this.clock.on(ClockEvent.epoch, this.onEpoch);
79
+ }
80
+
81
+ close(): void {
82
+ this.clock.off(ClockEvent.slot, this.onSlot);
83
+ this.clock.off(ClockEvent.epoch, this.onEpoch);
84
+ }
85
+
86
+ /**
87
+ * Get all active subnets for the hearbeat:
88
+ * - committeeSubnets so that submitted attestations can be spread to the network
89
+ * - longLivedSubscriptions because other peers based on this node's ENR for their submitted attestations
90
+ */
91
+ getActiveSubnets(): RequestedSubnet[] {
92
+ const shortLivedSubnets = this.committeeSubnets.getActiveTtl(this.clock.currentSlot);
93
+
94
+ const longLivedSubscriptionsToSlot =
95
+ (Math.floor(this.clock.currentEpoch / EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION) + 1) *
96
+ EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION *
97
+ SLOTS_PER_EPOCH;
98
+ const longLivedSubnets = Array.from(this.longLivedSubscriptions).map((subnet) => ({
99
+ subnet,
100
+ toSlot: longLivedSubscriptionsToSlot,
101
+ }));
102
+
103
+ // could be overlap, PeerDiscovery will handle it
104
+ return [...shortLivedSubnets, ...longLivedSubnets];
105
+ }
106
+
107
+ /**
108
+ * Called from the API when validator is a part of a committee.
109
+ */
110
+ addCommitteeSubscriptions(subscriptions: CommitteeSubscription[]): void {
111
+ for (const {subnet, slot, isAggregator} of subscriptions) {
112
+ // the peer-manager heartbeat will help find the subnet
113
+ this.committeeSubnets.request({subnet, toSlot: slot + 1});
114
+ if (isAggregator) {
115
+ // need exact slot here
116
+ this.aggregatorSlotSubnet.getOrDefault(slot).set(subnet, null);
117
+ }
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Check if a subscription is still active before handling a gossip object
123
+ */
124
+ shouldProcess(subnet: SubnetID, slot: Slot): boolean {
125
+ if (!this.aggregatorSlotSubnet.has(slot)) {
126
+ return false;
127
+ }
128
+ return this.aggregatorSlotSubnet.getOrDefault(slot).has(subnet);
129
+ }
130
+
131
+ /**
132
+ * TODO-dll: clarify how many epochs before the fork we should subscribe to the new fork
133
+ * Call ONLY ONCE: Two epoch before the fork, re-subscribe all existing random subscriptions to the new fork
134
+ **/
135
+ subscribeSubnetsNextBoundary(boundary: ForkBoundary): void {
136
+ this.logger.info("Subscribing to long lived attnets for next fork boundary", {
137
+ ...boundary,
138
+ subnets: Array.from(this.longLivedSubscriptions).join(","),
139
+ });
140
+ for (const subnet of this.longLivedSubscriptions) {
141
+ this.gossip.subscribeTopic({type: gossipType, subnet, boundary});
142
+ }
143
+ }
144
+
145
+ /**
146
+ * TODO-dll: clarify how many epochs after the fork we should unsubscribe to the new fork
147
+ * Call ONLY ONCE: Two epochs after the fork, un-subscribe all subnets from the old fork
148
+ **/
149
+ unsubscribeSubnetsPrevBoundary(boundary: ForkBoundary): void {
150
+ this.logger.info("Unsubscribing from long lived attnets of previous fork boundary", boundary);
151
+ for (let subnet = 0; subnet < ATTESTATION_SUBNET_COUNT; subnet++) {
152
+ if (!this.opts.subscribeAllSubnets) {
153
+ this.gossip.unsubscribeTopic({type: gossipType, subnet, boundary});
154
+ }
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Run per slot.
160
+ * - Subscribe to gossip subnets 2 slots in advance
161
+ * - Unsubscribe from expired subnets
162
+ * - Track time to stable mesh if not yet formed
163
+ */
164
+ private onSlot = (clockSlot: Slot): void => {
165
+ try {
166
+ setTimeout(() => {
167
+ this.onHalfSlot(clockSlot);
168
+ }, this.config.SLOT_DURATION_MS * 0.5);
169
+
170
+ for (const [dutiedSlot, dutiedInfo] of this.aggregatorSlotSubnet.entries()) {
171
+ if (dutiedSlot === clockSlot + this.opts.slotsToSubscribeBeforeAggregatorDuty) {
172
+ // Trigger gossip subscription first, in batch
173
+ if (dutiedInfo.size > 0) {
174
+ this.subscribeToSubnets(Array.from(dutiedInfo.keys()), SubnetSource.committee);
175
+ }
176
+ // Then, register the subscriptions
177
+ for (const subnet of dutiedInfo.keys()) {
178
+ this.shortLivedSubscriptions.request({subnet, toSlot: dutiedSlot});
179
+ }
180
+ }
181
+ this.trackTimeToStableMesh(clockSlot, dutiedSlot, dutiedInfo);
182
+ }
183
+
184
+ this.unsubscribeExpiredCommitteeSubnets(clockSlot);
185
+ this.pruneExpiredAggregator(clockSlot);
186
+ } catch (e) {
187
+ this.logger.error("Error on AttnetsService.onSlot", {slot: clockSlot}, e as Error);
188
+ }
189
+ };
190
+
191
+ private onHalfSlot = (clockSlot: Slot): void => {
192
+ for (const [dutiedSlot, dutiedInfo] of this.aggregatorSlotSubnet.entries()) {
193
+ this.trackTimeToStableMesh(clockSlot, dutiedSlot, dutiedInfo);
194
+ }
195
+ };
196
+
197
+ /**
198
+ * Track time to form stable mesh if not yet formed
199
+ */
200
+ private trackTimeToStableMesh(clockSlot: Slot, dutiedSlot: Slot, dutiedInfo: AggregatorDutyInfo): void {
201
+ if (dutiedSlot < clockSlot) {
202
+ // aggregator duty is expired, set timeToStableMesh to some big value so we know this value is not good
203
+ for (const [subnet, timeToFormMesh] of dutiedInfo.entries()) {
204
+ if (timeToFormMesh === null) {
205
+ dutiedInfo.set(subnet, NOT_ABLE_TO_FORM_STABLE_MESH_SEC);
206
+ this.metrics?.attnetsService.subscriptionsCommitteeTimeToStableMesh.observe(
207
+ {subnet},
208
+ NOT_ABLE_TO_FORM_STABLE_MESH_SEC
209
+ );
210
+ }
211
+ }
212
+ } else if (dutiedSlot <= clockSlot + this.opts.slotsToSubscribeBeforeAggregatorDuty) {
213
+ // aggregator duty is not expired, track time to stable mesh if this is the 1st time we see mesh peers>=Dlo (6)
214
+ for (const [subnet, timeToFormMesh] of dutiedInfo.entries()) {
215
+ if (timeToFormMesh === null) {
216
+ const topicStr = stringifyGossipTopic(this.config, {
217
+ type: gossipType,
218
+ boundary: this.config.getForkBoundaryAtEpoch(computeEpochAtSlot(dutiedSlot)),
219
+ subnet,
220
+ });
221
+ const numMeshPeers = this.gossip.mesh.get(topicStr)?.size ?? 0;
222
+ if (numMeshPeers >= GOSSIP_D_LOW) {
223
+ const timeToStableMeshSec = this.clock.secFromSlot(
224
+ dutiedSlot - this.opts.slotsToSubscribeBeforeAggregatorDuty
225
+ );
226
+ // set to dutiedInfo so we'll not set to metrics again
227
+ dutiedInfo.set(subnet, timeToStableMeshSec);
228
+ this.metrics?.attnetsService.subscriptionsCommitteeTimeToStableMesh.observe({subnet}, timeToStableMeshSec);
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Run per epoch, clean-up operations that are not urgent
237
+ * Subscribe to new random subnets every EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION epochs
238
+ */
239
+ private onEpoch = (epoch: Epoch): void => {
240
+ try {
241
+ if (epoch % EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION === 0) {
242
+ this.recomputeLongLivedSubnets();
243
+ }
244
+ } catch (e) {
245
+ this.logger.error("Error on AttnetsService.onEpoch", {epoch}, e as Error);
246
+ }
247
+ };
248
+
249
+ private recomputeLongLivedSubnets(): void {
250
+ if (this.nodeId === null) {
251
+ this.logger.verbose("Cannot recompute long-lived subscriptions, no nodeId");
252
+ return;
253
+ }
254
+
255
+ const oldSubnets = this.longLivedSubscriptions;
256
+ const newSubnets = computeSubscribedSubnet(this.nodeId, this.clock.currentEpoch);
257
+ this.logger.verbose("Recomputing long-lived subscriptions", {
258
+ epoch: this.clock.currentEpoch,
259
+ oldSubnets: Array.from(oldSubnets).join(","),
260
+ newSubnets: newSubnets.join(","),
261
+ });
262
+
263
+ const toRemoveSubnets = [];
264
+ for (const subnet of oldSubnets) {
265
+ if (!newSubnets.includes(subnet)) {
266
+ toRemoveSubnets.push(subnet);
267
+ }
268
+ }
269
+
270
+ // First, tell gossip to subscribe to the subnets if not connected already
271
+ this.subscribeToSubnets(newSubnets, SubnetSource.longLived);
272
+
273
+ // then update longLivedSubscriptions
274
+ for (const subnet of toRemoveSubnets) {
275
+ this.longLivedSubscriptions.delete(subnet);
276
+ }
277
+
278
+ for (const subnet of newSubnets) {
279
+ // this.longLivedSubscriptions is a set so it'll handle duplicates
280
+ this.longLivedSubscriptions.add(subnet);
281
+ }
282
+
283
+ // Only tell gossip to unsubsribe last, longLivedSubscriptions has the latest state
284
+ this.unsubscribeSubnets(toRemoveSubnets, this.clock.currentSlot, SubnetSource.longLived);
285
+ this.updateMetadata();
286
+ }
287
+
288
+ /**
289
+ * Unsubscribe to a committee subnet from subscribedCommitteeSubnets.
290
+ * If a random subnet is present, we do not unsubscribe from it.
291
+ */
292
+ private unsubscribeExpiredCommitteeSubnets(slot: Slot): void {
293
+ const expired = this.shortLivedSubscriptions.getExpired(slot);
294
+ if (expired.length > 0) {
295
+ this.unsubscribeSubnets(expired, slot, SubnetSource.committee);
296
+ }
297
+ }
298
+
299
+ /**
300
+ * No need to track aggregator for past slots.
301
+ * @param currentSlot
302
+ */
303
+ private pruneExpiredAggregator(currentSlot: Slot): void {
304
+ for (const dutiedSlot of this.aggregatorSlotSubnet.keys()) {
305
+ if (currentSlot > dutiedSlot) {
306
+ this.aggregatorSlotSubnet.delete(dutiedSlot);
307
+ }
308
+ }
309
+ }
310
+
311
+ /** Update ENR */
312
+ private updateMetadata(): void {
313
+ const subnets = ssz.phase0.AttestationSubnets.defaultValue();
314
+ for (const subnet of this.longLivedSubscriptions) {
315
+ subnets.set(subnet, true);
316
+ }
317
+
318
+ // Only update metadata if necessary, setting `metadata.[key]` triggers a write to disk
319
+ if (!ssz.phase0.AttestationSubnets.equals(subnets, this.metadata.attnets)) {
320
+ this.metadata.attnets = subnets;
321
+ }
322
+ }
323
+
324
+ /**
325
+ * Trigger a gossip subcription only if not already subscribed
326
+ * shortLivedSubscriptions or longLivedSubscriptions should be updated right AFTER this called
327
+ **/
328
+ private subscribeToSubnets(subnets: number[], src: SubnetSource): void {
329
+ const boundaries = getActiveForkBoundaries(this.config, this.clock.currentEpoch);
330
+
331
+ for (const subnet of subnets) {
332
+ if (!this.shortLivedSubscriptions.has(subnet) && !this.longLivedSubscriptions.has(subnet)) {
333
+ for (const boundary of boundaries) {
334
+ this.gossip.subscribeTopic({type: gossipType, subnet, boundary});
335
+ }
336
+ this.metrics?.attnetsService.subscribeSubnets.inc({subnet, src});
337
+ }
338
+ }
339
+ }
340
+
341
+ /**
342
+ * Trigger a gossip un-subscription only if no-one is still subscribed
343
+ * If unsubscribe long lived subnets, longLivedSubscriptions should be updated right BEFORE this called
344
+ **/
345
+ private unsubscribeSubnets(subnets: number[], slot: Slot, src: SubnetSource): void {
346
+ // No need to unsubscribeTopic(). Return early to prevent repetitive extra work
347
+ if (this.opts.subscribeAllSubnets) return;
348
+
349
+ const boundaries = getActiveForkBoundaries(this.config, this.clock.currentEpoch);
350
+
351
+ for (const subnet of subnets) {
352
+ if (!this.shortLivedSubscriptions.isActiveAtSlot(subnet, slot) && !this.longLivedSubscriptions.has(subnet)) {
353
+ for (const boundary of boundaries) {
354
+ this.gossip.unsubscribeTopic({type: gossipType, subnet, boundary});
355
+ }
356
+ this.metrics?.attnetsService.unsubscribeSubnets.inc({subnet, src});
357
+ }
358
+ }
359
+ }
360
+
361
+ private onScrapeLodestarMetrics(metrics: NetworkCoreMetrics): void {
362
+ metrics.attnetsService.committeeSubnets.set(this.committeeSubnets.size);
363
+ metrics.attnetsService.subscriptionsCommittee.set(this.shortLivedSubscriptions.size);
364
+ // track short lived subnet status, >= 6 (Dlo) means healthy, otherwise unhealthy
365
+ const currentSlot = this.clock.currentSlot;
366
+ for (const {subnet} of this.shortLivedSubscriptions.getActiveTtl(currentSlot)) {
367
+ const topicStr = stringifyGossipTopic(this.config, {
368
+ type: gossipType,
369
+ boundary: this.config.getForkBoundaryAtEpoch(this.clock.currentEpoch),
370
+ subnet,
371
+ });
372
+ const numMeshPeers = this.gossip.mesh.get(topicStr)?.size ?? 0;
373
+ metrics.attnetsService.subscriptionsCommitteeMeshPeers.observe({subnet}, numMeshPeers);
374
+ }
375
+ metrics.attnetsService.longLivedSubscriptions.set(this.longLivedSubscriptions.size);
376
+ let aggregatorCount = 0;
377
+ for (const subnets of this.aggregatorSlotSubnet.values()) {
378
+ aggregatorCount += subnets.size;
379
+ }
380
+ metrics.attnetsService.aggregatorSlotSubnetCount.set(aggregatorCount);
381
+ }
382
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./interface.js";
2
+ export * from "./syncnetsService.js";
@@ -0,0 +1,66 @@
1
+ import type {PeerId, PrivateKey} from "@libp2p/interface";
2
+ import {peerIdFromPrivateKey} from "@libp2p/peer-id";
3
+ import {getV4Crypto} from "@chainsafe/enr";
4
+ import {ForkBoundary} from "@lodestar/config";
5
+ import {Bytes32, Slot, SubnetID, ValidatorIndex} from "@lodestar/types";
6
+ import {fromHex} from "@lodestar/utils";
7
+ import {GossipTopic} from "../gossip/interface.js";
8
+ import {RequestedSubnet} from "../peers/utils/index.js";
9
+
10
+ /** Generic CommitteeSubscription for both beacon attnets subs and syncnets subs */
11
+ export type CommitteeSubscription = {
12
+ validatorIndex: ValidatorIndex;
13
+ subnet: SubnetID;
14
+ slot: Slot;
15
+ isAggregator: boolean;
16
+ };
17
+
18
+ export type SubnetsService = {
19
+ close(): void;
20
+ addCommitteeSubscriptions(subscriptions: CommitteeSubscription[]): void;
21
+ getActiveSubnets(): RequestedSubnet[];
22
+ subscribeSubnetsNextBoundary(boundary: ForkBoundary): void;
23
+ unsubscribeSubnetsPrevBoundary(boundary: ForkBoundary): void;
24
+ };
25
+
26
+ export interface IAttnetsService extends SubnetsService {
27
+ shouldProcess(subnet: SubnetID, slot: Slot): boolean;
28
+ }
29
+
30
+ export type RandBetweenFn = (min: number, max: number) => number;
31
+ export type ShuffleFn = <T>(arr: T[]) => T[];
32
+
33
+ export type SubnetsServiceOpts = {
34
+ subscribeAllSubnets?: boolean;
35
+ slotsToSubscribeBeforeAggregatorDuty: number;
36
+ };
37
+
38
+ export type SubnetsServiceTestOpts = {
39
+ // For deterministic randomness in unit test after ESM prevents simple import mocking
40
+ randBetweenFn?: RandBetweenFn;
41
+ shuffleFn?: ShuffleFn;
42
+ };
43
+
44
+ type TopicStr = string;
45
+ type PeerIdStr = string;
46
+
47
+ export type GossipSubscriber = {
48
+ subscribeTopic(topic: GossipTopic): void;
49
+ unsubscribeTopic(topic: GossipTopic): void;
50
+ mesh: Map<TopicStr, Set<PeerIdStr>>;
51
+ };
52
+
53
+ // uint256 in the spec
54
+ export type NodeId = Bytes32;
55
+ export function computeNodeIdFromPrivateKey(privateKey: PrivateKey): NodeId {
56
+ const peerId = peerIdFromPrivateKey(privateKey);
57
+ return computeNodeId(peerId);
58
+ }
59
+
60
+ export function computeNodeId(peerId: PeerId): Uint8Array {
61
+ if (peerId.publicKey === undefined) {
62
+ throw Error(`Undefined publicKey peerId=${peerId.toString()}`);
63
+ }
64
+ const nodeIdHex = getV4Crypto().nodeId(peerId.publicKey.raw);
65
+ return fromHex(nodeIdHex);
66
+ }
@@ -0,0 +1,147 @@
1
+ import {BeaconConfig, ForkBoundary} from "@lodestar/config";
2
+ import {SYNC_COMMITTEE_SUBNET_COUNT} from "@lodestar/params";
3
+ import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
4
+ import {Epoch, ssz} from "@lodestar/types";
5
+ import {Logger} from "@lodestar/utils";
6
+ import {ClockEvent, IClock} from "../../util/clock.js";
7
+ import {NetworkCoreMetrics} from "../core/metrics.js";
8
+ import {getActiveForkBoundaries} from "../forks.js";
9
+ import {GossipType} from "../gossip/index.js";
10
+ import {MetadataController} from "../metadata.js";
11
+ import {RequestedSubnet, SubnetMap} from "../peers/utils/index.js";
12
+ import {CommitteeSubscription, GossipSubscriber, SubnetsService, SubnetsServiceOpts} from "./interface.js";
13
+
14
+ /**
15
+ * Manage sync committee subnets. Sync committees are long (~27h) so there aren't random long-lived subscriptions
16
+ */
17
+ export class SyncnetsService implements SubnetsService {
18
+ /**
19
+ * All currently subscribed subnets. Syncnets do not have additional long-lived
20
+ * random subscriptions since the committees are already active for long periods of time.
21
+ * Also, the node will aggregate through the entire period to simplify the validator logic.
22
+ * So `subscriptionsCommittee` represents subnets to find peers and aggregate data.
23
+ * This class will tell gossip to subscribe and un-subscribe.
24
+ * If a value exists for `SubscriptionId` it means that gossip subscription is active in network.gossip
25
+ */
26
+ private subscriptionsCommittee = new SubnetMap();
27
+
28
+ constructor(
29
+ private readonly config: BeaconConfig,
30
+ private readonly clock: IClock,
31
+ private readonly gossip: GossipSubscriber,
32
+ private readonly metadata: MetadataController,
33
+ private readonly logger: Logger,
34
+ private readonly metrics: NetworkCoreMetrics | null,
35
+ private readonly opts?: SubnetsServiceOpts
36
+ ) {
37
+ if (metrics) {
38
+ metrics.syncnetsService.subscriptionsCommittee.addCollect(() => this.onScrapeLodestarMetrics(metrics));
39
+ }
40
+
41
+ this.clock.on(ClockEvent.epoch, this.onEpoch);
42
+ }
43
+
44
+ close(): void {
45
+ this.clock.off(ClockEvent.epoch, this.onEpoch);
46
+ }
47
+
48
+ /**
49
+ * Get all active subnets for the hearbeat.
50
+ */
51
+ getActiveSubnets(): RequestedSubnet[] {
52
+ return this.subscriptionsCommittee.getActiveTtl(this.clock.currentSlot);
53
+ }
54
+
55
+ /**
56
+ * Called from the API when validator is a part of a committee.
57
+ */
58
+ addCommitteeSubscriptions(subscriptions: CommitteeSubscription[]): void {
59
+ // Trigger gossip subscription first, in batch
60
+ if (subscriptions.length > 0) {
61
+ this.subscribeToSubnets(subscriptions.map((sub) => sub.subnet));
62
+ }
63
+
64
+ // Then, register the subscriptions
65
+ for (const {subnet, slot} of subscriptions) {
66
+ this.subscriptionsCommittee.request({subnet, toSlot: slot});
67
+ }
68
+
69
+ // For syncnets regular subscriptions are persisted in the ENR
70
+ this.updateMetadata();
71
+ }
72
+
73
+ /** Call ONLY ONCE: Two epoch before the fork, re-subscribe all existing random subscriptions to the new fork */
74
+ subscribeSubnetsNextBoundary(boundary: ForkBoundary): void {
75
+ this.logger.info("Subscribing to random attnets for next fork boundary", boundary);
76
+ for (const subnet of this.subscriptionsCommittee.getAll()) {
77
+ this.gossip.subscribeTopic({type: GossipType.sync_committee, boundary, subnet});
78
+ }
79
+ }
80
+
81
+ /** Call ONLY ONCE: Two epochs after the fork, un-subscribe all subnets from the old fork */
82
+ unsubscribeSubnetsPrevBoundary(boundary: ForkBoundary): void {
83
+ this.logger.info("Unsubscribing from random attnets of previous fork boundary", boundary);
84
+ for (let subnet = 0; subnet < SYNC_COMMITTEE_SUBNET_COUNT; subnet++) {
85
+ if (!this.opts?.subscribeAllSubnets) {
86
+ this.gossip.unsubscribeTopic({type: GossipType.sync_committee, boundary, subnet});
87
+ }
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Run per epoch, clean-up operations that are not urgent
93
+ */
94
+ private onEpoch = (epoch: Epoch): void => {
95
+ try {
96
+ const slot = computeStartSlotAtEpoch(epoch);
97
+ // Unsubscribe to a committee subnet from subscriptionsCommittee.
98
+ this.unsubscribeSubnets(this.subscriptionsCommittee.getExpired(slot));
99
+ } catch (e) {
100
+ this.logger.error("Error on SyncnetsService.onEpoch", {epoch}, e as Error);
101
+ }
102
+ };
103
+
104
+ /** Update ENR */
105
+ private updateMetadata(): void {
106
+ const subnets = ssz.altair.SyncSubnets.defaultValue();
107
+ for (const subnet of this.subscriptionsCommittee.getAll()) {
108
+ subnets.set(subnet, true);
109
+ }
110
+
111
+ // Only update metadata if necessary, setting `metadata.[key]` triggers a write to disk
112
+ if (!ssz.altair.SyncSubnets.equals(subnets, this.metadata.syncnets)) {
113
+ this.metadata.syncnets = subnets;
114
+ }
115
+ }
116
+
117
+ /** Tigger a gossip subcription only if not already subscribed */
118
+ private subscribeToSubnets(subnets: number[]): void {
119
+ const boundaries = getActiveForkBoundaries(this.config, this.clock.currentEpoch);
120
+ for (const subnet of subnets) {
121
+ if (!this.subscriptionsCommittee.has(subnet)) {
122
+ for (const boundary of boundaries) {
123
+ this.gossip.subscribeTopic({type: GossipType.sync_committee, boundary, subnet});
124
+ }
125
+ this.metrics?.syncnetsService.subscribeSubnets.inc({subnet});
126
+ }
127
+ }
128
+ }
129
+
130
+ /** Trigger a gossip un-subscrition only if no-one is still subscribed */
131
+ private unsubscribeSubnets(subnets: number[]): void {
132
+ const boundaries = getActiveForkBoundaries(this.config, this.clock.currentEpoch);
133
+ for (const subnet of subnets) {
134
+ // No need to check if active in subscriptionsCommittee since we only have a single SubnetMap
135
+ if (!this.opts?.subscribeAllSubnets) {
136
+ for (const boundary of boundaries) {
137
+ this.gossip.unsubscribeTopic({type: GossipType.sync_committee, boundary, subnet});
138
+ }
139
+ this.metrics?.syncnetsService.unsubscribeSubnets.inc({subnet});
140
+ }
141
+ }
142
+ }
143
+
144
+ private onScrapeLodestarMetrics(metrics: NetworkCoreMetrics): void {
145
+ metrics.syncnetsService.subscriptionsCommittee.set(this.subscriptionsCommittee.size);
146
+ }
147
+ }
@@ -0,0 +1,63 @@
1
+ import {digest} from "@chainsafe/as-sha256";
2
+ import {
3
+ ATTESTATION_SUBNET_COUNT,
4
+ ATTESTATION_SUBNET_PREFIX_BITS,
5
+ EPOCHS_PER_SUBNET_SUBSCRIPTION,
6
+ NODE_ID_BITS,
7
+ SUBNETS_PER_NODE,
8
+ } from "@lodestar/params";
9
+ import {computeShuffledIndex} from "@lodestar/state-transition";
10
+ import {Epoch, ssz} from "@lodestar/types";
11
+ import {NodeId} from "./interface.js";
12
+
13
+ /**
14
+ * Spec https://github.com/ethereum/consensus-specs/blob/v1.4.0-alpha.3/specs/phase0/p2p-interface.md
15
+ */
16
+ export function computeSubscribedSubnet(nodeId: NodeId, epoch: Epoch): number[] {
17
+ const subnets: number[] = [];
18
+ for (let index = 0; index < SUBNETS_PER_NODE; index++) {
19
+ subnets.push(computeSubscribedSubnetByIndex(nodeId, epoch, index));
20
+ }
21
+ return subnets;
22
+ }
23
+
24
+ /**
25
+ * Spec https://github.com/ethereum/consensus-specs/blob/v1.4.0-alpha.3/specs/phase0/p2p-interface.md
26
+ */
27
+ export function computeSubscribedSubnetByIndex(nodeId: NodeId, epoch: Epoch, index: number): number {
28
+ const nodeIdPrefix = getNodeIdPrefix(nodeId);
29
+ const nodeOffset = getNodeOffset(nodeId);
30
+ const permutationSeed = digest(
31
+ ssz.UintNum64.serialize(Math.floor((epoch + nodeOffset) / EPOCHS_PER_SUBNET_SUBSCRIPTION))
32
+ );
33
+ const permutatedPrefix = computeShuffledIndex(nodeIdPrefix, 1 << ATTESTATION_SUBNET_PREFIX_BITS, permutationSeed);
34
+ return (permutatedPrefix + index) % ATTESTATION_SUBNET_COUNT;
35
+ }
36
+
37
+ /**
38
+ * Should return node_id >> (NODE_ID_BITS - int(ATTESTATION_SUBNET_PREFIX_BITS))
39
+ * Ideally we should use bigint here but since these constants are not likely to change we can use number
40
+ */
41
+ export function getNodeIdPrefix(nodeId: NodeId): number {
42
+ const totalShiftedBits = NODE_ID_BITS - ATTESTATION_SUBNET_PREFIX_BITS;
43
+ const shiftedBytes = Math.floor(totalShiftedBits / 8);
44
+ const shiftedBits = totalShiftedBits % 8;
45
+ const prefixBytes = nodeId.slice(0, nodeId.length - shiftedBytes);
46
+ const dataView = new DataView(prefixBytes.buffer, prefixBytes.byteOffset, prefixBytes.byteLength);
47
+ // only 6 bits are used for prefix so getUint8() is safe
48
+ const prefix = dataView.getUint8(0) >> shiftedBits;
49
+ return prefix;
50
+ }
51
+
52
+ /**
53
+ * Should return node_offset = node_id % EPOCHS_PER_SUBNET_SUBSCRIPTION
54
+ * This function is safe to return number because EPOCHS_PER_SUBNET_SUBSCRIPTION is 256
55
+ */
56
+ export function getNodeOffset(nodeId: NodeId): number {
57
+ // Big endian means that the least significant byte comes last
58
+ // The n % 256 is equivalent to the last byte of the node_id
59
+ const lastByte = nodeId.at(-1);
60
+ if (lastByte === undefined) throw new Error("Can not get node offset");
61
+
62
+ return lastByte;
63
+ }
@@ -0,0 +1,29 @@
1
+ import type {Connection, PeerId} from "@libp2p/interface";
2
+ import type {PeerIdStr} from "../util/peerId.js";
3
+ import type {Libp2p} from "./interface.js";
4
+
5
+ export function prettyPrintPeerId(peerId: PeerId): string {
6
+ return prettyPrintPeerIdStr(peerId.toString());
7
+ }
8
+
9
+ export function prettyPrintPeerIdStr(id: PeerIdStr): string {
10
+ return `${id.slice(0, 2)}...${id.slice(id.length - 6, id.length)}`;
11
+ }
12
+
13
+ /**
14
+ * Get the connections map from a connection manager
15
+ */
16
+ // Compat function for efficiency reasons
17
+ export function getConnectionsMap(libp2p: Libp2p): Map<string, {key: PeerId; value: Connection[]}> {
18
+ // biome-ignore lint/complexity/useLiteralKeys: access of private property
19
+ return libp2p.services.components.connectionManager.getConnectionsMap()["map"];
20
+ }
21
+
22
+ export function getConnection(libp2p: Libp2p, peerIdStr: string): Connection | undefined {
23
+ return getConnectionsMap(libp2p).get(peerIdStr)?.value[0] ?? undefined;
24
+ }
25
+
26
+ // https://github.com/ChainSafe/js-libp2p-gossipsub/blob/3475242ed254f7647798ab7f36b21909f6cb61da/src/index.ts#L2009
27
+ export function isPublishToZeroPeersError(e: Error): boolean {
28
+ return e.message.includes("PublishError.InsufficientPeers");
29
+ }