@lodestar/beacon-node 1.35.0-dev.549f58dd39 → 1.35.0-dev.56313c7299
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 +46 -58
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- 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/debug/index.js +1 -1
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/errors.js +0 -2
- 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 +4 -7
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/rest/activeSockets.js +2 -3
- package/lib/api/rest/activeSockets.js.map +1 -1
- package/lib/api/rest/base.d.ts +1 -1
- package/lib/api/rest/base.js +2 -6
- package/lib/api/rest/base.js.map +1 -1
- package/lib/api/rest/index.js +0 -2
- package/lib/api/rest/index.js.map +1 -1
- package/lib/api/rest/swaggerUI.js +2 -4
- package/lib/api/rest/swaggerUI.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +38 -49
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +0 -3
- 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/archiveStore/index.d.ts +1 -1
- package/lib/chain/archiveStore/index.js +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +0 -5
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
- package/lib/chain/balancesCache.js +3 -1
- package/lib/chain/balancesCache.js.map +1 -1
- package/lib/chain/beaconProposerCache.js +0 -1
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +7 -19
- package/lib/chain/blocks/blockInput/blockInput.js +89 -133
- 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 +10 -19
- package/lib/chain/blocks/blockInput/types.js +0 -1
- package/lib/chain/blocks/blockInput/types.js.map +1 -1
- package/lib/chain/blocks/blockInput/utils.d.ts +4 -0
- package/lib/chain/blocks/blockInput/utils.js +29 -6
- package/lib/chain/blocks/blockInput/utils.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +14 -19
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/index.d.ts +5 -6
- package/lib/chain/blocks/index.js +4 -5
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +106 -3
- package/lib/chain/blocks/types.js +119 -0
- 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 +14 -15
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts +22 -7
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +108 -23
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +3 -4
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +22 -24
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +3 -4
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +2 -2
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +2 -3
- 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 +67 -56
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/multithread/index.js +163 -168
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/bls/singleThread.js +0 -1
- package/lib/chain/bls/singleThread.js.map +1 -1
- package/lib/chain/chain.d.ts +11 -13
- package/lib/chain/chain.js +23 -81
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +2 -43
- package/lib/chain/emitter.js +0 -18
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/blobSidecarError.d.ts +0 -24
- package/lib/chain/errors/blobSidecarError.js +0 -10
- package/lib/chain/errors/blobSidecarError.js.map +1 -1
- package/lib/chain/errors/blockError.js +0 -1
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +0 -42
- package/lib/chain/errors/dataColumnSidecarError.js +0 -14
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
- package/lib/chain/errors/gossipValidation.js +0 -1
- 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 +5 -16
- 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 +9 -12
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.js +9 -16
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/lightClient/proofs.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +9 -14
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +3 -2
- package/lib/chain/opPools/attestationPool.js +7 -10
- 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 +12 -10
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +2 -3
- package/lib/chain/opPools/syncCommitteeMessagePool.js +10 -14
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +2 -5
- package/lib/chain/opPools/syncContributionAndProofPool.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/options.js +1 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +3 -3
- package/lib/chain/prepareNextSlot.js +140 -145
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +10 -3
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/errors.js +0 -1
- 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 +28 -35
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.js +0 -1
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/reprocess.js +1 -3
- 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 +6 -7
- package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
- package/lib/chain/seenCache/seenAttestationData.js +2 -5
- package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
- package/lib/chain/seenCache/seenAttesters.js +4 -2
- package/lib/chain/seenCache/seenAttesters.js.map +1 -1
- package/lib/chain/seenCache/seenBlockInput.d.ts +84 -0
- package/lib/chain/seenCache/seenBlockInput.js +225 -0
- package/lib/chain/seenCache/seenBlockInput.js.map +1 -0
- package/lib/chain/seenCache/seenBlockProposers.js +4 -2
- package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
- package/lib/chain/seenCache/seenCommittee.js +3 -1
- package/lib/chain/seenCache/seenCommittee.js.map +1 -1
- package/lib/chain/seenCache/seenCommitteeContribution.js +2 -3
- package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +78 -74
- package/lib/chain/seenCache/seenGossipBlockInput.js +369 -235
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/shufflingCache.js +2 -5
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/stateCache/blockStateCacheImpl.js +7 -13
- package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
- package/lib/chain/stateCache/datastore/db.js +0 -1
- package/lib/chain/stateCache/datastore/db.js.map +1 -1
- package/lib/chain/stateCache/datastore/file.js +0 -1
- 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 +0 -10
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js +4 -10
- 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 -23
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/blobSidecar.d.ts +3 -8
- package/lib/chain/validation/blobSidecar.js +31 -73
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +9 -7
- package/lib/chain/validation/dataColumnSidecar.js +57 -95
- 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/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/validation/signatureSets/aggregateAndProof.d.ts +2 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +3 -1
- package/lib/chain/validatorMonitor.js +15 -22
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/beacon.js +0 -24
- package/lib/db/beacon.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/index.d.ts +1 -1
- package/lib/db/index.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/blockArchive.js +3 -2
- package/lib/db/repositories/blockArchive.js.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
- package/lib/db/repositories/dataColumnSidecar.js +2 -2
- package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.js +2 -2
- package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
- package/lib/db/repositories/depositDataRoot.js +0 -1
- 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/single/preGenesisState.js +0 -6
- package/lib/db/single/preGenesisState.js.map +1 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -5
- package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -1
- package/lib/eth1/eth1DataCache.js +0 -2
- package/lib/eth1/eth1DataCache.js.map +1 -1
- package/lib/eth1/eth1DepositDataTracker.js +5 -18
- package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
- package/lib/eth1/eth1DepositsCache.js +0 -3
- package/lib/eth1/eth1DepositsCache.js.map +1 -1
- package/lib/eth1/eth1MergeBlockTracker.js +4 -10
- package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
- package/lib/eth1/index.js +0 -2
- package/lib/eth1/index.js.map +1 -1
- package/lib/eth1/provider/eth1Provider.d.ts +2 -1
- package/lib/eth1/provider/eth1Provider.js +2 -6
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/eth1/provider/jsonRpcHttpClient.d.ts +1 -1
- package/lib/eth1/provider/jsonRpcHttpClient.js +2 -16
- 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 +0 -5
- package/lib/eth1/provider/utils.js +1 -9
- package/lib/eth1/provider/utils.js.map +1 -1
- package/lib/eth1/utils/deposits.js.map +1 -1
- package/lib/execution/builder/cache.js +0 -6
- package/lib/execution/builder/cache.js.map +1 -1
- package/lib/execution/builder/http.js +8 -14
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/builder/index.js.map +1 -1
- package/lib/execution/engine/disabled.js +4 -2
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +2 -2
- package/lib/execution/engine/http.js +11 -43
- 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 +0 -1
- package/lib/execution/engine/mock.js +12 -16
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.js +3 -1
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/types.d.ts +1 -5
- package/lib/execution/engine/types.js +8 -37
- 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 +5 -11
- package/lib/metrics/metrics/beacon.js +20 -40
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +14 -56
- package/lib/metrics/metrics/lodestar.js +10 -87
- 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 +6 -10
- package/lib/metrics/utils/avgMinMax.js.map +1 -1
- package/lib/metrics/utils/gauge.d.ts +1 -1
- package/lib/metrics/utils/gauge.js +4 -1
- 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 +0 -4
- package/lib/monitoring/properties.js.map +1 -1
- package/lib/monitoring/service.js +1 -13
- package/lib/monitoring/service.js.map +1 -1
- package/lib/monitoring/system.js +27 -25
- package/lib/monitoring/system.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +2 -2
- package/lib/network/core/networkCore.js +50 -67
- 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 -14
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/discv5/index.d.ts +2 -2
- package/lib/network/discv5/index.js +3 -9
- 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 +18 -2
- package/lib/network/events.js +7 -0
- package/lib/network/events.js.map +1 -1
- package/lib/network/gossip/encoding.d.ts +1 -1
- package/lib/network/gossip/encoding.js +2 -4
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/errors.js +0 -1
- package/lib/network/gossip/errors.js.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts +1 -2
- package/lib/network/gossip/gossipsub.js +17 -43
- 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/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/gossip/topic.d.ts +105 -125
- package/lib/network/gossip/topic.js +1 -2
- 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 +2 -3
- package/lib/network/libp2p/index.js +3 -11
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/metadata.js +1 -6
- package/lib/network/metadata.js.map +1 -1
- package/lib/network/network.d.ts +3 -5
- package/lib/network/network.js +76 -92
- 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.d.ts +2 -2
- package/lib/network/peers/datastore.js +4 -10
- package/lib/network/peers/datastore.js.map +1 -1
- package/lib/network/peers/discover.js +66 -75
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/network/peers/peerManager.js +130 -154
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/peersData.d.ts +1 -1
- package/lib/network/peers/peersData.js +3 -1
- 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 +0 -6
- package/lib/network/peers/score/score.js.map +1 -1
- package/lib/network/peers/score/store.js +0 -3
- 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 +4 -2
- package/lib/network/peers/utils/subnetMap.js.map +1 -1
- package/lib/network/processor/aggregatorTracker.js +3 -1
- package/lib/network/processor/aggregatorTracker.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +164 -145
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.js +9 -11
- package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
- package/lib/network/processor/gossipQueues/linear.js +8 -9
- package/lib/network/processor/gossipQueues/linear.js.map +1 -1
- package/lib/network/processor/index.d.ts +1 -2
- package/lib/network/processor/index.js +8 -21
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +2 -11
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +28 -0
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +328 -0
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -0
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +49 -0
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +499 -0
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
- package/lib/network/reqresp/index.d.ts +3 -1
- package/lib/network/reqresp/index.js +3 -1
- package/lib/network/reqresp/index.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +2 -2
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
- package/lib/network/statusCache.js +0 -1
- package/lib/network/statusCache.js.map +1 -1
- package/lib/network/subnets/attnetsService.js +65 -73
- 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 +22 -29
- package/lib/network/subnets/syncnetsService.js.map +1 -1
- package/lib/network/subnets/util.js +2 -1
- package/lib/network/subnets/util.js.map +1 -1
- package/lib/node/nodejs.d.ts +1 -1
- package/lib/node/nodejs.js +0 -15
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.js +2 -1
- package/lib/node/notifier.js.map +1 -1
- package/lib/node/options.js.map +1 -1
- package/lib/node/utils/interop/state.js +2 -1
- 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 +16 -58
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/constants.d.ts +1 -2
- package/lib/sync/constants.js +1 -2
- package/lib/sync/constants.js.map +1 -1
- package/lib/sync/interface.d.ts +59 -1
- package/lib/sync/interface.js +20 -0
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/options.d.ts +1 -1
- package/lib/sync/range/batch.d.ts +32 -48
- package/lib/sync/range/batch.js +55 -201
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +10 -15
- package/lib/sync/range/chain.js +70 -141
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts +3 -3
- package/lib/sync/range/range.js +54 -86
- 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 +4 -6
- package/lib/sync/range/utils/hashBlocks.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.js +13 -18
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/sync.d.ts +2 -1
- package/lib/sync/sync.js +87 -95
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +29 -42
- package/lib/sync/unknownBlock.js +461 -405
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/pendingBlocksTree.d.ts +6 -14
- package/lib/sync/utils/pendingBlocksTree.js +18 -24
- package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
- package/lib/util/array.js +3 -7
- package/lib/util/array.js.map +1 -1
- package/lib/util/asyncIterableToEvents.js +3 -6
- package/lib/util/asyncIterableToEvents.js.map +1 -1
- package/lib/util/binarySearch.js +0 -2
- package/lib/util/binarySearch.js.map +1 -1
- package/lib/util/blobs.d.ts +2 -2
- package/lib/util/blobs.js +7 -9
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/bufferPool.js +2 -7
- package/lib/util/bufferPool.js.map +1 -1
- package/lib/util/clock.d.ts +1 -6
- package/lib/util/clock.js +18 -26
- package/lib/util/clock.js.map +1 -1
- package/lib/util/dataColumns.d.ts +10 -13
- package/lib/util/dataColumns.js +132 -90
- package/lib/util/dataColumns.js.map +1 -1
- package/lib/util/itTrigger.js +4 -4
- package/lib/util/itTrigger.js.map +1 -1
- package/lib/util/map.js +0 -2
- 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 +49 -52
- package/lib/util/queue/itemQueue.js.map +1 -1
- package/lib/util/serializedCache.js +3 -1
- package/lib/util/serializedCache.js.map +1 -1
- package/lib/util/set.js +0 -2
- package/lib/util/set.js.map +1 -1
- package/lib/util/sszBytes.d.ts +0 -1
- package/lib/util/sszBytes.js +1 -1
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/timeSeries.js +1 -3
- package/lib/util/timeSeries.js.map +1 -1
- package/lib/util/types.d.ts +1 -1
- package/lib/util/wrapError.d.ts +0 -7
- package/package.json +23 -39
- 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 +0 -2
- package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +0 -1
- package/lib/bun-wrappers/prometheus-gc-stats.js +0 -8
- package/lib/bun-wrappers/prometheus-gc-stats.js.map +0 -1
- package/lib/chain/ColumnReconstructionTracker.d.ts +0 -32
- package/lib/chain/ColumnReconstructionTracker.d.ts.map +0 -1
- package/lib/chain/ColumnReconstructionTracker.js +0 -71
- package/lib/chain/ColumnReconstructionTracker.js.map +0 -1
- package/lib/chain/GetBlobsTracker.d.ts +0 -31
- package/lib/chain/GetBlobsTracker.d.ts.map +0 -1
- package/lib/chain/GetBlobsTracker.js +0 -82
- package/lib/chain/GetBlobsTracker.js.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 +0 -43
- package/lib/sync/types.d.ts.map +0 -1
- package/lib/sync/types.js +0 -34
- package/lib/sync/types.js.map +0 -1
- package/lib/sync/unknownBlock.d.ts.map +0 -1
- package/lib/sync/utils/downloadByRange.d.ts +0 -186
- package/lib/sync/utils/downloadByRange.d.ts.map +0 -1
- package/lib/sync/utils/downloadByRange.js +0 -457
- package/lib/sync/utils/downloadByRange.js.map +0 -1
- package/lib/sync/utils/downloadByRoot.d.ts +0 -121
- package/lib/sync/utils/downloadByRoot.d.ts.map +0 -1
- package/lib/sync/utils/downloadByRoot.js +0 -346
- package/lib/sync/utils/downloadByRoot.js.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 +0 -20
- package/lib/util/execution.d.ts.map +0 -1
- package/lib/util/execution.js +0 -165
- package/lib/util/execution.js.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
package/lib/sync/unknownBlock.js
CHANGED
|
@@ -1,76 +1,21 @@
|
|
|
1
|
-
import { ForkSeq } from "@lodestar/params";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { BlockInputSource } from "../chain/blocks/blockInput/types.js";
|
|
1
|
+
import { ForkName, ForkSeq, INTERVALS_PER_SLOT } from "@lodestar/params";
|
|
2
|
+
import { fromHex, pruneSetToMax, toRootHex } from "@lodestar/utils";
|
|
3
|
+
import { sleep } from "@lodestar/utils";
|
|
4
|
+
import { BlockInputType } from "../chain/blocks/types.js";
|
|
6
5
|
import { BlockError, BlockErrorCode } from "../chain/errors/index.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { NetworkEvent } from "../network/index.js";
|
|
7
|
+
import { beaconBlocksMaybeBlobsByRoot, unavailableBeaconBlobsByRoot, } from "../network/reqresp/beaconBlocksMaybeBlobsByRoot.js";
|
|
8
|
+
import { byteArrayEquals } from "../util/bytes.js";
|
|
9
9
|
import { shuffle } from "../util/shuffle.js";
|
|
10
10
|
import { sortBy } from "../util/sortBy.js";
|
|
11
11
|
import { wrapError } from "../util/wrapError.js";
|
|
12
12
|
import { MAX_CONCURRENT_REQUESTS } from "./constants.js";
|
|
13
|
-
import {
|
|
14
|
-
import { DownloadByRootError, downloadByRoot } from "./utils/downloadByRoot.js";
|
|
13
|
+
import { PendingBlockStatus, PendingBlockType } from "./interface.js";
|
|
15
14
|
import { getAllDescendantBlocks, getDescendantBlocks, getUnknownAndAncestorBlocks } from "./utils/pendingBlocksTree.js";
|
|
16
15
|
const MAX_ATTEMPTS_PER_BLOCK = 5;
|
|
17
16
|
const MAX_KNOWN_BAD_BLOCKS = 500;
|
|
18
17
|
const MAX_PENDING_BLOCKS = 100;
|
|
19
|
-
|
|
20
|
-
(function (FetchResult) {
|
|
21
|
-
FetchResult["SuccessResolved"] = "success_resolved";
|
|
22
|
-
FetchResult["SuccessMissingParent"] = "success_missing_parent";
|
|
23
|
-
FetchResult["SuccessLate"] = "success_late";
|
|
24
|
-
FetchResult["FailureTriedAllPeers"] = "failure_tried_all_peers";
|
|
25
|
-
FetchResult["FailureMaxAttempts"] = "failure_max_attempts";
|
|
26
|
-
})(FetchResult || (FetchResult = {}));
|
|
27
|
-
/**
|
|
28
|
-
* BlockInputSync is a class that handles ReqResp to find blocks and data related to a specific blockRoot. The
|
|
29
|
-
* blockRoot may have been found via object gossip, or the API. Gossip objects that can trigger a search are block,
|
|
30
|
-
* blobs, columns, attestations, etc. In the case of blocks and data this is generally during the current slot but
|
|
31
|
-
* can also be for items that are received late but are not fully verified and thus not in fork-choice (old blocks on
|
|
32
|
-
* an unknown fork). It can also be triggered via an attestation (or sync committee message or any other item that
|
|
33
|
-
* gets gossiped) that references a blockRoot that is not in fork-choice. In rare (and realistically should not happen)
|
|
34
|
-
* situations it can get triggered via the API when the validator attempts to publish a block, attestation, aggregate
|
|
35
|
-
* and proof or a sync committee contribution that has unknown information included (parentRoot for instance).
|
|
36
|
-
*
|
|
37
|
-
* The goal of the class is to make sure that all information that is necessary for import into fork-choice is pulled
|
|
38
|
-
* from peers so that the block and data can be processed, and thus the object that triggered the search can be
|
|
39
|
-
* referenced and validated.
|
|
40
|
-
*
|
|
41
|
-
* The most common case for this search is a set of block/data that comes across gossip for the current slot, during
|
|
42
|
-
* normal chain operation, but not everything was received before the gossip cutoff window happens so it is necessary
|
|
43
|
-
* to pull remaining data via req/resp so that fork-choice can be updated prior to making an attestation for the
|
|
44
|
-
* current slot.
|
|
45
|
-
*
|
|
46
|
-
* Event sources for old UnknownBlock
|
|
47
|
-
*
|
|
48
|
-
* - publishBlock
|
|
49
|
-
* - gossipHandlers
|
|
50
|
-
* - searchUnknownSlotRoot
|
|
51
|
-
* = produceSyncCommitteeContribution
|
|
52
|
-
* = validateGossipFnRetryUnknownRoot
|
|
53
|
-
* * submitPoolAttestationsV2
|
|
54
|
-
* * publishAggregateAndProofsV2
|
|
55
|
-
* = onPendingGossipsubMessage
|
|
56
|
-
* * NetworkEvent.pendingGossipsubMessage
|
|
57
|
-
* - onGossipsubMessage
|
|
58
|
-
*/
|
|
59
|
-
export class BlockInputSync {
|
|
60
|
-
config;
|
|
61
|
-
network;
|
|
62
|
-
chain;
|
|
63
|
-
logger;
|
|
64
|
-
metrics;
|
|
65
|
-
opts;
|
|
66
|
-
/**
|
|
67
|
-
* block RootHex -> PendingBlock. To avoid finding same root at the same time
|
|
68
|
-
*/
|
|
69
|
-
pendingBlocks = new Map();
|
|
70
|
-
knownBadBlocks = new Set();
|
|
71
|
-
maxPendingBlocks;
|
|
72
|
-
subscribedToNetworkEvents = false;
|
|
73
|
-
peerBalancer;
|
|
18
|
+
export class UnknownBlockSync {
|
|
74
19
|
constructor(config, network, chain, logger, metrics, opts) {
|
|
75
20
|
this.config = config;
|
|
76
21
|
this.network = network;
|
|
@@ -78,227 +23,306 @@ export class BlockInputSync {
|
|
|
78
23
|
this.logger = logger;
|
|
79
24
|
this.metrics = metrics;
|
|
80
25
|
this.opts = opts;
|
|
26
|
+
/**
|
|
27
|
+
* block RootHex -> PendingBlock. To avoid finding same root at the same time
|
|
28
|
+
*/
|
|
29
|
+
this.pendingBlocks = new Map();
|
|
30
|
+
this.knownBadBlocks = new Set();
|
|
31
|
+
this.subscribedToNetworkEvents = false;
|
|
32
|
+
this.engineGetBlobsCache = new Map();
|
|
33
|
+
this.blockInputsRetryTrackerCache = new Set();
|
|
34
|
+
/**
|
|
35
|
+
* Process an unknownBlock event and register the block in `pendingBlocks` Map.
|
|
36
|
+
*/
|
|
37
|
+
this.onUnknownBlock = (data) => {
|
|
38
|
+
try {
|
|
39
|
+
const unknownBlockType = this.addUnknownBlock(data.rootHex, data.peer);
|
|
40
|
+
this.triggerUnknownBlockSearch();
|
|
41
|
+
this.metrics?.syncUnknownBlock.requests.inc({ type: unknownBlockType });
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
this.logger.debug("Error handling unknownBlock event", {}, e);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Process an unknownBlockInput event and register the block in `pendingBlocks` Map.
|
|
49
|
+
*/
|
|
50
|
+
this.onUnknownBlockInput = (data) => {
|
|
51
|
+
try {
|
|
52
|
+
const unknownBlockType = this.addUnknownBlock(data.blockInput, data.peer);
|
|
53
|
+
this.triggerUnknownBlockSearch();
|
|
54
|
+
this.metrics?.syncUnknownBlock.requests.inc({ type: unknownBlockType });
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
this.logger.debug("Error handling unknownBlockInput event", {}, e);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Process an unknownBlockParent event and register the block in `pendingBlocks` Map.
|
|
62
|
+
*/
|
|
63
|
+
this.onUnknownParent = (data) => {
|
|
64
|
+
try {
|
|
65
|
+
this.addUnknownParent(data.blockInput, data.peer);
|
|
66
|
+
this.triggerUnknownBlockSearch();
|
|
67
|
+
this.metrics?.syncUnknownBlock.requests.inc({ type: PendingBlockType.UNKNOWN_PARENT });
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
this.logger.debug("Error handling unknownBlockParent event", {}, e);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
this.onPeerConnected = (data) => {
|
|
74
|
+
try {
|
|
75
|
+
const peerId = data.peer;
|
|
76
|
+
const peerSyncMeta = this.network.getConnectedPeerSyncMeta(peerId);
|
|
77
|
+
this.peerBalancer.onPeerConnected(data.peer, peerSyncMeta);
|
|
78
|
+
this.triggerUnknownBlockSearch();
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
this.logger.debug("Error handling peerConnected event", {}, e);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
this.onPeerDisconnected = (data) => {
|
|
85
|
+
const peerId = data.peer;
|
|
86
|
+
this.peerBalancer.onPeerDisconnected(peerId);
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Gather tip parent blocks with unknown parent and do a search for all of them
|
|
90
|
+
*/
|
|
91
|
+
this.triggerUnknownBlockSearch = () => {
|
|
92
|
+
// Cheap early stop to prevent calling the network.getConnectedPeers()
|
|
93
|
+
if (this.pendingBlocks.size === 0) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// If the node loses all peers with pending unknown blocks, the sync will stall
|
|
97
|
+
const connectedPeers = this.network.getConnectedPeers();
|
|
98
|
+
if (connectedPeers.length === 0) {
|
|
99
|
+
this.logger.debug("No connected peers, skipping unknown block search.");
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const { unknowns, ancestors } = getUnknownAndAncestorBlocks(this.pendingBlocks);
|
|
103
|
+
// it's rare when there is no unknown block
|
|
104
|
+
// see https://github.com/ChainSafe/lodestar/issues/5649#issuecomment-1594213550
|
|
105
|
+
if (unknowns.length === 0) {
|
|
106
|
+
let processedBlocks = 0;
|
|
107
|
+
for (const block of ancestors) {
|
|
108
|
+
// when this happens, it's likely the block and parent block are processed by head sync
|
|
109
|
+
if (this.chain.forkChoice.hasBlockHex(block.parentBlockRootHex)) {
|
|
110
|
+
processedBlocks++;
|
|
111
|
+
this.processBlock(block).catch((e) => {
|
|
112
|
+
this.logger.debug("Unexpected error - process old downloaded block", {}, e);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this.logger.verbose("No unknown block, process ancestor downloaded blocks", {
|
|
117
|
+
pendingBlocks: this.pendingBlocks.size,
|
|
118
|
+
ancestorBlocks: ancestors.length,
|
|
119
|
+
processedBlocks,
|
|
120
|
+
});
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// most of the time there is exactly 1 unknown block
|
|
124
|
+
for (const block of unknowns) {
|
|
125
|
+
this.downloadBlock(block).catch((e) => {
|
|
126
|
+
this.logger.debug("Unexpected error - downloadBlock", { root: block.blockRootHex }, e);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
};
|
|
81
130
|
this.maxPendingBlocks = opts?.maxPendingBlocks ?? MAX_PENDING_BLOCKS;
|
|
82
|
-
this.
|
|
131
|
+
this.proposerBoostSecWindow = this.config.SECONDS_PER_SLOT / INTERVALS_PER_SLOT;
|
|
132
|
+
this.peerBalancer = new UnknownBlockPeerBalancer(this.network.custodyConfig);
|
|
83
133
|
if (metrics) {
|
|
84
|
-
metrics.
|
|
85
|
-
|
|
134
|
+
metrics.syncUnknownBlock.pendingBlocks.addCollect(() => {
|
|
135
|
+
metrics.syncUnknownBlock.pendingBlocks.set(this.pendingBlocks.size);
|
|
136
|
+
metrics.syncUnknownBlock.knownBadBlocks.set(this.knownBadBlocks.size);
|
|
137
|
+
metrics.syncUnknownBlock.peerBalancer.peersMetaCount.set(this.peerBalancer.peersMeta.size);
|
|
138
|
+
metrics.syncUnknownBlock.peerBalancer.peersActiveRequestCount.set(this.peerBalancer.activeRequests.size);
|
|
139
|
+
metrics.syncUnknownBlock.peerBalancer.totalActiveRequests.set(this.peerBalancer.getTotalActiveRequests());
|
|
140
|
+
});
|
|
86
141
|
}
|
|
87
142
|
}
|
|
88
143
|
subscribeToNetwork() {
|
|
89
|
-
if (this.opts?.
|
|
90
|
-
|
|
91
|
-
|
|
144
|
+
if (!this.opts?.disableUnknownBlockSync) {
|
|
145
|
+
// cannot chain to the above if or the log will be incorrect
|
|
146
|
+
if (!this.subscribedToNetworkEvents) {
|
|
147
|
+
this.logger.verbose("UnknownBlockSync enabled.");
|
|
148
|
+
this.network.events.on(NetworkEvent.unknownBlock, this.onUnknownBlock);
|
|
149
|
+
this.network.events.on(NetworkEvent.unknownBlockInput, this.onUnknownBlockInput);
|
|
150
|
+
this.network.events.on(NetworkEvent.unknownBlockParent, this.onUnknownParent);
|
|
151
|
+
this.network.events.on(NetworkEvent.peerConnected, this.onPeerConnected);
|
|
152
|
+
this.network.events.on(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
|
|
153
|
+
this.subscribedToNetworkEvents = true;
|
|
154
|
+
}
|
|
92
155
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
this.logger.verbose("BlockInputSync enabled.");
|
|
96
|
-
this.chain.emitter.on(ChainEvent.unknownBlockRoot, this.onUnknownBlockRoot);
|
|
97
|
-
this.chain.emitter.on(ChainEvent.incompleteBlockInput, this.onIncompleteBlockInput);
|
|
98
|
-
this.chain.emitter.on(ChainEvent.unknownParent, this.onUnknownParent);
|
|
99
|
-
this.network.events.on(NetworkEvent.peerConnected, this.onPeerConnected);
|
|
100
|
-
this.network.events.on(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
|
|
101
|
-
this.subscribedToNetworkEvents = true;
|
|
156
|
+
else {
|
|
157
|
+
this.logger.verbose("UnknownBlockSync disabled by disableUnknownBlockSync option.");
|
|
102
158
|
}
|
|
103
159
|
}
|
|
104
160
|
unsubscribeFromNetwork() {
|
|
105
|
-
this.logger.verbose("
|
|
106
|
-
this.
|
|
107
|
-
this.
|
|
108
|
-
this.
|
|
161
|
+
this.logger.verbose("UnknownBlockSync disabled.");
|
|
162
|
+
this.network.events.off(NetworkEvent.unknownBlock, this.onUnknownBlock);
|
|
163
|
+
this.network.events.off(NetworkEvent.unknownBlockInput, this.onUnknownBlockInput);
|
|
164
|
+
this.network.events.off(NetworkEvent.unknownBlockParent, this.onUnknownParent);
|
|
109
165
|
this.network.events.off(NetworkEvent.peerConnected, this.onPeerConnected);
|
|
110
166
|
this.network.events.off(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
|
|
111
167
|
this.subscribedToNetworkEvents = false;
|
|
112
168
|
}
|
|
113
169
|
close() {
|
|
114
170
|
this.unsubscribeFromNetwork();
|
|
171
|
+
// add more in the future if needed
|
|
115
172
|
}
|
|
116
173
|
isSubscribedToNetwork() {
|
|
117
174
|
return this.subscribedToNetworkEvents;
|
|
118
175
|
}
|
|
119
176
|
/**
|
|
120
|
-
*
|
|
177
|
+
* When a blockInput comes with an unknown parent:
|
|
178
|
+
* - add the block to pendingBlocks with status downloaded or pending blockRootHex as key. This is similar to
|
|
179
|
+
* an `onUnknownBlock` event, but the blocks is downloaded.
|
|
180
|
+
* - add the parent root to pendingBlocks with status pending, parentBlockRootHex as key. This is
|
|
181
|
+
* the same to an `onUnknownBlock` event with parentBlockRootHex as root.
|
|
121
182
|
*/
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
catch (e) {
|
|
130
|
-
this.logger.debug("Error handling unknownBlockRoot event", {}, e);
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
/**
|
|
134
|
-
* Process an unknownBlockInput event and register the block in `pendingBlocks` Map.
|
|
135
|
-
*/
|
|
136
|
-
onIncompleteBlockInput = (data) => {
|
|
137
|
-
try {
|
|
138
|
-
this.addByBlockInput(data.blockInput, data.peer);
|
|
139
|
-
this.triggerUnknownBlockSearch();
|
|
140
|
-
this.metrics?.blockInputSync.requests.inc({ type: PendingBlockType.INCOMPLETE_BLOCK_INPUT });
|
|
141
|
-
this.metrics?.blockInputSync.source.inc({ source: data.source });
|
|
142
|
-
}
|
|
143
|
-
catch (e) {
|
|
144
|
-
this.logger.debug("Error handling incompleteBlockInput event", {}, e);
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
/**
|
|
148
|
-
* Process an unknownBlockParent event and register the block in `pendingBlocks` Map.
|
|
149
|
-
*/
|
|
150
|
-
onUnknownParent = (data) => {
|
|
151
|
-
try {
|
|
152
|
-
this.addByRootHex(data.blockInput.parentRootHex, data.peer);
|
|
153
|
-
this.addByBlockInput(data.blockInput, data.peer);
|
|
154
|
-
this.triggerUnknownBlockSearch();
|
|
155
|
-
this.metrics?.blockInputSync.requests.inc({ type: PendingBlockType.UNKNOWN_PARENT });
|
|
156
|
-
this.metrics?.blockInputSync.source.inc({ source: data.source });
|
|
157
|
-
}
|
|
158
|
-
catch (e) {
|
|
159
|
-
this.logger.debug("Error handling unknownParent event", {}, e);
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
addByRootHex = (rootHex, peerIdStr) => {
|
|
163
|
-
let pendingBlock = this.pendingBlocks.get(rootHex);
|
|
183
|
+
addUnknownParent(blockInput, peerIdStr) {
|
|
184
|
+
const block = blockInput.block.message;
|
|
185
|
+
const blockRoot = this.config.getForkTypes(block.slot).BeaconBlock.hashTreeRoot(block);
|
|
186
|
+
const blockRootHex = toRootHex(blockRoot);
|
|
187
|
+
const parentBlockRootHex = toRootHex(block.parentRoot);
|
|
188
|
+
// add 1 pending block with status downloaded
|
|
189
|
+
let pendingBlock = this.pendingBlocks.get(blockRootHex);
|
|
164
190
|
if (!pendingBlock) {
|
|
165
|
-
pendingBlock =
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
191
|
+
pendingBlock =
|
|
192
|
+
blockInput.type === BlockInputType.dataPromise
|
|
193
|
+
? {
|
|
194
|
+
unknownBlockType: PendingBlockType.UNKNOWN_DATA,
|
|
195
|
+
blockRootHex,
|
|
196
|
+
// this will be set after we download block
|
|
197
|
+
parentBlockRootHex: null,
|
|
198
|
+
blockInput,
|
|
199
|
+
peerIdStrs: new Set(),
|
|
200
|
+
status: PendingBlockStatus.pending,
|
|
201
|
+
downloadAttempts: 0,
|
|
202
|
+
}
|
|
203
|
+
: {
|
|
204
|
+
blockRootHex,
|
|
205
|
+
parentBlockRootHex,
|
|
206
|
+
blockInput,
|
|
207
|
+
peerIdStrs: new Set(),
|
|
208
|
+
status: PendingBlockStatus.downloaded,
|
|
209
|
+
downloadAttempts: 0,
|
|
210
|
+
};
|
|
211
|
+
this.pendingBlocks.set(blockRootHex, pendingBlock);
|
|
212
|
+
this.logger.verbose("Added unknown block parent to pendingBlocks", {
|
|
213
|
+
root: blockRootHex,
|
|
214
|
+
parent: parentBlockRootHex,
|
|
175
215
|
});
|
|
176
216
|
}
|
|
177
|
-
|
|
178
|
-
|
|
217
|
+
pendingBlock.peerIdStrs.add(peerIdStr);
|
|
218
|
+
// add 1 pending block with status pending
|
|
219
|
+
this.addUnknownBlock(parentBlockRootHex, peerIdStr);
|
|
220
|
+
}
|
|
221
|
+
addUnknownBlock(blockInputOrRootHex, peerIdStr) {
|
|
222
|
+
let blockRootHex;
|
|
223
|
+
let blockInput;
|
|
224
|
+
let unknownBlockType;
|
|
225
|
+
if (typeof blockInputOrRootHex === "string") {
|
|
226
|
+
blockRootHex = blockInputOrRootHex;
|
|
227
|
+
blockInput = null;
|
|
228
|
+
unknownBlockType = PendingBlockType.UNKNOWN_BLOCK;
|
|
179
229
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
230
|
+
else {
|
|
231
|
+
if (blockInputOrRootHex.block !== null) {
|
|
232
|
+
const { block } = blockInputOrRootHex;
|
|
233
|
+
blockRootHex = toRootHex(this.config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message));
|
|
234
|
+
unknownBlockType = PendingBlockType.UNKNOWN_DATA;
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
unknownBlockType = PendingBlockType.UNKNOWN_BLOCKINPUT;
|
|
238
|
+
blockRootHex = blockInputOrRootHex.blockRootHex;
|
|
239
|
+
}
|
|
240
|
+
blockInput = blockInputOrRootHex;
|
|
241
|
+
}
|
|
242
|
+
let pendingBlock = this.pendingBlocks.get(blockRootHex);
|
|
243
|
+
if (!pendingBlock) {
|
|
192
244
|
pendingBlock = {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
245
|
+
unknownBlockType,
|
|
246
|
+
blockRootHex,
|
|
247
|
+
// this will be set after we download block
|
|
248
|
+
parentBlockRootHex: null,
|
|
196
249
|
blockInput,
|
|
197
|
-
|
|
198
|
-
|
|
250
|
+
peerIdStrs: new Set(),
|
|
251
|
+
status: PendingBlockStatus.pending,
|
|
252
|
+
downloadAttempts: 0,
|
|
199
253
|
};
|
|
200
|
-
this.pendingBlocks.set(
|
|
201
|
-
this.logger.verbose("Added
|
|
254
|
+
this.pendingBlocks.set(blockRootHex, pendingBlock);
|
|
255
|
+
this.logger.verbose("Added unknown block to pendingBlocks", {
|
|
256
|
+
unknownBlockType,
|
|
257
|
+
root: blockRootHex,
|
|
258
|
+
slot: blockInput?.block?.message.slot ?? "unknown",
|
|
259
|
+
});
|
|
202
260
|
}
|
|
203
261
|
if (peerIdStr) {
|
|
204
|
-
pendingBlock.
|
|
262
|
+
pendingBlock.peerIdStrs.add(peerIdStr);
|
|
205
263
|
}
|
|
206
|
-
// TODO: check this prune methodology
|
|
207
264
|
// Limit pending blocks to prevent DOS attacks that cause OOM
|
|
208
265
|
const prunedItemCount = pruneSetToMax(this.pendingBlocks, this.maxPendingBlocks);
|
|
209
266
|
if (prunedItemCount > 0) {
|
|
210
|
-
this.logger.
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
onPeerConnected = (data) => {
|
|
214
|
-
try {
|
|
215
|
-
const peerId = data.peer;
|
|
216
|
-
const peerSyncMeta = this.network.getConnectedPeerSyncMeta(peerId);
|
|
217
|
-
this.peerBalancer.onPeerConnected(data.peer, peerSyncMeta);
|
|
218
|
-
this.triggerUnknownBlockSearch();
|
|
219
|
-
}
|
|
220
|
-
catch (e) {
|
|
221
|
-
this.logger.debug("Error handling peerConnected event", {}, e);
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
onPeerDisconnected = (data) => {
|
|
225
|
-
const peerId = data.peer;
|
|
226
|
-
this.peerBalancer.onPeerDisconnected(peerId);
|
|
227
|
-
};
|
|
228
|
-
/**
|
|
229
|
-
* Gather tip parent blocks with unknown parent and do a search for all of them
|
|
230
|
-
*/
|
|
231
|
-
triggerUnknownBlockSearch = () => {
|
|
232
|
-
// Cheap early stop to prevent calling the network.getConnectedPeers()
|
|
233
|
-
if (this.pendingBlocks.size === 0) {
|
|
234
|
-
return;
|
|
267
|
+
this.logger.warn(`Pruned ${prunedItemCount} pending blocks from UnknownBlockSync`);
|
|
235
268
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
if (connectedPeers.length === 0) {
|
|
239
|
-
this.logger.debug("No connected peers, skipping unknown block search.");
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
const { unknowns, ancestors } = getUnknownAndAncestorBlocks(this.pendingBlocks);
|
|
243
|
-
// it's rare when there is no unknown block
|
|
244
|
-
// see https://github.com/ChainSafe/lodestar/issues/5649#issuecomment-1594213550
|
|
245
|
-
if (unknowns.length === 0) {
|
|
246
|
-
let processedBlocks = 0;
|
|
247
|
-
for (const block of ancestors) {
|
|
248
|
-
// when this happens, it's likely the block and parent block are processed by head sync
|
|
249
|
-
if (this.chain.forkChoice.hasBlockHex(block.blockInput.parentRootHex)) {
|
|
250
|
-
processedBlocks++;
|
|
251
|
-
this.processBlock(block).catch((e) => {
|
|
252
|
-
this.logger.debug("Unexpected error - process old downloaded block", {}, e);
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
this.logger.verbose("No unknown block, process ancestor downloaded blocks", {
|
|
257
|
-
pendingBlocks: this.pendingBlocks.size,
|
|
258
|
-
ancestorBlocks: ancestors.length,
|
|
259
|
-
processedBlocks,
|
|
260
|
-
});
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
// most of the time there is exactly 1 unknown block
|
|
264
|
-
for (const block of unknowns) {
|
|
265
|
-
this.downloadBlock(block).catch((e) => {
|
|
266
|
-
this.logger.debug("Unexpected error - downloadBlock", { root: getBlockInputSyncCacheItemRootHex(block) }, e);
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
};
|
|
269
|
+
return unknownBlockType;
|
|
270
|
+
}
|
|
270
271
|
async downloadBlock(block) {
|
|
271
|
-
if (block.status !==
|
|
272
|
+
if (block.status !== PendingBlockStatus.pending) {
|
|
272
273
|
return;
|
|
273
274
|
}
|
|
274
|
-
const
|
|
275
|
+
const unknownBlockType = block.unknownBlockType;
|
|
275
276
|
const logCtx = {
|
|
276
|
-
|
|
277
|
-
root: rootHex,
|
|
277
|
+
root: block.blockRootHex,
|
|
278
278
|
pendingBlocks: this.pendingBlocks.size,
|
|
279
|
+
slot: block.blockInput?.block?.message.slot ?? "unknown",
|
|
280
|
+
unknownBlockType,
|
|
279
281
|
};
|
|
280
|
-
this.logger.verbose("
|
|
281
|
-
block.status =
|
|
282
|
-
|
|
282
|
+
this.logger.verbose("Downloading unknown block", logCtx);
|
|
283
|
+
block.status = PendingBlockStatus.fetching;
|
|
284
|
+
let res;
|
|
285
|
+
if (block.blockInput === null) {
|
|
286
|
+
// we only have block root, and nothing else
|
|
287
|
+
res = await wrapError(this.fetchUnknownBlockRoot(fromHex(block.blockRootHex)));
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
res = await wrapError(this.fetchUnavailableBlockInput(block.blockInput));
|
|
291
|
+
}
|
|
292
|
+
if (res.err)
|
|
293
|
+
this.metrics?.syncUnknownBlock.downloadedBlocksError.inc();
|
|
294
|
+
else
|
|
295
|
+
this.metrics?.syncUnknownBlock.downloadedBlocksSuccess.inc();
|
|
283
296
|
if (!res.err) {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
297
|
+
const { blockInput, peerIdStr } = res.result;
|
|
298
|
+
// fetchUnknownBlockRoot and fetchUnavailableBlockInput should return available data BlockInput, throw error if not
|
|
299
|
+
if (blockInput.type === BlockInputType.dataPromise) {
|
|
300
|
+
// if there were any peers who would have had the missing datacolumns, it would have resulted in err
|
|
301
|
+
throw Error(`Expected BlockInput to be available, got dataPromise for ${block.blockRootHex}`);
|
|
302
|
+
}
|
|
303
|
+
block = {
|
|
304
|
+
...block,
|
|
305
|
+
status: PendingBlockStatus.downloaded,
|
|
306
|
+
blockInput,
|
|
307
|
+
parentBlockRootHex: toRootHex(blockInput.block.message.parentRoot),
|
|
308
|
+
};
|
|
309
|
+
this.pendingBlocks.set(block.blockRootHex, block);
|
|
310
|
+
const blockSlot = blockInput.block.message.slot;
|
|
288
311
|
const finalizedSlot = this.chain.forkChoice.getFinalizedBlock().slot;
|
|
289
312
|
const delaySec = Date.now() / 1000 - (this.chain.genesisTime + blockSlot * this.config.SECONDS_PER_SLOT);
|
|
290
|
-
this.metrics?.
|
|
291
|
-
const
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
313
|
+
this.metrics?.syncUnknownBlock.elapsedTimeTillReceived.observe(delaySec);
|
|
314
|
+
const parentInForkchoice = this.chain.forkChoice.hasBlock(blockInput.block.message.parentRoot);
|
|
315
|
+
this.logger.verbose("Downloaded unknown block", {
|
|
316
|
+
root: block.blockRootHex,
|
|
317
|
+
pendingBlocks: this.pendingBlocks.size,
|
|
318
|
+
parentInForkchoice,
|
|
319
|
+
blockInputType: blockInput.type,
|
|
320
|
+
unknownBlockType,
|
|
321
|
+
});
|
|
322
|
+
if (parentInForkchoice) {
|
|
299
323
|
// Bingo! Process block. Add to pending blocks anyway for recycle the cache that prevents duplicate processing
|
|
300
|
-
this.processBlock(
|
|
301
|
-
this.logger.debug("Unexpected error - process newly downloaded block",
|
|
324
|
+
this.processBlock(block).catch((e) => {
|
|
325
|
+
this.logger.debug("Unexpected error - process newly downloaded block", {}, e);
|
|
302
326
|
});
|
|
303
327
|
}
|
|
304
328
|
else if (blockSlot <= finalizedSlot) {
|
|
@@ -307,20 +331,34 @@ export class BlockInputSync {
|
|
|
307
331
|
// 0 - 1 - ... - n - finalizedSlot
|
|
308
332
|
// \
|
|
309
333
|
// parent 1 - parent 2 - ... - unknownParent block
|
|
334
|
+
const blockRoot = this.config.getForkTypes(blockSlot).BeaconBlock.hashTreeRoot(blockInput.block.message);
|
|
310
335
|
this.logger.debug("Downloaded block is before finalized slot", {
|
|
311
|
-
...logCtx2,
|
|
312
336
|
finalizedSlot,
|
|
337
|
+
blockSlot,
|
|
338
|
+
parentRoot: toRootHex(blockRoot),
|
|
339
|
+
unknownBlockType,
|
|
313
340
|
});
|
|
314
|
-
this.
|
|
341
|
+
this.removeAndDownscoreAllDescendants(block);
|
|
315
342
|
}
|
|
316
343
|
else {
|
|
317
|
-
this.
|
|
344
|
+
this.onUnknownParent({ blockInput, peer: peerIdStr });
|
|
318
345
|
}
|
|
319
346
|
}
|
|
320
347
|
else {
|
|
321
|
-
this
|
|
322
|
-
|
|
323
|
-
|
|
348
|
+
// block download has error, this allows to retry the download of the block
|
|
349
|
+
block.status = PendingBlockStatus.pending;
|
|
350
|
+
// parentSlot > finalizedSlot, continue downloading parent of parent
|
|
351
|
+
block.downloadAttempts++;
|
|
352
|
+
const errorData = { root: block.blockRootHex, attempts: block.downloadAttempts, unknownBlockType };
|
|
353
|
+
if (block.downloadAttempts > MAX_ATTEMPTS_PER_BLOCK) {
|
|
354
|
+
// Give up on this block and assume it does not exist, penalizing all peers as if it was a bad block
|
|
355
|
+
this.logger.debug("Ignoring unknown block root after many failed downloads", errorData, res.err);
|
|
356
|
+
this.removeAndDownscoreAllDescendants(block);
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
// Try again when a new peer connects, its status changes, or a new unknownBlockParent event happens
|
|
360
|
+
this.logger.debug("Error downloading unknown block root", errorData, res.err);
|
|
361
|
+
}
|
|
324
362
|
}
|
|
325
363
|
}
|
|
326
364
|
/**
|
|
@@ -331,14 +369,11 @@ export class BlockInputSync {
|
|
|
331
369
|
async processBlock(pendingBlock) {
|
|
332
370
|
// pending block status is `downloaded` right after `downloadBlock`
|
|
333
371
|
// but could be `pending` if added by `onUnknownBlockParent` event and this function is called recursively
|
|
334
|
-
if (pendingBlock.status !==
|
|
335
|
-
if (pendingBlock.status ===
|
|
372
|
+
if (pendingBlock.status !== PendingBlockStatus.downloaded) {
|
|
373
|
+
if (pendingBlock.status === PendingBlockStatus.pending) {
|
|
336
374
|
const connectedPeers = this.network.getConnectedPeers();
|
|
337
375
|
if (connectedPeers.length === 0) {
|
|
338
|
-
this.logger.debug("No connected peers, skipping download block", {
|
|
339
|
-
slot: pendingBlock.blockInput.slot,
|
|
340
|
-
blockRoot: pendingBlock.blockInput.blockRootHex,
|
|
341
|
-
});
|
|
376
|
+
this.logger.debug("No connected peers, skipping download block", { blockRoot: pendingBlock.blockRootHex });
|
|
342
377
|
return;
|
|
343
378
|
}
|
|
344
379
|
// if the download is a success we'll call `processBlock()` for this block
|
|
@@ -346,22 +381,23 @@ export class BlockInputSync {
|
|
|
346
381
|
}
|
|
347
382
|
return;
|
|
348
383
|
}
|
|
349
|
-
pendingBlock.status =
|
|
384
|
+
pendingBlock.status = PendingBlockStatus.processing;
|
|
350
385
|
// this prevents unbundling attack
|
|
351
386
|
// see https://lighthouse-blog.sigmaprime.io/mev-unbundling-rpc.html
|
|
352
|
-
const { slot: blockSlot, proposerIndex } = pendingBlock.blockInput.
|
|
353
|
-
|
|
354
|
-
const proposerBoostWindowMs = this.config.getAttestationDueMs(fork);
|
|
355
|
-
if (this.chain.clock.msFromSlot(blockSlot) < proposerBoostWindowMs &&
|
|
387
|
+
const { slot: blockSlot, proposerIndex } = pendingBlock.blockInput.block.message;
|
|
388
|
+
if (this.chain.clock.secFromSlot(blockSlot) < this.proposerBoostSecWindow &&
|
|
356
389
|
this.chain.seenBlockProposers.isKnown(blockSlot, proposerIndex)) {
|
|
357
390
|
// proposer is known by a gossip block already, wait a bit to make sure this block is not
|
|
358
391
|
// eligible for proposer boost to prevent unbundling attack
|
|
392
|
+
const blockRoot = this.config
|
|
393
|
+
.getForkTypes(blockSlot)
|
|
394
|
+
.BeaconBlock.hashTreeRoot(pendingBlock.blockInput.block.message);
|
|
359
395
|
this.logger.verbose("Avoid proposer boost for this block of known proposer", {
|
|
360
|
-
|
|
361
|
-
|
|
396
|
+
blockSlot,
|
|
397
|
+
blockRoot: toRootHex(blockRoot),
|
|
362
398
|
proposerIndex,
|
|
363
399
|
});
|
|
364
|
-
await sleep(
|
|
400
|
+
await sleep(this.proposerBoostSecWindow * 1000);
|
|
365
401
|
}
|
|
366
402
|
// At gossip time, it's critical to keep a good number of mesh peers.
|
|
367
403
|
// To do that, the Gossip Job Wait Time should be consistently <3s to avoid the behavior penalties in gossip
|
|
@@ -379,24 +415,21 @@ export class BlockInputSync {
|
|
|
379
415
|
eagerPersistBlock: true,
|
|
380
416
|
}));
|
|
381
417
|
if (res.err)
|
|
382
|
-
this.metrics?.
|
|
418
|
+
this.metrics?.syncUnknownBlock.processedBlocksError.inc();
|
|
383
419
|
else
|
|
384
|
-
this.metrics?.
|
|
420
|
+
this.metrics?.syncUnknownBlock.processedBlocksSuccess.inc();
|
|
385
421
|
if (!res.err) {
|
|
386
422
|
// no need to update status to "processed", delete anyway
|
|
387
|
-
this.pendingBlocks.delete(pendingBlock.
|
|
388
|
-
this.chain.seenBlockInputCache.prune(pendingBlock.blockInput.blockRootHex);
|
|
423
|
+
this.pendingBlocks.delete(pendingBlock.blockRootHex);
|
|
389
424
|
// Send child blocks to the processor
|
|
390
|
-
for (const descendantBlock of getDescendantBlocks(pendingBlock.
|
|
391
|
-
|
|
392
|
-
this.
|
|
393
|
-
|
|
394
|
-
});
|
|
395
|
-
}
|
|
425
|
+
for (const descendantBlock of getDescendantBlocks(pendingBlock.blockRootHex, this.pendingBlocks)) {
|
|
426
|
+
this.processBlock(descendantBlock).catch((e) => {
|
|
427
|
+
this.logger.debug("Unexpected error - process descendant block", {}, e);
|
|
428
|
+
});
|
|
396
429
|
}
|
|
397
430
|
}
|
|
398
431
|
else {
|
|
399
|
-
const errorData = {
|
|
432
|
+
const errorData = { root: pendingBlock.blockRootHex, slot: pendingBlock.blockInput.block.message.slot };
|
|
400
433
|
if (res.err instanceof BlockError) {
|
|
401
434
|
switch (res.err.type.code) {
|
|
402
435
|
// This cases are already handled with `{ignoreIfKnown: true}`
|
|
@@ -406,7 +439,7 @@ export class BlockInputSync {
|
|
|
406
439
|
case BlockErrorCode.PRESTATE_MISSING:
|
|
407
440
|
// Should not happen, mark as downloaded to try again latter
|
|
408
441
|
this.logger.debug("Attempted to process block but its parent was still unknown", errorData, res.err);
|
|
409
|
-
pendingBlock.status =
|
|
442
|
+
pendingBlock.status = PendingBlockStatus.downloaded;
|
|
410
443
|
break;
|
|
411
444
|
case BlockErrorCode.EXECUTION_ENGINE_ERROR:
|
|
412
445
|
// Removing the block(s) without penalizing the peers, hoping for EL to
|
|
@@ -416,13 +449,13 @@ export class BlockInputSync {
|
|
|
416
449
|
default:
|
|
417
450
|
// Block is not correct with respect to our chain. Log error loudly
|
|
418
451
|
this.logger.debug("Error processing block from unknown parent sync", errorData, res.err);
|
|
419
|
-
this.
|
|
452
|
+
this.removeAndDownscoreAllDescendants(pendingBlock);
|
|
420
453
|
}
|
|
421
454
|
}
|
|
422
455
|
// Probably a queue error or something unwanted happened, mark as pending to try again latter
|
|
423
456
|
else {
|
|
424
457
|
this.logger.debug("Unknown error processing block from unknown block sync", errorData, res.err);
|
|
425
|
-
pendingBlock.status =
|
|
458
|
+
pendingBlock.status = PendingBlockStatus.downloaded;
|
|
426
459
|
}
|
|
427
460
|
}
|
|
428
461
|
}
|
|
@@ -435,129 +468,144 @@ export class BlockInputSync {
|
|
|
435
468
|
* prefulu, will attempt a max of `MAX_ATTEMPTS_PER_BLOCK` on different peers, postfulu we may attempt more as defined in `getMaxDownloadAttempts()` function
|
|
436
469
|
* Also verifies the received block root + returns the peer that provided the block for future downscoring.
|
|
437
470
|
*/
|
|
438
|
-
async
|
|
439
|
-
const
|
|
471
|
+
async fetchUnknownBlockRoot(blockRoot) {
|
|
472
|
+
const blockRootHex = toRootHex(blockRoot);
|
|
440
473
|
const excludedPeers = new Set();
|
|
474
|
+
let partialDownload = null;
|
|
441
475
|
const defaultPendingColumns = this.config.getForkSeq(this.chain.clock.currentSlot) >= ForkSeq.fulu
|
|
442
|
-
? new Set(this.network.custodyConfig.
|
|
476
|
+
? new Set(this.network.custodyConfig.sampleGroups)
|
|
443
477
|
: null;
|
|
444
|
-
|
|
445
|
-
let slot = isPendingBlockInput(cacheItem) ? cacheItem.blockInput.slot : undefined;
|
|
446
|
-
if (slot !== undefined) {
|
|
447
|
-
this.metrics?.blockInputSync.fetchBegin.observe(this.chain.clock.secFromSlot(slot, fetchStartSec));
|
|
448
|
-
}
|
|
478
|
+
let lastError = null;
|
|
449
479
|
let i = 0;
|
|
450
480
|
while (i++ < this.getMaxDownloadAttempts()) {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
// pendingDataColumns is null pre-fulu
|
|
455
|
-
const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers);
|
|
456
|
-
if (peerMeta === null) {
|
|
481
|
+
// pendingDataColumns is null prefulu
|
|
482
|
+
const peer = this.peerBalancer.bestPeerForPendingColumns(partialDownload ? new Set(partialDownload.pendingDataColumns) : defaultPendingColumns, excludedPeers);
|
|
483
|
+
if (peer === null) {
|
|
457
484
|
// no more peer with needed columns to try, throw error
|
|
458
|
-
|
|
459
|
-
if (pendingColumns) {
|
|
460
|
-
message += ` with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`;
|
|
461
|
-
}
|
|
462
|
-
this.metrics?.blockInputSync.fetchTimeSec.observe({ result: FetchResult.FailureTriedAllPeers }, Date.now() / 1000 - fetchStartSec);
|
|
463
|
-
this.metrics?.blockInputSync.fetchPeers.set({ result: FetchResult.FailureTriedAllPeers }, i);
|
|
464
|
-
throw Error(message);
|
|
485
|
+
throw Error(`Error fetching UnknownBlockRoot after ${i}: cannot find peer with needed columns ${partialDownload?.pendingDataColumns.join(", ")}`);
|
|
465
486
|
}
|
|
466
|
-
const { peerId, client: peerClient } =
|
|
467
|
-
|
|
487
|
+
const { peerId, client: peerClient } = peer;
|
|
488
|
+
excludedPeers.add(peerId);
|
|
468
489
|
try {
|
|
469
|
-
const
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
emitter: this.chain.emitter,
|
|
474
|
-
peerMeta,
|
|
475
|
-
cacheItem,
|
|
476
|
-
});
|
|
477
|
-
cacheItem = downloadResult.result;
|
|
478
|
-
if (slot === undefined) {
|
|
479
|
-
slot = cacheItem.blockInput.slot;
|
|
480
|
-
// we were not able to observe the time into slot when starting the fetch, do it now
|
|
481
|
-
this.metrics?.blockInputSync.fetchBegin.observe(this.chain.clock.secFromSlot(slot, fetchStartSec));
|
|
490
|
+
const { blocks: [blockInput], pendingDataColumns, } = await beaconBlocksMaybeBlobsByRoot(this.config, this.network, peerId, [blockRoot], partialDownload, peerClient, this.metrics, this.logger);
|
|
491
|
+
// Peer does not have the block, try with next peer
|
|
492
|
+
if (blockInput === undefined) {
|
|
493
|
+
continue;
|
|
482
494
|
}
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
const warnings = downloadResult.warnings;
|
|
487
|
-
if (warnings) {
|
|
488
|
-
for (const warning of warnings) {
|
|
489
|
-
this.logger.debug("BlockInputSync.fetchBlockInput: downloaded with warning", logCtx, warning);
|
|
490
|
-
this.metrics?.blockInputSync.downloadByRoot.warn.inc({ code: warning.type.code, client: peerClient });
|
|
491
|
-
}
|
|
492
|
-
// TODO: penalize peer?
|
|
495
|
+
if (pendingDataColumns !== null) {
|
|
496
|
+
partialDownload = { blocks: [blockInput], pendingDataColumns };
|
|
497
|
+
continue;
|
|
493
498
|
}
|
|
499
|
+
// data is available, verify block root is correct
|
|
500
|
+
const block = blockInput.block.message;
|
|
501
|
+
const receivedBlockRoot = this.config.getForkTypes(block.slot).BeaconBlock.hashTreeRoot(block);
|
|
502
|
+
if (!byteArrayEquals(receivedBlockRoot, blockRoot)) {
|
|
503
|
+
throw Error(`Wrong block received by peer, got ${toRootHex(receivedBlockRoot)} expected ${blockRootHex}`);
|
|
504
|
+
}
|
|
505
|
+
return { blockInput, peerIdStr: peerId };
|
|
494
506
|
}
|
|
495
507
|
catch (e) {
|
|
496
|
-
this.logger.debug("Error
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
508
|
+
this.logger.debug("Error fetching UnknownBlockRoot", { attempt: i, blockRootHex, peer: peerId }, e);
|
|
509
|
+
lastError = e;
|
|
510
|
+
}
|
|
511
|
+
finally {
|
|
512
|
+
this.peerBalancer.onRequestCompleted(peerId);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
if (lastError) {
|
|
516
|
+
lastError.message = `Error fetching UnknownBlockRoot after ${i} attempts: ${lastError.message}`;
|
|
517
|
+
throw lastError;
|
|
518
|
+
}
|
|
519
|
+
throw Error(`Error fetching UnknownBlockRoot after ${i}: cannot download all blobs or data columns for block ${blockRootHex}`);
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* We have partial block input:
|
|
523
|
+
* - we have block but not have all blobs (deneb) or needed columns (fulu)
|
|
524
|
+
* - we don't have block and have some blobs (deneb) or some columns (fulu)
|
|
525
|
+
* Fetches missing block/data columns/block for the blockinput. This function returns either preData or availableData BlockInput.
|
|
526
|
+
*/
|
|
527
|
+
async fetchUnavailableBlockInput(unavailableBlockInput) {
|
|
528
|
+
if (unavailableBlockInput.block !== null && unavailableBlockInput.type !== BlockInputType.dataPromise) {
|
|
529
|
+
return { blockInput: unavailableBlockInput, peerIdStr: "" };
|
|
530
|
+
}
|
|
531
|
+
let blockRootHex;
|
|
532
|
+
let blobKzgCommitmentsLen;
|
|
533
|
+
let blockRoot;
|
|
534
|
+
const dataMeta = {};
|
|
535
|
+
let sampledColumns = [];
|
|
536
|
+
if (unavailableBlockInput.block === null) {
|
|
537
|
+
blockRootHex = unavailableBlockInput.blockRootHex;
|
|
538
|
+
blockRoot = fromHex(blockRootHex);
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
const { cachedData, block: unavailableBlock } = unavailableBlockInput;
|
|
542
|
+
blockRoot = this.config
|
|
543
|
+
.getForkTypes(unavailableBlock.message.slot)
|
|
544
|
+
.BeaconBlock.hashTreeRoot(unavailableBlock.message);
|
|
545
|
+
blockRootHex = toRootHex(blockRoot);
|
|
546
|
+
blobKzgCommitmentsLen = unavailableBlock.message.body.blobKzgCommitments.length;
|
|
547
|
+
if (cachedData.fork === ForkName.deneb || cachedData.fork === ForkName.electra) {
|
|
548
|
+
const pendingBlobs = blobKzgCommitmentsLen - cachedData.blobsCache.size;
|
|
549
|
+
Object.assign(dataMeta, { pendingBlobs });
|
|
550
|
+
}
|
|
551
|
+
else if (cachedData.fork === ForkName.fulu) {
|
|
552
|
+
sampledColumns = this.network.custodyConfig.sampledColumns;
|
|
553
|
+
const pendingColumns = sampledColumns.length - cachedData.dataColumnsCache.size;
|
|
554
|
+
Object.assign(dataMeta, { pendingColumns });
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
let lastError = null;
|
|
558
|
+
let i = 0;
|
|
559
|
+
const excludedPeers = new Set();
|
|
560
|
+
while (i++ < this.getMaxDownloadAttempts()) {
|
|
561
|
+
const bestPeer = this.peerBalancer.bestPeerForBlockInput(unavailableBlockInput, excludedPeers);
|
|
562
|
+
if (bestPeer === null) {
|
|
563
|
+
// no more peer to try, throw error
|
|
564
|
+
throw Error(`Error fetching UnavailableBlockInput after ${i}: cannot find peer with needed columns ${sampledColumns.join(", ")}`);
|
|
565
|
+
}
|
|
566
|
+
const { peerId, client: peerClient } = bestPeer;
|
|
567
|
+
excludedPeers.add(peerId);
|
|
568
|
+
try {
|
|
569
|
+
const blockInput = await unavailableBeaconBlobsByRoot(this.config, this.network, peerId, peerClient, unavailableBlockInput, {
|
|
570
|
+
metrics: this.metrics,
|
|
571
|
+
logger: this.logger,
|
|
572
|
+
executionEngine: this.chain.executionEngine,
|
|
573
|
+
emitter: this.chain.emitter,
|
|
574
|
+
blockInputsRetryTrackerCache: this.blockInputsRetryTrackerCache,
|
|
575
|
+
engineGetBlobsCache: this.engineGetBlobsCache,
|
|
576
|
+
});
|
|
577
|
+
if (unavailableBlockInput.block !== null && blockInput.type === BlockInputType.dataPromise) {
|
|
578
|
+
// all datacolumns were not downloaded we can continue with other peers
|
|
579
|
+
// as unavailableBlockInput.block's dataColumnsCache would be updated
|
|
580
|
+
continue;
|
|
503
581
|
}
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
default:
|
|
513
|
-
excludedPeers.add(peerId);
|
|
514
|
-
break;
|
|
515
|
-
}
|
|
582
|
+
// data is available, verify block root is correct
|
|
583
|
+
const block = blockInput.block.message;
|
|
584
|
+
const receivedBlockRoot = this.config.getForkTypes(block.slot).BeaconBlock.hashTreeRoot(block);
|
|
585
|
+
if (!byteArrayEquals(receivedBlockRoot, blockRoot)) {
|
|
586
|
+
throw Error(`Wrong block received by peer, got ${toRootHex(receivedBlockRoot)} expected ${blockRootHex}`);
|
|
587
|
+
}
|
|
588
|
+
if (unavailableBlockInput.block === null) {
|
|
589
|
+
this.logger.debug("Fetched NullBlockInput", { attempts: i, blockRootHex });
|
|
516
590
|
}
|
|
517
591
|
else {
|
|
518
|
-
|
|
519
|
-
downloadByRootMetrics?.error.inc({ code: "unknown", client: peerClient });
|
|
520
|
-
excludedPeers.add(peerId);
|
|
592
|
+
this.logger.debug("Fetched UnavailableBlockInput", { attempts: i, ...dataMeta, blobKzgCommitmentsLen });
|
|
521
593
|
}
|
|
594
|
+
return { blockInput, peerIdStr: peerId };
|
|
595
|
+
}
|
|
596
|
+
catch (e) {
|
|
597
|
+
this.logger.debug("Error fetching UnavailableBlockInput", { attempt: i, blockRootHex, peer: peerId }, e);
|
|
598
|
+
lastError = e;
|
|
522
599
|
}
|
|
523
600
|
finally {
|
|
524
601
|
this.peerBalancer.onRequestCompleted(peerId);
|
|
525
602
|
}
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
? FetchResult.SuccessResolved
|
|
533
|
-
: FetchResult.SuccessMissingParent;
|
|
534
|
-
this.metrics?.blockInputSync.fetchTimeSec.observe({ result }, Date.now() / 1000 - fetchStartSec);
|
|
535
|
-
this.metrics?.blockInputSync.fetchPeers.set({ result }, i);
|
|
536
|
-
return cacheItem;
|
|
537
|
-
}
|
|
538
|
-
} // end while loop over peers
|
|
539
|
-
const message = `Error fetching BlockInput with slot=${slot} root=${rootHex} after ${i - 1} attempts.`;
|
|
540
|
-
if (!isPendingBlockInput(cacheItem)) {
|
|
541
|
-
throw Error(`${message} No block and no data was found.`);
|
|
542
|
-
}
|
|
543
|
-
if (!cacheItem.blockInput.hasBlock()) {
|
|
544
|
-
throw new Error(`${message} Block was not found.`);
|
|
545
|
-
}
|
|
546
|
-
if (isBlockInputBlobs(cacheItem.blockInput)) {
|
|
547
|
-
const missing = cacheItem.blockInput.getMissingBlobMeta().map((b) => b.index);
|
|
548
|
-
if (missing.length) {
|
|
549
|
-
throw new Error(`${message} Missing blob indices=${prettyPrintIndices(missing)}.`);
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
if (isBlockInputColumns(cacheItem.blockInput)) {
|
|
553
|
-
const missing = cacheItem.blockInput.getMissingSampledColumnMeta().missing;
|
|
554
|
-
if (missing.length) {
|
|
555
|
-
throw new Error(`${message} Missing column indices=${prettyPrintIndices(missing)}.`);
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
this.metrics?.blockInputSync.fetchTimeSec.observe({ result: FetchResult.FailureMaxAttempts }, Date.now() / 1000 - fetchStartSec);
|
|
559
|
-
this.metrics?.blockInputSync.fetchPeers.set({ result: FetchResult.FailureMaxAttempts }, i - 1);
|
|
560
|
-
throw Error(message);
|
|
603
|
+
}
|
|
604
|
+
if (lastError) {
|
|
605
|
+
lastError.message = `Error fetching UnavailableBlockInput after ${i} attempts: ${lastError.message}`;
|
|
606
|
+
throw lastError;
|
|
607
|
+
}
|
|
608
|
+
throw Error(`Error fetching UnavailableBlockInput after ${i}: unknown error`);
|
|
561
609
|
}
|
|
562
610
|
/**
|
|
563
611
|
* Gets all descendant blocks of `block` recursively from `pendingBlocks`.
|
|
@@ -565,44 +613,33 @@ export class BlockInputSync {
|
|
|
565
613
|
* Downscore all peers that have referenced any of this bad blocks. May report peers multiple times if they have
|
|
566
614
|
* referenced more than one bad block.
|
|
567
615
|
*/
|
|
568
|
-
|
|
616
|
+
removeAndDownscoreAllDescendants(block) {
|
|
569
617
|
// Get all blocks that are a descendant of this one
|
|
570
618
|
const badPendingBlocks = this.removeAllDescendants(block);
|
|
571
619
|
// just console log and do not penalize on pending/bad blocks for debugging
|
|
572
620
|
// console.log("removeAndDownscoreAllDescendants", {block});
|
|
573
621
|
for (const block of badPendingBlocks) {
|
|
574
|
-
//
|
|
575
|
-
// TODO(fulu): why is this commented out here?
|
|
576
|
-
//
|
|
577
622
|
// this.knownBadBlocks.add(block.blockRootHex);
|
|
578
623
|
// for (const peerIdStr of block.peerIdStrs) {
|
|
579
624
|
// // TODO: Refactor peerRpcScores to work with peerIdStr only
|
|
580
625
|
// this.network.reportPeer(peerIdStr, PeerAction.LowToleranceError, "BadBlockByRoot");
|
|
581
626
|
// }
|
|
582
627
|
this.logger.debug("ignored Banning unknown block", {
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
peerIdStrings: Array.from(block.peerIdStrings)
|
|
586
|
-
.map((id) => prettyPrintPeerIdStr(id))
|
|
587
|
-
.join(","),
|
|
628
|
+
root: block.blockRootHex,
|
|
629
|
+
peerIdStrs: Array.from(block.peerIdStrs).join(","),
|
|
588
630
|
});
|
|
589
631
|
}
|
|
590
632
|
// Prune knownBadBlocks
|
|
591
633
|
pruneSetToMax(this.knownBadBlocks, MAX_KNOWN_BAD_BLOCKS);
|
|
592
634
|
}
|
|
593
635
|
removeAllDescendants(block) {
|
|
594
|
-
const rootHex = getBlockInputSyncCacheItemRootHex(block);
|
|
595
|
-
const slot = getBlockInputSyncCacheItemSlot(block);
|
|
596
636
|
// Get all blocks that are a descendant of this one
|
|
597
|
-
const badPendingBlocks = [block, ...getAllDescendantBlocks(
|
|
598
|
-
this.metrics?.
|
|
637
|
+
const badPendingBlocks = [block, ...getAllDescendantBlocks(block.blockRootHex, this.pendingBlocks)];
|
|
638
|
+
this.metrics?.syncUnknownBlock.removedBlocks.inc(badPendingBlocks.length);
|
|
599
639
|
for (const block of badPendingBlocks) {
|
|
600
|
-
|
|
601
|
-
this.
|
|
602
|
-
|
|
603
|
-
this.logger.debug("Removing bad/unknown/incomplete BlockInputSyncCacheItem", {
|
|
604
|
-
slot,
|
|
605
|
-
blockRoot: rootHex,
|
|
640
|
+
this.pendingBlocks.delete(block.blockRootHex);
|
|
641
|
+
this.logger.debug("Removing unknown parent block", {
|
|
642
|
+
root: block.blockRootHex,
|
|
606
643
|
});
|
|
607
644
|
}
|
|
608
645
|
return badPendingBlocks;
|
|
@@ -620,11 +657,10 @@ export class BlockInputSync {
|
|
|
620
657
|
* Class to track active byRoots requests and balance them across eligible peers.
|
|
621
658
|
*/
|
|
622
659
|
export class UnknownBlockPeerBalancer {
|
|
623
|
-
|
|
624
|
-
activeRequests;
|
|
625
|
-
constructor() {
|
|
660
|
+
constructor(custodyConfig) {
|
|
626
661
|
this.peersMeta = new Map();
|
|
627
662
|
this.activeRequests = new Map();
|
|
663
|
+
this.custodyConfig = custodyConfig;
|
|
628
664
|
}
|
|
629
665
|
/** Trigger on each peer re-status */
|
|
630
666
|
onPeerConnected(peerId, syncMeta) {
|
|
@@ -658,16 +694,36 @@ export class UnknownBlockPeerBalancer {
|
|
|
658
694
|
* called from fetchUnavailableBlockInput() where we have either BlockInput or NullBlockInput
|
|
659
695
|
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
660
696
|
*/
|
|
661
|
-
bestPeerForBlockInput(
|
|
697
|
+
bestPeerForBlockInput(unavailableBlockInput, excludedPeers) {
|
|
698
|
+
let cachedData = undefined;
|
|
699
|
+
if (unavailableBlockInput.block === null) {
|
|
700
|
+
// NullBlockInput
|
|
701
|
+
cachedData = unavailableBlockInput.cachedData;
|
|
702
|
+
}
|
|
703
|
+
else {
|
|
704
|
+
// BlockInput
|
|
705
|
+
if (unavailableBlockInput.type !== BlockInputType.dataPromise) {
|
|
706
|
+
throw Error(`bestPeerForBlockInput called with BlockInput type ${unavailableBlockInput.type}, expected dataPromise`);
|
|
707
|
+
}
|
|
708
|
+
cachedData = unavailableBlockInput.cachedData;
|
|
709
|
+
}
|
|
662
710
|
const eligiblePeers = [];
|
|
663
|
-
if (
|
|
664
|
-
|
|
665
|
-
|
|
711
|
+
if (cachedData.fork === ForkName.fulu) {
|
|
712
|
+
// cached data is CachedDataColumns
|
|
713
|
+
const { dataColumnsCache } = cachedData;
|
|
714
|
+
const pendingDataColumns = new Set();
|
|
715
|
+
for (const column of this.custodyConfig.sampledColumns) {
|
|
716
|
+
if (!dataColumnsCache.has(column)) {
|
|
717
|
+
pendingDataColumns.add(column);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
// there could be no pending column in case of NullBlockInput
|
|
666
721
|
eligiblePeers.push(...this.filterPeers(pendingDataColumns, excludedPeers));
|
|
667
722
|
}
|
|
668
723
|
else {
|
|
669
724
|
// prefulu
|
|
670
|
-
|
|
725
|
+
const pendingDataColumns = null;
|
|
726
|
+
eligiblePeers.push(...this.filterPeers(pendingDataColumns, excludedPeers));
|
|
671
727
|
}
|
|
672
728
|
if (eligiblePeers.length === 0) {
|
|
673
729
|
return null;
|
|
@@ -719,7 +775,7 @@ export class UnknownBlockPeerBalancer {
|
|
|
719
775
|
continue;
|
|
720
776
|
}
|
|
721
777
|
// postfulu, find peers that have custody columns that we need
|
|
722
|
-
const {
|
|
778
|
+
const { custodyGroups: peerColumns } = syncMeta;
|
|
723
779
|
// check if the peer has all needed columns
|
|
724
780
|
// get match
|
|
725
781
|
const columns = peerColumns.reduce((acc, elem) => {
|