@lodestar/beacon-node 1.35.0-dev.83de5b8dea → 1.35.0-dev.8689cc3545

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 (849) hide show
  1. package/lib/api/impl/api.d.ts.map +1 -0
  2. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -0
  3. package/lib/api/impl/beacon/blocks/utils.d.ts.map +1 -0
  4. package/lib/api/impl/beacon/index.d.ts.map +1 -0
  5. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -0
  6. package/lib/api/impl/beacon/rewards/index.d.ts.map +1 -0
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -0
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -0
  9. package/lib/api/impl/config/constants.d.ts.map +1 -0
  10. package/lib/api/impl/config/index.d.ts.map +1 -0
  11. package/lib/api/impl/debug/index.d.ts.map +1 -0
  12. package/lib/api/impl/errors.d.ts.map +1 -0
  13. package/lib/api/impl/events/index.d.ts.map +1 -0
  14. package/lib/api/impl/index.d.ts.map +1 -0
  15. package/lib/api/impl/lightclient/index.d.ts.map +1 -0
  16. package/lib/api/impl/lodestar/index.d.ts.map +1 -0
  17. package/lib/api/impl/node/index.d.ts.map +1 -0
  18. package/lib/api/impl/node/utils.d.ts.map +1 -0
  19. package/lib/api/impl/proof/index.d.ts.map +1 -0
  20. package/lib/api/impl/types.d.ts.map +1 -0
  21. package/lib/api/impl/utils.d.ts.map +1 -0
  22. package/lib/api/impl/validator/index.d.ts.map +1 -0
  23. package/lib/api/impl/validator/utils.d.ts.map +1 -0
  24. package/lib/api/index.d.ts.map +1 -0
  25. package/lib/api/options.d.ts.map +1 -0
  26. package/lib/api/rest/activeSockets.d.ts.map +1 -0
  27. package/lib/api/rest/base.d.ts.map +1 -0
  28. package/lib/api/rest/index.d.ts.map +1 -0
  29. package/lib/api/rest/swaggerUI.d.ts.map +1 -0
  30. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +1 -0
  31. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -0
  32. package/lib/chain/GetBlobsTracker.d.ts.map +1 -0
  33. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -0
  34. package/lib/chain/archiveStore/constants.d.ts.map +1 -0
  35. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -0
  36. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -0
  37. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -0
  38. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -0
  39. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +1 -0
  40. package/lib/chain/archiveStore/index.d.ts.map +1 -0
  41. package/lib/chain/archiveStore/interface.d.ts.map +1 -0
  42. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -0
  43. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -0
  44. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -0
  45. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +1 -0
  46. package/lib/chain/balancesCache.d.ts.map +1 -0
  47. package/lib/chain/beaconProposerCache.d.ts.map +1 -0
  48. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -0
  49. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -0
  50. package/lib/chain/blocks/blockInput/index.d.ts.map +1 -0
  51. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -0
  52. package/lib/chain/blocks/blockInput/utils.d.ts.map +1 -0
  53. package/lib/chain/blocks/importBlock.d.ts.map +1 -0
  54. package/lib/chain/blocks/index.d.ts.map +1 -0
  55. package/lib/chain/blocks/types.d.ts.map +1 -0
  56. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +1 -0
  57. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -0
  58. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -0
  59. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +1 -0
  60. package/lib/chain/blocks/utils/ownBanner.d.ts.map +1 -0
  61. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +1 -0
  62. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +1 -0
  63. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -0
  64. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -0
  65. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -0
  66. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -0
  67. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -0
  68. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -0
  69. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -0
  70. package/lib/chain/bls/index.d.ts.map +1 -0
  71. package/lib/chain/bls/interface.d.ts.map +1 -0
  72. package/lib/chain/bls/maybeBatch.d.ts.map +1 -0
  73. package/lib/chain/bls/multithread/index.d.ts.map +1 -0
  74. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -0
  75. package/lib/chain/bls/multithread/poolSize.d.ts.map +1 -0
  76. package/lib/chain/bls/multithread/types.d.ts.map +1 -0
  77. package/lib/chain/bls/multithread/utils.d.ts.map +1 -0
  78. package/lib/chain/bls/multithread/worker.d.ts.map +1 -0
  79. package/lib/chain/bls/singleThread.d.ts.map +1 -0
  80. package/lib/chain/bls/utils.d.ts.map +1 -0
  81. package/lib/chain/chain.d.ts.map +1 -0
  82. package/lib/chain/emitter.d.ts.map +1 -0
  83. package/lib/chain/errors/attestationError.d.ts.map +1 -0
  84. package/lib/chain/errors/attesterSlashingError.d.ts.map +1 -0
  85. package/lib/chain/errors/blobSidecarError.d.ts.map +1 -0
  86. package/lib/chain/errors/blockError.d.ts.map +1 -0
  87. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +1 -0
  88. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -0
  89. package/lib/chain/errors/gossipValidation.d.ts.map +1 -0
  90. package/lib/chain/errors/index.d.ts.map +1 -0
  91. package/lib/chain/errors/lightClientError.d.ts.map +1 -0
  92. package/lib/chain/errors/proposerSlashingError.d.ts.map +1 -0
  93. package/lib/chain/errors/syncCommitteeError.d.ts.map +1 -0
  94. package/lib/chain/errors/voluntaryExitError.d.ts.map +1 -0
  95. package/lib/chain/forkChoice/index.d.ts.map +1 -0
  96. package/lib/chain/genesis/genesis.d.ts.map +1 -0
  97. package/lib/chain/genesis/interface.d.ts.map +1 -0
  98. package/lib/chain/index.d.ts.map +1 -0
  99. package/lib/chain/initState.d.ts.map +1 -0
  100. package/lib/chain/interface.d.ts.map +1 -0
  101. package/lib/chain/lightClient/index.d.ts.map +1 -0
  102. package/lib/chain/lightClient/proofs.d.ts.map +1 -0
  103. package/lib/chain/lightClient/types.d.ts.map +1 -0
  104. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -0
  105. package/lib/chain/opPools/attestationPool.d.ts.map +1 -0
  106. package/lib/chain/opPools/index.d.ts.map +1 -0
  107. package/lib/chain/opPools/opPool.d.ts.map +1 -0
  108. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -0
  109. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -0
  110. package/lib/chain/opPools/types.d.ts.map +1 -0
  111. package/lib/chain/opPools/utils.d.ts.map +1 -0
  112. package/lib/chain/options.d.ts.map +1 -0
  113. package/lib/chain/prepareNextSlot.d.ts.map +1 -0
  114. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -0
  115. package/lib/chain/produceBlock/index.d.ts.map +1 -0
  116. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -0
  117. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +1 -0
  118. package/lib/chain/regen/errors.d.ts.map +1 -0
  119. package/lib/chain/regen/index.d.ts.map +1 -0
  120. package/lib/chain/regen/interface.d.ts.map +1 -0
  121. package/lib/chain/regen/queued.d.ts.map +1 -0
  122. package/lib/chain/regen/regen.d.ts.map +1 -0
  123. package/lib/chain/reprocess.d.ts.map +1 -0
  124. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -0
  125. package/lib/chain/rewards/blockRewards.d.ts.map +1 -0
  126. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -0
  127. package/lib/chain/seenCache/index.d.ts.map +1 -0
  128. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +1 -0
  129. package/lib/chain/seenCache/seenAttestationData.d.ts.map +1 -0
  130. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -0
  131. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +1 -0
  132. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -0
  133. package/lib/chain/seenCache/seenCommittee.d.ts.map +1 -0
  134. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +1 -0
  135. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -0
  136. package/lib/chain/serializeState.d.ts.map +1 -0
  137. package/lib/chain/shufflingCache.d.ts.map +1 -0
  138. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +1 -0
  139. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -0
  140. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -0
  141. package/lib/chain/stateCache/datastore/index.d.ts.map +1 -0
  142. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -0
  143. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -0
  144. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +1 -0
  145. package/lib/chain/stateCache/index.d.ts.map +1 -0
  146. package/lib/chain/stateCache/mapMetrics.d.ts.map +1 -0
  147. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -0
  148. package/lib/chain/stateCache/types.d.ts.map +1 -0
  149. package/lib/chain/validation/aggregateAndProof.d.ts.map +1 -0
  150. package/lib/chain/validation/attestation.d.ts.map +1 -0
  151. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -0
  152. package/lib/chain/validation/blobSidecar.d.ts.map +1 -0
  153. package/lib/chain/validation/block.d.ts.map +1 -0
  154. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -0
  155. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -0
  156. package/lib/chain/validation/index.d.ts.map +1 -0
  157. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +1 -0
  158. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +1 -0
  159. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -0
  160. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -0
  161. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -0
  162. package/lib/chain/validation/signatureSets/index.d.ts.map +1 -0
  163. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -0
  164. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -0
  165. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -0
  166. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -0
  167. package/lib/chain/validation/syncCommittee.d.ts.map +1 -0
  168. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -0
  169. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -0
  170. package/lib/chain/validatorMonitor.d.ts.map +1 -0
  171. package/lib/constants/constants.d.ts.map +1 -0
  172. package/lib/constants/index.d.ts.map +1 -0
  173. package/lib/constants/network.d.ts.map +1 -0
  174. package/lib/db/beacon.d.ts.map +1 -0
  175. package/lib/db/buckets.d.ts.map +1 -0
  176. package/lib/db/index.d.ts.map +1 -0
  177. package/lib/db/interface.d.ts.map +1 -0
  178. package/lib/db/options.d.ts.map +1 -0
  179. package/lib/db/repositories/attesterSlashing.d.ts.map +1 -0
  180. package/lib/db/repositories/backfilledRanges.d.ts.map +1 -0
  181. package/lib/db/repositories/blobSidecars.d.ts.map +1 -0
  182. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +1 -0
  183. package/lib/db/repositories/block.d.ts.map +1 -0
  184. package/lib/db/repositories/blockArchive.d.ts.map +1 -0
  185. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -0
  186. package/lib/db/repositories/blsToExecutionChange.d.ts.map +1 -0
  187. package/lib/db/repositories/checkpointState.d.ts.map +1 -0
  188. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -0
  189. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -0
  190. package/lib/db/repositories/depositDataRoot.d.ts.map +1 -0
  191. package/lib/db/repositories/depositEvent.d.ts.map +1 -0
  192. package/lib/db/repositories/eth1Data.d.ts.map +1 -0
  193. package/lib/db/repositories/index.d.ts.map +1 -0
  194. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +1 -0
  195. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +1 -0
  196. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +1 -0
  197. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +1 -0
  198. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -0
  199. package/lib/db/repositories/stateArchive.d.ts.map +1 -0
  200. package/lib/db/repositories/stateArchiveIndex.d.ts.map +1 -0
  201. package/lib/db/repositories/voluntaryExit.d.ts.map +1 -0
  202. package/lib/db/single/index.d.ts.map +1 -0
  203. package/lib/db/single/preGenesisState.d.ts.map +1 -0
  204. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +1 -0
  205. package/lib/eth1/errors.d.ts.map +1 -0
  206. package/lib/eth1/eth1DataCache.d.ts.map +1 -0
  207. package/lib/eth1/eth1DepositDataTracker.d.ts.map +1 -0
  208. package/lib/eth1/eth1DepositsCache.d.ts.map +1 -0
  209. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +1 -0
  210. package/lib/eth1/index.d.ts.map +1 -0
  211. package/lib/eth1/interface.d.ts.map +1 -0
  212. package/lib/eth1/options.d.ts.map +1 -0
  213. package/lib/eth1/provider/eth1Provider.d.ts.map +1 -0
  214. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +1 -0
  215. package/lib/eth1/provider/jwt.d.ts.map +1 -0
  216. package/lib/eth1/provider/utils.d.ts.map +1 -0
  217. package/lib/eth1/stream.d.ts.map +1 -0
  218. package/lib/eth1/utils/depositContract.d.ts.map +1 -0
  219. package/lib/eth1/utils/deposits.d.ts.map +1 -0
  220. package/lib/eth1/utils/eth1Data.d.ts.map +1 -0
  221. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +1 -0
  222. package/lib/eth1/utils/eth1Vote.d.ts.map +1 -0
  223. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +1 -0
  224. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +1 -0
  225. package/lib/execution/builder/cache.d.ts.map +1 -0
  226. package/lib/execution/builder/http.d.ts.map +1 -0
  227. package/lib/execution/builder/index.d.ts.map +1 -0
  228. package/lib/execution/builder/interface.d.ts.map +1 -0
  229. package/lib/execution/builder/utils.d.ts.map +1 -0
  230. package/lib/execution/engine/disabled.d.ts.map +1 -0
  231. package/lib/execution/engine/http.d.ts.map +1 -0
  232. package/lib/execution/engine/index.d.ts.map +1 -0
  233. package/lib/execution/engine/interface.d.ts.map +1 -0
  234. package/lib/execution/engine/mock.d.ts.map +1 -0
  235. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -0
  236. package/lib/execution/engine/types.d.ts.map +1 -0
  237. package/lib/execution/engine/utils.d.ts.map +1 -0
  238. package/lib/execution/index.d.ts.map +1 -0
  239. package/lib/index.d.ts.map +1 -0
  240. package/lib/metrics/index.d.ts.map +1 -0
  241. package/lib/metrics/metrics/beacon.d.ts.map +1 -0
  242. package/lib/metrics/metrics/lodestar.d.ts.map +1 -0
  243. package/lib/metrics/metrics.d.ts.map +1 -0
  244. package/lib/metrics/nodeJsMetrics.d.ts.map +1 -0
  245. package/lib/metrics/options.d.ts.map +1 -0
  246. package/lib/metrics/server/http.d.ts.map +1 -0
  247. package/lib/metrics/server/index.d.ts.map +1 -0
  248. package/lib/metrics/utils/avgMinMax.d.ts.map +1 -0
  249. package/lib/metrics/utils/gauge.d.ts.map +1 -0
  250. package/lib/metrics/utils/registryMetricCreator.d.ts.map +1 -0
  251. package/lib/monitoring/clientStats.d.ts.map +1 -0
  252. package/lib/monitoring/index.d.ts.map +1 -0
  253. package/lib/monitoring/options.d.ts.map +1 -0
  254. package/lib/monitoring/properties.d.ts.map +1 -0
  255. package/lib/monitoring/service.d.ts.map +1 -0
  256. package/lib/monitoring/system.d.ts.map +1 -0
  257. package/lib/monitoring/types.d.ts.map +1 -0
  258. package/lib/network/core/events.d.ts.map +1 -0
  259. package/lib/network/core/index.d.ts.map +1 -0
  260. package/lib/network/core/metrics.d.ts.map +1 -0
  261. package/lib/network/core/networkCore.d.ts.map +1 -0
  262. package/lib/network/core/networkCoreWorker.d.ts.map +1 -0
  263. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -0
  264. package/lib/network/core/types.d.ts.map +1 -0
  265. package/lib/network/discv5/index.d.ts.map +1 -0
  266. package/lib/network/discv5/types.d.ts.map +1 -0
  267. package/lib/network/discv5/utils.d.ts.map +1 -0
  268. package/lib/network/discv5/worker.d.ts.map +1 -0
  269. package/lib/network/events.d.ts.map +1 -0
  270. package/lib/network/forks.d.ts.map +1 -0
  271. package/lib/network/gossip/constants.d.ts.map +1 -0
  272. package/lib/network/gossip/encoding.d.ts.map +1 -0
  273. package/lib/network/gossip/errors.d.ts.map +1 -0
  274. package/lib/network/gossip/gossipsub.d.ts.map +1 -0
  275. package/lib/network/gossip/index.d.ts.map +1 -0
  276. package/lib/network/gossip/interface.d.ts.map +1 -0
  277. package/lib/network/gossip/metrics.d.ts.map +1 -0
  278. package/lib/network/gossip/scoringParameters.d.ts.map +1 -0
  279. package/lib/network/gossip/topic.d.ts.map +1 -0
  280. package/lib/network/index.d.ts.map +1 -0
  281. package/lib/network/interface.d.ts.map +1 -0
  282. package/lib/network/libp2p/error.d.ts.map +1 -0
  283. package/lib/network/libp2p/index.d.ts.map +1 -0
  284. package/lib/network/metadata.d.ts.map +1 -0
  285. package/lib/network/network.d.ts.map +1 -0
  286. package/lib/network/networkConfig.d.ts.map +1 -0
  287. package/lib/network/options.d.ts.map +1 -0
  288. package/lib/network/peers/client.d.ts.map +1 -0
  289. package/lib/network/peers/datastore.d.ts.map +1 -0
  290. package/lib/network/peers/discover.d.ts.map +1 -0
  291. package/lib/network/peers/index.d.ts.map +1 -0
  292. package/lib/network/peers/peerManager.d.ts.map +1 -0
  293. package/lib/network/peers/peersData.d.ts.map +1 -0
  294. package/lib/network/peers/score/constants.d.ts.map +1 -0
  295. package/lib/network/peers/score/index.d.ts.map +1 -0
  296. package/lib/network/peers/score/interface.d.ts.map +1 -0
  297. package/lib/network/peers/score/score.d.ts.map +1 -0
  298. package/lib/network/peers/score/store.d.ts.map +1 -0
  299. package/lib/network/peers/score/utils.d.ts.map +1 -0
  300. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -0
  301. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -0
  302. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +1 -0
  303. package/lib/network/peers/utils/index.d.ts.map +1 -0
  304. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -0
  305. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -0
  306. package/lib/network/processor/aggregatorTracker.d.ts.map +1 -0
  307. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -0
  308. package/lib/network/processor/gossipHandlers.d.ts.map +1 -0
  309. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -0
  310. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -0
  311. package/lib/network/processor/gossipQueues/linear.d.ts.map +1 -0
  312. package/lib/network/processor/gossipQueues/types.d.ts.map +1 -0
  313. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -0
  314. package/lib/network/processor/index.d.ts.map +1 -0
  315. package/lib/network/processor/types.d.ts.map +1 -0
  316. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -0
  317. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -0
  318. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -0
  319. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -0
  320. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -0
  321. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -0
  322. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -0
  323. package/lib/network/reqresp/handlers/index.d.ts.map +1 -0
  324. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +1 -0
  325. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +1 -0
  326. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +1 -0
  327. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +1 -0
  328. package/lib/network/reqresp/index.d.ts.map +1 -0
  329. package/lib/network/reqresp/interface.d.ts.map +1 -0
  330. package/lib/network/reqresp/protocols.d.ts.map +1 -0
  331. package/lib/network/reqresp/rateLimit.d.ts.map +1 -0
  332. package/lib/network/reqresp/score.d.ts.map +1 -0
  333. package/lib/network/reqresp/types.d.ts.map +1 -0
  334. package/lib/network/reqresp/utils/collect.d.ts.map +1 -0
  335. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +1 -0
  336. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -0
  337. package/lib/network/statusCache.d.ts.map +1 -0
  338. package/lib/network/subnets/attnetsService.d.ts.map +1 -0
  339. package/lib/network/subnets/index.d.ts.map +1 -0
  340. package/lib/network/subnets/interface.d.ts.map +1 -0
  341. package/lib/network/subnets/syncnetsService.d.ts.map +1 -0
  342. package/lib/network/subnets/util.d.ts.map +1 -0
  343. package/lib/network/util.d.ts.map +1 -0
  344. package/lib/node/index.d.ts.map +1 -0
  345. package/lib/node/nodejs.d.ts.map +1 -0
  346. package/lib/node/notifier.d.ts.map +1 -0
  347. package/lib/node/options.d.ts.map +1 -0
  348. package/lib/node/utils/interop/deposits.d.ts.map +1 -0
  349. package/lib/node/utils/interop/state.d.ts.map +1 -0
  350. package/lib/node/utils/lightclient.d.ts.map +1 -0
  351. package/lib/node/utils/state.d.ts.map +1 -0
  352. package/lib/sync/backfill/backfill.d.ts.map +1 -0
  353. package/lib/sync/backfill/errors.d.ts.map +1 -0
  354. package/lib/sync/backfill/index.d.ts.map +1 -0
  355. package/lib/sync/backfill/verify.d.ts.map +1 -0
  356. package/lib/sync/constants.d.ts.map +1 -0
  357. package/lib/sync/index.d.ts.map +1 -0
  358. package/lib/sync/interface.d.ts.map +1 -0
  359. package/lib/sync/options.d.ts.map +1 -0
  360. package/lib/sync/range/batch.d.ts.map +1 -0
  361. package/lib/sync/range/chain.d.ts.map +1 -0
  362. package/lib/sync/range/range.d.ts.map +1 -0
  363. package/lib/sync/range/utils/batches.d.ts.map +1 -0
  364. package/lib/sync/range/utils/chainTarget.d.ts.map +1 -0
  365. package/lib/sync/range/utils/hashBlocks.d.ts.map +1 -0
  366. package/lib/sync/range/utils/index.d.ts.map +1 -0
  367. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -0
  368. package/lib/sync/range/utils/updateChains.d.ts.map +1 -0
  369. package/lib/sync/sync.d.ts.map +1 -0
  370. package/lib/sync/types.d.ts.map +1 -0
  371. package/lib/sync/unknownBlock.d.ts.map +1 -0
  372. package/lib/sync/utils/downloadByRange.d.ts.map +1 -0
  373. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -0
  374. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -0
  375. package/lib/sync/utils/remoteSyncType.d.ts.map +1 -0
  376. package/lib/util/address.d.ts.map +1 -0
  377. package/lib/util/array.d.ts.map +1 -0
  378. package/lib/util/asyncIterableToEvents.d.ts.map +1 -0
  379. package/lib/util/binarySearch.d.ts.map +1 -0
  380. package/lib/util/bitArray.d.ts.map +1 -0
  381. package/lib/util/blobs.d.ts.map +1 -0
  382. package/lib/util/blobs.js +5 -3
  383. package/lib/util/blobs.js.map +1 -1
  384. package/lib/util/bufferPool.d.ts.map +1 -0
  385. package/lib/util/bytes.d.ts.map +1 -0
  386. package/lib/util/chunkify.d.ts.map +1 -0
  387. package/lib/util/clock.d.ts.map +1 -0
  388. package/lib/util/dataColumns.d.ts.map +1 -0
  389. package/lib/util/dependentRoot.d.ts.map +1 -0
  390. package/lib/util/enum.d.ts.map +1 -0
  391. package/lib/util/error.d.ts.map +1 -0
  392. package/lib/util/eventLoop.d.ts.map +1 -0
  393. package/lib/util/execution.d.ts.map +1 -0
  394. package/lib/util/file.d.ts.map +1 -0
  395. package/lib/util/forkChoice.d.ts.map +1 -0
  396. package/lib/util/forkName.d.ts.map +1 -0
  397. package/lib/util/graffiti.d.ts.map +1 -0
  398. package/lib/util/hex.d.ts.map +1 -0
  399. package/lib/util/index.d.ts.map +1 -0
  400. package/lib/util/ip.d.ts.map +1 -0
  401. package/lib/util/itTrigger.d.ts.map +1 -0
  402. package/lib/util/kzg.d.ts.map +1 -0
  403. package/lib/util/map.d.ts.map +1 -0
  404. package/lib/util/metadata.d.ts.map +1 -0
  405. package/lib/util/multifork.d.ts.map +1 -0
  406. package/lib/util/numpy.d.ts.map +1 -0
  407. package/lib/util/peerId.d.ts.map +1 -0
  408. package/lib/util/profile.d.ts.map +1 -0
  409. package/lib/util/promises.d.ts.map +1 -0
  410. package/lib/util/queue/errors.d.ts.map +1 -0
  411. package/lib/util/queue/fnQueue.d.ts.map +1 -0
  412. package/lib/util/queue/index.d.ts.map +1 -0
  413. package/lib/util/queue/itemQueue.d.ts.map +1 -0
  414. package/lib/util/queue/options.d.ts.map +1 -0
  415. package/lib/util/serializedCache.d.ts.map +1 -0
  416. package/lib/util/set.d.ts.map +1 -0
  417. package/lib/util/shuffle.d.ts.map +1 -0
  418. package/lib/util/sortBy.d.ts.map +1 -0
  419. package/lib/util/sszBytes.d.ts.map +1 -0
  420. package/lib/util/strictEvents.d.ts.map +1 -0
  421. package/lib/util/time.d.ts.map +1 -0
  422. package/lib/util/timeSeries.d.ts.map +1 -0
  423. package/lib/util/types.d.ts.map +1 -0
  424. package/lib/util/workerEvents.d.ts.map +1 -0
  425. package/lib/util/wrapError.d.ts.map +1 -0
  426. package/package.json +17 -19
  427. package/src/api/impl/api.ts +26 -0
  428. package/src/api/impl/beacon/blocks/index.ts +744 -0
  429. package/src/api/impl/beacon/blocks/utils.ts +75 -0
  430. package/src/api/impl/beacon/index.ts +35 -0
  431. package/src/api/impl/beacon/pool/index.ts +314 -0
  432. package/src/api/impl/beacon/rewards/index.ts +30 -0
  433. package/src/api/impl/beacon/state/index.ts +406 -0
  434. package/src/api/impl/beacon/state/utils.ts +189 -0
  435. package/src/api/impl/config/constants.ts +127 -0
  436. package/src/api/impl/config/index.ts +59 -0
  437. package/src/api/impl/debug/index.ts +131 -0
  438. package/src/api/impl/errors.ts +50 -0
  439. package/src/api/impl/events/index.ts +33 -0
  440. package/src/api/impl/index.ts +6 -0
  441. package/src/api/impl/lightclient/index.ts +64 -0
  442. package/src/api/impl/lodestar/index.ts +257 -0
  443. package/src/api/impl/node/index.ts +88 -0
  444. package/src/api/impl/node/utils.ts +51 -0
  445. package/src/api/impl/proof/index.ts +60 -0
  446. package/src/api/impl/types.ts +17 -0
  447. package/src/api/impl/utils.ts +25 -0
  448. package/src/api/impl/validator/index.ts +1538 -0
  449. package/src/api/impl/validator/utils.ts +85 -0
  450. package/src/api/index.ts +2 -0
  451. package/src/api/options.ts +16 -0
  452. package/src/api/rest/activeSockets.ts +109 -0
  453. package/src/api/rest/base.ts +216 -0
  454. package/src/api/rest/index.ts +63 -0
  455. package/src/api/rest/swaggerUI.ts +80 -0
  456. package/src/bun-wrappers/prometheus-gc-stats.ts +7 -0
  457. package/src/chain/ColumnReconstructionTracker.ts +90 -0
  458. package/src/chain/GetBlobsTracker.ts +115 -0
  459. package/src/chain/archiveStore/archiveStore.ts +222 -0
  460. package/src/chain/archiveStore/constants.ts +5 -0
  461. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +116 -0
  462. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +68 -0
  463. package/src/chain/archiveStore/historicalState/metrics.ts +214 -0
  464. package/src/chain/archiveStore/historicalState/types.ts +41 -0
  465. package/src/chain/archiveStore/historicalState/worker.ts +77 -0
  466. package/src/chain/archiveStore/index.ts +3 -0
  467. package/src/chain/archiveStore/interface.ts +75 -0
  468. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +138 -0
  469. package/src/chain/archiveStore/utils/archiveBlocks.ts +437 -0
  470. package/src/chain/archiveStore/utils/pruneHistory.ts +56 -0
  471. package/src/chain/archiveStore/utils/updateBackfillRange.ts +50 -0
  472. package/src/chain/balancesCache.ts +52 -0
  473. package/src/chain/beaconProposerCache.ts +43 -0
  474. package/src/chain/blocks/blockInput/blockInput.ts +851 -0
  475. package/src/chain/blocks/blockInput/errors.ts +48 -0
  476. package/src/chain/blocks/blockInput/index.ts +4 -0
  477. package/src/chain/blocks/blockInput/types.ts +145 -0
  478. package/src/chain/blocks/blockInput/utils.ts +21 -0
  479. package/src/chain/blocks/importBlock.ts +603 -0
  480. package/src/chain/blocks/index.ts +179 -0
  481. package/src/chain/blocks/types.ts +101 -0
  482. package/src/chain/blocks/utils/blowfishBanner.ts +28 -0
  483. package/src/chain/blocks/utils/chainSegment.ts +29 -0
  484. package/src/chain/blocks/utils/checkpoint.ts +25 -0
  485. package/src/chain/blocks/utils/giraffeBanner.ts +30 -0
  486. package/src/chain/blocks/utils/ownBanner.ts +20 -0
  487. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +43 -0
  488. package/src/chain/blocks/utils/zebraBanner.ts +45 -0
  489. package/src/chain/blocks/verifyBlock.ts +242 -0
  490. package/src/chain/blocks/verifyBlocksDataAvailability.ts +34 -0
  491. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +438 -0
  492. package/src/chain/blocks/verifyBlocksSanityChecks.ts +129 -0
  493. package/src/chain/blocks/verifyBlocksSignatures.ts +105 -0
  494. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +114 -0
  495. package/src/chain/blocks/writeBlockInputToDb.ts +128 -0
  496. package/src/chain/bls/index.ts +4 -0
  497. package/src/chain/bls/interface.ts +68 -0
  498. package/src/chain/bls/maybeBatch.ts +45 -0
  499. package/src/chain/bls/multithread/index.ts +582 -0
  500. package/src/chain/bls/multithread/jobItem.ts +119 -0
  501. package/src/chain/bls/multithread/poolSize.ts +16 -0
  502. package/src/chain/bls/multithread/types.ts +38 -0
  503. package/src/chain/bls/multithread/utils.ts +19 -0
  504. package/src/chain/bls/multithread/worker.ts +114 -0
  505. package/src/chain/bls/singleThread.ts +87 -0
  506. package/src/chain/bls/utils.ts +30 -0
  507. package/src/chain/chain.ts +1365 -0
  508. package/src/chain/emitter.ts +113 -0
  509. package/src/chain/errors/attestationError.ts +194 -0
  510. package/src/chain/errors/attesterSlashingError.ts +11 -0
  511. package/src/chain/errors/blobSidecarError.ts +60 -0
  512. package/src/chain/errors/blockError.ts +166 -0
  513. package/src/chain/errors/blsToExecutionChangeError.ts +13 -0
  514. package/src/chain/errors/dataColumnSidecarError.ts +80 -0
  515. package/src/chain/errors/gossipValidation.ts +20 -0
  516. package/src/chain/errors/index.ts +10 -0
  517. package/src/chain/errors/lightClientError.ts +30 -0
  518. package/src/chain/errors/proposerSlashingError.ts +11 -0
  519. package/src/chain/errors/syncCommitteeError.ts +36 -0
  520. package/src/chain/errors/voluntaryExitError.ts +13 -0
  521. package/src/chain/forkChoice/index.ts +112 -0
  522. package/src/chain/genesis/genesis.ts +190 -0
  523. package/src/chain/genesis/interface.ts +14 -0
  524. package/src/chain/index.ts +6 -0
  525. package/src/chain/initState.ts +221 -0
  526. package/src/chain/interface.ts +280 -0
  527. package/src/chain/lightClient/index.ts +764 -0
  528. package/src/chain/lightClient/proofs.ts +85 -0
  529. package/src/chain/lightClient/types.ts +33 -0
  530. package/src/chain/opPools/aggregatedAttestationPool.ts +1063 -0
  531. package/src/chain/opPools/attestationPool.ts +283 -0
  532. package/src/chain/opPools/index.ts +5 -0
  533. package/src/chain/opPools/opPool.ts +462 -0
  534. package/src/chain/opPools/syncCommitteeMessagePool.ts +167 -0
  535. package/src/chain/opPools/syncContributionAndProofPool.ts +240 -0
  536. package/src/chain/opPools/types.ts +35 -0
  537. package/src/chain/opPools/utils.ts +65 -0
  538. package/src/chain/options.ts +138 -0
  539. package/src/chain/prepareNextSlot.ts +277 -0
  540. package/src/chain/produceBlock/computeNewStateRoot.ts +55 -0
  541. package/src/chain/produceBlock/index.ts +2 -0
  542. package/src/chain/produceBlock/produceBlockBody.ts +797 -0
  543. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +54 -0
  544. package/src/chain/regen/errors.ts +30 -0
  545. package/src/chain/regen/index.ts +4 -0
  546. package/src/chain/regen/interface.ts +93 -0
  547. package/src/chain/regen/queued.ts +317 -0
  548. package/src/chain/regen/regen.ts +424 -0
  549. package/src/chain/reprocess.ts +161 -0
  550. package/src/chain/rewards/attestationsRewards.ts +196 -0
  551. package/src/chain/rewards/blockRewards.ts +150 -0
  552. package/src/chain/rewards/syncCommitteeRewards.ts +58 -0
  553. package/src/chain/seenCache/index.ts +5 -0
  554. package/src/chain/seenCache/seenAggregateAndProof.ts +120 -0
  555. package/src/chain/seenCache/seenAttestationData.ts +145 -0
  556. package/src/chain/seenCache/seenAttesters.ts +58 -0
  557. package/src/chain/seenCache/seenBlockAttesters.ts +18 -0
  558. package/src/chain/seenCache/seenBlockProposers.ts +48 -0
  559. package/src/chain/seenCache/seenCommittee.ts +43 -0
  560. package/src/chain/seenCache/seenCommitteeContribution.ts +104 -0
  561. package/src/chain/seenCache/seenGossipBlockInput.ts +373 -0
  562. package/src/chain/serializeState.ts +32 -0
  563. package/src/chain/shufflingCache.ts +238 -0
  564. package/src/chain/stateCache/blockStateCacheImpl.ts +150 -0
  565. package/src/chain/stateCache/datastore/db.ts +36 -0
  566. package/src/chain/stateCache/datastore/file.ts +53 -0
  567. package/src/chain/stateCache/datastore/index.ts +2 -0
  568. package/src/chain/stateCache/datastore/types.ts +13 -0
  569. package/src/chain/stateCache/fifoBlockStateCache.ts +208 -0
  570. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +198 -0
  571. package/src/chain/stateCache/index.ts +3 -0
  572. package/src/chain/stateCache/mapMetrics.ts +52 -0
  573. package/src/chain/stateCache/persistentCheckpointsCache.ts +835 -0
  574. package/src/chain/stateCache/types.ts +86 -0
  575. package/src/chain/validation/aggregateAndProof.ts +258 -0
  576. package/src/chain/validation/attestation.ts +885 -0
  577. package/src/chain/validation/attesterSlashing.ts +61 -0
  578. package/src/chain/validation/blobSidecar.ts +301 -0
  579. package/src/chain/validation/block.ts +188 -0
  580. package/src/chain/validation/blsToExecutionChange.ts +61 -0
  581. package/src/chain/validation/dataColumnSidecar.ts +381 -0
  582. package/src/chain/validation/index.ts +9 -0
  583. package/src/chain/validation/lightClientFinalityUpdate.ts +45 -0
  584. package/src/chain/validation/lightClientOptimisticUpdate.ts +67 -0
  585. package/src/chain/validation/proposerSlashing.ts +54 -0
  586. package/src/chain/validation/signatureSets/aggregateAndProof.ts +38 -0
  587. package/src/chain/validation/signatureSets/contributionAndProof.ts +27 -0
  588. package/src/chain/validation/signatureSets/index.ts +6 -0
  589. package/src/chain/validation/signatureSets/selectionProof.ts +27 -0
  590. package/src/chain/validation/signatureSets/syncCommittee.ts +22 -0
  591. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +18 -0
  592. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +27 -0
  593. package/src/chain/validation/syncCommittee.ts +165 -0
  594. package/src/chain/validation/syncCommitteeContributionAndProof.ts +122 -0
  595. package/src/chain/validation/voluntaryExit.ts +58 -0
  596. package/src/chain/validatorMonitor.ts +1299 -0
  597. package/src/constants/constants.ts +15 -0
  598. package/src/constants/index.ts +2 -0
  599. package/src/constants/network.ts +52 -0
  600. package/src/db/beacon.ts +113 -0
  601. package/src/db/buckets.ts +80 -0
  602. package/src/db/index.ts +2 -0
  603. package/src/db/interface.ts +76 -0
  604. package/src/db/options.ts +7 -0
  605. package/src/db/repositories/attesterSlashing.ts +38 -0
  606. package/src/db/repositories/backfilledRanges.ts +29 -0
  607. package/src/db/repositories/blobSidecars.ts +37 -0
  608. package/src/db/repositories/blobSidecarsArchive.ts +28 -0
  609. package/src/db/repositories/block.ts +33 -0
  610. package/src/db/repositories/blockArchive.ts +170 -0
  611. package/src/db/repositories/blockArchiveIndex.ts +45 -0
  612. package/src/db/repositories/blsToExecutionChange.ts +16 -0
  613. package/src/db/repositories/checkpointState.ts +31 -0
  614. package/src/db/repositories/dataColumnSidecar.ts +49 -0
  615. package/src/db/repositories/dataColumnSidecarArchive.ts +56 -0
  616. package/src/db/repositories/depositDataRoot.ts +80 -0
  617. package/src/db/repositories/depositEvent.ts +32 -0
  618. package/src/db/repositories/eth1Data.ts +33 -0
  619. package/src/db/repositories/index.ts +20 -0
  620. package/src/db/repositories/lightclientBestUpdate.ts +41 -0
  621. package/src/db/repositories/lightclientCheckpointHeader.ts +32 -0
  622. package/src/db/repositories/lightclientSyncCommittee.ts +16 -0
  623. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +77 -0
  624. package/src/db/repositories/proposerSlashing.ts +15 -0
  625. package/src/db/repositories/stateArchive.ts +69 -0
  626. package/src/db/repositories/stateArchiveIndex.ts +18 -0
  627. package/src/db/repositories/voluntaryExit.ts +15 -0
  628. package/src/db/single/index.ts +2 -0
  629. package/src/db/single/preGenesisState.ts +37 -0
  630. package/src/db/single/preGenesisStateLastProcessedBlock.ts +34 -0
  631. package/src/eth1/errors.ts +40 -0
  632. package/src/eth1/eth1DataCache.ts +26 -0
  633. package/src/eth1/eth1DepositDataTracker.ts +410 -0
  634. package/src/eth1/eth1DepositsCache.ts +141 -0
  635. package/src/eth1/eth1MergeBlockTracker.ts +328 -0
  636. package/src/eth1/index.ts +157 -0
  637. package/src/eth1/interface.ts +131 -0
  638. package/src/eth1/options.ts +28 -0
  639. package/src/eth1/provider/eth1Provider.ts +229 -0
  640. package/src/eth1/provider/jsonRpcHttpClient.ts +390 -0
  641. package/src/eth1/provider/jwt.ts +36 -0
  642. package/src/eth1/provider/utils.ts +136 -0
  643. package/src/eth1/stream.ts +75 -0
  644. package/src/eth1/utils/depositContract.ts +37 -0
  645. package/src/eth1/utils/deposits.ts +70 -0
  646. package/src/eth1/utils/eth1Data.ts +100 -0
  647. package/src/eth1/utils/eth1DepositEvent.ts +12 -0
  648. package/src/eth1/utils/eth1Vote.ts +142 -0
  649. package/src/eth1/utils/groupDepositEventsByBlock.ts +19 -0
  650. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +18 -0
  651. package/src/execution/builder/cache.ts +39 -0
  652. package/src/execution/builder/http.ts +229 -0
  653. package/src/execution/builder/index.ts +27 -0
  654. package/src/execution/builder/interface.ts +49 -0
  655. package/src/execution/builder/utils.ts +19 -0
  656. package/src/execution/engine/disabled.ts +35 -0
  657. package/src/execution/engine/http.ts +644 -0
  658. package/src/execution/engine/index.ts +63 -0
  659. package/src/execution/engine/interface.ts +199 -0
  660. package/src/execution/engine/mock.ts +493 -0
  661. package/src/execution/engine/payloadIdCache.ts +54 -0
  662. package/src/execution/engine/types.ts +640 -0
  663. package/src/execution/engine/utils.ts +136 -0
  664. package/src/execution/index.ts +4 -0
  665. package/src/index.ts +20 -0
  666. package/src/metrics/index.ts +4 -0
  667. package/src/metrics/metrics/beacon.ts +390 -0
  668. package/src/metrics/metrics/lodestar.ts +1870 -0
  669. package/src/metrics/metrics.ts +43 -0
  670. package/src/metrics/nodeJsMetrics.ts +19 -0
  671. package/src/metrics/options.ts +22 -0
  672. package/src/metrics/server/http.ts +114 -0
  673. package/src/metrics/server/index.ts +1 -0
  674. package/src/metrics/utils/avgMinMax.ts +87 -0
  675. package/src/metrics/utils/gauge.ts +22 -0
  676. package/src/metrics/utils/registryMetricCreator.ts +41 -0
  677. package/src/monitoring/clientStats.ts +297 -0
  678. package/src/monitoring/index.ts +2 -0
  679. package/src/monitoring/options.ts +19 -0
  680. package/src/monitoring/properties.ts +152 -0
  681. package/src/monitoring/service.ts +235 -0
  682. package/src/monitoring/system.ts +146 -0
  683. package/src/monitoring/types.ts +21 -0
  684. package/src/network/core/events.ts +59 -0
  685. package/src/network/core/index.ts +3 -0
  686. package/src/network/core/metrics.ts +304 -0
  687. package/src/network/core/networkCore.ts +599 -0
  688. package/src/network/core/networkCoreWorker.ts +176 -0
  689. package/src/network/core/networkCoreWorkerHandler.ts +284 -0
  690. package/src/network/core/types.ts +119 -0
  691. package/src/network/discv5/index.ts +132 -0
  692. package/src/network/discv5/types.ts +74 -0
  693. package/src/network/discv5/utils.ts +50 -0
  694. package/src/network/discv5/worker.ts +137 -0
  695. package/src/network/events.ts +51 -0
  696. package/src/network/forks.ts +94 -0
  697. package/src/network/gossip/constants.ts +15 -0
  698. package/src/network/gossip/encoding.ts +111 -0
  699. package/src/network/gossip/errors.ts +7 -0
  700. package/src/network/gossip/gossipsub.ts +384 -0
  701. package/src/network/gossip/index.ts +4 -0
  702. package/src/network/gossip/interface.ts +215 -0
  703. package/src/network/gossip/metrics.ts +71 -0
  704. package/src/network/gossip/scoringParameters.ts +333 -0
  705. package/src/network/gossip/topic.ts +332 -0
  706. package/src/network/index.ts +8 -0
  707. package/src/network/interface.ts +134 -0
  708. package/src/network/libp2p/error.ts +55 -0
  709. package/src/network/libp2p/index.ts +153 -0
  710. package/src/network/metadata.ts +162 -0
  711. package/src/network/network.ts +767 -0
  712. package/src/network/networkConfig.ts +12 -0
  713. package/src/network/options.ts +70 -0
  714. package/src/network/peers/client.ts +29 -0
  715. package/src/network/peers/datastore.ts +188 -0
  716. package/src/network/peers/discover.ts +647 -0
  717. package/src/network/peers/index.ts +2 -0
  718. package/src/network/peers/peerManager.ts +899 -0
  719. package/src/network/peers/peersData.ts +65 -0
  720. package/src/network/peers/score/constants.ts +34 -0
  721. package/src/network/peers/score/index.ts +4 -0
  722. package/src/network/peers/score/interface.ts +74 -0
  723. package/src/network/peers/score/score.ts +200 -0
  724. package/src/network/peers/score/store.ts +95 -0
  725. package/src/network/peers/score/utils.ts +37 -0
  726. package/src/network/peers/utils/assertPeerRelevance.ts +99 -0
  727. package/src/network/peers/utils/enrSubnetsDeserialize.ts +27 -0
  728. package/src/network/peers/utils/getConnectedPeerIds.ts +33 -0
  729. package/src/network/peers/utils/index.ts +4 -0
  730. package/src/network/peers/utils/prioritizePeers.ts +627 -0
  731. package/src/network/peers/utils/subnetMap.ts +88 -0
  732. package/src/network/processor/aggregatorTracker.ts +38 -0
  733. package/src/network/processor/extractSlotRootFns.ts +64 -0
  734. package/src/network/processor/gossipHandlers.ts +951 -0
  735. package/src/network/processor/gossipQueues/index.ts +114 -0
  736. package/src/network/processor/gossipQueues/indexed.ts +219 -0
  737. package/src/network/processor/gossipQueues/linear.ts +162 -0
  738. package/src/network/processor/gossipQueues/types.ts +57 -0
  739. package/src/network/processor/gossipValidatorFn.ts +142 -0
  740. package/src/network/processor/index.ts +497 -0
  741. package/src/network/processor/types.ts +27 -0
  742. package/src/network/reqresp/ReqRespBeaconNode.ts +373 -0
  743. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +101 -0
  744. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +49 -0
  745. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +114 -0
  746. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +62 -0
  747. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +144 -0
  748. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +88 -0
  749. package/src/network/reqresp/handlers/index.ts +78 -0
  750. package/src/network/reqresp/handlers/lightClientBootstrap.ts +31 -0
  751. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +21 -0
  752. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +21 -0
  753. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +39 -0
  754. package/src/network/reqresp/index.ts +2 -0
  755. package/src/network/reqresp/interface.ts +45 -0
  756. package/src/network/reqresp/protocols.ts +146 -0
  757. package/src/network/reqresp/rateLimit.ts +112 -0
  758. package/src/network/reqresp/score.ts +70 -0
  759. package/src/network/reqresp/types.ts +174 -0
  760. package/src/network/reqresp/utils/collect.ts +84 -0
  761. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +57 -0
  762. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +99 -0
  763. package/src/network/statusCache.ts +17 -0
  764. package/src/network/subnets/attnetsService.ts +385 -0
  765. package/src/network/subnets/index.ts +2 -0
  766. package/src/network/subnets/interface.ts +66 -0
  767. package/src/network/subnets/syncnetsService.ts +147 -0
  768. package/src/network/subnets/util.ts +63 -0
  769. package/src/network/util.ts +29 -0
  770. package/src/node/index.ts +2 -0
  771. package/src/node/nodejs.ts +349 -0
  772. package/src/node/notifier.ts +206 -0
  773. package/src/node/options.ts +51 -0
  774. package/src/node/utils/interop/deposits.ts +53 -0
  775. package/src/node/utils/interop/state.ts +59 -0
  776. package/src/node/utils/lightclient.ts +7 -0
  777. package/src/node/utils/state.ts +37 -0
  778. package/src/sync/backfill/backfill.ts +893 -0
  779. package/src/sync/backfill/errors.ts +23 -0
  780. package/src/sync/backfill/index.ts +1 -0
  781. package/src/sync/backfill/verify.ts +58 -0
  782. package/src/sync/constants.ts +71 -0
  783. package/src/sync/index.ts +2 -0
  784. package/src/sync/interface.ts +55 -0
  785. package/src/sync/options.ts +45 -0
  786. package/src/sync/range/batch.ts +455 -0
  787. package/src/sync/range/chain.ts +715 -0
  788. package/src/sync/range/range.ts +354 -0
  789. package/src/sync/range/utils/batches.ts +119 -0
  790. package/src/sync/range/utils/chainTarget.ts +62 -0
  791. package/src/sync/range/utils/hashBlocks.ts +27 -0
  792. package/src/sync/range/utils/index.ts +5 -0
  793. package/src/sync/range/utils/peerBalancer.ts +184 -0
  794. package/src/sync/range/utils/updateChains.ts +66 -0
  795. package/src/sync/sync.ts +290 -0
  796. package/src/sync/types.ts +59 -0
  797. package/src/sync/unknownBlock.ts +862 -0
  798. package/src/sync/utils/downloadByRange.ts +808 -0
  799. package/src/sync/utils/downloadByRoot.ts +560 -0
  800. package/src/sync/utils/pendingBlocksTree.ts +97 -0
  801. package/src/sync/utils/remoteSyncType.ts +144 -0
  802. package/src/util/address.ts +3 -0
  803. package/src/util/array.ts +311 -0
  804. package/src/util/asyncIterableToEvents.ts +164 -0
  805. package/src/util/binarySearch.ts +48 -0
  806. package/src/util/bitArray.ts +84 -0
  807. package/src/util/blobs.ts +210 -0
  808. package/src/util/bufferPool.ts +95 -0
  809. package/src/util/bytes.ts +11 -0
  810. package/src/util/chunkify.ts +27 -0
  811. package/src/util/clock.ts +204 -0
  812. package/src/util/dataColumns.ts +415 -0
  813. package/src/util/dependentRoot.ts +47 -0
  814. package/src/util/enum.ts +17 -0
  815. package/src/util/error.ts +56 -0
  816. package/src/util/eventLoop.ts +22 -0
  817. package/src/util/execution.ts +223 -0
  818. package/src/util/file.ts +52 -0
  819. package/src/util/forkChoice.ts +5 -0
  820. package/src/util/forkName.ts +20 -0
  821. package/src/util/graffiti.ts +39 -0
  822. package/src/util/hex.ts +9 -0
  823. package/src/util/index.ts +2 -0
  824. package/src/util/ip.ts +6 -0
  825. package/src/util/itTrigger.ts +49 -0
  826. package/src/util/kzg.ts +3 -0
  827. package/src/util/map.ts +77 -0
  828. package/src/util/metadata.ts +22 -0
  829. package/src/util/multifork.ts +69 -0
  830. package/src/util/numpy.ts +8 -0
  831. package/src/util/peerId.ts +16 -0
  832. package/src/util/profile.ts +54 -0
  833. package/src/util/promises.ts +14 -0
  834. package/src/util/queue/errors.ts +14 -0
  835. package/src/util/queue/fnQueue.ts +16 -0
  836. package/src/util/queue/index.ts +4 -0
  837. package/src/util/queue/itemQueue.ts +128 -0
  838. package/src/util/queue/options.ts +37 -0
  839. package/src/util/serializedCache.ts +20 -0
  840. package/src/util/set.ts +62 -0
  841. package/src/util/shuffle.ts +21 -0
  842. package/src/util/sortBy.ts +19 -0
  843. package/src/util/sszBytes.ts +481 -0
  844. package/src/util/strictEvents.ts +8 -0
  845. package/src/util/time.ts +13 -0
  846. package/src/util/timeSeries.ts +118 -0
  847. package/src/util/types.ts +31 -0
  848. package/src/util/workerEvents.ts +142 -0
  849. package/src/util/wrapError.ts +27 -0
