@lodestar/beacon-node 1.35.0-dev.8cacf063da → 1.35.0-dev.8ea34e52ba
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 +58 -46
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +3 -3
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/errors.js +2 -0
- package/lib/api/impl/errors.js.map +1 -1
- package/lib/api/impl/lodestar/index.js +1 -1
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +2 -1
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/rest/activeSockets.js +3 -2
- package/lib/api/rest/activeSockets.js.map +1 -1
- package/lib/api/rest/base.js +4 -0
- package/lib/api/rest/base.js.map +1 -1
- package/lib/api/rest/index.js +2 -0
- package/lib/api/rest/index.js.map +1 -1
- package/lib/api/rest/swaggerUI.js +4 -2
- package/lib/api/rest/swaggerUI.js.map +1 -1
- package/lib/chain/ColumnReconstructionTracker.d.ts +32 -0
- package/lib/chain/ColumnReconstructionTracker.js +53 -0
- package/lib/chain/ColumnReconstructionTracker.js.map +1 -0
- package/lib/chain/GetBlobsTracker.d.ts +31 -0
- package/lib/chain/GetBlobsTracker.js +67 -0
- package/lib/chain/GetBlobsTracker.js.map +1 -0
- package/lib/chain/archiveStore/archiveStore.js +49 -38
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +2 -0
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +5 -0
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
- package/lib/chain/balancesCache.js +1 -3
- package/lib/chain/balancesCache.js.map +1 -1
- package/lib/chain/beaconProposerCache.js +1 -0
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +19 -7
- package/lib/chain/blocks/blockInput/blockInput.js +132 -88
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/blockInput/types.d.ts +19 -10
- package/lib/chain/blocks/blockInput/types.js +1 -0
- package/lib/chain/blocks/blockInput/types.js.map +1 -1
- package/lib/chain/blocks/blockInput/utils.d.ts +0 -4
- package/lib/chain/blocks/blockInput/utils.js +6 -29
- package/lib/chain/blocks/blockInput/utils.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +16 -12
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/index.d.ts +5 -4
- package/lib/chain/blocks/index.js +5 -4
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +3 -106
- package/lib/chain/blocks/types.js +0 -119
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.d.ts +2 -2
- package/lib/chain/blocks/utils/chainSegment.js +2 -2
- package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts +3 -3
- package/lib/chain/blocks/verifyBlock.js +15 -14
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts +7 -22
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +18 -110
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +4 -3
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +24 -22
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +4 -3
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +2 -2
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -2
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +2 -2
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.d.ts +3 -3
- package/lib/chain/blocks/writeBlockInputToDb.js +61 -66
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/multithread/index.js +167 -163
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/bls/singleThread.js +1 -0
- package/lib/chain/bls/singleThread.js.map +1 -1
- package/lib/chain/chain.d.ts +9 -7
- package/lib/chain/chain.js +79 -20
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +43 -2
- package/lib/chain/emitter.js +18 -0
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/blobSidecarError.d.ts +24 -0
- package/lib/chain/errors/blobSidecarError.js +10 -0
- package/lib/chain/errors/blobSidecarError.js.map +1 -1
- package/lib/chain/errors/blockError.js +1 -0
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +42 -0
- package/lib/chain/errors/dataColumnSidecarError.js +14 -0
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
- package/lib/chain/errors/gossipValidation.js +1 -0
- package/lib/chain/errors/gossipValidation.js.map +1 -1
- package/lib/chain/genesis/genesis.js +16 -5
- package/lib/chain/genesis/genesis.js.map +1 -1
- package/lib/chain/interface.d.ts +10 -7
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.js +16 -9
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +13 -8
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.js +7 -2
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.js +10 -12
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -6
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +5 -2
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/prepareNextSlot.js +141 -136
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/regen/errors.js +1 -0
- package/lib/chain/regen/errors.js.map +1 -1
- package/lib/chain/regen/queued.js +35 -28
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.js +1 -0
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/reprocess.js +3 -1
- package/lib/chain/reprocess.js.map +1 -1
- package/lib/chain/seenCache/index.d.ts +1 -1
- package/lib/chain/seenCache/index.js +1 -1
- package/lib/chain/seenCache/index.js.map +1 -1
- package/lib/chain/seenCache/seenAggregateAndProof.js +7 -6
- package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
- package/lib/chain/seenCache/seenAttestationData.js +5 -2
- package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
- package/lib/chain/seenCache/seenAttesters.js +2 -4
- package/lib/chain/seenCache/seenAttesters.js.map +1 -1
- package/lib/chain/seenCache/seenBlockProposers.js +2 -4
- package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
- package/lib/chain/seenCache/seenCommittee.js +1 -3
- package/lib/chain/seenCache/seenCommittee.js.map +1 -1
- package/lib/chain/seenCache/seenCommitteeContribution.js +3 -2
- package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +74 -78
- package/lib/chain/seenCache/seenGossipBlockInput.js +235 -369
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/shufflingCache.js +5 -2
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/stateCache/blockStateCacheImpl.js +13 -7
- package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
- package/lib/chain/stateCache/datastore/db.js +1 -0
- package/lib/chain/stateCache/datastore/db.js.map +1 -1
- package/lib/chain/stateCache/datastore/file.js +1 -0
- package/lib/chain/stateCache/datastore/file.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.js +10 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js +10 -4
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/mapMetrics.js +4 -4
- package/lib/chain/stateCache/mapMetrics.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +13 -4
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/blobSidecar.d.ts +8 -3
- package/lib/chain/validation/blobSidecar.js +73 -31
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +7 -9
- package/lib/chain/validation/dataColumnSidecar.js +94 -56
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validatorMonitor.js +2 -1
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/beacon.js +24 -0
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/repositories/depositDataRoot.js +1 -0
- package/lib/db/repositories/depositDataRoot.js.map +1 -1
- package/lib/db/single/preGenesisState.js +6 -0
- package/lib/db/single/preGenesisState.js.map +1 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.js +5 -0
- package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -1
- package/lib/eth1/eth1DataCache.js +2 -0
- package/lib/eth1/eth1DataCache.js.map +1 -1
- package/lib/eth1/eth1DepositDataTracker.js +18 -5
- package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
- package/lib/eth1/eth1DepositsCache.js +3 -0
- package/lib/eth1/eth1DepositsCache.js.map +1 -1
- package/lib/eth1/eth1MergeBlockTracker.js +10 -4
- package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
- package/lib/eth1/index.js +2 -0
- package/lib/eth1/index.js.map +1 -1
- package/lib/eth1/provider/eth1Provider.js +6 -2
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/eth1/provider/jsonRpcHttpClient.js +16 -2
- package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -1
- package/lib/eth1/provider/utils.d.ts +5 -0
- package/lib/eth1/provider/utils.js +9 -1
- package/lib/eth1/provider/utils.js.map +1 -1
- package/lib/execution/builder/cache.js +6 -0
- package/lib/execution/builder/cache.js.map +1 -1
- package/lib/execution/builder/http.js +14 -8
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/engine/disabled.js +2 -4
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +2 -2
- package/lib/execution/engine/http.js +43 -11
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +2 -2
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +16 -12
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.js +1 -3
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/types.d.ts +5 -0
- package/lib/execution/engine/types.js +37 -8
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/execution/engine/utils.js +2 -1
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +11 -5
- package/lib/metrics/metrics/beacon.js +40 -20
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +49 -12
- package/lib/metrics/metrics/lodestar.js +74 -6
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/utils/avgMinMax.js +10 -6
- package/lib/metrics/utils/avgMinMax.js.map +1 -1
- package/lib/metrics/utils/gauge.js +1 -4
- package/lib/metrics/utils/gauge.js.map +1 -1
- package/lib/monitoring/properties.js +4 -0
- package/lib/monitoring/properties.js.map +1 -1
- package/lib/monitoring/service.js +13 -1
- package/lib/monitoring/service.js.map +1 -1
- package/lib/monitoring/system.js +25 -27
- package/lib/monitoring/system.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +1 -1
- package/lib/network/core/networkCore.js +66 -49
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +1 -1
- package/lib/network/core/networkCoreWorkerHandler.js +4 -1
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/discv5/index.js +4 -1
- package/lib/network/discv5/index.js.map +1 -1
- package/lib/network/discv5/worker.js.map +1 -1
- package/lib/network/events.d.ts +2 -18
- package/lib/network/events.js +0 -7
- package/lib/network/events.js.map +1 -1
- package/lib/network/gossip/encoding.js +2 -0
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/errors.js +1 -0
- package/lib/network/gossip/errors.js.map +1 -1
- package/lib/network/gossip/gossipsub.js +7 -0
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +49 -49
- package/lib/network/gossip/topic.js +2 -1
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +2 -1
- package/lib/network/metadata.js +4 -0
- package/lib/network/metadata.js.map +1 -1
- package/lib/network/network.d.ts +3 -1
- package/lib/network/network.js +89 -71
- package/lib/network/network.js.map +1 -1
- package/lib/network/options.js +1 -1
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/datastore.js +8 -2
- package/lib/network/peers/datastore.js.map +1 -1
- package/lib/network/peers/discover.js +74 -64
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/network/peers/peerManager.js +154 -130
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/peersData.d.ts +1 -1
- package/lib/network/peers/peersData.js +1 -3
- package/lib/network/peers/peersData.js.map +1 -1
- package/lib/network/peers/score/score.js +6 -0
- package/lib/network/peers/score/score.js.map +1 -1
- package/lib/network/peers/score/store.js +3 -0
- package/lib/network/peers/score/store.js.map +1 -1
- package/lib/network/peers/utils/subnetMap.js +2 -4
- package/lib/network/peers/utils/subnetMap.js.map +1 -1
- package/lib/network/processor/aggregatorTracker.js +1 -3
- package/lib/network/processor/aggregatorTracker.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +148 -163
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.js +11 -9
- package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
- package/lib/network/processor/gossipQueues/linear.js +9 -8
- package/lib/network/processor/gossipQueues/linear.js.map +1 -1
- package/lib/network/processor/index.d.ts +2 -1
- package/lib/network/processor/index.js +21 -6
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +11 -2
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/index.d.ts +0 -2
- package/lib/network/reqresp/index.js +0 -2
- package/lib/network/reqresp/index.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +9 -3
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/statusCache.js +1 -0
- package/lib/network/statusCache.js.map +1 -1
- package/lib/network/subnets/attnetsService.js +73 -65
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/network/subnets/syncnetsService.js +29 -22
- package/lib/network/subnets/syncnetsService.js.map +1 -1
- package/lib/node/nodejs.js +15 -0
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/backfill/backfill.js +57 -15
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/constants.d.ts +2 -1
- package/lib/sync/constants.js +2 -1
- package/lib/sync/constants.js.map +1 -1
- package/lib/sync/interface.d.ts +1 -59
- package/lib/sync/interface.js +0 -20
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/options.d.ts +1 -1
- package/lib/sync/range/batch.d.ts +48 -32
- package/lib/sync/range/batch.js +201 -55
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +15 -10
- package/lib/sync/range/chain.js +141 -70
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts +2 -2
- package/lib/sync/range/range.js +86 -54
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/hashBlocks.d.ts +2 -2
- package/lib/sync/range/utils/hashBlocks.js +6 -4
- package/lib/sync/range/utils/hashBlocks.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.js +18 -13
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/sync.js +95 -87
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/types.d.ts +44 -0
- package/lib/sync/types.js +34 -0
- package/lib/sync/types.js.map +1 -0
- package/lib/sync/unknownBlock.d.ts +42 -28
- package/lib/sync/unknownBlock.js +404 -458
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +186 -0
- package/lib/sync/utils/downloadByRange.js +457 -0
- package/lib/sync/utils/downloadByRange.js.map +1 -0
- package/lib/sync/utils/downloadByRoot.d.ts +119 -0
- package/lib/sync/utils/downloadByRoot.js +319 -0
- package/lib/sync/utils/downloadByRoot.js.map +1 -0
- package/lib/sync/utils/pendingBlocksTree.d.ts +14 -6
- package/lib/sync/utils/pendingBlocksTree.js +24 -18
- package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
- package/lib/util/array.js +7 -3
- package/lib/util/array.js.map +1 -1
- package/lib/util/asyncIterableToEvents.js +6 -3
- package/lib/util/asyncIterableToEvents.js.map +1 -1
- package/lib/util/binarySearch.js +2 -0
- package/lib/util/binarySearch.js.map +1 -1
- package/lib/util/blobs.d.ts +2 -2
- package/lib/util/blobs.js +4 -4
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/bufferPool.js +7 -2
- package/lib/util/bufferPool.js.map +1 -1
- package/lib/util/clock.js +23 -18
- package/lib/util/clock.js.map +1 -1
- package/lib/util/dataColumns.d.ts +21 -12
- package/lib/util/dataColumns.js +105 -134
- package/lib/util/dataColumns.js.map +1 -1
- package/lib/util/execution.d.ts +11 -0
- package/lib/util/execution.js +131 -0
- package/lib/util/execution.js.map +1 -0
- package/lib/util/itTrigger.js +4 -4
- package/lib/util/itTrigger.js.map +1 -1
- package/lib/util/map.js +2 -0
- package/lib/util/map.js.map +1 -1
- package/lib/util/queue/itemQueue.js +52 -49
- package/lib/util/queue/itemQueue.js.map +1 -1
- package/lib/util/serializedCache.js +1 -3
- package/lib/util/serializedCache.js.map +1 -1
- package/lib/util/set.js +2 -0
- package/lib/util/set.js.map +1 -1
- package/lib/util/sszBytes.d.ts +1 -0
- package/lib/util/sszBytes.js +1 -1
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/timeSeries.js +3 -1
- package/lib/util/timeSeries.js.map +1 -1
- package/lib/util/types.d.ts +1 -1
- package/lib/util/types.js +2 -2
- package/lib/util/types.js.map +1 -1
- package/lib/util/wrapError.d.ts +7 -0
- package/package.json +15 -15
- package/lib/chain/seenCache/seenBlockInput.d.ts +0 -84
- package/lib/chain/seenCache/seenBlockInput.js +0 -225
- package/lib/chain/seenCache/seenBlockInput.js.map +0 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +0 -28
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +0 -328
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +0 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +0 -49
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +0 -499
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +0 -1
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import {
|
|
2
|
+
import { ForkName } from "@lodestar/params";
|
|
3
|
+
import { Epoch, RootHex, Slot } from "@lodestar/types";
|
|
3
4
|
import { LodestarError } from "@lodestar/utils";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
5
|
+
import { IBlockInput } from "../../chain/blocks/blockInput/types.js";
|
|
6
|
+
import { CustodyConfig } from "../../util/dataColumns.js";
|
|
6
7
|
import { PeerIdStr } from "../../util/peerId.js";
|
|
8
|
+
import { DownloadByRangeRequests } from "../utils/downloadByRange.js";
|
|
9
|
+
import { PeerSyncMeta } from "../../network/peers/peersData.js";
|
|
10
|
+
import { IClock } from "../../util/clock.js";
|
|
7
11
|
/**
|
|
8
12
|
* Current state of a batch
|
|
9
13
|
*/
|
|
@@ -27,39 +31,35 @@ export declare enum BatchStatus {
|
|
|
27
31
|
}
|
|
28
32
|
export type Attempt = {
|
|
29
33
|
/** The peer that made the attempt */
|
|
30
|
-
|
|
34
|
+
peers: PeerIdStr[];
|
|
31
35
|
/** The hash of the blocks of the attempt */
|
|
32
36
|
hash: RootHex;
|
|
33
37
|
};
|
|
34
|
-
export type
|
|
38
|
+
export type AwaitingDownloadState = {
|
|
35
39
|
status: BatchStatus.AwaitingDownload;
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
peer: PeerIdStr;
|
|
40
|
-
partialDownload: PartialDownload;
|
|
41
|
-
} | {
|
|
40
|
+
blocks: IBlockInput[];
|
|
41
|
+
};
|
|
42
|
+
export type DownloadSuccessState = {
|
|
42
43
|
status: BatchStatus.AwaitingProcessing;
|
|
44
|
+
blocks: IBlockInput[];
|
|
45
|
+
};
|
|
46
|
+
export type BatchState = AwaitingDownloadState | {
|
|
47
|
+
status: BatchStatus.Downloading;
|
|
43
48
|
peer: PeerIdStr;
|
|
44
|
-
blocks:
|
|
45
|
-
} | {
|
|
49
|
+
blocks: IBlockInput[];
|
|
50
|
+
} | DownloadSuccessState | {
|
|
46
51
|
status: BatchStatus.Processing;
|
|
52
|
+
blocks: IBlockInput[];
|
|
47
53
|
attempt: Attempt;
|
|
48
54
|
} | {
|
|
49
55
|
status: BatchStatus.AwaitingValidation;
|
|
56
|
+
blocks: IBlockInput[];
|
|
50
57
|
attempt: Attempt;
|
|
51
58
|
};
|
|
52
59
|
export type BatchMetadata = {
|
|
53
60
|
startEpoch: Epoch;
|
|
54
61
|
status: BatchStatus;
|
|
55
62
|
};
|
|
56
|
-
export type DownloadSuccessOutput = {
|
|
57
|
-
status: BatchStatus.AwaitingProcessing;
|
|
58
|
-
blocks: BlockInput[];
|
|
59
|
-
} | {
|
|
60
|
-
status: BatchStatus.AwaitingDownload;
|
|
61
|
-
pendingDataColumns: number[];
|
|
62
|
-
};
|
|
63
63
|
/**
|
|
64
64
|
* Batches are downloaded at the first block of the epoch.
|
|
65
65
|
*
|
|
@@ -72,11 +72,16 @@ export type DownloadSuccessOutput = {
|
|
|
72
72
|
* Jul2022: Offset changed from 1 to 0, see rationale in {@link BATCH_SLOT_OFFSET}
|
|
73
73
|
*/
|
|
74
74
|
export declare class Batch {
|
|
75
|
+
readonly forkName: ForkName;
|
|
75
76
|
readonly startEpoch: Epoch;
|
|
77
|
+
readonly startSlot: Slot;
|
|
78
|
+
readonly count: number;
|
|
79
|
+
/** Block, blob and column requests that are used to determine the best peer and are used in downloadByRange */
|
|
80
|
+
requests: DownloadByRangeRequests;
|
|
76
81
|
/** State of the batch. */
|
|
77
82
|
state: BatchState;
|
|
78
|
-
/**
|
|
79
|
-
|
|
83
|
+
/** Peers that provided good data */
|
|
84
|
+
goodPeers: PeerIdStr[];
|
|
80
85
|
/** The `Attempts` that have been made and failed to send us this batch. */
|
|
81
86
|
readonly failedProcessingAttempts: Attempt[];
|
|
82
87
|
/** The `Attempts` that have been made and failed because of execution malfunction. */
|
|
@@ -84,32 +89,39 @@ export declare class Batch {
|
|
|
84
89
|
/** The number of download retries this batch has undergone due to a failed request. */
|
|
85
90
|
private readonly failedDownloadAttempts;
|
|
86
91
|
private readonly config;
|
|
87
|
-
|
|
92
|
+
private readonly clock;
|
|
93
|
+
private readonly custodyConfig;
|
|
94
|
+
constructor(startEpoch: Epoch, config: ChainForkConfig, clock: IClock, custodyConfig: CustodyConfig);
|
|
95
|
+
/**
|
|
96
|
+
* Builds ByRange requests for block, blobs and columns
|
|
97
|
+
*/
|
|
98
|
+
private getRequests;
|
|
99
|
+
/**
|
|
100
|
+
* Post-fulu we should only get columns that peer has advertised
|
|
101
|
+
*/
|
|
102
|
+
getRequestsForPeer(peer: PeerSyncMeta): DownloadByRangeRequests;
|
|
88
103
|
/**
|
|
89
104
|
* Gives a list of peers from which this batch has had a failed download or processing attempt.
|
|
90
105
|
*/
|
|
91
106
|
getFailedPeers(): PeerIdStr[];
|
|
92
107
|
getMetadata(): BatchMetadata;
|
|
108
|
+
getBlocks(): IBlockInput[];
|
|
93
109
|
/**
|
|
94
110
|
* AwaitingDownload -> Downloading
|
|
95
111
|
*/
|
|
96
|
-
startDownloading(peer: PeerIdStr):
|
|
112
|
+
startDownloading(peer: PeerIdStr): void;
|
|
97
113
|
/**
|
|
98
114
|
* Downloading -> AwaitingProcessing
|
|
99
|
-
* pendingDataColumns is null when a complete download is done, otherwise it contains the columns that are still pending
|
|
100
115
|
*/
|
|
101
|
-
downloadingSuccess(
|
|
102
|
-
blocks: BlockInput[];
|
|
103
|
-
pendingDataColumns: null | number[];
|
|
104
|
-
}): DownloadSuccessOutput;
|
|
116
|
+
downloadingSuccess(peer: PeerIdStr, blocks: IBlockInput[]): DownloadSuccessState;
|
|
105
117
|
/**
|
|
106
118
|
* Downloading -> AwaitingDownload
|
|
107
119
|
*/
|
|
108
|
-
downloadingError(): void;
|
|
120
|
+
downloadingError(peer: PeerIdStr): void;
|
|
109
121
|
/**
|
|
110
122
|
* AwaitingProcessing -> Processing
|
|
111
123
|
*/
|
|
112
|
-
startProcessing():
|
|
124
|
+
startProcessing(): IBlockInput[];
|
|
113
125
|
/**
|
|
114
126
|
* Processing -> AwaitingValidation
|
|
115
127
|
*/
|
|
@@ -126,7 +138,6 @@ export declare class Batch {
|
|
|
126
138
|
* AwaitingValidation -> Done
|
|
127
139
|
*/
|
|
128
140
|
validationSuccess(): Attempt;
|
|
129
|
-
isPostFulu(): boolean;
|
|
130
141
|
private onExecutionEngineError;
|
|
131
142
|
private onProcessingError;
|
|
132
143
|
/** Helper to construct typed BatchError. Stack traces are correct as the error is thrown above */
|
|
@@ -135,6 +146,7 @@ export declare class Batch {
|
|
|
135
146
|
}
|
|
136
147
|
export declare enum BatchErrorCode {
|
|
137
148
|
WRONG_STATUS = "BATCH_ERROR_WRONG_STATUS",
|
|
149
|
+
INVALID_COUNT = "BATCH_ERROR_INVALID_COUNT",
|
|
138
150
|
MAX_DOWNLOAD_ATTEMPTS = "BATCH_ERROR_MAX_DOWNLOAD_ATTEMPTS",
|
|
139
151
|
MAX_PROCESSING_ATTEMPTS = "BATCH_ERROR_MAX_PROCESSING_ATTEMPTS",
|
|
140
152
|
MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS = "MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS"
|
|
@@ -142,6 +154,10 @@ export declare enum BatchErrorCode {
|
|
|
142
154
|
type BatchErrorType = {
|
|
143
155
|
code: BatchErrorCode.WRONG_STATUS;
|
|
144
156
|
expectedStatus: BatchStatus;
|
|
157
|
+
} | {
|
|
158
|
+
code: BatchErrorCode.INVALID_COUNT;
|
|
159
|
+
count: number;
|
|
160
|
+
expected: number;
|
|
145
161
|
} | {
|
|
146
162
|
code: BatchErrorCode.MAX_DOWNLOAD_ATTEMPTS;
|
|
147
163
|
} | {
|
package/lib/sync/range/batch.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isForkPostDeneb, isForkPostFulu } from "@lodestar/params";
|
|
2
2
|
import { LodestarError } from "@lodestar/utils";
|
|
3
|
+
import { isBlockInputColumns } from "../../chain/blocks/blockInput/blockInput.js";
|
|
3
4
|
import { BlockError, BlockErrorCode } from "../../chain/errors/index.js";
|
|
4
5
|
import { MAX_BATCH_DOWNLOAD_ATTEMPTS, MAX_BATCH_PROCESSING_ATTEMPTS } from "../constants.js";
|
|
5
6
|
import { getBatchSlotRange, hashBlocks } from "./utils/index.js";
|
|
7
|
+
import { isDaOutOfRange } from "../../chain/blocks/blockInput/utils.js";
|
|
6
8
|
/**
|
|
7
9
|
* Current state of a batch
|
|
8
10
|
*/
|
|
@@ -37,33 +39,172 @@ export var BatchStatus;
|
|
|
37
39
|
* Jul2022: Offset changed from 1 to 0, see rationale in {@link BATCH_SLOT_OFFSET}
|
|
38
40
|
*/
|
|
39
41
|
export class Batch {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
42
|
+
forkName;
|
|
43
|
+
startEpoch;
|
|
44
|
+
startSlot;
|
|
45
|
+
count;
|
|
46
|
+
/** Block, blob and column requests that are used to determine the best peer and are used in downloadByRange */
|
|
47
|
+
requests;
|
|
48
|
+
/** State of the batch. */
|
|
49
|
+
state = { status: BatchStatus.AwaitingDownload, blocks: [] };
|
|
50
|
+
/** Peers that provided good data */
|
|
51
|
+
goodPeers = [];
|
|
52
|
+
/** The `Attempts` that have been made and failed to send us this batch. */
|
|
53
|
+
failedProcessingAttempts = [];
|
|
54
|
+
/** The `Attempts` that have been made and failed because of execution malfunction. */
|
|
55
|
+
executionErrorAttempts = [];
|
|
56
|
+
/** The number of download retries this batch has undergone due to a failed request. */
|
|
57
|
+
failedDownloadAttempts = [];
|
|
58
|
+
config;
|
|
59
|
+
clock;
|
|
60
|
+
custodyConfig;
|
|
61
|
+
constructor(startEpoch, config, clock, custodyConfig) {
|
|
50
62
|
this.config = config;
|
|
63
|
+
this.clock = clock;
|
|
64
|
+
this.custodyConfig = custodyConfig;
|
|
65
|
+
const { startSlot, count } = getBatchSlotRange(startEpoch);
|
|
66
|
+
this.forkName = this.config.getForkName(startSlot);
|
|
51
67
|
this.startEpoch = startEpoch;
|
|
52
|
-
this.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
68
|
+
this.startSlot = startSlot;
|
|
69
|
+
this.count = count;
|
|
70
|
+
this.requests = this.getRequests([]);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Builds ByRange requests for block, blobs and columns
|
|
74
|
+
*/
|
|
75
|
+
getRequests(blocks) {
|
|
76
|
+
const withinValidRequestWindow = !isDaOutOfRange(this.config, this.forkName, this.startSlot, this.clock.currentEpoch);
|
|
77
|
+
// fresh request where no blocks have started to be pulled yet
|
|
78
|
+
if (!blocks.length) {
|
|
79
|
+
const blocksRequest = {
|
|
80
|
+
startSlot: this.startSlot,
|
|
81
|
+
count: this.count,
|
|
82
|
+
step: 1,
|
|
83
|
+
};
|
|
84
|
+
if (isForkPostFulu(this.forkName) && withinValidRequestWindow) {
|
|
85
|
+
return {
|
|
86
|
+
blocksRequest,
|
|
87
|
+
columnsRequest: {
|
|
88
|
+
startSlot: this.startSlot,
|
|
89
|
+
count: this.count,
|
|
90
|
+
columns: this.custodyConfig.sampledColumns,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (isForkPostDeneb(this.forkName) && withinValidRequestWindow) {
|
|
95
|
+
return {
|
|
96
|
+
blocksRequest,
|
|
97
|
+
blobsRequest: {
|
|
98
|
+
startSlot: this.startSlot,
|
|
99
|
+
count: this.count,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
blocksRequest,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// subsequent request where part of the epoch has already been downloaded. Need to figure out what is the beginning
|
|
108
|
+
// of the range where download needs to resume
|
|
109
|
+
let blockStartSlot = this.startSlot;
|
|
110
|
+
let dataStartSlot = this.startSlot;
|
|
111
|
+
const neededColumns = new Set();
|
|
112
|
+
// ensure blocks are in slot-wise order
|
|
113
|
+
for (const blockInput of blocks) {
|
|
114
|
+
const blockSlot = blockInput.slot;
|
|
115
|
+
// check if block/data is present (hasBlock/hasAllData). If present then check if startSlot is the same as
|
|
116
|
+
// blockSlot. If it is then do not need to pull that slot so increment startSlot by 1. check will fail
|
|
117
|
+
// if there is a gap and then the blocks/data is present again. to simplify the request just re-pull remainder
|
|
118
|
+
// of range.
|
|
119
|
+
//
|
|
120
|
+
// ie startSlot = 32 and count = 32. so for slots = [32, 33, 34, 35, 36, _, 38, 39, _, _, ... _endSlot=63_]
|
|
121
|
+
// will return an updated startSlot of 37 and pull range 37-63 on the next request.
|
|
122
|
+
//
|
|
123
|
+
// if all slot have already been pulled then the startSlot will eventually get incremented to the slot after
|
|
124
|
+
// the desired end slot
|
|
125
|
+
if (blockInput.hasBlock() && blockStartSlot === blockSlot) {
|
|
126
|
+
blockStartSlot = blockSlot + 1;
|
|
127
|
+
}
|
|
128
|
+
if (!blockInput.hasAllData()) {
|
|
129
|
+
if (isBlockInputColumns(blockInput)) {
|
|
130
|
+
for (const index of blockInput.getMissingSampledColumnMeta().missing) {
|
|
131
|
+
neededColumns.add(index);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else if (dataStartSlot === blockSlot) {
|
|
136
|
+
dataStartSlot = blockSlot + 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// if the blockStartSlot or dataStartSlot is after the desired endSlot then no request will be made for the batch
|
|
140
|
+
// because it is complete
|
|
141
|
+
const endSlot = this.startSlot + this.count - 1;
|
|
142
|
+
const requests = {};
|
|
143
|
+
if (blockStartSlot <= endSlot) {
|
|
144
|
+
requests.blocksRequest = {
|
|
145
|
+
startSlot: blockStartSlot,
|
|
146
|
+
// range of 40 - 63, startSlot will be inclusive but subtraction will exclusive so need to + 1
|
|
147
|
+
count: endSlot - blockStartSlot + 1,
|
|
148
|
+
step: 1,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
if (dataStartSlot <= endSlot) {
|
|
152
|
+
// range of 40 - 63, startSlot will be inclusive but subtraction will exclusive so need to + 1
|
|
153
|
+
const count = endSlot - dataStartSlot + 1;
|
|
154
|
+
if (isForkPostFulu(this.forkName) && withinValidRequestWindow) {
|
|
155
|
+
requests.columnsRequest = {
|
|
156
|
+
count,
|
|
157
|
+
startSlot: dataStartSlot,
|
|
158
|
+
columns: Array.from(neededColumns),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
else if (isForkPostDeneb(this.forkName) && withinValidRequestWindow) {
|
|
162
|
+
requests.blobsRequest = {
|
|
163
|
+
count,
|
|
164
|
+
startSlot: dataStartSlot,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// dataSlot will still have a value but do not create a request for preDeneb forks
|
|
168
|
+
}
|
|
169
|
+
return requests;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Post-fulu we should only get columns that peer has advertised
|
|
173
|
+
*/
|
|
174
|
+
getRequestsForPeer(peer) {
|
|
175
|
+
if (!isForkPostFulu(this.forkName)) {
|
|
176
|
+
return this.requests;
|
|
177
|
+
}
|
|
178
|
+
// post-fulu we need to ensure that we only request columns that the peer has advertised
|
|
179
|
+
const { columnsRequest } = this.requests;
|
|
180
|
+
if (columnsRequest == null) {
|
|
181
|
+
return this.requests;
|
|
182
|
+
}
|
|
183
|
+
const peerColumns = new Set(peer.custodyColumns ?? []);
|
|
184
|
+
const requestedColumns = columnsRequest.columns.filter((c) => peerColumns.has(c));
|
|
185
|
+
if (requestedColumns.length === columnsRequest.columns.length) {
|
|
186
|
+
return this.requests;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
...this.requests,
|
|
190
|
+
columnsRequest: {
|
|
191
|
+
...columnsRequest,
|
|
192
|
+
columns: requestedColumns,
|
|
193
|
+
},
|
|
56
194
|
};
|
|
57
195
|
}
|
|
58
196
|
/**
|
|
59
197
|
* Gives a list of peers from which this batch has had a failed download or processing attempt.
|
|
60
198
|
*/
|
|
61
199
|
getFailedPeers() {
|
|
62
|
-
return [...this.failedDownloadAttempts, ...this.failedProcessingAttempts.
|
|
200
|
+
return [...this.failedDownloadAttempts, ...this.failedProcessingAttempts.flatMap((a) => a.peers)];
|
|
63
201
|
}
|
|
64
202
|
getMetadata() {
|
|
65
203
|
return { startEpoch: this.startEpoch, status: this.state.status };
|
|
66
204
|
}
|
|
205
|
+
getBlocks() {
|
|
206
|
+
return this.state.blocks;
|
|
207
|
+
}
|
|
67
208
|
/**
|
|
68
209
|
* AwaitingDownload -> Downloading
|
|
69
210
|
*/
|
|
@@ -71,57 +212,56 @@ export class Batch {
|
|
|
71
212
|
if (this.state.status !== BatchStatus.AwaitingDownload) {
|
|
72
213
|
throw new BatchError(this.wrongStatusErrorType(BatchStatus.AwaitingDownload));
|
|
73
214
|
}
|
|
74
|
-
|
|
75
|
-
this.state = { status: BatchStatus.Downloading, peer, partialDownload };
|
|
76
|
-
return partialDownload;
|
|
215
|
+
this.state = { status: BatchStatus.Downloading, peer, blocks: this.state.blocks };
|
|
77
216
|
}
|
|
78
217
|
/**
|
|
79
218
|
* Downloading -> AwaitingProcessing
|
|
80
|
-
* pendingDataColumns is null when a complete download is done, otherwise it contains the columns that are still pending
|
|
81
219
|
*/
|
|
82
|
-
downloadingSuccess(
|
|
220
|
+
downloadingSuccess(peer, blocks) {
|
|
83
221
|
if (this.state.status !== BatchStatus.Downloading) {
|
|
84
222
|
throw new BatchError(this.wrongStatusErrorType(BatchStatus.Downloading));
|
|
85
223
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
224
|
+
// ensure that blocks are always sorted before getting stored on the batch.state or being used to getRequests
|
|
225
|
+
blocks.sort((a, b) => a.slot - b.slot);
|
|
226
|
+
this.goodPeers.push(peer);
|
|
227
|
+
let allComplete = true;
|
|
228
|
+
const slots = new Set();
|
|
229
|
+
for (const block of blocks) {
|
|
230
|
+
slots.add(block.slot);
|
|
231
|
+
if (!block.hasBlockAndAllData()) {
|
|
232
|
+
allComplete = false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (slots.size > this.count) {
|
|
236
|
+
throw new BatchError({
|
|
237
|
+
code: BatchErrorCode.INVALID_COUNT,
|
|
238
|
+
startEpoch: this.startEpoch,
|
|
239
|
+
count: slots.size,
|
|
240
|
+
expected: this.count,
|
|
241
|
+
status: this.state.status,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
if (allComplete) {
|
|
245
|
+
this.state = { status: BatchStatus.AwaitingProcessing, blocks };
|
|
91
246
|
}
|
|
92
247
|
else {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
: // if not state pendingDataColumns should be reduced over time, see see https://github.com/ChainSafe/lodestar/issues/8036
|
|
98
|
-
updatedPendingDataColumns.filter((column) => pendingDataColumns.includes(column));
|
|
99
|
-
}
|
|
100
|
-
if (updatedPendingDataColumns === null) {
|
|
101
|
-
// complete download
|
|
102
|
-
this.state = { status: BatchStatus.AwaitingProcessing, peer: this.state.peer, blocks };
|
|
103
|
-
return { status: BatchStatus.AwaitingProcessing, blocks };
|
|
104
|
-
}
|
|
105
|
-
// partial download, track updatedPendingDataColumns in state
|
|
106
|
-
this.state = {
|
|
107
|
-
status: BatchStatus.AwaitingDownload,
|
|
108
|
-
partialDownload: blocks.length === 0 ? null : { blocks, pendingDataColumns: updatedPendingDataColumns },
|
|
109
|
-
};
|
|
110
|
-
return { status: BatchStatus.AwaitingDownload, pendingDataColumns: updatedPendingDataColumns };
|
|
248
|
+
this.requests = this.getRequests(blocks);
|
|
249
|
+
this.state = { status: BatchStatus.AwaitingDownload, blocks };
|
|
250
|
+
}
|
|
251
|
+
return this.state;
|
|
111
252
|
}
|
|
112
253
|
/**
|
|
113
254
|
* Downloading -> AwaitingDownload
|
|
114
255
|
*/
|
|
115
|
-
downloadingError() {
|
|
256
|
+
downloadingError(peer) {
|
|
116
257
|
if (this.state.status !== BatchStatus.Downloading) {
|
|
117
258
|
throw new BatchError(this.wrongStatusErrorType(BatchStatus.Downloading));
|
|
118
259
|
}
|
|
119
|
-
this.failedDownloadAttempts.push(
|
|
260
|
+
this.failedDownloadAttempts.push(peer);
|
|
120
261
|
if (this.failedDownloadAttempts.length > MAX_BATCH_DOWNLOAD_ATTEMPTS) {
|
|
121
262
|
throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_DOWNLOAD_ATTEMPTS }));
|
|
122
263
|
}
|
|
123
|
-
|
|
124
|
-
this.state = { status: BatchStatus.AwaitingDownload, partialDownload };
|
|
264
|
+
this.state = { status: BatchStatus.AwaitingDownload, blocks: this.state.blocks };
|
|
125
265
|
}
|
|
126
266
|
/**
|
|
127
267
|
* AwaitingProcessing -> Processing
|
|
@@ -132,7 +272,11 @@ export class Batch {
|
|
|
132
272
|
}
|
|
133
273
|
const blocks = this.state.blocks;
|
|
134
274
|
const hash = hashBlocks(blocks, this.config); // tracks blocks to report peer on processing error
|
|
135
|
-
|
|
275
|
+
// Reset goodPeers in case another download attempt needs to be made. When Attempt is successful or not the peers
|
|
276
|
+
// that the data came from will be handled by the Attempt that goes for processing
|
|
277
|
+
const peers = this.goodPeers;
|
|
278
|
+
this.goodPeers = [];
|
|
279
|
+
this.state = { status: BatchStatus.Processing, blocks, attempt: { peers, hash } };
|
|
136
280
|
return blocks;
|
|
137
281
|
}
|
|
138
282
|
/**
|
|
@@ -142,7 +286,7 @@ export class Batch {
|
|
|
142
286
|
if (this.state.status !== BatchStatus.Processing) {
|
|
143
287
|
throw new BatchError(this.wrongStatusErrorType(BatchStatus.Processing));
|
|
144
288
|
}
|
|
145
|
-
this.state = { status: BatchStatus.AwaitingValidation, attempt: this.state.attempt };
|
|
289
|
+
this.state = { status: BatchStatus.AwaitingValidation, blocks: this.state.blocks, attempt: this.state.attempt };
|
|
146
290
|
}
|
|
147
291
|
/**
|
|
148
292
|
* Processing -> AwaitingDownload
|
|
@@ -181,22 +325,23 @@ export class Batch {
|
|
|
181
325
|
}
|
|
182
326
|
return this.state.attempt;
|
|
183
327
|
}
|
|
184
|
-
isPostFulu() {
|
|
185
|
-
return this.config.getForkSeq(this.request.startSlot) >= ForkSeq.fulu;
|
|
186
|
-
}
|
|
187
328
|
onExecutionEngineError(attempt) {
|
|
188
329
|
this.executionErrorAttempts.push(attempt);
|
|
189
330
|
if (this.executionErrorAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
|
|
190
331
|
throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS }));
|
|
191
332
|
}
|
|
192
|
-
|
|
333
|
+
// remove any downloaded blocks and re-attempt
|
|
334
|
+
// TODO(fulu): need to remove the bad blocks from the SeenBlockInputCache
|
|
335
|
+
this.state = { status: BatchStatus.AwaitingDownload, blocks: [] };
|
|
193
336
|
}
|
|
194
337
|
onProcessingError(attempt) {
|
|
195
338
|
this.failedProcessingAttempts.push(attempt);
|
|
196
339
|
if (this.failedProcessingAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
|
|
197
340
|
throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_PROCESSING_ATTEMPTS }));
|
|
198
341
|
}
|
|
199
|
-
|
|
342
|
+
// remove any downloaded blocks and re-attempt
|
|
343
|
+
// TODO(fulu): need to remove the bad blocks from the SeenBlockInputCache
|
|
344
|
+
this.state = { status: BatchStatus.AwaitingDownload, blocks: [] };
|
|
200
345
|
}
|
|
201
346
|
/** Helper to construct typed BatchError. Stack traces are correct as the error is thrown above */
|
|
202
347
|
errorType(type) {
|
|
@@ -209,6 +354,7 @@ export class Batch {
|
|
|
209
354
|
export var BatchErrorCode;
|
|
210
355
|
(function (BatchErrorCode) {
|
|
211
356
|
BatchErrorCode["WRONG_STATUS"] = "BATCH_ERROR_WRONG_STATUS";
|
|
357
|
+
BatchErrorCode["INVALID_COUNT"] = "BATCH_ERROR_INVALID_COUNT";
|
|
212
358
|
BatchErrorCode["MAX_DOWNLOAD_ATTEMPTS"] = "BATCH_ERROR_MAX_DOWNLOAD_ATTEMPTS";
|
|
213
359
|
BatchErrorCode["MAX_PROCESSING_ATTEMPTS"] = "BATCH_ERROR_MAX_PROCESSING_ATTEMPTS";
|
|
214
360
|
BatchErrorCode["MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS"] = "MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import { Epoch, Root, Slot
|
|
2
|
+
import { Epoch, Root, Slot } from "@lodestar/types";
|
|
3
3
|
import { Logger } from "@lodestar/utils";
|
|
4
|
-
import {
|
|
4
|
+
import { IBlockInput } from "../../chain/blocks/blockInput/types.js";
|
|
5
5
|
import { Metrics } from "../../metrics/metrics.js";
|
|
6
6
|
import { PeerAction } from "../../network/index.js";
|
|
7
7
|
import { PeerSyncMeta } from "../../network/peers/peersData.js";
|
|
8
|
-
import { PartialDownload } from "../../network/reqresp/beaconBlocksMaybeBlobsByRange.js";
|
|
9
8
|
import { CustodyConfig } from "../../util/dataColumns.js";
|
|
10
9
|
import { PeerIdStr } from "../../util/peerId.js";
|
|
10
|
+
import { WarnResult } from "../../util/wrapError.js";
|
|
11
|
+
import { DownloadByRangeError } from "../utils/downloadByRange.js";
|
|
11
12
|
import { RangeSyncType } from "../utils/remoteSyncType.js";
|
|
12
|
-
import { BatchErrorCode, BatchMetadata } from "./batch.js";
|
|
13
|
+
import { Batch, BatchErrorCode, BatchMetadata } from "./batch.js";
|
|
14
|
+
import { IClock } from "../../util/clock.js";
|
|
13
15
|
export type SyncChainModules = {
|
|
14
16
|
config: ChainForkConfig;
|
|
17
|
+
clock: IClock;
|
|
15
18
|
custodyConfig: CustodyConfig;
|
|
16
19
|
logger: Logger;
|
|
17
20
|
metrics: Metrics | null;
|
|
@@ -21,18 +24,17 @@ export type SyncChainFns = {
|
|
|
21
24
|
* Must return if ALL blocks are processed successfully
|
|
22
25
|
* If SOME blocks are processed must throw BlockProcessorError()
|
|
23
26
|
*/
|
|
24
|
-
processChainSegment: (blocks:
|
|
27
|
+
processChainSegment: (blocks: IBlockInput[], syncType: RangeSyncType) => Promise<void>;
|
|
25
28
|
/** Must download blocks, and validate their range */
|
|
26
|
-
|
|
27
|
-
blocks: BlockInput[];
|
|
28
|
-
pendingDataColumns: null | number[];
|
|
29
|
-
}>;
|
|
29
|
+
downloadByRange: (peer: PeerSyncMeta, batch: Batch, syncType: RangeSyncType) => Promise<WarnResult<IBlockInput[], DownloadByRangeError>>;
|
|
30
30
|
/** Report peer for negative actions. Decouples from the full network instance */
|
|
31
31
|
reportPeer: (peer: PeerIdStr, action: PeerAction, actionName: string) => void;
|
|
32
32
|
/** Gets current peer custodyColumns and earliestAvailableSlot */
|
|
33
33
|
getConnectedPeerSyncMeta: (peerId: string) => PeerSyncMeta;
|
|
34
34
|
/** Hook called when Chain state completes */
|
|
35
35
|
onEnd: (err: Error | null, target: ChainTarget | null) => void;
|
|
36
|
+
/** Deletes an array of BlockInputs from the BlockInputCache */
|
|
37
|
+
pruneBlockInputs: (blockInputs: IBlockInput[]) => void;
|
|
36
38
|
};
|
|
37
39
|
/**
|
|
38
40
|
* Sync this up to this target. Uses slot instead of epoch to re-use logic for finalized sync
|
|
@@ -86,9 +88,10 @@ export declare class SyncChain {
|
|
|
86
88
|
private lastEpochWithProcessBlocks;
|
|
87
89
|
private status;
|
|
88
90
|
private readonly processChainSegment;
|
|
89
|
-
private readonly
|
|
91
|
+
private readonly downloadByRange;
|
|
90
92
|
private readonly reportPeer;
|
|
91
93
|
private readonly getConnectedPeerSyncMeta;
|
|
94
|
+
private readonly pruneBlockInputs;
|
|
92
95
|
/** AsyncIterable that guarantees processChainSegment is run only at once at anytime */
|
|
93
96
|
private readonly batchProcessor;
|
|
94
97
|
/** Sorted map of batches undergoing some kind of processing. */
|
|
@@ -96,6 +99,8 @@ export declare class SyncChain {
|
|
|
96
99
|
private readonly peerset;
|
|
97
100
|
private readonly logger;
|
|
98
101
|
private readonly config;
|
|
102
|
+
private readonly clock;
|
|
103
|
+
private readonly metrics;
|
|
99
104
|
private readonly custodyConfig;
|
|
100
105
|
constructor(initialBatchEpoch: Epoch, initialTarget: ChainTarget, syncType: RangeSyncType, fns: SyncChainFns, modules: SyncChainModules);
|
|
101
106
|
/**
|