@lodestar/beacon-node 1.34.1 → 1.35.0-dev.092cc3954a
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/beacon/blocks/index.js +71 -53
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +3 -3
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/debug/index.js +20 -9
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/errors.js +2 -0
- package/lib/api/impl/errors.js.map +1 -1
- package/lib/api/impl/index.d.ts +3 -3
- package/lib/api/impl/index.js +3 -3
- package/lib/api/impl/index.js.map +1 -1
- package/lib/api/impl/lodestar/index.js +1 -1
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +2 -1
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/rest/activeSockets.js +3 -2
- package/lib/api/rest/activeSockets.js.map +1 -1
- package/lib/api/rest/base.d.ts +1 -1
- package/lib/api/rest/base.js +6 -2
- package/lib/api/rest/base.js.map +1 -1
- package/lib/api/rest/index.js +2 -0
- package/lib/api/rest/index.js.map +1 -1
- package/lib/api/rest/swaggerUI.js +4 -2
- package/lib/api/rest/swaggerUI.js.map +1 -1
- package/lib/bun-wrappers/prometheus-gc-stats.d.ts +2 -0
- package/lib/bun-wrappers/prometheus-gc-stats.js +8 -0
- package/lib/bun-wrappers/prometheus-gc-stats.js.map +1 -0
- package/lib/chain/ColumnReconstructionTracker.d.ts +32 -0
- package/lib/chain/ColumnReconstructionTracker.js +71 -0
- package/lib/chain/ColumnReconstructionTracker.js.map +1 -0
- package/lib/chain/GetBlobsTracker.d.ts +31 -0
- package/lib/chain/GetBlobsTracker.js +82 -0
- package/lib/chain/GetBlobsTracker.js.map +1 -0
- package/lib/chain/archiveStore/archiveStore.js +49 -38
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +2 -0
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
- package/lib/chain/archiveStore/index.d.ts +1 -1
- package/lib/chain/archiveStore/index.js +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +5 -0
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +14 -7
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/balancesCache.js +1 -3
- package/lib/chain/balancesCache.js.map +1 -1
- package/lib/chain/beaconProposerCache.js +1 -0
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +19 -7
- package/lib/chain/blocks/blockInput/blockInput.js +132 -88
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/blockInput/index.d.ts +1 -1
- package/lib/chain/blocks/blockInput/index.js +1 -1
- package/lib/chain/blocks/blockInput/types.d.ts +19 -10
- package/lib/chain/blocks/blockInput/types.js +1 -0
- package/lib/chain/blocks/blockInput/types.js.map +1 -1
- package/lib/chain/blocks/blockInput/utils.d.ts +0 -4
- package/lib/chain/blocks/blockInput/utils.js +6 -29
- package/lib/chain/blocks/blockInput/utils.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +36 -32
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/index.d.ts +6 -5
- package/lib/chain/blocks/index.js +5 -4
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +3 -108
- package/lib/chain/blocks/types.js +0 -119
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.d.ts +2 -2
- package/lib/chain/blocks/utils/chainSegment.js +2 -2
- package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts +3 -3
- package/lib/chain/blocks/verifyBlock.js +15 -14
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts +7 -22
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +18 -110
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +4 -3
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +24 -22
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +4 -3
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +2 -2
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -2
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +2 -2
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.d.ts +3 -3
- package/lib/chain/blocks/writeBlockInputToDb.js +61 -63
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/multithread/index.js +167 -163
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/bls/singleThread.js +1 -0
- package/lib/chain/bls/singleThread.js.map +1 -1
- package/lib/chain/chain.d.ts +13 -11
- package/lib/chain/chain.js +79 -20
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +43 -2
- package/lib/chain/emitter.js +18 -0
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/blobSidecarError.d.ts +24 -0
- package/lib/chain/errors/blobSidecarError.js +10 -0
- package/lib/chain/errors/blobSidecarError.js.map +1 -1
- package/lib/chain/errors/blockError.js +1 -0
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +42 -0
- package/lib/chain/errors/dataColumnSidecarError.js +14 -0
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
- package/lib/chain/errors/gossipValidation.js +1 -0
- package/lib/chain/errors/gossipValidation.js.map +1 -1
- package/lib/chain/errors/index.d.ts +2 -2
- package/lib/chain/errors/index.js +2 -2
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/genesis/genesis.js +16 -5
- package/lib/chain/genesis/genesis.js.map +1 -1
- package/lib/chain/index.d.ts +2 -2
- package/lib/chain/index.js +2 -2
- package/lib/chain/index.js.map +1 -1
- package/lib/chain/interface.d.ts +13 -9
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.js +16 -9
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/lightClient/proofs.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +14 -9
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.js +8 -3
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/index.d.ts +1 -1
- package/lib/chain/opPools/index.js +1 -1
- package/lib/chain/opPools/index.js.map +1 -1
- package/lib/chain/opPools/opPool.js +10 -12
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -6
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +5 -2
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/options.js +1 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.js +141 -134
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +3 -10
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/errors.js +1 -0
- package/lib/chain/regen/errors.js.map +1 -1
- package/lib/chain/regen/index.d.ts +1 -1
- package/lib/chain/regen/index.js +1 -1
- package/lib/chain/regen/index.js.map +1 -1
- package/lib/chain/regen/queued.js +35 -28
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.js +1 -0
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/reprocess.js +3 -1
- package/lib/chain/reprocess.js.map +1 -1
- package/lib/chain/seenCache/index.d.ts +1 -1
- package/lib/chain/seenCache/index.js +1 -1
- package/lib/chain/seenCache/index.js.map +1 -1
- package/lib/chain/seenCache/seenAggregateAndProof.js +7 -6
- package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
- package/lib/chain/seenCache/seenAttestationData.js +5 -2
- package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
- package/lib/chain/seenCache/seenAttesters.js +2 -4
- package/lib/chain/seenCache/seenAttesters.js.map +1 -1
- package/lib/chain/seenCache/seenBlockProposers.js +2 -4
- package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
- package/lib/chain/seenCache/seenCommittee.js +1 -3
- package/lib/chain/seenCache/seenCommittee.js.map +1 -1
- package/lib/chain/seenCache/seenCommitteeContribution.js +3 -2
- package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +74 -78
- package/lib/chain/seenCache/seenGossipBlockInput.js +235 -369
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/shufflingCache.js +5 -2
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/stateCache/blockStateCacheImpl.js +13 -7
- package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
- package/lib/chain/stateCache/datastore/db.js +1 -0
- package/lib/chain/stateCache/datastore/db.js.map +1 -1
- package/lib/chain/stateCache/datastore/file.js +1 -0
- package/lib/chain/stateCache/datastore/file.js.map +1 -1
- package/lib/chain/stateCache/datastore/index.d.ts +1 -1
- package/lib/chain/stateCache/datastore/index.js +1 -1
- package/lib/chain/stateCache/datastore/index.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.js +10 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js +10 -4
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/index.d.ts +1 -1
- package/lib/chain/stateCache/index.js +1 -1
- package/lib/chain/stateCache/index.js.map +1 -1
- package/lib/chain/stateCache/mapMetrics.js +4 -4
- package/lib/chain/stateCache/mapMetrics.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +14 -6
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/blobSidecar.d.ts +8 -3
- package/lib/chain/validation/blobSidecar.js +73 -31
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +7 -9
- package/lib/chain/validation/dataColumnSidecar.js +95 -57
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/index.d.ts +1 -1
- package/lib/chain/validation/index.js +1 -1
- package/lib/chain/validation/index.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +1 -2
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +1 -3
- package/lib/chain/validatorMonitor.js +2 -1
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/beacon.js +24 -0
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/index.d.ts +1 -1
- package/lib/db/index.js.map +1 -1
- package/lib/db/repositories/blobSidecars.js.map +1 -1
- package/lib/db/repositories/blockArchive.js +4 -5
- package/lib/db/repositories/blockArchive.js.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +4 -0
- package/lib/db/repositories/blockArchiveIndex.js +13 -5
- package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
- package/lib/db/repositories/dataColumnSidecar.js +8 -7
- package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.js +17 -7
- package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
- package/lib/db/repositories/depositDataRoot.js +1 -0
- package/lib/db/repositories/depositDataRoot.js.map +1 -1
- package/lib/db/repositories/index.d.ts +10 -10
- package/lib/db/repositories/index.js +9 -9
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/db/repositories/stateArchive.js +3 -2
- package/lib/db/repositories/stateArchive.js.map +1 -1
- package/lib/db/repositories/stateArchiveIndex.d.ts +1 -0
- package/lib/db/repositories/stateArchiveIndex.js +6 -2
- package/lib/db/repositories/stateArchiveIndex.js.map +1 -1
- package/lib/db/single/preGenesisState.d.ts +1 -0
- package/lib/db/single/preGenesisState.js +11 -4
- package/lib/db/single/preGenesisState.js.map +1 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +1 -0
- package/lib/db/single/preGenesisStateLastProcessedBlock.js +10 -4
- package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -1
- package/lib/eth1/eth1DataCache.js +2 -0
- package/lib/eth1/eth1DataCache.js.map +1 -1
- package/lib/eth1/eth1DepositDataTracker.js +18 -5
- package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
- package/lib/eth1/eth1DepositsCache.js +3 -0
- package/lib/eth1/eth1DepositsCache.js.map +1 -1
- package/lib/eth1/eth1MergeBlockTracker.js +10 -4
- package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
- package/lib/eth1/index.js +2 -0
- package/lib/eth1/index.js.map +1 -1
- package/lib/eth1/provider/eth1Provider.d.ts +1 -2
- package/lib/eth1/provider/eth1Provider.js +6 -2
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/eth1/provider/jsonRpcHttpClient.d.ts +1 -1
- package/lib/eth1/provider/jsonRpcHttpClient.js +16 -2
- package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -1
- package/lib/eth1/provider/jwt.js.map +1 -1
- package/lib/eth1/provider/utils.d.ts +5 -0
- package/lib/eth1/provider/utils.js +9 -1
- package/lib/eth1/provider/utils.js.map +1 -1
- package/lib/eth1/utils/deposits.js.map +1 -1
- package/lib/execution/builder/cache.js +6 -0
- package/lib/execution/builder/cache.js.map +1 -1
- package/lib/execution/builder/http.js +14 -8
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/builder/index.js.map +1 -1
- package/lib/execution/engine/disabled.js +2 -4
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +2 -2
- package/lib/execution/engine/http.js +43 -11
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +2 -2
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +16 -12
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.js +1 -3
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/types.d.ts +5 -1
- package/lib/execution/engine/types.js +37 -8
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/execution/engine/utils.js +3 -3
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/execution/index.d.ts +2 -2
- package/lib/execution/index.js +2 -2
- package/lib/execution/index.js.map +1 -1
- package/lib/index.d.ts +6 -6
- package/lib/index.js +5 -5
- package/lib/index.js.map +1 -1
- package/lib/metrics/index.d.ts +1 -1
- package/lib/metrics/index.js +1 -1
- package/lib/metrics/index.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +11 -5
- package/lib/metrics/metrics/beacon.js +40 -20
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +55 -13
- package/lib/metrics/metrics/lodestar.js +85 -8
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/metrics.d.ts +1 -1
- package/lib/metrics/metrics.js.map +1 -1
- package/lib/metrics/nodeJsMetrics.js +1 -1
- package/lib/metrics/nodeJsMetrics.js.map +1 -1
- package/lib/metrics/server/http.d.ts +1 -1
- package/lib/metrics/utils/avgMinMax.d.ts +1 -1
- package/lib/metrics/utils/avgMinMax.js +10 -6
- package/lib/metrics/utils/avgMinMax.js.map +1 -1
- package/lib/metrics/utils/gauge.d.ts +1 -1
- package/lib/metrics/utils/gauge.js +1 -4
- package/lib/metrics/utils/gauge.js.map +1 -1
- package/lib/metrics/utils/registryMetricCreator.d.ts +1 -1
- package/lib/metrics/utils/registryMetricCreator.js.map +1 -1
- package/lib/monitoring/properties.js +4 -0
- package/lib/monitoring/properties.js.map +1 -1
- package/lib/monitoring/service.js +13 -1
- package/lib/monitoring/service.js.map +1 -1
- package/lib/monitoring/system.js +25 -27
- package/lib/monitoring/system.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +2 -2
- package/lib/network/core/networkCore.js +67 -50
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorker.js +1 -1
- package/lib/network/core/networkCoreWorker.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +2 -2
- package/lib/network/core/networkCoreWorkerHandler.js +5 -2
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/discv5/index.d.ts +2 -2
- package/lib/network/discv5/index.js +5 -2
- package/lib/network/discv5/index.js.map +1 -1
- package/lib/network/discv5/worker.js +3 -3
- package/lib/network/discv5/worker.js.map +1 -1
- package/lib/network/events.d.ts +2 -18
- package/lib/network/events.js +0 -7
- package/lib/network/events.js.map +1 -1
- package/lib/network/gossip/encoding.d.ts +1 -1
- package/lib/network/gossip/encoding.js +4 -2
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/errors.js +1 -0
- package/lib/network/gossip/errors.js.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts +1 -1
- package/lib/network/gossip/gossipsub.js +8 -1
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/index.d.ts +2 -2
- package/lib/network/gossip/index.js +2 -2
- package/lib/network/gossip/index.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +2 -2
- package/lib/network/gossip/topic.d.ts +125 -105
- package/lib/network/gossip/topic.js +2 -1
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/index.d.ts +3 -3
- package/lib/network/index.js +3 -3
- package/lib/network/index.js.map +1 -1
- package/lib/network/interface.d.ts +3 -2
- package/lib/network/libp2p/index.js +2 -2
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/metadata.js +4 -0
- package/lib/network/metadata.js.map +1 -1
- package/lib/network/network.d.ts +4 -2
- package/lib/network/network.js +89 -71
- package/lib/network/network.js.map +1 -1
- package/lib/network/options.js +1 -1
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/datastore.js +8 -2
- package/lib/network/peers/datastore.js.map +1 -1
- package/lib/network/peers/discover.js +75 -66
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/network/peers/peerManager.js +154 -130
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/peersData.d.ts +1 -1
- package/lib/network/peers/peersData.js +1 -3
- package/lib/network/peers/peersData.js.map +1 -1
- package/lib/network/peers/score/index.d.ts +1 -1
- package/lib/network/peers/score/index.js +1 -1
- package/lib/network/peers/score/index.js.map +1 -1
- package/lib/network/peers/score/score.js +6 -0
- package/lib/network/peers/score/score.js.map +1 -1
- package/lib/network/peers/score/store.js +3 -0
- package/lib/network/peers/score/store.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/lib/network/peers/utils/subnetMap.js +2 -4
- package/lib/network/peers/utils/subnetMap.js.map +1 -1
- package/lib/network/processor/aggregatorTracker.js +1 -3
- package/lib/network/processor/aggregatorTracker.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +145 -165
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.js +11 -9
- package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
- package/lib/network/processor/gossipQueues/linear.js +9 -8
- package/lib/network/processor/gossipQueues/linear.js.map +1 -1
- package/lib/network/processor/index.d.ts +2 -1
- package/lib/network/processor/index.js +22 -8
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +11 -2
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js +1 -2
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
- package/lib/network/reqresp/index.d.ts +1 -3
- package/lib/network/reqresp/index.js +1 -3
- package/lib/network/reqresp/index.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +11 -5
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js +8 -4
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
- package/lib/network/statusCache.js +1 -0
- package/lib/network/statusCache.js.map +1 -1
- package/lib/network/subnets/attnetsService.js +73 -65
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/network/subnets/interface.js +1 -1
- package/lib/network/subnets/interface.js.map +1 -1
- package/lib/network/subnets/syncnetsService.js +29 -22
- package/lib/network/subnets/syncnetsService.js.map +1 -1
- package/lib/network/subnets/util.js +1 -2
- package/lib/network/subnets/util.js.map +1 -1
- package/lib/node/nodejs.d.ts +1 -1
- package/lib/node/nodejs.js +15 -0
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.js +1 -2
- package/lib/node/notifier.js.map +1 -1
- package/lib/node/options.js.map +1 -1
- package/lib/node/utils/interop/state.js +1 -2
- package/lib/node/utils/interop/state.js.map +1 -1
- package/lib/sync/backfill/backfill.d.ts +1 -1
- package/lib/sync/backfill/backfill.js +58 -16
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/constants.d.ts +2 -1
- package/lib/sync/constants.js +2 -1
- package/lib/sync/constants.js.map +1 -1
- package/lib/sync/interface.d.ts +1 -59
- package/lib/sync/interface.js +0 -20
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/options.d.ts +1 -1
- package/lib/sync/range/batch.d.ts +48 -32
- package/lib/sync/range/batch.js +201 -55
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +15 -10
- package/lib/sync/range/chain.js +141 -70
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts +3 -3
- package/lib/sync/range/range.js +86 -54
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/hashBlocks.d.ts +2 -2
- package/lib/sync/range/utils/hashBlocks.js +6 -4
- package/lib/sync/range/utils/hashBlocks.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.js +18 -13
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/sync.d.ts +1 -2
- package/lib/sync/sync.js +95 -87
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/types.d.ts +44 -0
- package/lib/sync/types.js +34 -0
- package/lib/sync/types.js.map +1 -0
- package/lib/sync/unknownBlock.d.ts +42 -28
- package/lib/sync/unknownBlock.js +404 -458
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +186 -0
- package/lib/sync/utils/downloadByRange.js +457 -0
- package/lib/sync/utils/downloadByRange.js.map +1 -0
- package/lib/sync/utils/downloadByRoot.d.ts +119 -0
- package/lib/sync/utils/downloadByRoot.js +319 -0
- package/lib/sync/utils/downloadByRoot.js.map +1 -0
- package/lib/sync/utils/pendingBlocksTree.d.ts +14 -6
- package/lib/sync/utils/pendingBlocksTree.js +24 -18
- package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
- package/lib/util/array.js +7 -3
- package/lib/util/array.js.map +1 -1
- package/lib/util/asyncIterableToEvents.js +6 -3
- package/lib/util/asyncIterableToEvents.js.map +1 -1
- package/lib/util/binarySearch.js +2 -0
- package/lib/util/binarySearch.js.map +1 -1
- package/lib/util/blobs.d.ts +2 -2
- package/lib/util/blobs.js +4 -4
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/bufferPool.js +7 -2
- package/lib/util/bufferPool.js.map +1 -1
- package/lib/util/clock.d.ts +1 -1
- package/lib/util/clock.js +23 -18
- package/lib/util/clock.js.map +1 -1
- package/lib/util/dataColumns.d.ts +13 -10
- package/lib/util/dataColumns.js +92 -134
- package/lib/util/dataColumns.js.map +1 -1
- package/lib/util/execution.d.ts +20 -0
- package/lib/util/execution.js +148 -0
- package/lib/util/execution.js.map +1 -0
- package/lib/util/itTrigger.js +4 -4
- package/lib/util/itTrigger.js.map +1 -1
- package/lib/util/map.js +2 -0
- package/lib/util/map.js.map +1 -1
- package/lib/util/queue/index.d.ts +1 -1
- package/lib/util/queue/index.js +1 -1
- package/lib/util/queue/index.js.map +1 -1
- package/lib/util/queue/itemQueue.js +52 -49
- package/lib/util/queue/itemQueue.js.map +1 -1
- package/lib/util/serializedCache.js +1 -3
- package/lib/util/serializedCache.js.map +1 -1
- package/lib/util/set.js +2 -0
- package/lib/util/set.js.map +1 -1
- package/lib/util/sszBytes.d.ts +1 -0
- package/lib/util/sszBytes.js +1 -1
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/timeSeries.js +3 -1
- package/lib/util/timeSeries.js.map +1 -1
- package/lib/util/types.d.ts +1 -1
- package/lib/util/types.js +2 -2
- package/lib/util/types.js.map +1 -1
- package/lib/util/wrapError.d.ts +7 -0
- package/package.json +22 -16
- package/lib/chain/seenCache/seenBlockInput.d.ts +0 -84
- package/lib/chain/seenCache/seenBlockInput.js +0 -225
- package/lib/chain/seenCache/seenBlockInput.js.map +0 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +0 -28
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +0 -328
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +0 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +0 -49
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +0 -499
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
2
|
import { RootHex } from "@lodestar/types";
|
|
3
|
-
import {
|
|
3
|
+
import { IBlockInput } from "../../../chain/blocks/blockInput/types.js";
|
|
4
4
|
/**
|
|
5
5
|
* String to uniquely identify block segments. Used for peer scoring and to compare if batches are equivalent.
|
|
6
6
|
*/
|
|
7
|
-
export declare function hashBlocks(blocks:
|
|
7
|
+
export declare function hashBlocks(blocks: IBlockInput[], config: ChainForkConfig): RootHex;
|
|
8
8
|
//# sourceMappingURL=hashBlocks.d.ts.map
|
|
@@ -7,13 +7,15 @@ export function hashBlocks(blocks, config) {
|
|
|
7
7
|
case 0:
|
|
8
8
|
return "0x";
|
|
9
9
|
case 1: {
|
|
10
|
-
const block0 = blocks[0].
|
|
10
|
+
const block0 = blocks[0].getBlock();
|
|
11
11
|
return toRootHex(config.getForkTypes(block0.message.slot).SignedBeaconBlock.hashTreeRoot(block0));
|
|
12
12
|
}
|
|
13
13
|
default: {
|
|
14
|
-
const block0 = blocks[0].
|
|
15
|
-
const blockN = blocks.at(-1)?.
|
|
16
|
-
return (
|
|
14
|
+
const block0 = blocks[0].getBlock();
|
|
15
|
+
const blockN = blocks.at(-1)?.getBlock();
|
|
16
|
+
return (
|
|
17
|
+
// TODO(fulu): should we be doing checks for presence to make sure these do not blow up?
|
|
18
|
+
toRootHex(config.getForkTypes(block0.message.slot).SignedBeaconBlock.hashTreeRoot(block0)) +
|
|
17
19
|
toRootHex(config.getForkTypes(blockN.message.slot).SignedBeaconBlock.hashTreeRoot(blockN)));
|
|
18
20
|
}
|
|
19
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashBlocks.js","sourceRoot":"","sources":["../../../../src/sync/range/utils/hashBlocks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAG1C;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"hashBlocks.js","sourceRoot":"","sources":["../../../../src/sync/range/utils/hashBlocks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAG1C;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,MAAuB;IACvE,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,KAAK,CAAC,CAAC,CAAC,CAAC;YACP,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpC,OAAO,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACpG,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAuB,CAAC;YAC9D,OAAO;YACL,wFAAwF;YACxF,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC1F,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAC3F,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isForkPostFulu } from "@lodestar/params";
|
|
1
2
|
import { shuffle } from "../../../util/shuffle.js";
|
|
2
3
|
import { sortBy } from "../../../util/sortBy.js";
|
|
3
4
|
import { MAX_CONCURRENT_REQUESTS } from "../../constants.js";
|
|
@@ -8,12 +9,16 @@ import { BatchStatus } from "../batch.js";
|
|
|
8
9
|
* Shuffles peers only once on instantiation
|
|
9
10
|
*/
|
|
10
11
|
export class ChainPeersBalancer {
|
|
12
|
+
peers;
|
|
13
|
+
activeRequestsByPeer = new Map();
|
|
14
|
+
custodyConfig;
|
|
15
|
+
syncType;
|
|
16
|
+
maxConcurrentRequests;
|
|
11
17
|
/**
|
|
12
18
|
* No need to specify `maxConcurrentRequests` for production code
|
|
13
19
|
* It is used for testing purposes to limit the number of concurrent requests
|
|
14
20
|
*/
|
|
15
21
|
constructor(peers, batches, custodyConfig, syncType, maxConcurrentRequests = MAX_CONCURRENT_REQUESTS) {
|
|
16
|
-
this.activeRequestsByPeer = new Map();
|
|
17
22
|
this.peers = shuffle(peers);
|
|
18
23
|
this.custodyConfig = custodyConfig;
|
|
19
24
|
this.syncType = syncType;
|
|
@@ -33,8 +38,9 @@ export class ChainPeersBalancer {
|
|
|
33
38
|
if (batch.state.status !== BatchStatus.AwaitingDownload) {
|
|
34
39
|
return;
|
|
35
40
|
}
|
|
36
|
-
const {
|
|
37
|
-
|
|
41
|
+
const { columnsRequest } = batch.requests;
|
|
42
|
+
// TODO(fulu): This is fulu specific and hinders our peer selection PreFulu
|
|
43
|
+
const pendingDataColumns = columnsRequest?.columns ?? this.custodyConfig.sampledColumns;
|
|
38
44
|
const eligiblePeers = this.filterPeers(batch, pendingDataColumns, false);
|
|
39
45
|
const failedPeers = new Set(batch.getFailedPeers());
|
|
40
46
|
const sortedBestPeers = sortBy(eligiblePeers, ({ syncInfo }) => (failedPeers.has(syncInfo.peerId) ? 1 : 0), // prefer peers without failed requests
|
|
@@ -76,7 +82,7 @@ export class ChainPeersBalancer {
|
|
|
76
82
|
return eligiblePeers;
|
|
77
83
|
}
|
|
78
84
|
for (const peer of this.peers) {
|
|
79
|
-
const { earliestAvailableSlot,
|
|
85
|
+
const { earliestAvailableSlot, target, peerId } = peer;
|
|
80
86
|
const activeRequest = this.activeRequestsByPeer.get(peerId) ?? 0;
|
|
81
87
|
if (noActiveRequest && activeRequest > 0) {
|
|
82
88
|
// consumer wants to find peer with no active request, but this peer has active request
|
|
@@ -86,21 +92,21 @@ export class ChainPeersBalancer {
|
|
|
86
92
|
// consumer wants to find peer with no more than MAX_CONCURRENT_REQUESTS active requests
|
|
87
93
|
continue;
|
|
88
94
|
}
|
|
89
|
-
if (target.slot < batch.
|
|
95
|
+
if (target.slot < batch.startSlot) {
|
|
90
96
|
continue;
|
|
91
97
|
}
|
|
92
|
-
if (batch.
|
|
98
|
+
if (isForkPostFulu(batch.forkName) && this.syncType === RangeSyncType.Head) {
|
|
93
99
|
// for head sync, target slot is head slot and each peer may have a different head slot
|
|
94
100
|
// we don't want to retry a batch with a peer that's not as up-to-date as the previous peer
|
|
95
101
|
// see https://github.com/ChainSafe/lodestar/issues/8193
|
|
96
|
-
const blocks = batch.state
|
|
97
|
-
const lastBlock = blocks?.at(-1)
|
|
98
|
-
const lastBlockSlot = lastBlock?.
|
|
102
|
+
const blocks = batch.state?.blocks;
|
|
103
|
+
const lastBlock = blocks?.at(-1);
|
|
104
|
+
const lastBlockSlot = lastBlock?.slot;
|
|
99
105
|
if (lastBlockSlot && lastBlockSlot > target.slot) {
|
|
100
106
|
continue;
|
|
101
107
|
}
|
|
102
108
|
}
|
|
103
|
-
if (!batch.
|
|
109
|
+
if (!isForkPostFulu(batch.forkName)) {
|
|
104
110
|
// pre-fulu logic, we don't care columns and earliestAvailableSlot
|
|
105
111
|
eligiblePeers.push({ syncInfo: peer, columns: 0, hasEarliestAvailableSlots: false });
|
|
106
112
|
continue;
|
|
@@ -110,11 +116,10 @@ export class ChainPeersBalancer {
|
|
|
110
116
|
if (earliestAvailableSlot == null) {
|
|
111
117
|
continue;
|
|
112
118
|
}
|
|
113
|
-
if (earliestAvailableSlot > batch.
|
|
119
|
+
if (earliestAvailableSlot > batch.startSlot) {
|
|
114
120
|
continue;
|
|
115
121
|
}
|
|
116
|
-
const
|
|
117
|
-
const columns = peerColumns.reduce((acc, elem) => {
|
|
122
|
+
const columns = peer.custodyColumns.reduce((acc, elem) => {
|
|
118
123
|
if (requestColumns.includes(elem)) {
|
|
119
124
|
acc.push(elem);
|
|
120
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peerBalancer.js","sourceRoot":"","sources":["../../../../src/sync/range/utils/peerBalancer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"peerBalancer.js","sourceRoot":"","sources":["../../../../src/sync/range/utils/peerBalancer.ts"],"names":[],"mappings":"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"}
|
package/lib/sync/sync.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { IBeaconSync, SyncModules, SyncingStatus } from "./interface.js";
|
|
2
|
-
import { SyncChainDebugState, SyncState } from "./interface.js";
|
|
1
|
+
import { IBeaconSync, SyncChainDebugState, SyncModules, SyncState, SyncingStatus } from "./interface.js";
|
|
3
2
|
import { SyncOptions } from "./options.js";
|
|
4
3
|
export declare class BeaconSync implements IBeaconSync {
|
|
5
4
|
private readonly logger;
|
package/lib/sync/sync.js
CHANGED
|
@@ -7,95 +7,20 @@ import { isOptimisticBlock } from "../util/forkChoice.js";
|
|
|
7
7
|
import { MIN_EPOCH_TO_START_GOSSIP } from "./constants.js";
|
|
8
8
|
import { SyncState, syncStateMetric } from "./interface.js";
|
|
9
9
|
import { RangeSync, RangeSyncEvent, RangeSyncStatus } from "./range/range.js";
|
|
10
|
-
import {
|
|
10
|
+
import { BlockInputSync } from "./unknownBlock.js";
|
|
11
11
|
import { PeerSyncType, getPeerSyncType, peerSyncTypes } from "./utils/remoteSyncType.js";
|
|
12
12
|
export class BeaconSync {
|
|
13
|
+
logger;
|
|
14
|
+
network;
|
|
15
|
+
chain;
|
|
16
|
+
metrics;
|
|
17
|
+
opts;
|
|
18
|
+
rangeSync;
|
|
19
|
+
unknownBlockSync;
|
|
20
|
+
/** For metrics only */
|
|
21
|
+
peerSyncType = new Map();
|
|
22
|
+
slotImportTolerance;
|
|
13
23
|
constructor(opts, modules) {
|
|
14
|
-
/** For metrics only */
|
|
15
|
-
this.peerSyncType = new Map();
|
|
16
|
-
/**
|
|
17
|
-
* A peer has connected which has blocks that are unknown to us.
|
|
18
|
-
*
|
|
19
|
-
* This function handles the logic associated with the connection of a new peer. If the peer
|
|
20
|
-
* is sufficiently ahead of our current head, a range-sync (batch) sync is started and
|
|
21
|
-
* batches of blocks are queued to download from the peer. Batched blocks begin at our latest
|
|
22
|
-
* finalized head.
|
|
23
|
-
*
|
|
24
|
-
* If the peer is within the `SLOT_IMPORT_TOLERANCE`, then it's head is sufficiently close to
|
|
25
|
-
* ours that we consider it fully sync'd with respect to our current chain.
|
|
26
|
-
*/
|
|
27
|
-
this.addPeer = (data) => {
|
|
28
|
-
const localStatus = this.chain.getStatus();
|
|
29
|
-
const syncType = getPeerSyncType(localStatus, data.status, this.chain.forkChoice, this.slotImportTolerance);
|
|
30
|
-
// For metrics only
|
|
31
|
-
this.peerSyncType.set(data.peer, syncType);
|
|
32
|
-
if (syncType === PeerSyncType.Advanced) {
|
|
33
|
-
this.rangeSync.addPeer(data.peer, localStatus, data.status);
|
|
34
|
-
}
|
|
35
|
-
this.updateSyncState();
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Must be called by libp2p when a peer is removed from the peer manager
|
|
39
|
-
*/
|
|
40
|
-
this.removePeer = (data) => {
|
|
41
|
-
this.rangeSync.removePeer(data.peer);
|
|
42
|
-
this.peerSyncType.delete(data.peer.toString());
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Run this function when the sync state can potentially change.
|
|
46
|
-
*/
|
|
47
|
-
this.updateSyncState = () => {
|
|
48
|
-
const state = this.state; // Don't run the getter twice
|
|
49
|
-
// We have become synced, subscribe to all the gossip core topics
|
|
50
|
-
if (state === SyncState.Synced && this.chain.clock.currentEpoch >= MIN_EPOCH_TO_START_GOSSIP) {
|
|
51
|
-
if (!this.network.isSubscribedToGossipCoreTopics()) {
|
|
52
|
-
this.network
|
|
53
|
-
.subscribeGossipCoreTopics()
|
|
54
|
-
.then(() => {
|
|
55
|
-
this.metrics?.syncSwitchGossipSubscriptions.inc({ action: "subscribed" });
|
|
56
|
-
this.logger.info("Subscribed gossip core topics");
|
|
57
|
-
})
|
|
58
|
-
.catch((e) => {
|
|
59
|
-
this.logger.error("Error subscribing to gossip core topics", {}, e);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
// also start searching for unknown blocks
|
|
63
|
-
if (!this.unknownBlockSync.isSubscribedToNetwork()) {
|
|
64
|
-
this.unknownBlockSync.subscribeToNetwork();
|
|
65
|
-
this.metrics?.syncUnknownBlock.switchNetworkSubscriptions.inc({ action: "subscribed" });
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// If we stopped being synced and fallen significantly behind, stop gossip
|
|
69
|
-
else if (state !== SyncState.Synced) {
|
|
70
|
-
const syncDiff = this.chain.clock.currentSlot - this.chain.forkChoice.getHead().slot;
|
|
71
|
-
if (syncDiff > this.slotImportTolerance * 2) {
|
|
72
|
-
if (this.network.isSubscribedToGossipCoreTopics()) {
|
|
73
|
-
this.logger.warn(`Node sync has fallen behind by ${syncDiff} slots`);
|
|
74
|
-
this.network
|
|
75
|
-
.unsubscribeGossipCoreTopics()
|
|
76
|
-
.then(() => {
|
|
77
|
-
this.metrics?.syncSwitchGossipSubscriptions.inc({ action: "unsubscribed" });
|
|
78
|
-
this.logger.info("Un-subscribed gossip core topics");
|
|
79
|
-
})
|
|
80
|
-
.catch((e) => {
|
|
81
|
-
this.logger.error("Error unsubscribing to gossip core topics", {}, e);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
// also stop searching for unknown blocks
|
|
85
|
-
if (this.unknownBlockSync.isSubscribedToNetwork()) {
|
|
86
|
-
this.unknownBlockSync.unsubscribeFromNetwork();
|
|
87
|
-
this.metrics?.syncUnknownBlock.switchNetworkSubscriptions.inc({ action: "unsubscribed" });
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
this.onClockEpoch = () => {
|
|
93
|
-
// If a node witness the genesis event consider starting gossip
|
|
94
|
-
// Also, ensure that updateSyncState is run at least once per epoch.
|
|
95
|
-
// If the chain gets stuck or very overloaded it could helps to resolve the situation
|
|
96
|
-
// by realizing it's way behind and turning gossip off.
|
|
97
|
-
this.updateSyncState();
|
|
98
|
-
};
|
|
99
24
|
const { config, chain, metrics, network, logger } = modules;
|
|
100
25
|
this.opts = opts;
|
|
101
26
|
this.network = network;
|
|
@@ -103,7 +28,7 @@ export class BeaconSync {
|
|
|
103
28
|
this.metrics = metrics;
|
|
104
29
|
this.logger = logger;
|
|
105
30
|
this.rangeSync = new RangeSync(modules, opts);
|
|
106
|
-
this.unknownBlockSync = new
|
|
31
|
+
this.unknownBlockSync = new BlockInputSync(config, network, chain, logger, metrics, opts);
|
|
107
32
|
this.slotImportTolerance = opts.slotImportTolerance ?? SLOTS_PER_EPOCH;
|
|
108
33
|
// Subscribe to RangeSync completing a SyncChain and recompute sync state
|
|
109
34
|
if (!opts.disableRangeSync) {
|
|
@@ -225,6 +150,89 @@ export class BeaconSync {
|
|
|
225
150
|
getSyncChainsDebugState() {
|
|
226
151
|
return this.rangeSync.getSyncChainsDebugState();
|
|
227
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* A peer has connected which has blocks that are unknown to us.
|
|
155
|
+
*
|
|
156
|
+
* This function handles the logic associated with the connection of a new peer. If the peer
|
|
157
|
+
* is sufficiently ahead of our current head, a range-sync (batch) sync is started and
|
|
158
|
+
* batches of blocks are queued to download from the peer. Batched blocks begin at our latest
|
|
159
|
+
* finalized head.
|
|
160
|
+
*
|
|
161
|
+
* If the peer is within the `SLOT_IMPORT_TOLERANCE`, then it's head is sufficiently close to
|
|
162
|
+
* ours that we consider it fully sync'd with respect to our current chain.
|
|
163
|
+
*/
|
|
164
|
+
addPeer = (data) => {
|
|
165
|
+
const localStatus = this.chain.getStatus();
|
|
166
|
+
const syncType = getPeerSyncType(localStatus, data.status, this.chain.forkChoice, this.slotImportTolerance);
|
|
167
|
+
// For metrics only
|
|
168
|
+
this.peerSyncType.set(data.peer, syncType);
|
|
169
|
+
if (syncType === PeerSyncType.Advanced) {
|
|
170
|
+
this.rangeSync.addPeer(data.peer, localStatus, data.status);
|
|
171
|
+
}
|
|
172
|
+
this.updateSyncState();
|
|
173
|
+
};
|
|
174
|
+
/**
|
|
175
|
+
* Must be called by libp2p when a peer is removed from the peer manager
|
|
176
|
+
*/
|
|
177
|
+
removePeer = (data) => {
|
|
178
|
+
this.rangeSync.removePeer(data.peer);
|
|
179
|
+
this.peerSyncType.delete(data.peer.toString());
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Run this function when the sync state can potentially change.
|
|
183
|
+
*/
|
|
184
|
+
updateSyncState = () => {
|
|
185
|
+
const state = this.state; // Don't run the getter twice
|
|
186
|
+
// We have become synced, subscribe to all the gossip core topics
|
|
187
|
+
if (state === SyncState.Synced && this.chain.clock.currentEpoch >= MIN_EPOCH_TO_START_GOSSIP) {
|
|
188
|
+
if (!this.network.isSubscribedToGossipCoreTopics()) {
|
|
189
|
+
this.network
|
|
190
|
+
.subscribeGossipCoreTopics()
|
|
191
|
+
.then(() => {
|
|
192
|
+
this.metrics?.syncSwitchGossipSubscriptions.inc({ action: "subscribed" });
|
|
193
|
+
this.logger.info("Subscribed gossip core topics");
|
|
194
|
+
})
|
|
195
|
+
.catch((e) => {
|
|
196
|
+
this.logger.error("Error subscribing to gossip core topics", {}, e);
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
// also start searching for unknown blocks
|
|
200
|
+
if (!this.unknownBlockSync.isSubscribedToNetwork()) {
|
|
201
|
+
this.unknownBlockSync.subscribeToNetwork();
|
|
202
|
+
this.metrics?.blockInputSync.switchNetworkSubscriptions.inc({ action: "subscribed" });
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// If we stopped being synced and fallen significantly behind, stop gossip
|
|
206
|
+
else if (state !== SyncState.Synced) {
|
|
207
|
+
const syncDiff = this.chain.clock.currentSlot - this.chain.forkChoice.getHead().slot;
|
|
208
|
+
if (syncDiff > this.slotImportTolerance * 2) {
|
|
209
|
+
if (this.network.isSubscribedToGossipCoreTopics()) {
|
|
210
|
+
this.logger.warn(`Node sync has fallen behind by ${syncDiff} slots`);
|
|
211
|
+
this.network
|
|
212
|
+
.unsubscribeGossipCoreTopics()
|
|
213
|
+
.then(() => {
|
|
214
|
+
this.metrics?.syncSwitchGossipSubscriptions.inc({ action: "unsubscribed" });
|
|
215
|
+
this.logger.info("Un-subscribed gossip core topics");
|
|
216
|
+
})
|
|
217
|
+
.catch((e) => {
|
|
218
|
+
this.logger.error("Error unsubscribing to gossip core topics", {}, e);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
// also stop searching for unknown blocks
|
|
222
|
+
if (this.unknownBlockSync.isSubscribedToNetwork()) {
|
|
223
|
+
this.unknownBlockSync.unsubscribeFromNetwork();
|
|
224
|
+
this.metrics?.blockInputSync.switchNetworkSubscriptions.inc({ action: "unsubscribed" });
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
onClockEpoch = () => {
|
|
230
|
+
// If a node witness the genesis event consider starting gossip
|
|
231
|
+
// Also, ensure that updateSyncState is run at least once per epoch.
|
|
232
|
+
// If the chain gets stuck or very overloaded it could helps to resolve the situation
|
|
233
|
+
// by realizing it's way behind and turning gossip off.
|
|
234
|
+
this.updateSyncState();
|
|
235
|
+
};
|
|
228
236
|
scrapeMetrics(metrics) {
|
|
229
237
|
// Compute current sync state
|
|
230
238
|
metrics.syncStatus.set(syncStateMetric[this.state]);
|
package/lib/sync/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAC,oBAAoB,EAAC,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAW,YAAY,EAAmB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,yBAAyB,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { RootHex, Slot } from "@lodestar/types";
|
|
2
|
+
import { IBlockInput } from "../chain/blocks/blockInput/index.js";
|
|
3
|
+
export declare enum PendingBlockType {
|
|
4
|
+
/**
|
|
5
|
+
* We got a block root (from a gossip attestation, for exxample) but we don't have the block in forkchoice.
|
|
6
|
+
*/
|
|
7
|
+
UNKNOWN_BLOCK_ROOT = "UnknownBlockRoot",
|
|
8
|
+
/**
|
|
9
|
+
* During gossip time, we may get a block but the parent root is unknown (not in forkchoice).
|
|
10
|
+
*/
|
|
11
|
+
UNKNOWN_PARENT = "unknown_parent",
|
|
12
|
+
/**
|
|
13
|
+
* During gossip we wait for a set amount of time to receive the complete block input but if it does not
|
|
14
|
+
* arrive in time we turn to req/resp to pull the remainder so that it can be processed
|
|
15
|
+
*/
|
|
16
|
+
INCOMPLETE_BLOCK_INPUT = "IncompleteBlockInput",
|
|
17
|
+
UNKNOWN_DATA = "unknown_data"
|
|
18
|
+
}
|
|
19
|
+
export declare enum PendingBlockInputStatus {
|
|
20
|
+
pending = "pending",
|
|
21
|
+
fetching = "fetching",
|
|
22
|
+
downloaded = "downloaded",
|
|
23
|
+
processing = "processing"
|
|
24
|
+
}
|
|
25
|
+
export type PendingBlockInput = {
|
|
26
|
+
status: PendingBlockInputStatus;
|
|
27
|
+
blockInput: IBlockInput;
|
|
28
|
+
timeAddedSec: number;
|
|
29
|
+
timeSyncedSec?: number;
|
|
30
|
+
peerIdStrings: Set<string>;
|
|
31
|
+
};
|
|
32
|
+
export type PendingRootHex = {
|
|
33
|
+
status: PendingBlockInputStatus.pending | PendingBlockInputStatus.fetching;
|
|
34
|
+
rootHex: RootHex;
|
|
35
|
+
slot?: Slot;
|
|
36
|
+
timeAddedSec: number;
|
|
37
|
+
timeSyncedSec?: number;
|
|
38
|
+
peerIdStrings: Set<string>;
|
|
39
|
+
};
|
|
40
|
+
export type BlockInputSyncCacheItem = PendingBlockInput | PendingRootHex;
|
|
41
|
+
export declare function isPendingBlockInput(pending: BlockInputSyncCacheItem): pending is PendingBlockInput;
|
|
42
|
+
export declare function getBlockInputSyncCacheItemRootHex(block: BlockInputSyncCacheItem): RootHex;
|
|
43
|
+
export declare function getBlockInputSyncCacheItemSlot(block: BlockInputSyncCacheItem): Slot | string;
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export var PendingBlockType;
|
|
2
|
+
(function (PendingBlockType) {
|
|
3
|
+
/**
|
|
4
|
+
* We got a block root (from a gossip attestation, for exxample) but we don't have the block in forkchoice.
|
|
5
|
+
*/
|
|
6
|
+
PendingBlockType["UNKNOWN_BLOCK_ROOT"] = "UnknownBlockRoot";
|
|
7
|
+
/**
|
|
8
|
+
* During gossip time, we may get a block but the parent root is unknown (not in forkchoice).
|
|
9
|
+
*/
|
|
10
|
+
PendingBlockType["UNKNOWN_PARENT"] = "unknown_parent";
|
|
11
|
+
/**
|
|
12
|
+
* During gossip we wait for a set amount of time to receive the complete block input but if it does not
|
|
13
|
+
* arrive in time we turn to req/resp to pull the remainder so that it can be processed
|
|
14
|
+
*/
|
|
15
|
+
PendingBlockType["INCOMPLETE_BLOCK_INPUT"] = "IncompleteBlockInput";
|
|
16
|
+
PendingBlockType["UNKNOWN_DATA"] = "unknown_data";
|
|
17
|
+
})(PendingBlockType || (PendingBlockType = {}));
|
|
18
|
+
export var PendingBlockInputStatus;
|
|
19
|
+
(function (PendingBlockInputStatus) {
|
|
20
|
+
PendingBlockInputStatus["pending"] = "pending";
|
|
21
|
+
PendingBlockInputStatus["fetching"] = "fetching";
|
|
22
|
+
PendingBlockInputStatus["downloaded"] = "downloaded";
|
|
23
|
+
PendingBlockInputStatus["processing"] = "processing";
|
|
24
|
+
})(PendingBlockInputStatus || (PendingBlockInputStatus = {}));
|
|
25
|
+
export function isPendingBlockInput(pending) {
|
|
26
|
+
return "blockInput" in pending;
|
|
27
|
+
}
|
|
28
|
+
export function getBlockInputSyncCacheItemRootHex(block) {
|
|
29
|
+
return isPendingBlockInput(block) ? block.blockInput.blockRootHex : block.rootHex;
|
|
30
|
+
}
|
|
31
|
+
export function getBlockInputSyncCacheItemSlot(block) {
|
|
32
|
+
return isPendingBlockInput(block) ? block.blockInput.slot : "unknown";
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,gBAgBX;AAhBD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,2DAAuC,CAAA;IACvC;;OAEG;IACH,qDAAiC,CAAA;IACjC;;;OAGG;IACH,mEAA+C,CAAA;IAE/C,iDAA6B,CAAA;AAC/B,CAAC,EAhBW,gBAAgB,KAAhB,gBAAgB,QAgB3B;AAED,MAAM,CAAN,IAAY,uBAKX;AALD,WAAY,uBAAuB;IACjC,8CAAmB,CAAA;IACnB,gDAAqB,CAAA;IACrB,oDAAyB,CAAA;IACzB,oDAAyB,CAAA;AAC3B,CAAC,EALW,uBAAuB,KAAvB,uBAAuB,QAKlC;AAsBD,MAAM,UAAU,mBAAmB,CAAC,OAAgC;IAClE,OAAO,YAAY,IAAI,OAAO,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,KAA8B;IAC9E,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAA8B;IAC3E,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC"}
|
|
@@ -1,14 +1,45 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
2
|
import { Logger } from "@lodestar/utils";
|
|
3
|
-
import {
|
|
3
|
+
import { IBlockInput } from "../chain/blocks/blockInput/types.js";
|
|
4
4
|
import { IBeaconChain } from "../chain/index.js";
|
|
5
5
|
import { Metrics } from "../metrics/index.js";
|
|
6
6
|
import { INetwork } from "../network/index.js";
|
|
7
7
|
import { PeerSyncMeta } from "../network/peers/peersData.js";
|
|
8
|
-
import { CustodyConfig } from "../util/dataColumns.js";
|
|
9
8
|
import { PeerIdStr } from "../util/peerId.js";
|
|
10
9
|
import { SyncOptions } from "./options.js";
|
|
11
|
-
|
|
10
|
+
/**
|
|
11
|
+
* BlockInputSync is a class that handles ReqResp to find blocks and data related to a specific blockRoot. The
|
|
12
|
+
* blockRoot may have been found via object gossip, or the API. Gossip objects that can trigger a search are block,
|
|
13
|
+
* blobs, columns, attestations, etc. In the case of blocks and data this is generally during the current slot but
|
|
14
|
+
* can also be for items that are received late but are not fully verified and thus not in fork-choice (old blocks on
|
|
15
|
+
* an unknown fork). It can also be triggered via an attestation (or sync committee message or any other item that
|
|
16
|
+
* gets gossiped) that references a blockRoot that is not in fork-choice. In rare (and realistically should not happen)
|
|
17
|
+
* situations it can get triggered via the API when the validator attempts to publish a block, attestation, aggregate
|
|
18
|
+
* and proof or a sync committee contribution that has unknown information included (parentRoot for instance).
|
|
19
|
+
*
|
|
20
|
+
* The goal of the class is to make sure that all information that is necessary for import into fork-choice is pulled
|
|
21
|
+
* from peers so that the block and data can be processed, and thus the object that triggered the search can be
|
|
22
|
+
* referenced and validated.
|
|
23
|
+
*
|
|
24
|
+
* The most common case for this search is a set of block/data that comes across gossip for the current slot, during
|
|
25
|
+
* normal chain operation, but not everything was received before the gossip cutoff window happens so it is necessary
|
|
26
|
+
* to pull remaining data via req/resp so that fork-choice can be updated prior to making an attestation for the
|
|
27
|
+
* current slot.
|
|
28
|
+
*
|
|
29
|
+
* Event sources for old UnknownBlock
|
|
30
|
+
*
|
|
31
|
+
* - publishBlock
|
|
32
|
+
* - gossipHandlers
|
|
33
|
+
* - searchUnknownSlotRoot
|
|
34
|
+
* = produceSyncCommitteeContribution
|
|
35
|
+
* = validateGossipFnRetryUnknownRoot
|
|
36
|
+
* * submitPoolAttestationsV2
|
|
37
|
+
* * publishAggregateAndProofsV2
|
|
38
|
+
* = onPendingGossipsubMessage
|
|
39
|
+
* * NetworkEvent.pendingGossipsubMessage
|
|
40
|
+
* - onGossipsubMessage
|
|
41
|
+
*/
|
|
42
|
+
export declare class BlockInputSync {
|
|
12
43
|
private readonly config;
|
|
13
44
|
private readonly network;
|
|
14
45
|
private readonly chain;
|
|
@@ -23,8 +54,6 @@ export declare class UnknownBlockSync {
|
|
|
23
54
|
private readonly proposerBoostSecWindow;
|
|
24
55
|
private readonly maxPendingBlocks;
|
|
25
56
|
private subscribedToNetworkEvents;
|
|
26
|
-
private engineGetBlobsCache;
|
|
27
|
-
private blockInputsRetryTrackerCache;
|
|
28
57
|
private peerBalancer;
|
|
29
58
|
constructor(config: ChainForkConfig, network: INetwork, chain: IBeaconChain, logger: Logger, metrics: Metrics | null, opts?: SyncOptions | undefined);
|
|
30
59
|
subscribeToNetwork(): void;
|
|
@@ -34,24 +63,17 @@ export declare class UnknownBlockSync {
|
|
|
34
63
|
/**
|
|
35
64
|
* Process an unknownBlock event and register the block in `pendingBlocks` Map.
|
|
36
65
|
*/
|
|
37
|
-
private
|
|
66
|
+
private onUnknownBlockRoot;
|
|
38
67
|
/**
|
|
39
68
|
* Process an unknownBlockInput event and register the block in `pendingBlocks` Map.
|
|
40
69
|
*/
|
|
41
|
-
private
|
|
70
|
+
private onIncompleteBlockInput;
|
|
42
71
|
/**
|
|
43
72
|
* Process an unknownBlockParent event and register the block in `pendingBlocks` Map.
|
|
44
73
|
*/
|
|
45
74
|
private onUnknownParent;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
* - add the block to pendingBlocks with status downloaded or pending blockRootHex as key. This is similar to
|
|
49
|
-
* an `onUnknownBlock` event, but the blocks is downloaded.
|
|
50
|
-
* - add the parent root to pendingBlocks with status pending, parentBlockRootHex as key. This is
|
|
51
|
-
* the same to an `onUnknownBlock` event with parentBlockRootHex as root.
|
|
52
|
-
*/
|
|
53
|
-
private addUnknownParent;
|
|
54
|
-
private addUnknownBlock;
|
|
75
|
+
private addByRootHex;
|
|
76
|
+
private addByBlockInput;
|
|
55
77
|
private onPeerConnected;
|
|
56
78
|
private onPeerDisconnected;
|
|
57
79
|
/**
|
|
@@ -74,21 +96,14 @@ export declare class UnknownBlockSync {
|
|
|
74
96
|
* prefulu, will attempt a max of `MAX_ATTEMPTS_PER_BLOCK` on different peers, postfulu we may attempt more as defined in `getMaxDownloadAttempts()` function
|
|
75
97
|
* Also verifies the received block root + returns the peer that provided the block for future downscoring.
|
|
76
98
|
*/
|
|
77
|
-
private
|
|
78
|
-
/**
|
|
79
|
-
* We have partial block input:
|
|
80
|
-
* - we have block but not have all blobs (deneb) or needed columns (fulu)
|
|
81
|
-
* - we don't have block and have some blobs (deneb) or some columns (fulu)
|
|
82
|
-
* Fetches missing block/data columns/block for the blockinput. This function returns either preData or availableData BlockInput.
|
|
83
|
-
*/
|
|
84
|
-
private fetchUnavailableBlockInput;
|
|
99
|
+
private fetchBlockInput;
|
|
85
100
|
/**
|
|
86
101
|
* Gets all descendant blocks of `block` recursively from `pendingBlocks`.
|
|
87
102
|
* Assumes that if a parent block does not exist or is not processable, all descendant blocks are bad too.
|
|
88
103
|
* Downscore all peers that have referenced any of this bad blocks. May report peers multiple times if they have
|
|
89
104
|
* referenced more than one bad block.
|
|
90
105
|
*/
|
|
91
|
-
private
|
|
106
|
+
private removeAndDownScoreAllDescendants;
|
|
92
107
|
private removeAllDescendants;
|
|
93
108
|
private getMaxDownloadAttempts;
|
|
94
109
|
}
|
|
@@ -98,8 +113,7 @@ export declare class UnknownBlockSync {
|
|
|
98
113
|
export declare class UnknownBlockPeerBalancer {
|
|
99
114
|
readonly peersMeta: Map<PeerIdStr, PeerSyncMeta>;
|
|
100
115
|
readonly activeRequests: Map<PeerIdStr, number>;
|
|
101
|
-
|
|
102
|
-
constructor(custodyConfig: CustodyConfig);
|
|
116
|
+
constructor();
|
|
103
117
|
/** Trigger on each peer re-status */
|
|
104
118
|
onPeerConnected(peerId: PeerIdStr, syncMeta: PeerSyncMeta): void;
|
|
105
119
|
onPeerDisconnected(peerId: PeerIdStr): void;
|
|
@@ -113,7 +127,7 @@ export declare class UnknownBlockPeerBalancer {
|
|
|
113
127
|
* called from fetchUnavailableBlockInput() where we have either BlockInput or NullBlockInput
|
|
114
128
|
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
115
129
|
*/
|
|
116
|
-
bestPeerForBlockInput(
|
|
130
|
+
bestPeerForBlockInput(blockInput: IBlockInput, excludedPeers: Set<PeerIdStr>): PeerSyncMeta | null;
|
|
117
131
|
/**
|
|
118
132
|
* Consumers don't need to call this method directly, it is called internally by bestPeer*() methods
|
|
119
133
|
* make this public for testing
|