@lodestar/beacon-node 1.35.0-dev.fcf8d024ea → 1.35.0-dev.feed916580
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/impl/config/constants.d.ts +0 -5
- package/lib/api/impl/config/constants.js +1 -6
- package/lib/api/impl/config/constants.js.map +1 -1
- package/lib/api/impl/validator/index.js +3 -5
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +0 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/worker.js +1 -1
- package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +3 -4
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +1 -8
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +7 -1
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/multithread/index.js +0 -1
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/chain.js +3 -2
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +2 -2
- package/lib/chain/opPools/attestationPool.d.ts +3 -2
- package/lib/chain/opPools/attestationPool.js +5 -3
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +2 -3
- package/lib/chain/opPools/syncCommitteeMessagePool.js +5 -6
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/types.d.ts +1 -1
- package/lib/chain/opPools/types.js +1 -1
- package/lib/chain/opPools/types.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +3 -3
- package/lib/chain/prepareNextSlot.js +8 -8
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +8 -9
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/lightClientFinalityUpdate.js +3 -4
- package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +4 -6
- package/lib/chain/validation/lightClientOptimisticUpdate.js +11 -11
- package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
- package/lib/chain/validatorMonitor.js +14 -20
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/buckets.d.ts +4 -4
- package/lib/db/buckets.js +4 -4
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/repositories/blobSidecars.js +1 -1
- package/lib/db/repositories/blobSidecars.js.map +1 -1
- package/lib/db/repositories/blobSidecarsArchive.js +1 -1
- package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
- package/lib/db/repositories/dataColumnSidecar.js +1 -1
- package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.js +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +1 -1
- package/lib/metrics/metrics/lodestar.js +3 -3
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.js +3 -9
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/discv5/index.js +1 -4
- package/lib/network/discv5/index.js.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts +0 -1
- package/lib/network/gossip/gossipsub.js +16 -35
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/metrics.d.ts +7 -15
- package/lib/network/gossip/metrics.js +6 -16
- package/lib/network/gossip/metrics.js.map +1 -1
- package/lib/network/libp2p/index.js +1 -9
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/metadata.js +1 -2
- package/lib/network/metadata.js.map +1 -1
- package/lib/network/network.d.ts +1 -1
- package/lib/network/network.js +13 -11
- package/lib/network/network.js.map +1 -1
- package/lib/network/peers/datastore.d.ts +2 -2
- package/lib/network/peers/datastore.js +2 -2
- package/lib/network/peers/datastore.js.map +1 -1
- package/lib/network/processor/index.d.ts +1 -1
- package/lib/network/processor/index.js +3 -2
- package/lib/network/processor/index.js.map +1 -1
- package/lib/sync/types.d.ts +1 -0
- package/lib/sync/types.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +1 -0
- package/lib/sync/unknownBlock.js +19 -17
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts +1 -3
- package/lib/sync/utils/downloadByRoot.js +9 -36
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/util/blobs.js +3 -5
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/clock.d.ts +0 -5
- package/lib/util/clock.js +0 -3
- package/lib/util/clock.js.map +1 -1
- package/lib/util/dataColumns.js +1 -1
- package/lib/util/dataColumns.js.map +1 -1
- package/lib/util/execution.js +2 -19
- package/lib/util/execution.js.map +1 -1
- package/package.json +22 -32
- package/lib/api/impl/api.d.ts.map +0 -1
- package/lib/api/impl/beacon/blocks/index.d.ts.map +0 -1
- package/lib/api/impl/beacon/blocks/utils.d.ts.map +0 -1
- package/lib/api/impl/beacon/index.d.ts.map +0 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +0 -1
- package/lib/api/impl/beacon/rewards/index.d.ts.map +0 -1
- package/lib/api/impl/beacon/state/index.d.ts.map +0 -1
- package/lib/api/impl/beacon/state/utils.d.ts.map +0 -1
- package/lib/api/impl/config/constants.d.ts.map +0 -1
- package/lib/api/impl/config/index.d.ts.map +0 -1
- package/lib/api/impl/debug/index.d.ts.map +0 -1
- package/lib/api/impl/errors.d.ts.map +0 -1
- package/lib/api/impl/events/index.d.ts.map +0 -1
- package/lib/api/impl/index.d.ts.map +0 -1
- package/lib/api/impl/lightclient/index.d.ts.map +0 -1
- package/lib/api/impl/lodestar/index.d.ts.map +0 -1
- package/lib/api/impl/node/index.d.ts.map +0 -1
- package/lib/api/impl/node/utils.d.ts.map +0 -1
- package/lib/api/impl/proof/index.d.ts.map +0 -1
- package/lib/api/impl/types.d.ts.map +0 -1
- package/lib/api/impl/utils.d.ts.map +0 -1
- package/lib/api/impl/validator/index.d.ts.map +0 -1
- package/lib/api/impl/validator/utils.d.ts.map +0 -1
- package/lib/api/index.d.ts.map +0 -1
- package/lib/api/options.d.ts.map +0 -1
- package/lib/api/rest/activeSockets.d.ts.map +0 -1
- package/lib/api/rest/base.d.ts.map +0 -1
- package/lib/api/rest/index.d.ts.map +0 -1
- package/lib/api/rest/swaggerUI.d.ts.map +0 -1
- package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +0 -1
- package/lib/chain/ColumnReconstructionTracker.d.ts.map +0 -1
- package/lib/chain/GetBlobsTracker.d.ts.map +0 -1
- package/lib/chain/archiveStore/archiveStore.d.ts.map +0 -1
- package/lib/chain/archiveStore/constants.d.ts.map +0 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +0 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +0 -1
- package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +0 -1
- package/lib/chain/archiveStore/historicalState/types.d.ts.map +0 -1
- package/lib/chain/archiveStore/historicalState/worker.d.ts.map +0 -1
- package/lib/chain/archiveStore/index.d.ts.map +0 -1
- package/lib/chain/archiveStore/interface.d.ts.map +0 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +0 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +0 -1
- package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +0 -1
- package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +0 -1
- package/lib/chain/balancesCache.d.ts.map +0 -1
- package/lib/chain/beaconProposerCache.d.ts.map +0 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +0 -1
- package/lib/chain/blocks/blockInput/errors.d.ts.map +0 -1
- package/lib/chain/blocks/blockInput/index.d.ts.map +0 -1
- package/lib/chain/blocks/blockInput/types.d.ts.map +0 -1
- package/lib/chain/blocks/blockInput/utils.d.ts.map +0 -1
- package/lib/chain/blocks/importBlock.d.ts.map +0 -1
- package/lib/chain/blocks/index.d.ts.map +0 -1
- package/lib/chain/blocks/types.d.ts.map +0 -1
- package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +0 -1
- package/lib/chain/blocks/utils/chainSegment.d.ts.map +0 -1
- package/lib/chain/blocks/utils/checkpoint.d.ts.map +0 -1
- package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +0 -1
- package/lib/chain/blocks/utils/ownBanner.d.ts.map +0 -1
- package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +0 -1
- package/lib/chain/blocks/utils/zebraBanner.d.ts.map +0 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +0 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +0 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +0 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +0 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +0 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +0 -1
- package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +0 -1
- package/lib/chain/bls/index.d.ts.map +0 -1
- package/lib/chain/bls/interface.d.ts.map +0 -1
- package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
- package/lib/chain/bls/multithread/index.d.ts.map +0 -1
- package/lib/chain/bls/multithread/jobItem.d.ts.map +0 -1
- package/lib/chain/bls/multithread/poolSize.d.ts.map +0 -1
- package/lib/chain/bls/multithread/types.d.ts.map +0 -1
- package/lib/chain/bls/multithread/utils.d.ts.map +0 -1
- package/lib/chain/bls/multithread/worker.d.ts.map +0 -1
- package/lib/chain/bls/singleThread.d.ts.map +0 -1
- package/lib/chain/bls/utils.d.ts.map +0 -1
- package/lib/chain/chain.d.ts.map +0 -1
- package/lib/chain/emitter.d.ts.map +0 -1
- package/lib/chain/errors/attestationError.d.ts.map +0 -1
- package/lib/chain/errors/attesterSlashingError.d.ts.map +0 -1
- package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
- package/lib/chain/errors/blockError.d.ts.map +0 -1
- package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +0 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts.map +0 -1
- package/lib/chain/errors/gossipValidation.d.ts.map +0 -1
- package/lib/chain/errors/index.d.ts.map +0 -1
- package/lib/chain/errors/lightClientError.d.ts.map +0 -1
- package/lib/chain/errors/proposerSlashingError.d.ts.map +0 -1
- package/lib/chain/errors/syncCommitteeError.d.ts.map +0 -1
- package/lib/chain/errors/voluntaryExitError.d.ts.map +0 -1
- package/lib/chain/forkChoice/index.d.ts.map +0 -1
- package/lib/chain/genesis/genesis.d.ts.map +0 -1
- package/lib/chain/genesis/interface.d.ts.map +0 -1
- package/lib/chain/index.d.ts.map +0 -1
- package/lib/chain/initState.d.ts.map +0 -1
- package/lib/chain/interface.d.ts.map +0 -1
- package/lib/chain/lightClient/index.d.ts.map +0 -1
- package/lib/chain/lightClient/proofs.d.ts.map +0 -1
- package/lib/chain/lightClient/types.d.ts.map +0 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +0 -1
- package/lib/chain/opPools/attestationPool.d.ts.map +0 -1
- package/lib/chain/opPools/index.d.ts.map +0 -1
- package/lib/chain/opPools/opPool.d.ts.map +0 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +0 -1
- package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +0 -1
- package/lib/chain/opPools/types.d.ts.map +0 -1
- package/lib/chain/opPools/utils.d.ts.map +0 -1
- package/lib/chain/options.d.ts.map +0 -1
- package/lib/chain/prepareNextSlot.d.ts.map +0 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +0 -1
- package/lib/chain/produceBlock/index.d.ts.map +0 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +0 -1
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +0 -1
- package/lib/chain/regen/errors.d.ts.map +0 -1
- package/lib/chain/regen/index.d.ts.map +0 -1
- package/lib/chain/regen/interface.d.ts.map +0 -1
- package/lib/chain/regen/queued.d.ts.map +0 -1
- package/lib/chain/regen/regen.d.ts.map +0 -1
- package/lib/chain/reprocess.d.ts.map +0 -1
- package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
- package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
- package/lib/chain/seenCache/index.d.ts.map +0 -1
- package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +0 -1
- package/lib/chain/seenCache/seenAttestationData.d.ts.map +0 -1
- package/lib/chain/seenCache/seenAttesters.d.ts.map +0 -1
- package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +0 -1
- package/lib/chain/seenCache/seenBlockProposers.d.ts.map +0 -1
- package/lib/chain/seenCache/seenCommittee.d.ts.map +0 -1
- package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +0 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +0 -1
- package/lib/chain/serializeState.d.ts.map +0 -1
- package/lib/chain/shufflingCache.d.ts.map +0 -1
- package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
- package/lib/chain/stateCache/datastore/db.d.ts.map +0 -1
- package/lib/chain/stateCache/datastore/file.d.ts.map +0 -1
- package/lib/chain/stateCache/datastore/index.d.ts.map +0 -1
- package/lib/chain/stateCache/datastore/types.d.ts.map +0 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +0 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
- package/lib/chain/stateCache/index.d.ts.map +0 -1
- package/lib/chain/stateCache/mapMetrics.d.ts.map +0 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +0 -1
- package/lib/chain/stateCache/types.d.ts.map +0 -1
- package/lib/chain/validation/aggregateAndProof.d.ts.map +0 -1
- package/lib/chain/validation/attestation.d.ts.map +0 -1
- package/lib/chain/validation/attesterSlashing.d.ts.map +0 -1
- package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
- package/lib/chain/validation/block.d.ts.map +0 -1
- package/lib/chain/validation/blsToExecutionChange.d.ts.map +0 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +0 -1
- package/lib/chain/validation/index.d.ts.map +0 -1
- package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +0 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +0 -1
- package/lib/chain/validation/proposerSlashing.d.ts.map +0 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +0 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +0 -1
- package/lib/chain/validation/signatureSets/index.d.ts.map +0 -1
- package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +0 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +0 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +0 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +0 -1
- package/lib/chain/validation/syncCommittee.d.ts.map +0 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +0 -1
- package/lib/chain/validation/voluntaryExit.d.ts.map +0 -1
- package/lib/chain/validatorMonitor.d.ts.map +0 -1
- package/lib/constants/constants.d.ts.map +0 -1
- package/lib/constants/index.d.ts.map +0 -1
- package/lib/constants/network.d.ts.map +0 -1
- package/lib/db/beacon.d.ts.map +0 -1
- package/lib/db/buckets.d.ts.map +0 -1
- package/lib/db/index.d.ts.map +0 -1
- package/lib/db/interface.d.ts.map +0 -1
- package/lib/db/options.d.ts.map +0 -1
- package/lib/db/repositories/attesterSlashing.d.ts.map +0 -1
- package/lib/db/repositories/backfilledRanges.d.ts.map +0 -1
- package/lib/db/repositories/blobSidecars.d.ts.map +0 -1
- package/lib/db/repositories/blobSidecarsArchive.d.ts.map +0 -1
- package/lib/db/repositories/block.d.ts.map +0 -1
- package/lib/db/repositories/blockArchive.d.ts.map +0 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts.map +0 -1
- package/lib/db/repositories/blsToExecutionChange.d.ts.map +0 -1
- package/lib/db/repositories/checkpointState.d.ts.map +0 -1
- package/lib/db/repositories/dataColumnSidecar.d.ts.map +0 -1
- package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +0 -1
- package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
- package/lib/db/repositories/depositEvent.d.ts.map +0 -1
- package/lib/db/repositories/eth1Data.d.ts.map +0 -1
- package/lib/db/repositories/index.d.ts.map +0 -1
- package/lib/db/repositories/lightclientBestUpdate.d.ts.map +0 -1
- package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +0 -1
- package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +0 -1
- package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +0 -1
- package/lib/db/repositories/proposerSlashing.d.ts.map +0 -1
- package/lib/db/repositories/stateArchive.d.ts.map +0 -1
- package/lib/db/repositories/stateArchiveIndex.d.ts.map +0 -1
- package/lib/db/repositories/voluntaryExit.d.ts.map +0 -1
- package/lib/db/single/index.d.ts.map +0 -1
- package/lib/db/single/preGenesisState.d.ts.map +0 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
- package/lib/eth1/errors.d.ts.map +0 -1
- package/lib/eth1/eth1DataCache.d.ts.map +0 -1
- package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
- package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
- package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
- package/lib/eth1/index.d.ts.map +0 -1
- package/lib/eth1/interface.d.ts.map +0 -1
- package/lib/eth1/options.d.ts.map +0 -1
- package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
- package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
- package/lib/eth1/provider/jwt.d.ts.map +0 -1
- package/lib/eth1/provider/utils.d.ts.map +0 -1
- package/lib/eth1/stream.d.ts.map +0 -1
- package/lib/eth1/utils/depositContract.d.ts.map +0 -1
- package/lib/eth1/utils/deposits.d.ts.map +0 -1
- package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
- package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
- package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
- package/lib/execution/builder/cache.d.ts.map +0 -1
- package/lib/execution/builder/http.d.ts.map +0 -1
- package/lib/execution/builder/index.d.ts.map +0 -1
- package/lib/execution/builder/interface.d.ts.map +0 -1
- package/lib/execution/builder/utils.d.ts.map +0 -1
- package/lib/execution/engine/disabled.d.ts.map +0 -1
- package/lib/execution/engine/http.d.ts.map +0 -1
- package/lib/execution/engine/index.d.ts.map +0 -1
- package/lib/execution/engine/interface.d.ts.map +0 -1
- package/lib/execution/engine/mock.d.ts.map +0 -1
- package/lib/execution/engine/payloadIdCache.d.ts.map +0 -1
- package/lib/execution/engine/types.d.ts.map +0 -1
- package/lib/execution/engine/utils.d.ts.map +0 -1
- package/lib/execution/index.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/metrics/index.d.ts.map +0 -1
- package/lib/metrics/metrics/beacon.d.ts.map +0 -1
- package/lib/metrics/metrics/lodestar.d.ts.map +0 -1
- package/lib/metrics/metrics.d.ts.map +0 -1
- package/lib/metrics/nodeJsMetrics.d.ts.map +0 -1
- package/lib/metrics/options.d.ts.map +0 -1
- package/lib/metrics/server/http.d.ts.map +0 -1
- package/lib/metrics/server/index.d.ts.map +0 -1
- package/lib/metrics/utils/avgMinMax.d.ts.map +0 -1
- package/lib/metrics/utils/gauge.d.ts.map +0 -1
- package/lib/metrics/utils/registryMetricCreator.d.ts.map +0 -1
- package/lib/monitoring/clientStats.d.ts.map +0 -1
- package/lib/monitoring/index.d.ts.map +0 -1
- package/lib/monitoring/options.d.ts.map +0 -1
- package/lib/monitoring/properties.d.ts.map +0 -1
- package/lib/monitoring/service.d.ts.map +0 -1
- package/lib/monitoring/system.d.ts.map +0 -1
- package/lib/monitoring/types.d.ts.map +0 -1
- package/lib/network/core/events.d.ts.map +0 -1
- package/lib/network/core/index.d.ts.map +0 -1
- package/lib/network/core/metrics.d.ts.map +0 -1
- package/lib/network/core/networkCore.d.ts.map +0 -1
- package/lib/network/core/networkCoreWorker.d.ts.map +0 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts.map +0 -1
- package/lib/network/core/types.d.ts.map +0 -1
- package/lib/network/discv5/index.d.ts.map +0 -1
- package/lib/network/discv5/types.d.ts.map +0 -1
- package/lib/network/discv5/utils.d.ts.map +0 -1
- package/lib/network/discv5/worker.d.ts.map +0 -1
- package/lib/network/events.d.ts.map +0 -1
- package/lib/network/forks.d.ts.map +0 -1
- package/lib/network/gossip/constants.d.ts.map +0 -1
- package/lib/network/gossip/encoding.d.ts.map +0 -1
- package/lib/network/gossip/errors.d.ts.map +0 -1
- package/lib/network/gossip/gossipsub.d.ts.map +0 -1
- package/lib/network/gossip/index.d.ts.map +0 -1
- package/lib/network/gossip/interface.d.ts.map +0 -1
- package/lib/network/gossip/metrics.d.ts.map +0 -1
- package/lib/network/gossip/scoringParameters.d.ts.map +0 -1
- package/lib/network/gossip/topic.d.ts.map +0 -1
- package/lib/network/index.d.ts.map +0 -1
- package/lib/network/interface.d.ts.map +0 -1
- package/lib/network/libp2p/error.d.ts.map +0 -1
- package/lib/network/libp2p/index.d.ts.map +0 -1
- package/lib/network/metadata.d.ts.map +0 -1
- package/lib/network/network.d.ts.map +0 -1
- package/lib/network/networkConfig.d.ts.map +0 -1
- package/lib/network/options.d.ts.map +0 -1
- package/lib/network/peers/client.d.ts.map +0 -1
- package/lib/network/peers/datastore.d.ts.map +0 -1
- package/lib/network/peers/discover.d.ts.map +0 -1
- package/lib/network/peers/index.d.ts.map +0 -1
- package/lib/network/peers/peerManager.d.ts.map +0 -1
- package/lib/network/peers/peersData.d.ts.map +0 -1
- package/lib/network/peers/score/constants.d.ts.map +0 -1
- package/lib/network/peers/score/index.d.ts.map +0 -1
- package/lib/network/peers/score/interface.d.ts.map +0 -1
- package/lib/network/peers/score/score.d.ts.map +0 -1
- package/lib/network/peers/score/store.d.ts.map +0 -1
- package/lib/network/peers/score/utils.d.ts.map +0 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +0 -1
- package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +0 -1
- package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +0 -1
- package/lib/network/peers/utils/index.d.ts.map +0 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts.map +0 -1
- package/lib/network/peers/utils/subnetMap.d.ts.map +0 -1
- package/lib/network/processor/aggregatorTracker.d.ts.map +0 -1
- package/lib/network/processor/extractSlotRootFns.d.ts.map +0 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +0 -1
- package/lib/network/processor/gossipQueues/index.d.ts.map +0 -1
- package/lib/network/processor/gossipQueues/indexed.d.ts.map +0 -1
- package/lib/network/processor/gossipQueues/linear.d.ts.map +0 -1
- package/lib/network/processor/gossipQueues/types.d.ts.map +0 -1
- package/lib/network/processor/gossipValidatorFn.d.ts.map +0 -1
- package/lib/network/processor/index.d.ts.map +0 -1
- package/lib/network/processor/types.d.ts.map +0 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/index.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +0 -1
- package/lib/network/reqresp/index.d.ts.map +0 -1
- package/lib/network/reqresp/interface.d.ts.map +0 -1
- package/lib/network/reqresp/protocols.d.ts.map +0 -1
- package/lib/network/reqresp/rateLimit.d.ts.map +0 -1
- package/lib/network/reqresp/score.d.ts.map +0 -1
- package/lib/network/reqresp/types.d.ts.map +0 -1
- package/lib/network/reqresp/utils/collect.d.ts.map +0 -1
- package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +0 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +0 -1
- package/lib/network/statusCache.d.ts.map +0 -1
- package/lib/network/subnets/attnetsService.d.ts.map +0 -1
- package/lib/network/subnets/index.d.ts.map +0 -1
- package/lib/network/subnets/interface.d.ts.map +0 -1
- package/lib/network/subnets/syncnetsService.d.ts.map +0 -1
- package/lib/network/subnets/util.d.ts.map +0 -1
- package/lib/network/util.d.ts.map +0 -1
- package/lib/node/index.d.ts.map +0 -1
- package/lib/node/nodejs.d.ts.map +0 -1
- package/lib/node/notifier.d.ts.map +0 -1
- package/lib/node/options.d.ts.map +0 -1
- package/lib/node/utils/interop/deposits.d.ts.map +0 -1
- package/lib/node/utils/interop/state.d.ts.map +0 -1
- package/lib/node/utils/lightclient.d.ts.map +0 -1
- package/lib/node/utils/state.d.ts.map +0 -1
- package/lib/sync/backfill/backfill.d.ts.map +0 -1
- package/lib/sync/backfill/errors.d.ts.map +0 -1
- package/lib/sync/backfill/index.d.ts.map +0 -1
- package/lib/sync/backfill/verify.d.ts.map +0 -1
- package/lib/sync/constants.d.ts.map +0 -1
- package/lib/sync/index.d.ts.map +0 -1
- package/lib/sync/interface.d.ts.map +0 -1
- package/lib/sync/options.d.ts.map +0 -1
- package/lib/sync/range/batch.d.ts.map +0 -1
- package/lib/sync/range/chain.d.ts.map +0 -1
- package/lib/sync/range/range.d.ts.map +0 -1
- package/lib/sync/range/utils/batches.d.ts.map +0 -1
- package/lib/sync/range/utils/chainTarget.d.ts.map +0 -1
- package/lib/sync/range/utils/hashBlocks.d.ts.map +0 -1
- package/lib/sync/range/utils/index.d.ts.map +0 -1
- package/lib/sync/range/utils/peerBalancer.d.ts.map +0 -1
- package/lib/sync/range/utils/updateChains.d.ts.map +0 -1
- package/lib/sync/sync.d.ts.map +0 -1
- package/lib/sync/types.d.ts.map +0 -1
- package/lib/sync/unknownBlock.d.ts.map +0 -1
- package/lib/sync/utils/downloadByRange.d.ts.map +0 -1
- package/lib/sync/utils/downloadByRoot.d.ts.map +0 -1
- package/lib/sync/utils/pendingBlocksTree.d.ts.map +0 -1
- package/lib/sync/utils/remoteSyncType.d.ts.map +0 -1
- package/lib/util/address.d.ts.map +0 -1
- package/lib/util/array.d.ts.map +0 -1
- package/lib/util/asyncIterableToEvents.d.ts.map +0 -1
- package/lib/util/binarySearch.d.ts.map +0 -1
- package/lib/util/bitArray.d.ts.map +0 -1
- package/lib/util/blobs.d.ts.map +0 -1
- package/lib/util/bufferPool.d.ts.map +0 -1
- package/lib/util/bytes.d.ts.map +0 -1
- package/lib/util/chunkify.d.ts.map +0 -1
- package/lib/util/clock.d.ts.map +0 -1
- package/lib/util/dataColumns.d.ts.map +0 -1
- package/lib/util/dependentRoot.d.ts.map +0 -1
- package/lib/util/enum.d.ts.map +0 -1
- package/lib/util/error.d.ts.map +0 -1
- package/lib/util/eventLoop.d.ts.map +0 -1
- package/lib/util/execution.d.ts.map +0 -1
- package/lib/util/file.d.ts.map +0 -1
- package/lib/util/forkChoice.d.ts.map +0 -1
- package/lib/util/forkName.d.ts.map +0 -1
- package/lib/util/graffiti.d.ts.map +0 -1
- package/lib/util/hex.d.ts.map +0 -1
- package/lib/util/index.d.ts.map +0 -1
- package/lib/util/ip.d.ts.map +0 -1
- package/lib/util/itTrigger.d.ts.map +0 -1
- package/lib/util/kzg.d.ts.map +0 -1
- package/lib/util/map.d.ts.map +0 -1
- package/lib/util/metadata.d.ts.map +0 -1
- package/lib/util/multifork.d.ts.map +0 -1
- package/lib/util/numpy.d.ts.map +0 -1
- package/lib/util/peerId.d.ts.map +0 -1
- package/lib/util/profile.d.ts.map +0 -1
- package/lib/util/promises.d.ts.map +0 -1
- package/lib/util/queue/errors.d.ts.map +0 -1
- package/lib/util/queue/fnQueue.d.ts.map +0 -1
- package/lib/util/queue/index.d.ts.map +0 -1
- package/lib/util/queue/itemQueue.d.ts.map +0 -1
- package/lib/util/queue/options.d.ts.map +0 -1
- package/lib/util/serializedCache.d.ts.map +0 -1
- package/lib/util/set.d.ts.map +0 -1
- package/lib/util/shuffle.d.ts.map +0 -1
- package/lib/util/sortBy.d.ts.map +0 -1
- package/lib/util/sszBytes.d.ts.map +0 -1
- package/lib/util/strictEvents.d.ts.map +0 -1
- package/lib/util/time.d.ts.map +0 -1
- package/lib/util/timeSeries.d.ts.map +0 -1
- package/lib/util/types.d.ts.map +0 -1
- package/lib/util/workerEvents.d.ts.map +0 -1
- package/lib/util/wrapError.d.ts.map +0 -1
- package/src/api/impl/api.ts +0 -26
- package/src/api/impl/beacon/blocks/index.ts +0 -744
- package/src/api/impl/beacon/blocks/utils.ts +0 -75
- package/src/api/impl/beacon/index.ts +0 -35
- package/src/api/impl/beacon/pool/index.ts +0 -314
- package/src/api/impl/beacon/rewards/index.ts +0 -30
- package/src/api/impl/beacon/state/index.ts +0 -406
- package/src/api/impl/beacon/state/utils.ts +0 -189
- package/src/api/impl/config/constants.ts +0 -127
- package/src/api/impl/config/index.ts +0 -59
- package/src/api/impl/debug/index.ts +0 -131
- package/src/api/impl/errors.ts +0 -50
- package/src/api/impl/events/index.ts +0 -33
- package/src/api/impl/index.ts +0 -6
- package/src/api/impl/lightclient/index.ts +0 -64
- package/src/api/impl/lodestar/index.ts +0 -257
- package/src/api/impl/node/index.ts +0 -88
- package/src/api/impl/node/utils.ts +0 -51
- package/src/api/impl/proof/index.ts +0 -60
- package/src/api/impl/types.ts +0 -17
- package/src/api/impl/utils.ts +0 -25
- package/src/api/impl/validator/index.ts +0 -1540
- package/src/api/impl/validator/utils.ts +0 -85
- package/src/api/index.ts +0 -2
- package/src/api/options.ts +0 -16
- package/src/api/rest/activeSockets.ts +0 -109
- package/src/api/rest/base.ts +0 -216
- package/src/api/rest/index.ts +0 -63
- package/src/api/rest/swaggerUI.ts +0 -80
- package/src/bun-wrappers/prometheus-gc-stats.ts +0 -7
- package/src/chain/ColumnReconstructionTracker.ts +0 -90
- package/src/chain/GetBlobsTracker.ts +0 -115
- package/src/chain/archiveStore/archiveStore.ts +0 -222
- package/src/chain/archiveStore/constants.ts +0 -5
- package/src/chain/archiveStore/historicalState/getHistoricalState.ts +0 -116
- package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +0 -68
- package/src/chain/archiveStore/historicalState/metrics.ts +0 -214
- package/src/chain/archiveStore/historicalState/types.ts +0 -41
- package/src/chain/archiveStore/historicalState/worker.ts +0 -77
- package/src/chain/archiveStore/index.ts +0 -3
- package/src/chain/archiveStore/interface.ts +0 -75
- package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +0 -138
- package/src/chain/archiveStore/utils/archiveBlocks.ts +0 -437
- package/src/chain/archiveStore/utils/pruneHistory.ts +0 -56
- package/src/chain/archiveStore/utils/updateBackfillRange.ts +0 -50
- package/src/chain/balancesCache.ts +0 -52
- package/src/chain/beaconProposerCache.ts +0 -43
- package/src/chain/blocks/blockInput/blockInput.ts +0 -852
- package/src/chain/blocks/blockInput/errors.ts +0 -48
- package/src/chain/blocks/blockInput/index.ts +0 -4
- package/src/chain/blocks/blockInput/types.ts +0 -145
- package/src/chain/blocks/blockInput/utils.ts +0 -21
- package/src/chain/blocks/importBlock.ts +0 -597
- package/src/chain/blocks/index.ts +0 -179
- package/src/chain/blocks/types.ts +0 -101
- package/src/chain/blocks/utils/blowfishBanner.ts +0 -28
- package/src/chain/blocks/utils/chainSegment.ts +0 -29
- package/src/chain/blocks/utils/checkpoint.ts +0 -25
- package/src/chain/blocks/utils/giraffeBanner.ts +0 -30
- package/src/chain/blocks/utils/ownBanner.ts +0 -20
- package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +0 -43
- package/src/chain/blocks/utils/zebraBanner.ts +0 -45
- package/src/chain/blocks/verifyBlock.ts +0 -242
- package/src/chain/blocks/verifyBlocksDataAvailability.ts +0 -42
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +0 -438
- package/src/chain/blocks/verifyBlocksSanityChecks.ts +0 -129
- package/src/chain/blocks/verifyBlocksSignatures.ts +0 -105
- package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +0 -114
- package/src/chain/blocks/writeBlockInputToDb.ts +0 -120
- package/src/chain/bls/index.ts +0 -4
- package/src/chain/bls/interface.ts +0 -68
- package/src/chain/bls/maybeBatch.ts +0 -45
- package/src/chain/bls/multithread/index.ts +0 -582
- package/src/chain/bls/multithread/jobItem.ts +0 -119
- package/src/chain/bls/multithread/poolSize.ts +0 -16
- package/src/chain/bls/multithread/types.ts +0 -38
- package/src/chain/bls/multithread/utils.ts +0 -19
- package/src/chain/bls/multithread/worker.ts +0 -114
- package/src/chain/bls/singleThread.ts +0 -87
- package/src/chain/bls/utils.ts +0 -30
- package/src/chain/chain.ts +0 -1354
- package/src/chain/emitter.ts +0 -113
- package/src/chain/errors/attestationError.ts +0 -194
- package/src/chain/errors/attesterSlashingError.ts +0 -11
- package/src/chain/errors/blobSidecarError.ts +0 -60
- package/src/chain/errors/blockError.ts +0 -166
- package/src/chain/errors/blsToExecutionChangeError.ts +0 -13
- package/src/chain/errors/dataColumnSidecarError.ts +0 -80
- package/src/chain/errors/gossipValidation.ts +0 -20
- package/src/chain/errors/index.ts +0 -10
- package/src/chain/errors/lightClientError.ts +0 -30
- package/src/chain/errors/proposerSlashingError.ts +0 -11
- package/src/chain/errors/syncCommitteeError.ts +0 -36
- package/src/chain/errors/voluntaryExitError.ts +0 -13
- package/src/chain/forkChoice/index.ts +0 -112
- package/src/chain/genesis/genesis.ts +0 -190
- package/src/chain/genesis/interface.ts +0 -14
- package/src/chain/index.ts +0 -6
- package/src/chain/initState.ts +0 -221
- package/src/chain/interface.ts +0 -280
- package/src/chain/lightClient/index.ts +0 -764
- package/src/chain/lightClient/proofs.ts +0 -85
- package/src/chain/lightClient/types.ts +0 -33
- package/src/chain/opPools/aggregatedAttestationPool.ts +0 -1063
- package/src/chain/opPools/attestationPool.ts +0 -282
- package/src/chain/opPools/index.ts +0 -5
- package/src/chain/opPools/opPool.ts +0 -462
- package/src/chain/opPools/syncCommitteeMessagePool.ts +0 -169
- package/src/chain/opPools/syncContributionAndProofPool.ts +0 -240
- package/src/chain/opPools/types.ts +0 -35
- package/src/chain/opPools/utils.ts +0 -65
- package/src/chain/options.ts +0 -138
- package/src/chain/prepareNextSlot.ts +0 -277
- package/src/chain/produceBlock/computeNewStateRoot.ts +0 -55
- package/src/chain/produceBlock/index.ts +0 -2
- package/src/chain/produceBlock/produceBlockBody.ts +0 -797
- package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +0 -54
- package/src/chain/regen/errors.ts +0 -30
- package/src/chain/regen/index.ts +0 -4
- package/src/chain/regen/interface.ts +0 -93
- package/src/chain/regen/queued.ts +0 -317
- package/src/chain/regen/regen.ts +0 -424
- package/src/chain/reprocess.ts +0 -161
- package/src/chain/rewards/attestationsRewards.ts +0 -196
- package/src/chain/rewards/blockRewards.ts +0 -150
- package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
- package/src/chain/seenCache/index.ts +0 -5
- package/src/chain/seenCache/seenAggregateAndProof.ts +0 -120
- package/src/chain/seenCache/seenAttestationData.ts +0 -145
- package/src/chain/seenCache/seenAttesters.ts +0 -58
- package/src/chain/seenCache/seenBlockAttesters.ts +0 -18
- package/src/chain/seenCache/seenBlockProposers.ts +0 -48
- package/src/chain/seenCache/seenCommittee.ts +0 -43
- package/src/chain/seenCache/seenCommitteeContribution.ts +0 -104
- package/src/chain/seenCache/seenGossipBlockInput.ts +0 -373
- package/src/chain/serializeState.ts +0 -32
- package/src/chain/shufflingCache.ts +0 -238
- package/src/chain/stateCache/blockStateCacheImpl.ts +0 -150
- package/src/chain/stateCache/datastore/db.ts +0 -36
- package/src/chain/stateCache/datastore/file.ts +0 -53
- package/src/chain/stateCache/datastore/index.ts +0 -2
- package/src/chain/stateCache/datastore/types.ts +0 -13
- package/src/chain/stateCache/fifoBlockStateCache.ts +0 -208
- package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -198
- package/src/chain/stateCache/index.ts +0 -3
- package/src/chain/stateCache/mapMetrics.ts +0 -52
- package/src/chain/stateCache/persistentCheckpointsCache.ts +0 -837
- package/src/chain/stateCache/types.ts +0 -86
- package/src/chain/validation/aggregateAndProof.ts +0 -258
- package/src/chain/validation/attestation.ts +0 -885
- package/src/chain/validation/attesterSlashing.ts +0 -61
- package/src/chain/validation/blobSidecar.ts +0 -301
- package/src/chain/validation/block.ts +0 -188
- package/src/chain/validation/blsToExecutionChange.ts +0 -61
- package/src/chain/validation/dataColumnSidecar.ts +0 -381
- package/src/chain/validation/index.ts +0 -9
- package/src/chain/validation/lightClientFinalityUpdate.ts +0 -46
- package/src/chain/validation/lightClientOptimisticUpdate.ts +0 -68
- package/src/chain/validation/proposerSlashing.ts +0 -54
- package/src/chain/validation/signatureSets/aggregateAndProof.ts +0 -38
- package/src/chain/validation/signatureSets/contributionAndProof.ts +0 -27
- package/src/chain/validation/signatureSets/index.ts +0 -6
- package/src/chain/validation/signatureSets/selectionProof.ts +0 -27
- package/src/chain/validation/signatureSets/syncCommittee.ts +0 -22
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +0 -18
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +0 -27
- package/src/chain/validation/syncCommittee.ts +0 -165
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +0 -122
- package/src/chain/validation/voluntaryExit.ts +0 -58
- package/src/chain/validatorMonitor.ts +0 -1309
- package/src/constants/constants.ts +0 -15
- package/src/constants/index.ts +0 -2
- package/src/constants/network.ts +0 -52
- package/src/db/beacon.ts +0 -113
- package/src/db/buckets.ts +0 -80
- package/src/db/index.ts +0 -2
- package/src/db/interface.ts +0 -76
- package/src/db/options.ts +0 -7
- package/src/db/repositories/attesterSlashing.ts +0 -38
- package/src/db/repositories/backfilledRanges.ts +0 -29
- package/src/db/repositories/blobSidecars.ts +0 -37
- package/src/db/repositories/blobSidecarsArchive.ts +0 -28
- package/src/db/repositories/block.ts +0 -33
- package/src/db/repositories/blockArchive.ts +0 -170
- package/src/db/repositories/blockArchiveIndex.ts +0 -45
- package/src/db/repositories/blsToExecutionChange.ts +0 -16
- package/src/db/repositories/checkpointState.ts +0 -31
- package/src/db/repositories/dataColumnSidecar.ts +0 -49
- package/src/db/repositories/dataColumnSidecarArchive.ts +0 -56
- package/src/db/repositories/depositDataRoot.ts +0 -80
- package/src/db/repositories/depositEvent.ts +0 -32
- package/src/db/repositories/eth1Data.ts +0 -33
- package/src/db/repositories/index.ts +0 -20
- package/src/db/repositories/lightclientBestUpdate.ts +0 -41
- package/src/db/repositories/lightclientCheckpointHeader.ts +0 -32
- package/src/db/repositories/lightclientSyncCommittee.ts +0 -16
- package/src/db/repositories/lightclientSyncCommitteeWitness.ts +0 -77
- package/src/db/repositories/proposerSlashing.ts +0 -15
- package/src/db/repositories/stateArchive.ts +0 -69
- package/src/db/repositories/stateArchiveIndex.ts +0 -18
- package/src/db/repositories/voluntaryExit.ts +0 -15
- package/src/db/single/index.ts +0 -2
- package/src/db/single/preGenesisState.ts +0 -37
- package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
- package/src/eth1/errors.ts +0 -40
- package/src/eth1/eth1DataCache.ts +0 -26
- package/src/eth1/eth1DepositDataTracker.ts +0 -410
- package/src/eth1/eth1DepositsCache.ts +0 -141
- package/src/eth1/eth1MergeBlockTracker.ts +0 -328
- package/src/eth1/index.ts +0 -157
- package/src/eth1/interface.ts +0 -131
- package/src/eth1/options.ts +0 -28
- package/src/eth1/provider/eth1Provider.ts +0 -229
- package/src/eth1/provider/jsonRpcHttpClient.ts +0 -390
- package/src/eth1/provider/jwt.ts +0 -36
- package/src/eth1/provider/utils.ts +0 -136
- package/src/eth1/stream.ts +0 -75
- package/src/eth1/utils/depositContract.ts +0 -37
- package/src/eth1/utils/deposits.ts +0 -70
- package/src/eth1/utils/eth1Data.ts +0 -100
- package/src/eth1/utils/eth1DepositEvent.ts +0 -12
- package/src/eth1/utils/eth1Vote.ts +0 -142
- package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
- package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
- package/src/execution/builder/cache.ts +0 -39
- package/src/execution/builder/http.ts +0 -229
- package/src/execution/builder/index.ts +0 -27
- package/src/execution/builder/interface.ts +0 -49
- package/src/execution/builder/utils.ts +0 -19
- package/src/execution/engine/disabled.ts +0 -35
- package/src/execution/engine/http.ts +0 -644
- package/src/execution/engine/index.ts +0 -63
- package/src/execution/engine/interface.ts +0 -199
- package/src/execution/engine/mock.ts +0 -493
- package/src/execution/engine/payloadIdCache.ts +0 -54
- package/src/execution/engine/types.ts +0 -640
- package/src/execution/engine/utils.ts +0 -136
- package/src/execution/index.ts +0 -4
- package/src/index.ts +0 -20
- package/src/metrics/index.ts +0 -4
- package/src/metrics/metrics/beacon.ts +0 -390
- package/src/metrics/metrics/lodestar.ts +0 -1870
- package/src/metrics/metrics.ts +0 -43
- package/src/metrics/nodeJsMetrics.ts +0 -19
- package/src/metrics/options.ts +0 -22
- package/src/metrics/server/http.ts +0 -114
- package/src/metrics/server/index.ts +0 -1
- package/src/metrics/utils/avgMinMax.ts +0 -87
- package/src/metrics/utils/gauge.ts +0 -22
- package/src/metrics/utils/registryMetricCreator.ts +0 -41
- package/src/monitoring/clientStats.ts +0 -297
- package/src/monitoring/index.ts +0 -2
- package/src/monitoring/options.ts +0 -19
- package/src/monitoring/properties.ts +0 -152
- package/src/monitoring/service.ts +0 -235
- package/src/monitoring/system.ts +0 -146
- package/src/monitoring/types.ts +0 -21
- package/src/network/core/events.ts +0 -59
- package/src/network/core/index.ts +0 -3
- package/src/network/core/metrics.ts +0 -304
- package/src/network/core/networkCore.ts +0 -599
- package/src/network/core/networkCoreWorker.ts +0 -176
- package/src/network/core/networkCoreWorkerHandler.ts +0 -284
- package/src/network/core/types.ts +0 -119
- package/src/network/discv5/index.ts +0 -132
- package/src/network/discv5/types.ts +0 -74
- package/src/network/discv5/utils.ts +0 -50
- package/src/network/discv5/worker.ts +0 -137
- package/src/network/events.ts +0 -51
- package/src/network/forks.ts +0 -94
- package/src/network/gossip/constants.ts +0 -15
- package/src/network/gossip/encoding.ts +0 -111
- package/src/network/gossip/errors.ts +0 -7
- package/src/network/gossip/gossipsub.ts +0 -384
- package/src/network/gossip/index.ts +0 -4
- package/src/network/gossip/interface.ts +0 -215
- package/src/network/gossip/metrics.ts +0 -71
- package/src/network/gossip/scoringParameters.ts +0 -333
- package/src/network/gossip/topic.ts +0 -332
- package/src/network/index.ts +0 -8
- package/src/network/interface.ts +0 -134
- package/src/network/libp2p/error.ts +0 -55
- package/src/network/libp2p/index.ts +0 -153
- package/src/network/metadata.ts +0 -162
- package/src/network/network.ts +0 -767
- package/src/network/networkConfig.ts +0 -12
- package/src/network/options.ts +0 -70
- package/src/network/peers/client.ts +0 -29
- package/src/network/peers/datastore.ts +0 -188
- package/src/network/peers/discover.ts +0 -647
- package/src/network/peers/index.ts +0 -2
- package/src/network/peers/peerManager.ts +0 -899
- package/src/network/peers/peersData.ts +0 -65
- package/src/network/peers/score/constants.ts +0 -34
- package/src/network/peers/score/index.ts +0 -4
- package/src/network/peers/score/interface.ts +0 -74
- package/src/network/peers/score/score.ts +0 -200
- package/src/network/peers/score/store.ts +0 -95
- package/src/network/peers/score/utils.ts +0 -37
- package/src/network/peers/utils/assertPeerRelevance.ts +0 -99
- package/src/network/peers/utils/enrSubnetsDeserialize.ts +0 -27
- package/src/network/peers/utils/getConnectedPeerIds.ts +0 -33
- package/src/network/peers/utils/index.ts +0 -4
- package/src/network/peers/utils/prioritizePeers.ts +0 -627
- package/src/network/peers/utils/subnetMap.ts +0 -88
- package/src/network/processor/aggregatorTracker.ts +0 -38
- package/src/network/processor/extractSlotRootFns.ts +0 -64
- package/src/network/processor/gossipHandlers.ts +0 -951
- package/src/network/processor/gossipQueues/index.ts +0 -114
- package/src/network/processor/gossipQueues/indexed.ts +0 -219
- package/src/network/processor/gossipQueues/linear.ts +0 -162
- package/src/network/processor/gossipQueues/types.ts +0 -57
- package/src/network/processor/gossipValidatorFn.ts +0 -142
- package/src/network/processor/index.ts +0 -496
- package/src/network/processor/types.ts +0 -27
- package/src/network/reqresp/ReqRespBeaconNode.ts +0 -373
- package/src/network/reqresp/handlers/beaconBlocksByRange.ts +0 -101
- package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +0 -49
- package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -114
- package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -62
- package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +0 -144
- package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +0 -88
- package/src/network/reqresp/handlers/index.ts +0 -78
- package/src/network/reqresp/handlers/lightClientBootstrap.ts +0 -31
- package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +0 -21
- package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +0 -21
- package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +0 -39
- package/src/network/reqresp/index.ts +0 -2
- package/src/network/reqresp/interface.ts +0 -45
- package/src/network/reqresp/protocols.ts +0 -146
- package/src/network/reqresp/rateLimit.ts +0 -112
- package/src/network/reqresp/score.ts +0 -70
- package/src/network/reqresp/types.ts +0 -174
- package/src/network/reqresp/utils/collect.ts +0 -84
- package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +0 -57
- package/src/network/reqresp/utils/dataColumnResponseValidation.ts +0 -99
- package/src/network/statusCache.ts +0 -17
- package/src/network/subnets/attnetsService.ts +0 -385
- package/src/network/subnets/index.ts +0 -2
- package/src/network/subnets/interface.ts +0 -66
- package/src/network/subnets/syncnetsService.ts +0 -147
- package/src/network/subnets/util.ts +0 -63
- package/src/network/util.ts +0 -29
- package/src/node/index.ts +0 -2
- package/src/node/nodejs.ts +0 -349
- package/src/node/notifier.ts +0 -206
- package/src/node/options.ts +0 -51
- package/src/node/utils/interop/deposits.ts +0 -53
- package/src/node/utils/interop/state.ts +0 -59
- package/src/node/utils/lightclient.ts +0 -7
- package/src/node/utils/state.ts +0 -37
- package/src/sync/backfill/backfill.ts +0 -893
- package/src/sync/backfill/errors.ts +0 -23
- package/src/sync/backfill/index.ts +0 -1
- package/src/sync/backfill/verify.ts +0 -58
- package/src/sync/constants.ts +0 -71
- package/src/sync/index.ts +0 -2
- package/src/sync/interface.ts +0 -55
- package/src/sync/options.ts +0 -45
- package/src/sync/range/batch.ts +0 -455
- package/src/sync/range/chain.ts +0 -715
- package/src/sync/range/range.ts +0 -354
- package/src/sync/range/utils/batches.ts +0 -119
- package/src/sync/range/utils/chainTarget.ts +0 -62
- package/src/sync/range/utils/hashBlocks.ts +0 -27
- package/src/sync/range/utils/index.ts +0 -5
- package/src/sync/range/utils/peerBalancer.ts +0 -184
- package/src/sync/range/utils/updateChains.ts +0 -66
- package/src/sync/sync.ts +0 -290
- package/src/sync/types.ts +0 -57
- package/src/sync/unknownBlock.ts +0 -859
- package/src/sync/utils/downloadByRange.ts +0 -808
- package/src/sync/utils/downloadByRoot.ts +0 -560
- package/src/sync/utils/pendingBlocksTree.ts +0 -97
- package/src/sync/utils/remoteSyncType.ts +0 -144
- package/src/util/address.ts +0 -3
- package/src/util/array.ts +0 -311
- package/src/util/asyncIterableToEvents.ts +0 -164
- package/src/util/binarySearch.ts +0 -48
- package/src/util/bitArray.ts +0 -84
- package/src/util/blobs.ts +0 -210
- package/src/util/bufferPool.ts +0 -95
- package/src/util/bytes.ts +0 -11
- package/src/util/chunkify.ts +0 -27
- package/src/util/clock.ts +0 -212
- package/src/util/dataColumns.ts +0 -415
- package/src/util/dependentRoot.ts +0 -47
- package/src/util/enum.ts +0 -17
- package/src/util/error.ts +0 -56
- package/src/util/eventLoop.ts +0 -22
- package/src/util/execution.ts +0 -223
- package/src/util/file.ts +0 -52
- package/src/util/forkChoice.ts +0 -5
- package/src/util/forkName.ts +0 -20
- package/src/util/graffiti.ts +0 -39
- package/src/util/hex.ts +0 -9
- package/src/util/index.ts +0 -2
- package/src/util/ip.ts +0 -6
- package/src/util/itTrigger.ts +0 -49
- package/src/util/kzg.ts +0 -3
- package/src/util/map.ts +0 -77
- package/src/util/metadata.ts +0 -22
- package/src/util/multifork.ts +0 -69
- package/src/util/numpy.ts +0 -8
- package/src/util/peerId.ts +0 -16
- package/src/util/profile.ts +0 -54
- package/src/util/promises.ts +0 -14
- package/src/util/queue/errors.ts +0 -14
- package/src/util/queue/fnQueue.ts +0 -16
- package/src/util/queue/index.ts +0 -4
- package/src/util/queue/itemQueue.ts +0 -128
- package/src/util/queue/options.ts +0 -37
- package/src/util/serializedCache.ts +0 -20
- package/src/util/set.ts +0 -62
- package/src/util/shuffle.ts +0 -21
- package/src/util/sortBy.ts +0 -19
- package/src/util/sszBytes.ts +0 -481
- package/src/util/strictEvents.ts +0 -8
- package/src/util/time.ts +0 -13
- package/src/util/timeSeries.ts +0 -118
- package/src/util/types.ts +0 -31
- package/src/util/workerEvents.ts +0 -142
- package/src/util/wrapError.ts +0 -27
|
@@ -1,385 +0,0 @@
|
|
|
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
|
-
() => {
|
|
168
|
-
this.onHalfSlot(clockSlot);
|
|
169
|
-
},
|
|
170
|
-
this.config.SECONDS_PER_SLOT * 0.5 * 1000
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
for (const [dutiedSlot, dutiedInfo] of this.aggregatorSlotSubnet.entries()) {
|
|
174
|
-
if (dutiedSlot === clockSlot + this.opts.slotsToSubscribeBeforeAggregatorDuty) {
|
|
175
|
-
// Trigger gossip subscription first, in batch
|
|
176
|
-
if (dutiedInfo.size > 0) {
|
|
177
|
-
this.subscribeToSubnets(Array.from(dutiedInfo.keys()), SubnetSource.committee);
|
|
178
|
-
}
|
|
179
|
-
// Then, register the subscriptions
|
|
180
|
-
for (const subnet of dutiedInfo.keys()) {
|
|
181
|
-
this.shortLivedSubscriptions.request({subnet, toSlot: dutiedSlot});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
this.trackTimeToStableMesh(clockSlot, dutiedSlot, dutiedInfo);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
this.unsubscribeExpiredCommitteeSubnets(clockSlot);
|
|
188
|
-
this.pruneExpiredAggregator(clockSlot);
|
|
189
|
-
} catch (e) {
|
|
190
|
-
this.logger.error("Error on AttnetsService.onSlot", {slot: clockSlot}, e as Error);
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
private onHalfSlot = (clockSlot: Slot): void => {
|
|
195
|
-
for (const [dutiedSlot, dutiedInfo] of this.aggregatorSlotSubnet.entries()) {
|
|
196
|
-
this.trackTimeToStableMesh(clockSlot, dutiedSlot, dutiedInfo);
|
|
197
|
-
}
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Track time to form stable mesh if not yet formed
|
|
202
|
-
*/
|
|
203
|
-
private trackTimeToStableMesh(clockSlot: Slot, dutiedSlot: Slot, dutiedInfo: AggregatorDutyInfo): void {
|
|
204
|
-
if (dutiedSlot < clockSlot) {
|
|
205
|
-
// aggregator duty is expired, set timeToStableMesh to some big value so we know this value is not good
|
|
206
|
-
for (const [subnet, timeToFormMesh] of dutiedInfo.entries()) {
|
|
207
|
-
if (timeToFormMesh === null) {
|
|
208
|
-
dutiedInfo.set(subnet, NOT_ABLE_TO_FORM_STABLE_MESH_SEC);
|
|
209
|
-
this.metrics?.attnetsService.subscriptionsCommitteeTimeToStableMesh.observe(
|
|
210
|
-
{subnet},
|
|
211
|
-
NOT_ABLE_TO_FORM_STABLE_MESH_SEC
|
|
212
|
-
);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
} else if (dutiedSlot <= clockSlot + this.opts.slotsToSubscribeBeforeAggregatorDuty) {
|
|
216
|
-
// aggregator duty is not expired, track time to stable mesh if this is the 1st time we see mesh peers>=Dlo (6)
|
|
217
|
-
for (const [subnet, timeToFormMesh] of dutiedInfo.entries()) {
|
|
218
|
-
if (timeToFormMesh === null) {
|
|
219
|
-
const topicStr = stringifyGossipTopic(this.config, {
|
|
220
|
-
type: gossipType,
|
|
221
|
-
boundary: this.config.getForkBoundaryAtEpoch(computeEpochAtSlot(dutiedSlot)),
|
|
222
|
-
subnet,
|
|
223
|
-
});
|
|
224
|
-
const numMeshPeers = this.gossip.mesh.get(topicStr)?.size ?? 0;
|
|
225
|
-
if (numMeshPeers >= GOSSIP_D_LOW) {
|
|
226
|
-
const timeToStableMeshSec = this.clock.secFromSlot(
|
|
227
|
-
dutiedSlot - this.opts.slotsToSubscribeBeforeAggregatorDuty
|
|
228
|
-
);
|
|
229
|
-
// set to dutiedInfo so we'll not set to metrics again
|
|
230
|
-
dutiedInfo.set(subnet, timeToStableMeshSec);
|
|
231
|
-
this.metrics?.attnetsService.subscriptionsCommitteeTimeToStableMesh.observe({subnet}, timeToStableMeshSec);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Run per epoch, clean-up operations that are not urgent
|
|
240
|
-
* Subscribe to new random subnets every EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION epochs
|
|
241
|
-
*/
|
|
242
|
-
private onEpoch = (epoch: Epoch): void => {
|
|
243
|
-
try {
|
|
244
|
-
if (epoch % EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION === 0) {
|
|
245
|
-
this.recomputeLongLivedSubnets();
|
|
246
|
-
}
|
|
247
|
-
} catch (e) {
|
|
248
|
-
this.logger.error("Error on AttnetsService.onEpoch", {epoch}, e as Error);
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
private recomputeLongLivedSubnets(): void {
|
|
253
|
-
if (this.nodeId === null) {
|
|
254
|
-
this.logger.verbose("Cannot recompute long-lived subscriptions, no nodeId");
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
const oldSubnets = this.longLivedSubscriptions;
|
|
259
|
-
const newSubnets = computeSubscribedSubnet(this.nodeId, this.clock.currentEpoch);
|
|
260
|
-
this.logger.verbose("Recomputing long-lived subscriptions", {
|
|
261
|
-
epoch: this.clock.currentEpoch,
|
|
262
|
-
oldSubnets: Array.from(oldSubnets).join(","),
|
|
263
|
-
newSubnets: newSubnets.join(","),
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
const toRemoveSubnets = [];
|
|
267
|
-
for (const subnet of oldSubnets) {
|
|
268
|
-
if (!newSubnets.includes(subnet)) {
|
|
269
|
-
toRemoveSubnets.push(subnet);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// First, tell gossip to subscribe to the subnets if not connected already
|
|
274
|
-
this.subscribeToSubnets(newSubnets, SubnetSource.longLived);
|
|
275
|
-
|
|
276
|
-
// then update longLivedSubscriptions
|
|
277
|
-
for (const subnet of toRemoveSubnets) {
|
|
278
|
-
this.longLivedSubscriptions.delete(subnet);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
for (const subnet of newSubnets) {
|
|
282
|
-
// this.longLivedSubscriptions is a set so it'll handle duplicates
|
|
283
|
-
this.longLivedSubscriptions.add(subnet);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// Only tell gossip to unsubsribe last, longLivedSubscriptions has the latest state
|
|
287
|
-
this.unsubscribeSubnets(toRemoveSubnets, this.clock.currentSlot, SubnetSource.longLived);
|
|
288
|
-
this.updateMetadata();
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Unsubscribe to a committee subnet from subscribedCommitteeSubnets.
|
|
293
|
-
* If a random subnet is present, we do not unsubscribe from it.
|
|
294
|
-
*/
|
|
295
|
-
private unsubscribeExpiredCommitteeSubnets(slot: Slot): void {
|
|
296
|
-
const expired = this.shortLivedSubscriptions.getExpired(slot);
|
|
297
|
-
if (expired.length > 0) {
|
|
298
|
-
this.unsubscribeSubnets(expired, slot, SubnetSource.committee);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* No need to track aggregator for past slots.
|
|
304
|
-
* @param currentSlot
|
|
305
|
-
*/
|
|
306
|
-
private pruneExpiredAggregator(currentSlot: Slot): void {
|
|
307
|
-
for (const dutiedSlot of this.aggregatorSlotSubnet.keys()) {
|
|
308
|
-
if (currentSlot > dutiedSlot) {
|
|
309
|
-
this.aggregatorSlotSubnet.delete(dutiedSlot);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/** Update ENR */
|
|
315
|
-
private updateMetadata(): void {
|
|
316
|
-
const subnets = ssz.phase0.AttestationSubnets.defaultValue();
|
|
317
|
-
for (const subnet of this.longLivedSubscriptions) {
|
|
318
|
-
subnets.set(subnet, true);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
// Only update metadata if necessary, setting `metadata.[key]` triggers a write to disk
|
|
322
|
-
if (!ssz.phase0.AttestationSubnets.equals(subnets, this.metadata.attnets)) {
|
|
323
|
-
this.metadata.attnets = subnets;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* Trigger a gossip subcription only if not already subscribed
|
|
329
|
-
* shortLivedSubscriptions or longLivedSubscriptions should be updated right AFTER this called
|
|
330
|
-
**/
|
|
331
|
-
private subscribeToSubnets(subnets: number[], src: SubnetSource): void {
|
|
332
|
-
const boundaries = getActiveForkBoundaries(this.config, this.clock.currentEpoch);
|
|
333
|
-
|
|
334
|
-
for (const subnet of subnets) {
|
|
335
|
-
if (!this.shortLivedSubscriptions.has(subnet) && !this.longLivedSubscriptions.has(subnet)) {
|
|
336
|
-
for (const boundary of boundaries) {
|
|
337
|
-
this.gossip.subscribeTopic({type: gossipType, subnet, boundary});
|
|
338
|
-
}
|
|
339
|
-
this.metrics?.attnetsService.subscribeSubnets.inc({subnet, src});
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
/**
|
|
345
|
-
* Trigger a gossip un-subscription only if no-one is still subscribed
|
|
346
|
-
* If unsubscribe long lived subnets, longLivedSubscriptions should be updated right BEFORE this called
|
|
347
|
-
**/
|
|
348
|
-
private unsubscribeSubnets(subnets: number[], slot: Slot, src: SubnetSource): void {
|
|
349
|
-
// No need to unsubscribeTopic(). Return early to prevent repetitive extra work
|
|
350
|
-
if (this.opts.subscribeAllSubnets) return;
|
|
351
|
-
|
|
352
|
-
const boundaries = getActiveForkBoundaries(this.config, this.clock.currentEpoch);
|
|
353
|
-
|
|
354
|
-
for (const subnet of subnets) {
|
|
355
|
-
if (!this.shortLivedSubscriptions.isActiveAtSlot(subnet, slot) && !this.longLivedSubscriptions.has(subnet)) {
|
|
356
|
-
for (const boundary of boundaries) {
|
|
357
|
-
this.gossip.unsubscribeTopic({type: gossipType, subnet, boundary});
|
|
358
|
-
}
|
|
359
|
-
this.metrics?.attnetsService.unsubscribeSubnets.inc({subnet, src});
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
private onScrapeLodestarMetrics(metrics: NetworkCoreMetrics): void {
|
|
365
|
-
metrics.attnetsService.committeeSubnets.set(this.committeeSubnets.size);
|
|
366
|
-
metrics.attnetsService.subscriptionsCommittee.set(this.shortLivedSubscriptions.size);
|
|
367
|
-
// track short lived subnet status, >= 6 (Dlo) means healthy, otherwise unhealthy
|
|
368
|
-
const currentSlot = this.clock.currentSlot;
|
|
369
|
-
for (const {subnet} of this.shortLivedSubscriptions.getActiveTtl(currentSlot)) {
|
|
370
|
-
const topicStr = stringifyGossipTopic(this.config, {
|
|
371
|
-
type: gossipType,
|
|
372
|
-
boundary: this.config.getForkBoundaryAtEpoch(this.clock.currentEpoch),
|
|
373
|
-
subnet,
|
|
374
|
-
});
|
|
375
|
-
const numMeshPeers = this.gossip.mesh.get(topicStr)?.size ?? 0;
|
|
376
|
-
metrics.attnetsService.subscriptionsCommitteeMeshPeers.observe({subnet}, numMeshPeers);
|
|
377
|
-
}
|
|
378
|
-
metrics.attnetsService.longLivedSubscriptions.set(this.longLivedSubscriptions.size);
|
|
379
|
-
let aggregatorCount = 0;
|
|
380
|
-
for (const subnets of this.aggregatorSlotSubnet.values()) {
|
|
381
|
-
aggregatorCount += subnets.size;
|
|
382
|
-
}
|
|
383
|
-
metrics.attnetsService.aggregatorSlotSubnetCount.set(aggregatorCount);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,147 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
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
|
-
}
|