@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,893 +0,0 @@
|
|
|
1
|
-
import {EventEmitter} from "node:events";
|
|
2
|
-
import {StrictEventEmitter} from "strict-event-emitter-types";
|
|
3
|
-
import {BeaconConfig, ChainForkConfig} from "@lodestar/config";
|
|
4
|
-
import {SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
5
|
-
import {BeaconStateAllForks, blockToHeader, computeAnchorCheckpoint} from "@lodestar/state-transition";
|
|
6
|
-
import {Root, SignedBeaconBlock, Slot, phase0, ssz} from "@lodestar/types";
|
|
7
|
-
import {ErrorAborted, Logger, sleep, toRootHex} from "@lodestar/utils";
|
|
8
|
-
import {IBeaconChain} from "../../chain/index.js";
|
|
9
|
-
import {GENESIS_SLOT, ZERO_HASH} from "../../constants/index.js";
|
|
10
|
-
import {IBeaconDb} from "../../db/index.js";
|
|
11
|
-
import {Metrics} from "../../metrics/metrics.js";
|
|
12
|
-
import {INetwork, NetworkEvent, NetworkEventData, PeerAction} from "../../network/index.js";
|
|
13
|
-
import {byteArrayEquals} from "../../util/bytes.js";
|
|
14
|
-
import {ItTrigger} from "../../util/itTrigger.js";
|
|
15
|
-
import {PeerIdStr} from "../../util/peerId.js";
|
|
16
|
-
import {shuffleOne} from "../../util/shuffle.js";
|
|
17
|
-
import {BackfillSyncError, BackfillSyncErrorCode} from "./errors.js";
|
|
18
|
-
import {BackfillBlock, BackfillBlockHeader, verifyBlockProposerSignature, verifyBlockSequence} from "./verify.js";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Timeout in ms to take a break from reading a backfillBatchSize from db, as just yielding
|
|
22
|
-
* to sync loop gives hardly any.
|
|
23
|
-
*/
|
|
24
|
-
const DB_READ_BREATHER_TIMEOUT = 1000;
|
|
25
|
-
|
|
26
|
-
export type BackfillSyncModules = {
|
|
27
|
-
chain: IBeaconChain;
|
|
28
|
-
db: IBeaconDb;
|
|
29
|
-
network: INetwork;
|
|
30
|
-
config: BeaconConfig;
|
|
31
|
-
logger: Logger;
|
|
32
|
-
metrics: Metrics | null;
|
|
33
|
-
anchorState: BeaconStateAllForks;
|
|
34
|
-
wsCheckpoint?: phase0.Checkpoint;
|
|
35
|
-
signal: AbortSignal;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
type BackfillModules = BackfillSyncModules & {
|
|
39
|
-
syncAnchor: BackFillSyncAnchor;
|
|
40
|
-
backfillStartFromSlot: Slot;
|
|
41
|
-
prevFinalizedCheckpointBlock: BackfillBlockHeader;
|
|
42
|
-
wsCheckpointHeader: BackfillBlockHeader | null;
|
|
43
|
-
backfillRangeWrittenSlot: Slot | null;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export type BackfillSyncOpts = {
|
|
47
|
-
backfillBatchSize: number;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
export enum BackfillSyncEvent {
|
|
51
|
-
completed = "BackfillSync-completed",
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export enum BackfillSyncMethod {
|
|
55
|
-
database = "database",
|
|
56
|
-
backfilled_ranges = "backfilled_ranges",
|
|
57
|
-
rangesync = "rangesync",
|
|
58
|
-
blockbyroot = "blockbyroot",
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export enum BackfillSyncStatus {
|
|
62
|
-
pending = "pending",
|
|
63
|
-
syncing = "syncing",
|
|
64
|
-
completed = "completed",
|
|
65
|
-
aborted = "aborted",
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** Map a SyncState to an integer for rendering in Grafana */
|
|
69
|
-
const syncStatus: {[K in BackfillSyncStatus]: number} = {
|
|
70
|
-
[BackfillSyncStatus.aborted]: 0,
|
|
71
|
-
[BackfillSyncStatus.pending]: 1,
|
|
72
|
-
[BackfillSyncStatus.syncing]: 2,
|
|
73
|
-
[BackfillSyncStatus.completed]: 3,
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
type BackfillSyncEvents = {
|
|
77
|
-
[BackfillSyncEvent.completed]: (
|
|
78
|
-
/** Oldest slot synced */
|
|
79
|
-
oldestSlotSynced: Slot
|
|
80
|
-
) => void;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
type BackfillSyncEmitter = StrictEventEmitter<EventEmitter, BackfillSyncEvents>;
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* At any given point, we should have
|
|
87
|
-
* 1. anchorBlock (with its root anchorBlockRoot at anchorSlot) for next round of sync
|
|
88
|
-
* which is the same as the lastBackSyncedBlock
|
|
89
|
-
* 2. We know the anchorBlockRoot but don't have its anchorBlock and anchorSlot yet, and its
|
|
90
|
-
* parent of lastBackSyncedBlock we synced in a previous successfull round
|
|
91
|
-
* 3. We just started with only anchorBlockRoot, but we know (and will validate) its anchorSlot
|
|
92
|
-
*/
|
|
93
|
-
type BackFillSyncAnchor =
|
|
94
|
-
| {
|
|
95
|
-
anchorBlock: SignedBeaconBlock;
|
|
96
|
-
anchorBlockRoot: Root;
|
|
97
|
-
anchorSlot: Slot;
|
|
98
|
-
lastBackSyncedBlock: BackfillBlock;
|
|
99
|
-
}
|
|
100
|
-
| {anchorBlock: null; anchorBlockRoot: Root; anchorSlot: null; lastBackSyncedBlock: BackfillBlock}
|
|
101
|
-
| {anchorBlock: null; anchorBlockRoot: Root; anchorSlot: Slot; lastBackSyncedBlock: null};
|
|
102
|
-
|
|
103
|
-
export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}) {
|
|
104
|
-
/** Lowest slot that we have backfilled to */
|
|
105
|
-
syncAnchor: BackFillSyncAnchor;
|
|
106
|
-
|
|
107
|
-
private readonly chain: IBeaconChain;
|
|
108
|
-
private readonly network: INetwork;
|
|
109
|
-
private readonly db: IBeaconDb;
|
|
110
|
-
private readonly config: BeaconConfig;
|
|
111
|
-
private readonly logger: Logger;
|
|
112
|
-
private readonly metrics: Metrics | null;
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Process in blocks of at max batchSize
|
|
116
|
-
*/
|
|
117
|
-
private opts: BackfillSyncOpts;
|
|
118
|
-
/**
|
|
119
|
-
* If wsCheckpoint provided was in past then the (db) state from which beacon node started,
|
|
120
|
-
* needs to be validated as per spec.
|
|
121
|
-
*
|
|
122
|
-
* 1. This could lie in between of the previous backfilled range, in which case it would be
|
|
123
|
-
* sufficient to check if its DB, once the linkage to that range has been verified.
|
|
124
|
-
* 2. Else if it lies outside the backfilled range, the linkage to this checkpoint in
|
|
125
|
-
* backfill needs to be verified.
|
|
126
|
-
*/
|
|
127
|
-
private wsCheckpointHeader: BackfillBlockHeader | null;
|
|
128
|
-
private wsValidated = false;
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* From https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* If
|
|
135
|
-
* 1. The wsCheckpoint provided was ahead of the db's finalized checkpoint or
|
|
136
|
-
* 2. There were gaps in the backfill - keys to backfillRanges are always (by construction)
|
|
137
|
-
* a) Finalized Checkpoint or b) previous wsCheckpoint
|
|
138
|
-
*
|
|
139
|
-
* the linkage to the previous finalized/wss checkpoint(s) needs to be verfied. If there is
|
|
140
|
-
* no such checkpoint remaining, the linkage to genesis needs to be validated
|
|
141
|
-
*
|
|
142
|
-
* Initialize with the blockArchive's last block, and on verification update to the next
|
|
143
|
-
* preceding backfillRange key's checkpoint.
|
|
144
|
-
*/
|
|
145
|
-
private prevFinalizedCheckpointBlock: BackfillBlockHeader;
|
|
146
|
-
/** Starting point that this specific backfill sync "session" started from */
|
|
147
|
-
private backfillStartFromSlot: Slot;
|
|
148
|
-
private backfillRangeWrittenSlot: Slot | null;
|
|
149
|
-
|
|
150
|
-
private processor = new ItTrigger();
|
|
151
|
-
private peers = new Set<PeerIdStr>();
|
|
152
|
-
private status: BackfillSyncStatus = BackfillSyncStatus.pending;
|
|
153
|
-
private signal: AbortSignal;
|
|
154
|
-
|
|
155
|
-
constructor(opts: BackfillSyncOpts, modules: BackfillModules) {
|
|
156
|
-
super();
|
|
157
|
-
|
|
158
|
-
this.syncAnchor = modules.syncAnchor;
|
|
159
|
-
this.backfillStartFromSlot = modules.backfillStartFromSlot;
|
|
160
|
-
this.backfillRangeWrittenSlot = modules.backfillRangeWrittenSlot;
|
|
161
|
-
this.prevFinalizedCheckpointBlock = modules.prevFinalizedCheckpointBlock;
|
|
162
|
-
this.wsCheckpointHeader = modules.wsCheckpointHeader;
|
|
163
|
-
|
|
164
|
-
this.chain = modules.chain;
|
|
165
|
-
this.network = modules.network;
|
|
166
|
-
this.db = modules.db;
|
|
167
|
-
this.config = modules.config;
|
|
168
|
-
this.logger = modules.logger;
|
|
169
|
-
this.metrics = modules.metrics;
|
|
170
|
-
|
|
171
|
-
this.opts = opts;
|
|
172
|
-
this.network.events.on(NetworkEvent.peerConnected, this.addPeer);
|
|
173
|
-
this.network.events.on(NetworkEvent.peerDisconnected, this.removePeer);
|
|
174
|
-
this.signal = modules.signal;
|
|
175
|
-
|
|
176
|
-
this.sync()
|
|
177
|
-
.then((oldestSlotSynced) => {
|
|
178
|
-
if (this.status !== BackfillSyncStatus.completed) {
|
|
179
|
-
throw new ErrorAborted(`Invalid BackfillSyncStatus at the completion of sync loop status=${this.status}`);
|
|
180
|
-
}
|
|
181
|
-
this.emit(BackfillSyncEvent.completed, oldestSlotSynced);
|
|
182
|
-
this.logger.info("BackfillSync completed", {oldestSlotSynced});
|
|
183
|
-
// Sync completed, unsubscribe listeners and don't run the processor again.
|
|
184
|
-
// Backfill is never necessary again until the node shuts down
|
|
185
|
-
this.close();
|
|
186
|
-
})
|
|
187
|
-
.catch((e) => {
|
|
188
|
-
this.logger.error("BackfillSync processor error", e);
|
|
189
|
-
this.status = BackfillSyncStatus.aborted;
|
|
190
|
-
this.close();
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
const metrics = this.metrics;
|
|
194
|
-
if (metrics) {
|
|
195
|
-
metrics.backfillSync.status.addCollect(() => metrics.backfillSync.status.set(syncStatus[this.status]));
|
|
196
|
-
metrics.backfillSync.backfilledTillSlot.addCollect(() =>
|
|
197
|
-
metrics.backfillSync.backfilledTillSlot.set(
|
|
198
|
-
this.syncAnchor.lastBackSyncedBlock?.slot ?? this.backfillStartFromSlot
|
|
199
|
-
)
|
|
200
|
-
);
|
|
201
|
-
metrics.backfillSync.prevFinOrWsSlot.addCollect(() =>
|
|
202
|
-
metrics.backfillSync.prevFinOrWsSlot.set(Math.max(this.prevFinalizedCheckpointBlock.slot, GENESIS_SLOT))
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Use the root of the anchorState of the beacon node as the starting point of the
|
|
209
|
-
* backfill sync with its expected slot to be anchorState.slot, which will be
|
|
210
|
-
* validated once the block is resolved in the backfill sync.
|
|
211
|
-
*
|
|
212
|
-
* NOTE: init here is quite light involving couple of
|
|
213
|
-
*
|
|
214
|
-
* 1. db keys lookup in stateArchive/backfilledRanges
|
|
215
|
-
* 2. computing root(s) for anchorBlockRoot and prevFinalizedCheckpointBlock
|
|
216
|
-
*
|
|
217
|
-
* The way we initialize beacon node, wsCheckpoint's slot is always <= anchorSlot
|
|
218
|
-
* If:
|
|
219
|
-
* the root belonging to wsCheckpoint is in the DB, we need to verify linkage to it
|
|
220
|
-
* i.e. it becomes our first prevFinalizedCheckpointBlock
|
|
221
|
-
* Else
|
|
222
|
-
* we initialize prevFinalizedCheckpointBlock from the last stored db finalized state
|
|
223
|
-
* for verification and when we go below its epoch we just check if a correct block
|
|
224
|
-
* corresponding to wsCheckpoint root was stored.
|
|
225
|
-
*
|
|
226
|
-
* and then we continue going back and verifying the next unconnected previous finalized
|
|
227
|
-
* or wsCheckpoints identifiable as the keys of backfill sync.
|
|
228
|
-
*/
|
|
229
|
-
static async init<T extends BackfillSync = BackfillSync>(
|
|
230
|
-
opts: BackfillSyncOpts,
|
|
231
|
-
modules: BackfillSyncModules
|
|
232
|
-
): Promise<T> {
|
|
233
|
-
const {config, anchorState, db, wsCheckpoint, logger} = modules;
|
|
234
|
-
|
|
235
|
-
const {checkpoint: anchorCp} = computeAnchorCheckpoint(config, anchorState);
|
|
236
|
-
const anchorSlot = anchorState.latestBlockHeader.slot;
|
|
237
|
-
const syncAnchor = {
|
|
238
|
-
anchorBlock: null,
|
|
239
|
-
anchorBlockRoot: anchorCp.root,
|
|
240
|
-
anchorSlot,
|
|
241
|
-
lastBackSyncedBlock: null,
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
// Load the previous written to slot for the key backfillStartFromSlot
|
|
245
|
-
// in backfilledRanges
|
|
246
|
-
const backfillStartFromSlot = anchorSlot;
|
|
247
|
-
const backfillRangeWrittenSlot = await db.backfilledRanges.get(backfillStartFromSlot);
|
|
248
|
-
const previousBackfilledRanges = await db.backfilledRanges.entries({
|
|
249
|
-
lte: backfillStartFromSlot,
|
|
250
|
-
});
|
|
251
|
-
modules.logger.info("Initializing from Checkpoint", {
|
|
252
|
-
root: toRootHex(anchorCp.root),
|
|
253
|
-
epoch: anchorCp.epoch,
|
|
254
|
-
backfillStartFromSlot,
|
|
255
|
-
previousBackfilledRanges: JSON.stringify(previousBackfilledRanges),
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
// wsCheckpointHeader is where the checkpoint can actually be validated
|
|
259
|
-
const wsCheckpointHeader: BackfillBlockHeader | null = wsCheckpoint
|
|
260
|
-
? {root: wsCheckpoint.root, slot: wsCheckpoint.epoch * SLOTS_PER_EPOCH}
|
|
261
|
-
: null;
|
|
262
|
-
// Load a previous finalized or wsCheckpoint slot from DB below anchorSlot
|
|
263
|
-
const prevFinalizedCheckpointBlock = await extractPreviousFinOrWsCheckpoint(config, db, anchorSlot, logger);
|
|
264
|
-
|
|
265
|
-
return new BackfillSync(opts, {
|
|
266
|
-
syncAnchor,
|
|
267
|
-
backfillStartFromSlot,
|
|
268
|
-
backfillRangeWrittenSlot,
|
|
269
|
-
wsCheckpointHeader,
|
|
270
|
-
prevFinalizedCheckpointBlock,
|
|
271
|
-
...modules,
|
|
272
|
-
}) as T;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/** Throw / return all AsyncGenerators */
|
|
276
|
-
close(): void {
|
|
277
|
-
this.network.events.off(NetworkEvent.peerConnected, this.addPeer);
|
|
278
|
-
this.network.events.off(NetworkEvent.peerDisconnected, this.removePeer);
|
|
279
|
-
this.processor.end(new ErrorAborted("BackfillSync"));
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* @returns Returns oldestSlotSynced
|
|
284
|
-
*/
|
|
285
|
-
private async sync(): Promise<Slot> {
|
|
286
|
-
this.processor.trigger();
|
|
287
|
-
|
|
288
|
-
for await (const _ of this.processor) {
|
|
289
|
-
if (this.status === BackfillSyncStatus.aborted) {
|
|
290
|
-
/** Break out of sync loop and throw error */
|
|
291
|
-
break;
|
|
292
|
-
}
|
|
293
|
-
this.status = BackfillSyncStatus.syncing;
|
|
294
|
-
|
|
295
|
-
// 1. We should always have either anchorBlock or anchorBlockRoot, they are the
|
|
296
|
-
// anchor points for this round of the sync
|
|
297
|
-
// 2. Check and validate if we have reached prevFinalizedCheckpointBlock
|
|
298
|
-
// On success Update prevFinalizedCheckpointBlock to check the *next* previous
|
|
299
|
-
// 3. Validate Checkpoint as part of DB block tree if we have backfilled
|
|
300
|
-
// before the checkpoint
|
|
301
|
-
// 4. Exit the sync if backfilled till genesis
|
|
302
|
-
//
|
|
303
|
-
// 5. Check if we can jump back from available backfill sequence, if found yield and
|
|
304
|
-
// recontinue from top making checks
|
|
305
|
-
// 7. Check and read batchSize from DB, if found yield and recontinue from top
|
|
306
|
-
// 8. If not in DB, and if peer available
|
|
307
|
-
// a) Either fetch blockByRoot if only anchorBlockRoot is set, which could be because
|
|
308
|
-
// i) its the unavailable root of the very first block to start off sync
|
|
309
|
-
// ii) its parent of lastBackSyncedBlock and there was an issue in establishing
|
|
310
|
-
// linear sequence in syncRange as there could be one or more
|
|
311
|
-
// skipped/orphaned slots
|
|
312
|
-
// between the parent we want to fetch and lastBackSyncedBlock
|
|
313
|
-
// b) read previous batchSize blocks from network assuming most likely those blocks
|
|
314
|
-
// form a linear anchored chain with anchorBlock. If not, try fetching the
|
|
315
|
-
// parent of
|
|
316
|
-
// the anchorBlock via strategy a) as it could be multiple skipped/orphaned slots
|
|
317
|
-
// behind
|
|
318
|
-
if (this.syncAnchor.lastBackSyncedBlock != null) {
|
|
319
|
-
// If after a previous sync round:
|
|
320
|
-
// lastBackSyncedBlock.slot < prevFinalizedCheckpointBlock.slot
|
|
321
|
-
// then it means the prevFinalizedCheckpoint block has been missed because in each
|
|
322
|
-
// round we backfill new blocks till (if the batchSize allows):
|
|
323
|
-
// lastBackSyncedBlock.slot <= prevFinalizedCheckpointBlock.slot
|
|
324
|
-
if (this.syncAnchor.lastBackSyncedBlock.slot < this.prevFinalizedCheckpointBlock.slot) {
|
|
325
|
-
this.logger.error(
|
|
326
|
-
`Backfilled till ${
|
|
327
|
-
this.syncAnchor.lastBackSyncedBlock.slot
|
|
328
|
-
} but not found previous saved finalized or wsCheckpoint with root=${toRootHex(
|
|
329
|
-
this.prevFinalizedCheckpointBlock.root
|
|
330
|
-
)}, slot=${this.prevFinalizedCheckpointBlock.slot}`
|
|
331
|
-
);
|
|
332
|
-
// Break sync loop and throw error
|
|
333
|
-
break;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
if (this.syncAnchor.lastBackSyncedBlock.slot === this.prevFinalizedCheckpointBlock.slot) {
|
|
337
|
-
// Okay! we backfilled successfully till prevFinalizedCheckpointBlock
|
|
338
|
-
if (!byteArrayEquals(this.syncAnchor.lastBackSyncedBlock.root, this.prevFinalizedCheckpointBlock.root)) {
|
|
339
|
-
this.logger.error(
|
|
340
|
-
`Invalid root synced at a previous finalized or wsCheckpoint, slot=${
|
|
341
|
-
this.prevFinalizedCheckpointBlock.slot
|
|
342
|
-
}: expected=${toRootHex(this.prevFinalizedCheckpointBlock.root)}, actual=${toRootHex(
|
|
343
|
-
this.syncAnchor.lastBackSyncedBlock.root
|
|
344
|
-
)}`
|
|
345
|
-
);
|
|
346
|
-
// Break sync loop and throw error
|
|
347
|
-
break;
|
|
348
|
-
}
|
|
349
|
-
this.logger.verbose("Validated current prevFinalizedCheckpointBlock", {
|
|
350
|
-
root: toRootHex(this.prevFinalizedCheckpointBlock.root),
|
|
351
|
-
slot: this.prevFinalizedCheckpointBlock.slot,
|
|
352
|
-
});
|
|
353
|
-
|
|
354
|
-
// 1. If this is not a genesis block save this block in DB as this wasn't saved
|
|
355
|
-
// earlier pending validation. Genesis block will be saved with extra validation
|
|
356
|
-
// before returning from the sync.
|
|
357
|
-
//
|
|
358
|
-
// 2. Load another previous saved finalized or wsCheckpoint which has not
|
|
359
|
-
// been validated yet. These are the keys of backfill ranges as each
|
|
360
|
-
// range denotes
|
|
361
|
-
// a validated connected segment having the slots of previous wsCheckpoint
|
|
362
|
-
// or finalized as keys
|
|
363
|
-
if (this.syncAnchor.lastBackSyncedBlock.slot !== GENESIS_SLOT) {
|
|
364
|
-
await this.db.blockArchive.put(
|
|
365
|
-
this.syncAnchor.lastBackSyncedBlock.slot,
|
|
366
|
-
this.syncAnchor.lastBackSyncedBlock.block
|
|
367
|
-
);
|
|
368
|
-
}
|
|
369
|
-
this.prevFinalizedCheckpointBlock = await extractPreviousFinOrWsCheckpoint(
|
|
370
|
-
this.config,
|
|
371
|
-
this.db,
|
|
372
|
-
this.syncAnchor.lastBackSyncedBlock.slot,
|
|
373
|
-
this.logger
|
|
374
|
-
);
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
if (this.syncAnchor.lastBackSyncedBlock.slot === GENESIS_SLOT) {
|
|
378
|
-
if (!byteArrayEquals(this.syncAnchor.lastBackSyncedBlock.block.message.parentRoot, ZERO_HASH)) {
|
|
379
|
-
Error(
|
|
380
|
-
`Invalid Gensis Block with non zero parentRoot=${toRootHex(
|
|
381
|
-
this.syncAnchor.lastBackSyncedBlock.block.message.parentRoot
|
|
382
|
-
)}`
|
|
383
|
-
);
|
|
384
|
-
}
|
|
385
|
-
await this.db.blockArchive.put(GENESIS_SLOT, this.syncAnchor.lastBackSyncedBlock.block);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
if (this.wsCheckpointHeader && !this.wsValidated) {
|
|
389
|
-
await this.checkIfCheckpointSyncedAndValidate();
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
if (
|
|
393
|
-
this.backfillRangeWrittenSlot === null ||
|
|
394
|
-
this.syncAnchor.lastBackSyncedBlock.slot < this.backfillRangeWrittenSlot
|
|
395
|
-
) {
|
|
396
|
-
this.backfillRangeWrittenSlot = this.syncAnchor.lastBackSyncedBlock.slot;
|
|
397
|
-
await this.db.backfilledRanges.put(this.backfillStartFromSlot, this.backfillRangeWrittenSlot);
|
|
398
|
-
this.logger.debug(
|
|
399
|
-
`Updated the backfill range from=${this.backfillStartFromSlot} till=${this.backfillRangeWrittenSlot}`
|
|
400
|
-
);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
if (this.syncAnchor.lastBackSyncedBlock.slot === GENESIS_SLOT) {
|
|
404
|
-
this.logger.verbose("Successfully synced to genesis.");
|
|
405
|
-
this.status = BackfillSyncStatus.completed;
|
|
406
|
-
return GENESIS_SLOT;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
const foundValidSeq = await this.checkUpdateFromBackfillSequences();
|
|
410
|
-
if (foundValidSeq) {
|
|
411
|
-
// Go back to top and do checks till
|
|
412
|
-
this.processor.trigger();
|
|
413
|
-
continue;
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
try {
|
|
418
|
-
const foundBlocks = await this.fastBackfillDb();
|
|
419
|
-
if (foundBlocks) {
|
|
420
|
-
this.processor.trigger();
|
|
421
|
-
continue;
|
|
422
|
-
}
|
|
423
|
-
} catch (e) {
|
|
424
|
-
this.logger.error("Error while reading from DB", {}, e as Error);
|
|
425
|
-
// Break sync loop and throw error
|
|
426
|
-
break;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// Try the network if nothing found in DB
|
|
430
|
-
const peer = shuffleOne(Array.from(this.peers.values()));
|
|
431
|
-
if (!peer) {
|
|
432
|
-
this.status = BackfillSyncStatus.pending;
|
|
433
|
-
this.logger.debug("No peers yet");
|
|
434
|
-
continue;
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
try {
|
|
438
|
-
if (!this.syncAnchor.anchorBlock) {
|
|
439
|
-
await this.syncBlockByRoot(peer, this.syncAnchor.anchorBlockRoot);
|
|
440
|
-
|
|
441
|
-
// Go back and make the checks in case this block could be at or
|
|
442
|
-
// behind prevFinalizedCheckpointBlock
|
|
443
|
-
} else {
|
|
444
|
-
await this.syncRange(peer);
|
|
445
|
-
|
|
446
|
-
// Go back and make the checks in case the lastbackSyncedBlock could be at or
|
|
447
|
-
// behind prevFinalizedCheckpointBlock
|
|
448
|
-
}
|
|
449
|
-
} catch (e) {
|
|
450
|
-
this.metrics?.backfillSync.errors.inc();
|
|
451
|
-
this.logger.error("Sync error", {}, e as Error);
|
|
452
|
-
|
|
453
|
-
if (e instanceof BackfillSyncError) {
|
|
454
|
-
switch (e.type.code) {
|
|
455
|
-
case BackfillSyncErrorCode.INTERNAL_ERROR:
|
|
456
|
-
// Break it out of the loop and throw error
|
|
457
|
-
this.status = BackfillSyncStatus.aborted;
|
|
458
|
-
break;
|
|
459
|
-
case BackfillSyncErrorCode.NOT_ANCHORED:
|
|
460
|
-
// biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
|
|
461
|
-
case BackfillSyncErrorCode.NOT_LINEAR:
|
|
462
|
-
// Lets try to jump directly to the parent of this anchorBlock as previous
|
|
463
|
-
// (segment) of blocks could be orphaned/missed
|
|
464
|
-
if (this.syncAnchor.anchorBlock) {
|
|
465
|
-
this.syncAnchor = {
|
|
466
|
-
anchorBlock: null,
|
|
467
|
-
anchorBlockRoot: this.syncAnchor.anchorBlock.message.parentRoot,
|
|
468
|
-
anchorSlot: null,
|
|
469
|
-
lastBackSyncedBlock: this.syncAnchor.lastBackSyncedBlock,
|
|
470
|
-
};
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
// falls through
|
|
474
|
-
case BackfillSyncErrorCode.INVALID_SIGNATURE:
|
|
475
|
-
this.network.reportPeer(peer, PeerAction.LowToleranceError, "BadSyncBlocks");
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
} finally {
|
|
479
|
-
if (this.status !== BackfillSyncStatus.aborted) this.processor.trigger();
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
throw new ErrorAborted("BackfillSync");
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
private addPeer = (data: NetworkEventData[NetworkEvent.peerConnected]): void => {
|
|
487
|
-
const requiredSlot = this.syncAnchor.lastBackSyncedBlock?.slot ?? this.backfillStartFromSlot;
|
|
488
|
-
this.logger.debug("Add peer", {peerhead: data.status.headSlot, requiredSlot});
|
|
489
|
-
if (data.status.headSlot >= requiredSlot) {
|
|
490
|
-
this.peers.add(data.peer);
|
|
491
|
-
this.processor.trigger();
|
|
492
|
-
}
|
|
493
|
-
};
|
|
494
|
-
|
|
495
|
-
private removePeer = (data: NetworkEventData[NetworkEvent.peerDisconnected]): void => {
|
|
496
|
-
this.peers.delete(data.peer);
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
/**
|
|
500
|
-
* Ensure that any weak subjectivity checkpoint provided in past with respect
|
|
501
|
-
* the initialization point is the same block tree as the DB once backfill
|
|
502
|
-
*/
|
|
503
|
-
private async checkIfCheckpointSyncedAndValidate(): Promise<void> {
|
|
504
|
-
if (this.syncAnchor.lastBackSyncedBlock == null) {
|
|
505
|
-
throw Error("Invalid lastBackSyncedBlock for checkpoint validation");
|
|
506
|
-
}
|
|
507
|
-
if (this.wsCheckpointHeader == null) {
|
|
508
|
-
throw Error("Invalid null checkpoint for validation");
|
|
509
|
-
}
|
|
510
|
-
if (this.wsValidated) return;
|
|
511
|
-
|
|
512
|
-
if (this.wsCheckpointHeader.slot >= this.syncAnchor.lastBackSyncedBlock.slot) {
|
|
513
|
-
// Checkpoint root should be in db now , in case there are string of orphaned/missed
|
|
514
|
-
// slots before/leading up to checkpoint, the block just backsynced before the
|
|
515
|
-
// wsCheckpointHeader.slot will have the checkpoint root
|
|
516
|
-
const wsDbCheckpointBlock = await this.db.blockArchive.getByRoot(this.wsCheckpointHeader.root);
|
|
517
|
-
if (
|
|
518
|
-
!wsDbCheckpointBlock ||
|
|
519
|
-
// The only validation we can do here is that wsDbCheckpointBlock is found at/before
|
|
520
|
-
// wsCheckpoint's epoch as there could be orphaned/missed slots all the way
|
|
521
|
-
// from wsDbCheckpointBlock's slot to the wsCheckpoint's epoch
|
|
522
|
-
|
|
523
|
-
// TODO: one can verify the child of wsDbCheckpointBlock is at
|
|
524
|
-
// slot > wsCheckpointHeader
|
|
525
|
-
// Note: next epoch is at wsCheckpointHeader.slot + SLOTS_PER_EPOCH
|
|
526
|
-
wsDbCheckpointBlock.message.slot >= this.wsCheckpointHeader.slot + SLOTS_PER_EPOCH
|
|
527
|
-
)
|
|
528
|
-
// TODO: explode and stop the entire node
|
|
529
|
-
throw new Error(
|
|
530
|
-
`InvalidWsCheckpoint root=${toRootHex(this.wsCheckpointHeader.root)}, epoch=${
|
|
531
|
-
this.wsCheckpointHeader.slot / SLOTS_PER_EPOCH
|
|
532
|
-
}, ${
|
|
533
|
-
wsDbCheckpointBlock
|
|
534
|
-
? "found at epoch=" + Math.floor(wsDbCheckpointBlock?.message.slot / SLOTS_PER_EPOCH)
|
|
535
|
-
: "not found"
|
|
536
|
-
}`
|
|
537
|
-
);
|
|
538
|
-
this.logger.info("wsCheckpoint validated!", {
|
|
539
|
-
root: toRootHex(this.wsCheckpointHeader.root),
|
|
540
|
-
epoch: this.wsCheckpointHeader.slot / SLOTS_PER_EPOCH,
|
|
541
|
-
});
|
|
542
|
-
this.wsValidated = true;
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
private async checkUpdateFromBackfillSequences(): Promise<boolean> {
|
|
547
|
-
if (this.syncAnchor.lastBackSyncedBlock === null) {
|
|
548
|
-
throw Error("Backfill ranges can only be used once we have a valid lastBackSyncedBlock as a pivot point");
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
let validSequence = false;
|
|
552
|
-
if (this.syncAnchor.lastBackSyncedBlock.slot === null) return validSequence;
|
|
553
|
-
const lastBackSyncedSlot = this.syncAnchor.lastBackSyncedBlock.slot;
|
|
554
|
-
|
|
555
|
-
const filteredSeqs = await this.db.backfilledRanges.entries({
|
|
556
|
-
gte: lastBackSyncedSlot,
|
|
557
|
-
});
|
|
558
|
-
|
|
559
|
-
if (filteredSeqs.length > 0) {
|
|
560
|
-
const jumpBackTo = Math.min(...filteredSeqs.map(({value: justToSlot}) => justToSlot));
|
|
561
|
-
|
|
562
|
-
if (jumpBackTo < lastBackSyncedSlot) {
|
|
563
|
-
validSequence = true;
|
|
564
|
-
const anchorBlock = await this.db.blockArchive.get(jumpBackTo);
|
|
565
|
-
if (!anchorBlock) {
|
|
566
|
-
validSequence = false;
|
|
567
|
-
this.logger.warn(
|
|
568
|
-
`Invalid backfill sequence: expected a block at ${jumpBackTo} in blockArchive, ignoring the sequence`
|
|
569
|
-
);
|
|
570
|
-
}
|
|
571
|
-
if (anchorBlock && validSequence && this.prevFinalizedCheckpointBlock.slot >= jumpBackTo) {
|
|
572
|
-
this.logger.debug(
|
|
573
|
-
`Found a sequence going back to ${jumpBackTo} before the previous finalized or wsCheckpoint`,
|
|
574
|
-
{slot: this.prevFinalizedCheckpointBlock.slot}
|
|
575
|
-
);
|
|
576
|
-
|
|
577
|
-
// Everything saved in db between a backfilled range is a connected sequence
|
|
578
|
-
// we only need to check if prevFinalizedCheckpointBlock is in db
|
|
579
|
-
const prevBackfillCpBlock = await this.db.blockArchive.getByRoot(this.prevFinalizedCheckpointBlock.root);
|
|
580
|
-
if (
|
|
581
|
-
prevBackfillCpBlock != null &&
|
|
582
|
-
this.prevFinalizedCheckpointBlock.slot === prevBackfillCpBlock.message.slot
|
|
583
|
-
) {
|
|
584
|
-
this.logger.verbose("Validated current prevFinalizedCheckpointBlock", {
|
|
585
|
-
root: toRootHex(this.prevFinalizedCheckpointBlock.root),
|
|
586
|
-
slot: prevBackfillCpBlock.message.slot,
|
|
587
|
-
});
|
|
588
|
-
} else {
|
|
589
|
-
validSequence = false;
|
|
590
|
-
this.logger.warn(
|
|
591
|
-
`Invalid backfill sequence: previous finalized or checkpoint block root=${toRootHex(
|
|
592
|
-
this.prevFinalizedCheckpointBlock.root
|
|
593
|
-
)}, slot=${this.prevFinalizedCheckpointBlock.slot} ${
|
|
594
|
-
prevBackfillCpBlock ? "found at slot=" + prevBackfillCpBlock.message.slot : "not found"
|
|
595
|
-
}, ignoring the sequence`
|
|
596
|
-
);
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
if (anchorBlock && validSequence) {
|
|
601
|
-
// Update the current sequence in DB as we will be cleaning up previous sequences
|
|
602
|
-
await this.db.backfilledRanges.put(this.backfillStartFromSlot, jumpBackTo);
|
|
603
|
-
this.backfillRangeWrittenSlot = jumpBackTo;
|
|
604
|
-
this.logger.verbose(
|
|
605
|
-
`Jumped and updated the backfilled range ${this.backfillStartFromSlot}, ${this.backfillRangeWrittenSlot}`,
|
|
606
|
-
{jumpBackTo}
|
|
607
|
-
);
|
|
608
|
-
|
|
609
|
-
const anchorBlockHeader = blockToHeader(this.config, anchorBlock.message);
|
|
610
|
-
const anchorBlockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(anchorBlockHeader);
|
|
611
|
-
|
|
612
|
-
this.syncAnchor = {
|
|
613
|
-
anchorBlock,
|
|
614
|
-
anchorBlockRoot,
|
|
615
|
-
anchorSlot: jumpBackTo,
|
|
616
|
-
lastBackSyncedBlock: {root: anchorBlockRoot, slot: jumpBackTo, block: anchorBlock},
|
|
617
|
-
};
|
|
618
|
-
if (this.prevFinalizedCheckpointBlock.slot >= jumpBackTo) {
|
|
619
|
-
// prevFinalizedCheckpointBlock must have been validated, update to a
|
|
620
|
-
// new unverified
|
|
621
|
-
// finalized or wsCheckpoint behind the new lastBackSyncedBlock
|
|
622
|
-
this.prevFinalizedCheckpointBlock = await extractPreviousFinOrWsCheckpoint(
|
|
623
|
-
this.config,
|
|
624
|
-
this.db,
|
|
625
|
-
jumpBackTo,
|
|
626
|
-
this.logger
|
|
627
|
-
);
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
this.metrics?.backfillSync.totalBlocks.inc(
|
|
631
|
-
{method: BackfillSyncMethod.backfilled_ranges},
|
|
632
|
-
lastBackSyncedSlot - jumpBackTo
|
|
633
|
-
);
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
// Only delete < backfillStartFromSlot, the keys greater than this would be cleaned
|
|
639
|
-
// up by the archival process of forward sync
|
|
640
|
-
const cleanupSeqs = filteredSeqs.filter((entry) => entry.key < this.backfillStartFromSlot);
|
|
641
|
-
if (cleanupSeqs.length > 0) {
|
|
642
|
-
await this.db.backfilledRanges.batchDelete(cleanupSeqs.map((entry) => entry.key));
|
|
643
|
-
this.logger.debug(
|
|
644
|
-
`Cleaned up the old sequences between ${this.backfillStartFromSlot},${toRootHex(
|
|
645
|
-
this.syncAnchor.lastBackSyncedBlock.root
|
|
646
|
-
)}`,
|
|
647
|
-
{cleanupSeqs: JSON.stringify(cleanupSeqs)}
|
|
648
|
-
);
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
return validSequence;
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
private async fastBackfillDb(): Promise<boolean> {
|
|
655
|
-
// Block of this anchorBlockRoot can't be behind the prevFinalizedCheckpointBlock
|
|
656
|
-
// as prevFinalizedCheckpointBlock can't be skipped
|
|
657
|
-
let anchorBlockRoot: Root;
|
|
658
|
-
let expectedSlot: Slot | null = null;
|
|
659
|
-
if (this.syncAnchor.anchorBlock) {
|
|
660
|
-
anchorBlockRoot = this.syncAnchor.anchorBlock.message.parentRoot;
|
|
661
|
-
} else {
|
|
662
|
-
anchorBlockRoot = this.syncAnchor.anchorBlockRoot;
|
|
663
|
-
expectedSlot = this.syncAnchor.anchorSlot;
|
|
664
|
-
}
|
|
665
|
-
let anchorBlock = await this.db.blockArchive.getByRoot(anchorBlockRoot);
|
|
666
|
-
if (!anchorBlock) return false;
|
|
667
|
-
|
|
668
|
-
if (expectedSlot !== null && anchorBlock.message.slot !== expectedSlot)
|
|
669
|
-
throw Error(
|
|
670
|
-
`Invalid slot of anchorBlock read from DB with root=${toRootHex(
|
|
671
|
-
anchorBlockRoot
|
|
672
|
-
)}, expected=${expectedSlot}, actual=${anchorBlock.message.slot}`
|
|
673
|
-
);
|
|
674
|
-
|
|
675
|
-
// If possible, read back till anchorBlock > this.prevFinalizedCheckpointBlock
|
|
676
|
-
let parentBlock: SignedBeaconBlock | null,
|
|
677
|
-
backCount = 1;
|
|
678
|
-
|
|
679
|
-
let isPrevFinWsConfirmedAnchorParent = false;
|
|
680
|
-
while (
|
|
681
|
-
backCount !== this.opts.backfillBatchSize &&
|
|
682
|
-
// biome-ignore lint/suspicious/noAssignInExpressions: May be refactored later
|
|
683
|
-
(parentBlock = await this.db.blockArchive.getByRoot(anchorBlock.message.parentRoot))
|
|
684
|
-
) {
|
|
685
|
-
// Before moving anchorBlock back, we need check for prevFinalizedCheckpointBlock
|
|
686
|
-
if (anchorBlock.message.slot < this.prevFinalizedCheckpointBlock.slot) {
|
|
687
|
-
throw Error(
|
|
688
|
-
`Skipped a prevFinalizedCheckpointBlock with slot=${toRootHex(
|
|
689
|
-
this.prevFinalizedCheckpointBlock.root
|
|
690
|
-
)}, root=${toRootHex(this.prevFinalizedCheckpointBlock.root)}`
|
|
691
|
-
);
|
|
692
|
-
}
|
|
693
|
-
if (anchorBlock.message.slot === this.prevFinalizedCheckpointBlock.slot) {
|
|
694
|
-
if (
|
|
695
|
-
!isPrevFinWsConfirmedAnchorParent &&
|
|
696
|
-
!byteArrayEquals(anchorBlockRoot, this.prevFinalizedCheckpointBlock.root)
|
|
697
|
-
) {
|
|
698
|
-
throw Error(
|
|
699
|
-
`Invalid root for prevFinalizedCheckpointBlock at slot=${
|
|
700
|
-
this.prevFinalizedCheckpointBlock.slot
|
|
701
|
-
}, expected=${toRootHex(this.prevFinalizedCheckpointBlock.root)}, found=${toRootHex(anchorBlockRoot)}`
|
|
702
|
-
);
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
// If the new parentBlock is just one slot back, we can safely assign
|
|
706
|
-
// prevFinalizedCheckpointBlock with the parentBlock and skip root
|
|
707
|
-
// validation in next iteration. Else we need to extract
|
|
708
|
-
// prevFinalizedCheckpointBlock
|
|
709
|
-
if (parentBlock.message.slot === anchorBlock.message.slot - 1) {
|
|
710
|
-
this.prevFinalizedCheckpointBlock = {root: anchorBlock.message.parentRoot, slot: parentBlock.message.slot};
|
|
711
|
-
isPrevFinWsConfirmedAnchorParent = true;
|
|
712
|
-
} else {
|
|
713
|
-
// Extract new prevFinalizedCheckpointBlock below anchorBlock
|
|
714
|
-
this.prevFinalizedCheckpointBlock = await extractPreviousFinOrWsCheckpoint(
|
|
715
|
-
this.config,
|
|
716
|
-
this.db,
|
|
717
|
-
anchorBlock.message.slot,
|
|
718
|
-
this.logger
|
|
719
|
-
);
|
|
720
|
-
isPrevFinWsConfirmedAnchorParent = false;
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
anchorBlockRoot = anchorBlock.message.parentRoot;
|
|
724
|
-
anchorBlock = parentBlock;
|
|
725
|
-
backCount++;
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
this.syncAnchor = {
|
|
729
|
-
anchorBlock,
|
|
730
|
-
anchorBlockRoot,
|
|
731
|
-
anchorSlot: anchorBlock.message.slot,
|
|
732
|
-
lastBackSyncedBlock: {root: anchorBlockRoot, slot: anchorBlock.message.slot, block: anchorBlock},
|
|
733
|
-
};
|
|
734
|
-
this.metrics?.backfillSync.totalBlocks.inc({method: BackfillSyncMethod.database}, backCount);
|
|
735
|
-
this.logger.verbose(`Read ${backCount} blocks from DB till `, {
|
|
736
|
-
slot: anchorBlock.message.slot,
|
|
737
|
-
});
|
|
738
|
-
if (backCount >= this.opts.backfillBatchSize) {
|
|
739
|
-
// We should sleep as there seems to be more that can be read from db but yielding to
|
|
740
|
-
// the sync loop hardly gives any breather to the beacon node
|
|
741
|
-
await sleep(DB_READ_BREATHER_TIMEOUT, this.signal);
|
|
742
|
-
}
|
|
743
|
-
return true;
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
private async syncBlockByRoot(peer: PeerIdStr, anchorBlockRoot: Root): Promise<void> {
|
|
747
|
-
const res = await this.network.sendBeaconBlocksByRoot(peer, [anchorBlockRoot]);
|
|
748
|
-
if (res.length < 1) throw new Error("InvalidBlockSyncedFromPeer");
|
|
749
|
-
const anchorBlock = res[0];
|
|
750
|
-
|
|
751
|
-
// GENESIS_SLOT doesn't has valid signature
|
|
752
|
-
if (anchorBlock.data.message.slot === GENESIS_SLOT) return;
|
|
753
|
-
await verifyBlockProposerSignature(this.chain.bls, this.chain.getHeadState(), [anchorBlock]);
|
|
754
|
-
|
|
755
|
-
// We can write to the disk if this is ahead of prevFinalizedCheckpointBlock otherwise
|
|
756
|
-
// we will need to go make checks on the top of sync loop before writing as it might
|
|
757
|
-
// override prevFinalizedCheckpointBlock
|
|
758
|
-
if (this.prevFinalizedCheckpointBlock.slot < anchorBlock.data.message.slot)
|
|
759
|
-
await this.db.blockArchive.putBinary(anchorBlock.data.message.slot, anchorBlock.bytes);
|
|
760
|
-
|
|
761
|
-
this.syncAnchor = {
|
|
762
|
-
anchorBlock: anchorBlock.data,
|
|
763
|
-
anchorBlockRoot,
|
|
764
|
-
anchorSlot: anchorBlock.data.message.slot,
|
|
765
|
-
lastBackSyncedBlock: {root: anchorBlockRoot, slot: anchorBlock.data.message.slot, block: anchorBlock.data},
|
|
766
|
-
};
|
|
767
|
-
|
|
768
|
-
this.metrics?.backfillSync.totalBlocks.inc({method: BackfillSyncMethod.blockbyroot});
|
|
769
|
-
|
|
770
|
-
this.logger.verbose("Fetched new anchorBlock", {
|
|
771
|
-
root: toRootHex(anchorBlockRoot),
|
|
772
|
-
slot: anchorBlock.data.message.slot,
|
|
773
|
-
});
|
|
774
|
-
|
|
775
|
-
return;
|
|
776
|
-
}
|
|
777
|
-
|
|
778
|
-
private async syncRange(peer: PeerIdStr): Promise<void> {
|
|
779
|
-
if (!this.syncAnchor.anchorBlock) {
|
|
780
|
-
throw Error("Invalid anchorBlock null for syncRange");
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
const toSlot = this.syncAnchor.anchorBlock.message.slot;
|
|
784
|
-
const fromSlot = Math.max(
|
|
785
|
-
toSlot - this.opts.backfillBatchSize,
|
|
786
|
-
this.prevFinalizedCheckpointBlock.slot,
|
|
787
|
-
GENESIS_SLOT
|
|
788
|
-
);
|
|
789
|
-
const blocks = await this.network.sendBeaconBlocksByRange(peer, {
|
|
790
|
-
startSlot: fromSlot,
|
|
791
|
-
count: toSlot - fromSlot,
|
|
792
|
-
step: 1,
|
|
793
|
-
});
|
|
794
|
-
|
|
795
|
-
const anchorParentRoot = this.syncAnchor.anchorBlock.message.parentRoot;
|
|
796
|
-
|
|
797
|
-
if (blocks.length === 0) {
|
|
798
|
-
// Lets just directly try to jump to anchorParentRoot
|
|
799
|
-
this.syncAnchor = {
|
|
800
|
-
anchorBlock: null,
|
|
801
|
-
anchorBlockRoot: anchorParentRoot,
|
|
802
|
-
anchorSlot: null,
|
|
803
|
-
lastBackSyncedBlock: this.syncAnchor.lastBackSyncedBlock,
|
|
804
|
-
};
|
|
805
|
-
return;
|
|
806
|
-
}
|
|
807
|
-
|
|
808
|
-
const {nextAnchor, verifiedBlocks, error} = verifyBlockSequence(this.config, blocks, anchorParentRoot);
|
|
809
|
-
|
|
810
|
-
// If any of the block's proposer signature fail, we can't trust this peer at all
|
|
811
|
-
if (verifiedBlocks.length > 0) {
|
|
812
|
-
await verifyBlockProposerSignature(this.chain.bls, this.chain.getHeadState(), verifiedBlocks);
|
|
813
|
-
|
|
814
|
-
// This is bad, like super bad. Abort the backfill
|
|
815
|
-
if (!nextAnchor)
|
|
816
|
-
throw new BackfillSyncError({
|
|
817
|
-
code: BackfillSyncErrorCode.INTERNAL_ERROR,
|
|
818
|
-
reason: "Invalid verifyBlockSequence result",
|
|
819
|
-
});
|
|
820
|
-
|
|
821
|
-
// Verified blocks are in reverse order with the nextAnchor being the smallest slot
|
|
822
|
-
// if nextAnchor is on the same slot as prevFinalizedCheckpointBlock, we can't save
|
|
823
|
-
// it before returning to top of sync loop for validation
|
|
824
|
-
const blocksToPut =
|
|
825
|
-
nextAnchor.slot > this.prevFinalizedCheckpointBlock.slot
|
|
826
|
-
? verifiedBlocks
|
|
827
|
-
: verifiedBlocks.slice(0, verifiedBlocks.length - 1);
|
|
828
|
-
await this.db.blockArchive.batchPutBinary(
|
|
829
|
-
blocksToPut.map((block) => ({
|
|
830
|
-
key: block.data.message.slot,
|
|
831
|
-
value: block.bytes,
|
|
832
|
-
slot: block.data.message.slot,
|
|
833
|
-
blockRoot: this.config.getForkTypes(block.data.message.slot).BeaconBlock.hashTreeRoot(block.data.message),
|
|
834
|
-
parentRoot: block.data.message.parentRoot,
|
|
835
|
-
}))
|
|
836
|
-
);
|
|
837
|
-
this.metrics?.backfillSync.totalBlocks.inc({method: BackfillSyncMethod.rangesync}, verifiedBlocks.length);
|
|
838
|
-
}
|
|
839
|
-
|
|
840
|
-
// If nextAnchor provided, found some linear anchored blocks
|
|
841
|
-
if (nextAnchor !== null) {
|
|
842
|
-
this.syncAnchor = {
|
|
843
|
-
anchorBlock: nextAnchor.block,
|
|
844
|
-
anchorBlockRoot: nextAnchor.root,
|
|
845
|
-
anchorSlot: nextAnchor.slot,
|
|
846
|
-
lastBackSyncedBlock: nextAnchor,
|
|
847
|
-
};
|
|
848
|
-
this.logger.verbose(`syncRange discovered ${verifiedBlocks.length} valid blocks`, {
|
|
849
|
-
backfilled: this.syncAnchor.lastBackSyncedBlock.slot,
|
|
850
|
-
});
|
|
851
|
-
}
|
|
852
|
-
if (error != null) throw new BackfillSyncError({code: error});
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
|
|
856
|
-
async function extractPreviousFinOrWsCheckpoint(
|
|
857
|
-
config: ChainForkConfig,
|
|
858
|
-
db: IBeaconDb,
|
|
859
|
-
belowSlot: Slot,
|
|
860
|
-
logger?: Logger
|
|
861
|
-
): Promise<BackfillBlockHeader> {
|
|
862
|
-
// Anything below genesis block is just zero hash
|
|
863
|
-
if (belowSlot <= GENESIS_SLOT) return {root: ZERO_HASH, slot: belowSlot - 1};
|
|
864
|
-
|
|
865
|
-
// To extract the next prevFinalizedCheckpointBlock, we just need to look back in DB
|
|
866
|
-
// Any saved previous finalized or ws checkpoint, will also have a corresponding block
|
|
867
|
-
// saved in DB, as we make sure of that
|
|
868
|
-
// 1. When we archive new finalized state and blocks
|
|
869
|
-
// 2. When we backfill from a wsCheckpoint
|
|
870
|
-
const nextPrevFinOrWsBlock = (
|
|
871
|
-
await db.blockArchive.values({
|
|
872
|
-
lt: belowSlot,
|
|
873
|
-
reverse: true,
|
|
874
|
-
limit: 1,
|
|
875
|
-
})
|
|
876
|
-
)[0];
|
|
877
|
-
|
|
878
|
-
let prevFinalizedCheckpointBlock: BackfillBlockHeader;
|
|
879
|
-
if (nextPrevFinOrWsBlock != null) {
|
|
880
|
-
const header = blockToHeader(config, nextPrevFinOrWsBlock.message);
|
|
881
|
-
const root = ssz.phase0.BeaconBlockHeader.hashTreeRoot(header);
|
|
882
|
-
prevFinalizedCheckpointBlock = {root, slot: nextPrevFinOrWsBlock.message.slot};
|
|
883
|
-
logger?.debug("Extracted new prevFinalizedCheckpointBlock as potential previous finalized or wsCheckpoint", {
|
|
884
|
-
root: toRootHex(prevFinalizedCheckpointBlock.root),
|
|
885
|
-
slot: prevFinalizedCheckpointBlock.slot,
|
|
886
|
-
});
|
|
887
|
-
} else {
|
|
888
|
-
// GENESIS_SLOT -1 is the placeholder for parentHash of the genesis block
|
|
889
|
-
// which should always be ZERO_HASH.
|
|
890
|
-
prevFinalizedCheckpointBlock = {root: ZERO_HASH, slot: GENESIS_SLOT - 1};
|
|
891
|
-
}
|
|
892
|
-
return prevFinalizedCheckpointBlock;
|
|
893
|
-
}
|