@@ -0,0 +1,462 @@
1
+ import {Id, Repository} from "@lodestar/db";
2
+ import {
3
+ BLS_WITHDRAWAL_PREFIX,
4
+ ForkName,
5
+ ForkSeq,
6
+ MAX_ATTESTER_SLASHINGS,
7
+ MAX_ATTESTER_SLASHINGS_ELECTRA,
8
+ MAX_BLS_TO_EXECUTION_CHANGES,
9
+ MAX_PROPOSER_SLASHINGS,
10
+ MAX_VOLUNTARY_EXITS,
11
+ } from "@lodestar/params";
12
+ import {
13
+ CachedBeaconStateAllForks,
14
+ computeEpochAtSlot,
15
+ computeStartSlotAtEpoch,
16
+ getAttesterSlashableIndices,
17
+ isValidVoluntaryExit,
18
+ } from "@lodestar/state-transition";
19
+ import {
20
+ AttesterSlashing,
21
+ Epoch,
22
+ SignedBeaconBlock,
23
+ ValidatorIndex,
24
+ capella,
25
+ phase0,
26
+ sszTypesFor,
27
+ } from "@lodestar/types";
28
+ import {fromHex, toHex, toRootHex} from "@lodestar/utils";
29
+ import {IBeaconDb} from "../../db/index.js";
30
+ import {Metrics} from "../../metrics/metrics.js";
31
+ import {SignedBLSToExecutionChangeVersioned} from "../../util/types.js";
32
+ import {BlockType} from "../interface.js";
33
+ import {BlockProductionStep} from "../produceBlock/produceBlockBody.js";
34
+ import {isValidBlsToExecutionChangeForBlockInclusion} from "./utils.js";
35
+
36
+ type HexRoot = string;
37
+ type AttesterSlashingCached = {
38
+ attesterSlashing: AttesterSlashing;
39
+ intersectingIndices: number[];
40
+ };
41
+
42
+ export class OpPool {
43
+ /** Map of uniqueId(AttesterSlashing) -> AttesterSlashing */
44
+ private readonly attesterSlashings = new Map<HexRoot, AttesterSlashingCached>();
45
+ /** Map of to slash validator index -> ProposerSlashing */
46
+ private readonly proposerSlashings = new Map<ValidatorIndex, phase0.ProposerSlashing>();
47
+ /** Map of to exit validator index -> SignedVoluntaryExit */
48
+ private readonly voluntaryExits = new Map<ValidatorIndex, phase0.SignedVoluntaryExit>();
49
+ /** Set of seen attester slashing indexes. No need to prune */
50
+ private readonly attesterSlashingIndexes = new Set<ValidatorIndex>();
51
+ /** Map of validator index -> SignedBLSToExecutionChange */
52
+ private readonly blsToExecutionChanges = new Map<ValidatorIndex, SignedBLSToExecutionChangeVersioned>();
53
+
54
+ // Getters for metrics
55
+
56
+ get attesterSlashingsSize(): number {
57
+ return this.attesterSlashings.size;
58
+ }
59
+ get proposerSlashingsSize(): number {
60
+ return this.proposerSlashings.size;
61
+ }
62
+ get voluntaryExitsSize(): number {
63
+ return this.voluntaryExits.size;
64
+ }
65
+ get blsToExecutionChangeSize(): number {
66
+ return this.blsToExecutionChanges.size;
67
+ }
68
+
69
+ async fromPersisted(db: IBeaconDb): Promise<void> {
70
+ const [attesterSlashings, proposerSlashings, voluntaryExits, blsToExecutionChanges] = await Promise.all([
71
+ db.attesterSlashing.entries(),
72
+ db.proposerSlashing.values(),
73
+ db.voluntaryExit.values(),
74
+ db.blsToExecutionChange.values(),
75
+ ]);
76
+
77
+ for (const attesterSlashing of attesterSlashings) {
78
+ this.insertAttesterSlashing(ForkName.electra, attesterSlashing.value, attesterSlashing.key);
79
+ }
80
+ for (const proposerSlashing of proposerSlashings) {
81
+ this.insertProposerSlashing(proposerSlashing);
82
+ }
83
+ for (const voluntaryExit of voluntaryExits) {
84
+ this.insertVoluntaryExit(voluntaryExit);
85
+ }
86
+ for (const item of blsToExecutionChanges) {
87
+ this.insertBlsToExecutionChange(item.data, item.preCapella);
88
+ }
89
+ }
90
+
91
+ async toPersisted(db: IBeaconDb): Promise<void> {
92
+ await Promise.all([
93
+ persistDiff(
94
+ db.attesterSlashing,
95
+ Array.from(this.attesterSlashings.entries()).map(([key, value]) => ({
96
+ key: fromHex(key),
97
+ value: value.attesterSlashing,
98
+ })),
99
+ toHex
100
+ ),
101
+ persistDiff(
102
+ db.proposerSlashing,
103
+ Array.from(this.proposerSlashings.entries()).map(([key, value]) => ({key, value})),
104
+ (index) => index
105
+ ),
106
+ persistDiff(
107
+ db.voluntaryExit,
108
+ Array.from(this.voluntaryExits.entries()).map(([key, value]) => ({key, value})),
109
+ (index) => index
110
+ ),
111
+ persistDiff(
112
+ db.blsToExecutionChange,
113
+ Array.from(this.blsToExecutionChanges.entries()).map(([key, value]) => ({key, value})),
114
+ (index) => index
115
+ ),
116
+ ]);
117
+ }
118
+
119
+ // Use the opPool as seen cache for gossip validation
120
+
121
+ /** Returns false if at least one intersecting index has not been seen yet */
122
+ hasSeenAttesterSlashing(intersectingIndices: ValidatorIndex[]): boolean {
123
+ for (const validatorIndex of intersectingIndices) {
124
+ if (!this.attesterSlashingIndexes.has(validatorIndex)) {
125
+ return false;
126
+ }
127
+ }
128
+ return true;
129
+ }
130
+
131
+ hasSeenVoluntaryExit(validatorIndex: ValidatorIndex): boolean {
132
+ return this.voluntaryExits.has(validatorIndex);
133
+ }
134
+
135
+ hasSeenBlsToExecutionChange(validatorIndex: ValidatorIndex): boolean {
136
+ return this.blsToExecutionChanges.has(validatorIndex);
137
+ }
138
+
139
+ hasSeenProposerSlashing(validatorIndex: ValidatorIndex): boolean {
140
+ return this.proposerSlashings.has(validatorIndex);
141
+ }
142
+
143
+ /** Must be validated beforehand */
144
+ insertAttesterSlashing(fork: ForkName, attesterSlashing: AttesterSlashing, rootHash?: Uint8Array): void {
145
+ if (!rootHash) {
146
+ rootHash = sszTypesFor(fork).AttesterSlashing.hashTreeRoot(attesterSlashing);
147
+ }
148
+
149
+ // TODO: Do once and cache attached to the AttesterSlashing object
150
+ const intersectingIndices = getAttesterSlashableIndices(attesterSlashing);
151
+ this.attesterSlashings.set(toRootHex(rootHash), {
152
+ attesterSlashing,
153
+ intersectingIndices,
154
+ });
155
+ for (const index of intersectingIndices) {
156
+ this.attesterSlashingIndexes.add(index);
157
+ }
158
+ }
159
+
160
+ /** Must be validated beforehand */
161
+ insertProposerSlashing(proposerSlashing: phase0.ProposerSlashing): void {
162
+ this.proposerSlashings.set(proposerSlashing.signedHeader1.message.proposerIndex, proposerSlashing);
163
+ }
164
+
165
+ /** Must be validated beforehand */
166
+ insertVoluntaryExit(voluntaryExit: phase0.SignedVoluntaryExit): void {
167
+ this.voluntaryExits.set(voluntaryExit.message.validatorIndex, voluntaryExit);
168
+ }
169
+
170
+ /** Must be validated beforehand */
171
+ insertBlsToExecutionChange(blsToExecutionChange: capella.SignedBLSToExecutionChange, preCapella = false): void {
172
+ this.blsToExecutionChanges.set(blsToExecutionChange.message.validatorIndex, {
173
+ data: blsToExecutionChange,
174
+ preCapella,
175
+ });
176
+ }
177
+
178
+ /**
179
+ * Get proposer and attester slashings and voluntary exits and bls to execution change for inclusion in a block.
180
+ *
181
+ * This function computes both types of slashings and exits, because attester slashings and exits may be invalidated by
182
+ * slashings included earlier in the block.
183
+ */
184
+ getSlashingsAndExits(
185
+ state: CachedBeaconStateAllForks,
186
+ blockType: BlockType,
187
+ metrics: Metrics | null
188
+ ): [
189
+ AttesterSlashing[],
190
+ phase0.ProposerSlashing[],
191
+ phase0.SignedVoluntaryExit[],
192
+ capella.SignedBLSToExecutionChange[],
193
+ ] {
194
+ const {config} = state;
195
+ const stateEpoch = computeEpochAtSlot(state.slot);
196
+ const stateFork = config.getForkSeq(state.slot);
197
+ const toBeSlashedIndices = new Set<ValidatorIndex>();
198
+ const proposerSlashings: phase0.ProposerSlashing[] = [];
199
+
200
+ const stepsMetrics =
201
+ blockType === BlockType.Full
202
+ ? metrics?.executionBlockProductionTimeSteps
203
+ : metrics?.builderBlockProductionTimeSteps;
204
+
205
+ const endProposerSlashing = stepsMetrics?.startTimer();
206
+ for (const proposerSlashing of this.proposerSlashings.values()) {
207
+ const index = proposerSlashing.signedHeader1.message.proposerIndex;
208
+ const validator = state.validators.getReadonly(index);
209
+ if (!validator.slashed && validator.activationEpoch <= stateEpoch && stateEpoch < validator.withdrawableEpoch) {
210
+ proposerSlashings.push(proposerSlashing);
211
+ // Set of validators to be slashed, so we don't attempt to construct invalid attester slashings.
212
+ toBeSlashedIndices.add(index);
213
+ if (proposerSlashings.length >= MAX_PROPOSER_SLASHINGS) {
214
+ break;
215
+ }
216
+ }
217
+ }
218
+ endProposerSlashing?.({
219
+ step: BlockProductionStep.proposerSlashing,
220
+ });
221
+
222
+ const endAttesterSlashings = stepsMetrics?.startTimer();
223
+ const attesterSlashings: AttesterSlashing[] = [];
224
+ const maxAttesterSlashings = stateFork >= ForkSeq.electra ? MAX_ATTESTER_SLASHINGS_ELECTRA : MAX_ATTESTER_SLASHINGS;
225
+ attesterSlashing: for (const attesterSlashing of this.attesterSlashings.values()) {
226
+ /** Indices slashable in this attester slashing */
227
+ const slashableIndices = new Set<ValidatorIndex>();
228
+ for (let i = 0; i < attesterSlashing.intersectingIndices.length; i++) {
229
+ const index = attesterSlashing.intersectingIndices[i];
230
+ // If we already have a slashing for this index, we can continue on to the next slashing
231
+ if (toBeSlashedIndices.has(index)) {
232
+ continue attesterSlashing;
233
+ }
234
+
235
+ const validator = state.validators.getReadonly(index);
236
+ if (isSlashableAtEpoch(validator, stateEpoch)) {
237
+ slashableIndices.add(index);
238
+ }
239
+ if (attesterSlashings.length >= maxAttesterSlashings) {
240
+ break attesterSlashing;
241
+ }
242
+ }
243
+
244
+ // If there were slashable indices in this slashing
245
+ // Then include the slashing and count the slashable indices
246
+ if (slashableIndices.size > 0) {
247
+ attesterSlashings.push(attesterSlashing.attesterSlashing);
248
+ for (const index of slashableIndices) {
249
+ toBeSlashedIndices.add(index);
250
+ }
251
+ }
252
+ }
253
+ endAttesterSlashings?.({
254
+ step: BlockProductionStep.attesterSlashings,
255
+ });
256
+
257
+ const endVoluntaryExits = stepsMetrics?.startTimer();
258
+ const voluntaryExits: phase0.SignedVoluntaryExit[] = [];
259
+ for (const voluntaryExit of this.voluntaryExits.values()) {
260
+ if (
261
+ !toBeSlashedIndices.has(voluntaryExit.message.validatorIndex) &&
262
+ isValidVoluntaryExit(stateFork, state, voluntaryExit, false) &&
263
+ // Signature validation is skipped in `isValidVoluntaryExit(,,false)` since it was already validated in gossip
264
+ // However we must make sure that the signature fork is the same, or it will become invalid if included through
265
+ // a future fork.
266
+ isVoluntaryExitSignatureIncludable(
267
+ stateFork,
268
+ config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch))
269
+ )
270
+ ) {
271
+ voluntaryExits.push(voluntaryExit);
272
+ if (voluntaryExits.length >= MAX_VOLUNTARY_EXITS) {
273
+ break;
274
+ }
275
+ }
276
+ }
277
+ endVoluntaryExits?.({
278
+ step: BlockProductionStep.voluntaryExits,
279
+ });
280
+
281
+ const endBlsToExecutionChanges = stepsMetrics?.startTimer();
282
+ const blsToExecutionChanges: capella.SignedBLSToExecutionChange[] = [];
283
+ for (const blsToExecutionChange of this.blsToExecutionChanges.values()) {
284
+ if (isValidBlsToExecutionChangeForBlockInclusion(state, blsToExecutionChange.data)) {
285
+ blsToExecutionChanges.push(blsToExecutionChange.data);
286
+ if (blsToExecutionChanges.length >= MAX_BLS_TO_EXECUTION_CHANGES) {
287
+ break;
288
+ }
289
+ }
290
+ }
291
+ endBlsToExecutionChanges?.({
292
+ step: BlockProductionStep.blsToExecutionChanges,
293
+ });
294
+
295
+ return [attesterSlashings, proposerSlashings, voluntaryExits, blsToExecutionChanges];
296
+ }
297
+
298
+ /** For beacon pool API */
299
+ getAllAttesterSlashings(): AttesterSlashing[] {
300
+ return Array.from(this.attesterSlashings.values()).map((attesterSlashings) => attesterSlashings.attesterSlashing);
301
+ }
302
+
303
+ /** For beacon pool API */
304
+ getAllProposerSlashings(): phase0.ProposerSlashing[] {
305
+ return Array.from(this.proposerSlashings.values());
306
+ }
307
+
308
+ /** For beacon pool API */
309
+ getAllVoluntaryExits(): phase0.SignedVoluntaryExit[] {
310
+ return Array.from(this.voluntaryExits.values());
311
+ }
312
+
313
+ /** For beacon pool API */
314
+ getAllBlsToExecutionChanges(): SignedBLSToExecutionChangeVersioned[] {
315
+ return Array.from(this.blsToExecutionChanges.values());
316
+ }
317
+
318
+ /**
319
+ * Prune all types of transactions given the latest head state
320
+ */
321
+ pruneAll(headBlock: SignedBeaconBlock, headState: CachedBeaconStateAllForks): void {
322
+ this.pruneAttesterSlashings(headState);
323
+ this.pruneProposerSlashings(headState);
324
+ this.pruneVoluntaryExits(headState);
325
+ this.pruneBlsToExecutionChanges(headBlock, headState);
326
+ }
327
+
328
+ /**
329
+ * Prune attester slashings for all slashed or withdrawn validators.
330
+ */
331
+ private pruneAttesterSlashings(headState: CachedBeaconStateAllForks): void {
332
+ const finalizedEpoch = headState.finalizedCheckpoint.epoch;
333
+ attesterSlashing: for (const [key, attesterSlashing] of this.attesterSlashings.entries()) {
334
+ // Slashings that don't slash any validators can be dropped
335
+ for (let i = 0; i < attesterSlashing.intersectingIndices.length; i++) {
336
+ const index = attesterSlashing.intersectingIndices[i];
337
+
338
+ // Declare that a validator is still slashable if they have not exited prior
339
+ // to the finalized epoch.
340
+ //
341
+ // We cannot check the `slashed` field since the `head` is not finalized and
342
+ // a fork could un-slash someone.
343
+ if (headState.validators.getReadonly(index).exitEpoch > finalizedEpoch) {
344
+ continue attesterSlashing;
345
+ }
346
+ }
347
+
348
+ // All intersecting indices are not slashable
349
+ this.attesterSlashings.delete(key);
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Prune proposer slashings for validators which are exited in the finalized epoch.
355
+ */
356
+ private pruneProposerSlashings(headState: CachedBeaconStateAllForks): void {
357
+ const finalizedEpoch = headState.finalizedCheckpoint.epoch;
358
+ for (const [key, proposerSlashing] of this.proposerSlashings.entries()) {
359
+ const index = proposerSlashing.signedHeader1.message.proposerIndex;
360
+ if (headState.validators.getReadonly(index).exitEpoch <= finalizedEpoch) {
361
+ this.proposerSlashings.delete(key);
362
+ }
363
+ }
364
+ }
365
+
366
+ /**
367
+ * Call after finalizing
368
+ * Prune if validator has already exited at or before the finalized checkpoint of the head.
369
+ */
370
+ private pruneVoluntaryExits(headState: CachedBeaconStateAllForks): void {
371
+ const {config} = headState;
372
+ const headStateFork = config.getForkSeq(headState.slot);
373
+ const finalizedEpoch = headState.finalizedCheckpoint.epoch;
374
+
375
+ for (const [key, voluntaryExit] of this.voluntaryExits.entries()) {
376
+ // VoluntaryExit messages signed in the previous fork become invalid and can never be included in any future
377
+ // block, so just drop as the head state advances into the next fork.
378
+ if (config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch)) < headStateFork) {
379
+ this.voluntaryExits.delete(key);
380
+ }
381
+
382
+ // TODO: Improve this simplistic condition
383
+ if (voluntaryExit.message.epoch <= finalizedEpoch) {
384
+ this.voluntaryExits.delete(key);
385
+ }
386
+ }
387
+ }
388
+
389
+ /**
390
+ * Prune BLS to execution changes that have been applied to the state more than 1 block ago.
391
+ * In the worse case where head block is reorged, the same BlsToExecutionChange message can be re-added
392
+ * to opPool once gossipsub seen cache TTL passes.
393
+ */
394
+ private pruneBlsToExecutionChanges(headBlock: SignedBeaconBlock, headState: CachedBeaconStateAllForks): void {
395
+ const {config} = headState;
396
+ const recentBlsToExecutionChanges =
397
+ config.getForkSeq(headBlock.message.slot) >= ForkSeq.capella
398
+ ? (headBlock as capella.SignedBeaconBlock).message.body.blsToExecutionChanges
399
+ : [];
400
+
401
+ const recentBlsToExecutionChangeIndexes = new Set(
402
+ recentBlsToExecutionChanges.map((blsToExecutionChange) => blsToExecutionChange.message.validatorIndex)
403
+ );
404
+
405
+ for (const [key, blsToExecutionChange] of this.blsToExecutionChanges.entries()) {
406
+ const {validatorIndex} = blsToExecutionChange.data.message;
407
+ if (!recentBlsToExecutionChangeIndexes.has(validatorIndex)) {
408
+ const validator = headState.validators.getReadonly(validatorIndex);
409
+ if (validator.withdrawalCredentials[0] !== BLS_WITHDRAWAL_PREFIX) {
410
+ this.blsToExecutionChanges.delete(key);
411
+ }
412
+ }
413
+ }
414
+ }
415
+ }
416
+
417
+ /**
418
+ * Returns true if a pre-validated signature is still valid to be included in a specific block's fork
419
+ */
420
+ function isVoluntaryExitSignatureIncludable(stateFork: ForkSeq, voluntaryExitFork: ForkSeq): boolean {
421
+ if (stateFork >= ForkSeq.deneb) {
422
+ // Exists are perpetually valid https://eips.ethereum.org/EIPS/eip-7044
423
+ return true;
424
+ }
425
+ // Can only include exits from the current and previous fork
426
+ return voluntaryExitFork === stateFork || voluntaryExitFork === stateFork - 1;
427
+ }
428
+
429
+ function isSlashableAtEpoch(validator: phase0.Validator, epoch: Epoch): boolean {
430
+ return !validator.slashed && validator.activationEpoch <= epoch && epoch < validator.withdrawableEpoch;
431
+ }
432
+
433
+ /**
434
+ * Persist target items `items` in `dbRepo` doing minimum put and delete writes.
435
+ * Reads all keys in repository to compute the diff between current persisted data and target data.
436
+ */
437
+ async function persistDiff<K extends Id, V>(
438
+ dbRepo: Repository<K, V>,
439
+ items: {key: K; value: V}[],
440
+ serializeKey: (key: K) => number | string
441
+ ): Promise<void> {
442
+ const persistedKeys = await dbRepo.keys();
443
+ const itemsToPut: {key: K; value: V}[] = [];
444
+ const keysToDelete: K[] = [];
445
+
446
+ const persistedKeysSerialized = new Set(persistedKeys.map(serializeKey));
447
+ for (const item of items) {
448
+ if (!persistedKeysSerialized.has(serializeKey(item.key))) {
449
+ itemsToPut.push(item);
450
+ }
451
+ }
452
+
453
+ const targetKeysSerialized = new Set(items.map((item) => serializeKey(item.key)));
454
+ for (const persistedKey of persistedKeys) {
455
+ if (!targetKeysSerialized.has(serializeKey(persistedKey))) {
456
+ keysToDelete.push(persistedKey);
457
+ }
458
+ }
459
+
460
+ if (itemsToPut.length > 0) await dbRepo.batchPut(itemsToPut);
461
+ if (keysToDelete.length > 0) await dbRepo.batchDelete(keysToDelete);
462
+ }
@@ -0,0 +1,167 @@
1
+ import {Signature, aggregateSignatures} from "@chainsafe/blst";
2
+ import {BitArray} from "@chainsafe/ssz";
3
+ import {SYNC_COMMITTEE_SIZE, SYNC_COMMITTEE_SUBNET_COUNT} from "@lodestar/params";
4
+ import {Root, Slot, SubcommitteeIndex, SubnetID, altair} from "@lodestar/types";
5
+ import {MapDef, toRootHex} from "@lodestar/utils";
6
+ import {IClock} from "../../util/clock.js";
7
+ import {InsertOutcome, OpPoolError, OpPoolErrorCode} from "./types.js";
8
+ import {pruneBySlot, signatureFromBytesNoCheck} from "./utils.js";
9
+
10
+ /**
11
+ * SyncCommittee signatures are only useful during a single slot according to our peer's clocks
12
+ */
13
+ const SLOTS_RETAINED = 3;
14
+
15
+ /**
16
+ * The maximum number of distinct `ContributionFast` that will be stored in each slot.
17
+ *
18
+ * This is a DoS protection measure.
19
+ */
20
+ const MAX_ITEMS_PER_SLOT = 512;
21
+
22
+ type ContributionFast = Omit<altair.SyncCommitteeContribution, "aggregationBits" | "signature"> & {
23
+ aggregationBits: BitArray;
24
+ signature: Signature;
25
+ };
26
+
27
+ /** Hex string of `contribution.beaconBlockRoot` */
28
+ type BlockRootHex = string;
29
+
30
+ /**
31
+ * Preaggregate SyncCommitteeMessage into SyncCommitteeContribution
32
+ * and cache seen SyncCommitteeMessage by slot + validator index.
33
+ * This stays in-memory and should be pruned per slot.
34
+ */
35
+ export class SyncCommitteeMessagePool {
36
+ /**
37
+ * Each array item is respective to a subcommitteeIndex.
38
+ * Preaggregate into SyncCommitteeContribution.
39
+ * */
40
+ private readonly contributionsByRootBySubnetBySlot = new MapDef<
41
+ Slot,
42
+ MapDef<SubnetID, Map<BlockRootHex, ContributionFast>>
43
+ >(() => new MapDef<SubnetID, Map<BlockRootHex, ContributionFast>>(() => new Map<BlockRootHex, ContributionFast>()));
44
+ private lowestPermissibleSlot = 0;
45
+
46
+ constructor(
47
+ private readonly clock: IClock,
48
+ private readonly cutOffSecFromSlot: number,
49
+ private readonly preaggregateSlotDistance = 0
50
+ ) {}
51
+
52
+ /** Returns current count of unique ContributionFast by block root and subnet */
53
+ get size(): number {
54
+ let count = 0;
55
+ for (const contributionsByRootBySubnet of this.contributionsByRootBySubnetBySlot.values()) {
56
+ for (const contributionsByRoot of contributionsByRootBySubnet.values()) {
57
+ count += contributionsByRoot.size;
58
+ }
59
+ }
60
+ return count;
61
+ }
62
+
63
+ // TODO: indexInSubcommittee: number should be indicesInSyncCommittee
64
+ add(
65
+ subnet: SubnetID,
66
+ signature: altair.SyncCommitteeMessage,
67
+ indexInSubcommittee: number,
68
+ priority?: boolean
69
+ ): InsertOutcome {
70
+ const {slot, beaconBlockRoot} = signature;
71
+ const rootHex = toRootHex(beaconBlockRoot);
72
+ const lowestPermissibleSlot = this.lowestPermissibleSlot;
73
+
74
+ // Reject if too old.
75
+ if (slot < lowestPermissibleSlot) {
76
+ return InsertOutcome.Old;
77
+ }
78
+
79
+ // validator gets SyncCommitteeContribution at 2/3 of slot, it's no use to preaggregate later than that time
80
+ if (!priority && this.clock.secFromSlot(slot) > this.cutOffSecFromSlot) {
81
+ return InsertOutcome.Late;
82
+ }
83
+
84
+ // Limit object per slot
85
+ const contributionsByRoot = this.contributionsByRootBySubnetBySlot.getOrDefault(slot).getOrDefault(subnet);
86
+ if (contributionsByRoot.size >= MAX_ITEMS_PER_SLOT) {
87
+ throw new OpPoolError({code: OpPoolErrorCode.REACHED_MAX_PER_SLOT});
88
+ }
89
+
90
+ // Pre-aggregate the contribution with existing items
91
+ const contribution = contributionsByRoot.get(rootHex);
92
+ if (contribution) {
93
+ // Aggregate mutating
94
+ return aggregateSignatureInto(contribution, signature, indexInSubcommittee);
95
+ }
96
+
97
+ // Create new aggregate
98
+ contributionsByRoot.set(rootHex, signatureToAggregate(subnet, signature, indexInSubcommittee));
99
+ return InsertOutcome.NewData;
100
+ }
101
+
102
+ /**
103
+ * This is for the aggregator to produce ContributionAndProof.
104
+ */
105
+ getContribution(subnet: SubcommitteeIndex, slot: Slot, prevBlockRoot: Root): altair.SyncCommitteeContribution | null {
106
+ const contribution = this.contributionsByRootBySubnetBySlot.get(slot)?.get(subnet)?.get(toRootHex(prevBlockRoot));
107
+ if (!contribution) {
108
+ return null;
109
+ }
110
+
111
+ return {
112
+ ...contribution,
113
+ aggregationBits: contribution.aggregationBits,
114
+ signature: contribution.signature.toBytes(),
115
+ };
116
+ }
117
+
118
+ /**
119
+ * Prune per clock slot.
120
+ * SyncCommittee signatures are only useful during a single slot according to our peer's clocks
121
+ */
122
+ prune(clockSlot: Slot): void {
123
+ pruneBySlot(this.contributionsByRootBySubnetBySlot, clockSlot, SLOTS_RETAINED);
124
+ // by default preaggregateSlotDistance is 0, i.e only accept SyncCommitteeMessage in the same clock slot.
125
+ this.lowestPermissibleSlot = Math.max(clockSlot - this.preaggregateSlotDistance, 0);
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Aggregate a new signature into `contribution` mutating it
131
+ */
132
+ function aggregateSignatureInto(
133
+ contribution: ContributionFast,
134
+ signature: altair.SyncCommitteeMessage,
135
+ indexInSubcommittee: number
136
+ ): InsertOutcome {
137
+ if (contribution.aggregationBits.get(indexInSubcommittee) === true) {
138
+ return InsertOutcome.AlreadyKnown;
139
+ }
140
+
141
+ contribution.aggregationBits.set(indexInSubcommittee, true);
142
+ contribution.signature = aggregateSignatures([
143
+ contribution.signature,
144
+ signatureFromBytesNoCheck(signature.signature),
145
+ ]);
146
+ return InsertOutcome.Aggregated;
147
+ }
148
+
149
+ /**
150
+ * Format `signature` into an efficient `contribution` to add more signatures in with aggregateSignatureInto()
151
+ */
152
+ function signatureToAggregate(
153
+ subnet: SubnetID,
154
+ signature: altair.SyncCommitteeMessage,
155
+ indexInSubcommittee: number
156
+ ): ContributionFast {
157
+ const indexesPerSubnet = Math.floor(SYNC_COMMITTEE_SIZE / SYNC_COMMITTEE_SUBNET_COUNT);
158
+ const aggregationBits = BitArray.fromSingleBit(indexesPerSubnet, indexInSubcommittee);
159
+
160
+ return {
161
+ slot: signature.slot,
162
+ beaconBlockRoot: signature.beaconBlockRoot,
163
+ subcommitteeIndex: subnet,
164
+ aggregationBits,
165
+ signature: signatureFromBytesNoCheck(signature.signature),
166
+ };
167
+ }