@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,135 +1,16 @@
|
|
|
1
1
|
import { ForkSeq } from "@lodestar/params";
|
|
2
2
|
import { computeEpochAtSlot } from "@lodestar/state-transition";
|
|
3
|
-
export var BlockInputType;
|
|
4
|
-
(function (BlockInputType) {
|
|
5
|
-
// preData is preDeneb
|
|
6
|
-
BlockInputType["preData"] = "preData";
|
|
7
|
-
// data is out of available window, can be used to sync forward and keep adding to forkchoice
|
|
8
|
-
BlockInputType["outOfRangeData"] = "outOfRangeData";
|
|
9
|
-
BlockInputType["availableData"] = "availableData";
|
|
10
|
-
BlockInputType["dataPromise"] = "dataPromise";
|
|
11
|
-
})(BlockInputType || (BlockInputType = {}));
|
|
12
|
-
/** Enum to represent where blocks come from */
|
|
13
|
-
export var BlockSource;
|
|
14
|
-
(function (BlockSource) {
|
|
15
|
-
BlockSource["gossip"] = "gossip";
|
|
16
|
-
BlockSource["api"] = "api";
|
|
17
|
-
BlockSource["byRange"] = "req_resp_by_range";
|
|
18
|
-
BlockSource["byRoot"] = "req_resp_by_root";
|
|
19
|
-
})(BlockSource || (BlockSource = {}));
|
|
20
3
|
export var GossipedInputType;
|
|
21
4
|
(function (GossipedInputType) {
|
|
22
5
|
GossipedInputType["block"] = "block";
|
|
23
6
|
GossipedInputType["blob"] = "blob";
|
|
24
7
|
GossipedInputType["dataColumn"] = "data_column";
|
|
25
8
|
})(GossipedInputType || (GossipedInputType = {}));
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
* Deneb Blob Format Types
|
|
29
|
-
*
|
|
30
|
-
*/
|
|
31
|
-
/** Enum to represent where blobs come from */
|
|
32
|
-
export var BlobsSource;
|
|
33
|
-
(function (BlobsSource) {
|
|
34
|
-
BlobsSource["gossip"] = "gossip";
|
|
35
|
-
BlobsSource["api"] = "api";
|
|
36
|
-
BlobsSource["byRange"] = "req_resp_by_range";
|
|
37
|
-
BlobsSource["byRoot"] = "req_resp_by_root";
|
|
38
|
-
})(BlobsSource || (BlobsSource = {}));
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* PeerDAS Column Format Types
|
|
42
|
-
*
|
|
43
|
-
*/
|
|
44
|
-
export var DataColumnsSource;
|
|
45
|
-
(function (DataColumnsSource) {
|
|
46
|
-
DataColumnsSource["gossip"] = "gossip";
|
|
47
|
-
DataColumnsSource["api"] = "api";
|
|
48
|
-
DataColumnsSource["engine"] = "engine";
|
|
49
|
-
DataColumnsSource["byRange"] = "req_resp_by_range";
|
|
50
|
-
DataColumnsSource["byRoot"] = "req_resp_by_root";
|
|
51
|
-
})(DataColumnsSource || (DataColumnsSource = {}));
|
|
52
9
|
export function blockRequiresBlobs(config, blockSlot, clockSlot) {
|
|
53
10
|
return (config.getForkSeq(blockSlot) >= ForkSeq.deneb &&
|
|
54
11
|
// Only request blobs if they are recent enough
|
|
55
12
|
computeEpochAtSlot(blockSlot) >= computeEpochAtSlot(clockSlot) - config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS);
|
|
56
13
|
}
|
|
57
|
-
export const getBlockInput = {
|
|
58
|
-
preData(config, block, source) {
|
|
59
|
-
if (config.getForkSeq(block.message.slot) >= ForkSeq.deneb) {
|
|
60
|
-
throw Error(`Post Deneb block slot ${block.message.slot}`);
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
type: BlockInputType.preData,
|
|
64
|
-
block,
|
|
65
|
-
source,
|
|
66
|
-
};
|
|
67
|
-
},
|
|
68
|
-
// This isn't used right now but we might enable importing blobs into forkchoice from a point
|
|
69
|
-
// where data is not guaranteed to be available to hopefully reach a point where we have
|
|
70
|
-
// available data. Hence the validator duties can't be performed on outOfRangeData
|
|
71
|
-
//
|
|
72
|
-
// This can help with some of the requests of syncing without data for some use cases for e.g.
|
|
73
|
-
// building states or where importing data isn't important if valid child exists like ILs
|
|
74
|
-
outOfRangeData(config, block, source) {
|
|
75
|
-
if (config.getForkSeq(block.message.slot) < ForkSeq.deneb) {
|
|
76
|
-
throw Error(`Pre Deneb block slot ${block.message.slot}`);
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
type: BlockInputType.outOfRangeData,
|
|
80
|
-
block,
|
|
81
|
-
source,
|
|
82
|
-
};
|
|
83
|
-
},
|
|
84
|
-
availableData(config, block, source, blockData) {
|
|
85
|
-
if (config.getForkSeq(block.message.slot) < ForkSeq.deneb) {
|
|
86
|
-
throw Error(`Pre Deneb block slot ${block.message.slot}`);
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
type: BlockInputType.availableData,
|
|
90
|
-
block,
|
|
91
|
-
source,
|
|
92
|
-
blockData,
|
|
93
|
-
};
|
|
94
|
-
},
|
|
95
|
-
dataPromise(config, block, source, cachedData) {
|
|
96
|
-
if (config.getForkSeq(block.message.slot) < ForkSeq.deneb) {
|
|
97
|
-
throw Error(`Pre Deneb block slot ${block.message.slot}`);
|
|
98
|
-
}
|
|
99
|
-
return {
|
|
100
|
-
type: BlockInputType.dataPromise,
|
|
101
|
-
block,
|
|
102
|
-
source,
|
|
103
|
-
cachedData,
|
|
104
|
-
};
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
export function getBlockInputBlobs(blobsCache) {
|
|
108
|
-
const blobs = [];
|
|
109
|
-
for (let index = 0; index < blobsCache.size; index++) {
|
|
110
|
-
const blobSidecar = blobsCache.get(index);
|
|
111
|
-
if (blobSidecar === undefined) {
|
|
112
|
-
throw Error(`Missing blobSidecar at index=${index}`);
|
|
113
|
-
}
|
|
114
|
-
blobs.push(blobSidecar);
|
|
115
|
-
}
|
|
116
|
-
return { blobs };
|
|
117
|
-
}
|
|
118
|
-
export function getBlockInputDataColumns(dataColumnsCache, columnIndexes) {
|
|
119
|
-
const dataColumns = [];
|
|
120
|
-
const dataColumnsBytes = [];
|
|
121
|
-
for (const index of columnIndexes) {
|
|
122
|
-
const dataColumnCache = dataColumnsCache.get(index);
|
|
123
|
-
if (dataColumnCache === undefined) {
|
|
124
|
-
// check if the index is correct as per the custody columns
|
|
125
|
-
throw Error(`Missing dataColumnCache at index=${index}`);
|
|
126
|
-
}
|
|
127
|
-
const { dataColumn: dataColumnSidecar, dataColumnBytes } = dataColumnCache;
|
|
128
|
-
dataColumns.push(dataColumnSidecar);
|
|
129
|
-
dataColumnsBytes.push(dataColumnBytes);
|
|
130
|
-
}
|
|
131
|
-
return { dataColumns, dataColumnsBytes };
|
|
132
|
-
}
|
|
133
14
|
export var AttestationImportOpt;
|
|
134
15
|
(function (AttestationImportOpt) {
|
|
135
16
|
AttestationImportOpt[AttestationImportOpt["Skip"] = 0] = "Skip";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAoD,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAIjH,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,oCAAe,CAAA;IACf,kCAAa,CAAA;IACb,+CAA0B,CAAA;AAC5B,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAQD,MAAM,UAAU,kBAAkB,CAAC,MAAuB,EAAE,SAAe,EAAE,SAAe;IAC1F,OAAO,CACL,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,KAAK;QAC7C,+CAA+C;QAC/C,kBAAkB,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,qCAAqC,CAC9G,CAAC;AACJ,CAAC;AAED,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,+DAAI,CAAA;IACJ,iEAAK,CAAA;AACP,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED,MAAM,CAAN,IAAY,qBASX;AATD,WAAY,qBAAqB;IAC/B,gFAAgF;IAChF,6EAAU,CAAA;IACV;;;;OAIG;IACH,iEAAI,CAAA;AACN,CAAC,EATW,qBAAqB,KAArB,qBAAqB,QAShC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import {
|
|
2
|
+
import { IBlockInput } from "../blockInput/types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Assert this chain segment of blocks is linear with slot numbers and hashes
|
|
5
5
|
*/
|
|
6
|
-
export declare function assertLinearChainSegment(config: ChainForkConfig, blocks:
|
|
6
|
+
export declare function assertLinearChainSegment(config: ChainForkConfig, blocks: IBlockInput[]): void;
|
|
7
7
|
//# sourceMappingURL=chainSegment.d.ts.map
|
|
@@ -5,8 +5,8 @@ import { BlockError, BlockErrorCode } from "../../errors/index.js";
|
|
|
5
5
|
*/
|
|
6
6
|
export function assertLinearChainSegment(config, blocks) {
|
|
7
7
|
for (let i = 0; i < blocks.length - 1; i++) {
|
|
8
|
-
const block = blocks[i].
|
|
9
|
-
const child = blocks[i + 1].
|
|
8
|
+
const block = blocks[i].getBlock();
|
|
9
|
+
const child = blocks[i + 1].getBlock();
|
|
10
10
|
// If this block has a child in this chain segment, ensure that its parent root matches
|
|
11
11
|
// the root of this block.
|
|
12
12
|
if (!ssz.Root.equals(config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message), child.message.parentRoot)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chainSegment.js","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAGjE;;GAEG;
|
|
1
|
+
{"version":3,"file":"chainSegment.js","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAGjE;;GAEG;AAEH,MAAM,UAAU,wBAAwB,CAAC,MAAuB,EAAE,MAAqB;IACrF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvC,uFAAuF;QACvF,0BAA0B;QAC1B,IACE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CACd,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAC/E,KAAK,CAAC,OAAO,CAAC,UAAU,CACzB,EACD,CAAC;YACD,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,cAAc,CAAC,uBAAuB,EAAC,CAAC,CAAC;QAC9E,CAAC;QACD,8EAA8E;QAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,cAAc,CAAC,gBAAgB,EAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -2,7 +2,8 @@ import { ProtoBlock } from "@lodestar/fork-choice";
|
|
|
2
2
|
import { CachedBeaconStateAllForks, DataAvailabilityStatus } from "@lodestar/state-transition";
|
|
3
3
|
import type { BeaconChain } from "../chain.js";
|
|
4
4
|
import { BlockProcessOpts } from "../options.js";
|
|
5
|
-
import {
|
|
5
|
+
import { IBlockInput } from "./blockInput/index.js";
|
|
6
|
+
import { ImportBlockOpts } from "./types.js";
|
|
6
7
|
import { SegmentExecStatus } from "./verifyBlocksExecutionPayloads.js";
|
|
7
8
|
/**
|
|
8
9
|
* Verifies 1 or more blocks are fully valid; from a linear sequence of blocks.
|
|
@@ -15,11 +16,10 @@ import { SegmentExecStatus } from "./verifyBlocksExecutionPayloads.js";
|
|
|
15
16
|
*
|
|
16
17
|
* If there's an error during one of the steps, the rest are aborted with an AbortController.
|
|
17
18
|
*/
|
|
18
|
-
export declare function verifyBlocksInEpoch(this: BeaconChain, parentBlock: ProtoBlock,
|
|
19
|
+
export declare function verifyBlocksInEpoch(this: BeaconChain, parentBlock: ProtoBlock, blockInputs: IBlockInput[], opts: BlockProcessOpts & ImportBlockOpts): Promise<{
|
|
19
20
|
postStates: CachedBeaconStateAllForks[];
|
|
20
21
|
proposerBalanceDeltas: number[];
|
|
21
22
|
segmentExecStatus: SegmentExecStatus;
|
|
22
23
|
dataAvailabilityStatuses: DataAvailabilityStatus[];
|
|
23
|
-
availableBlockInputs: BlockInput[];
|
|
24
24
|
}>;
|
|
25
25
|
//# sourceMappingURL=verifyBlock.d.ts.map
|
|
@@ -4,7 +4,7 @@ import { DataAvailabilityStatus, computeEpochAtSlot, isStateValidatorsNodesPopul
|
|
|
4
4
|
import { toRootHex } from "@lodestar/utils";
|
|
5
5
|
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
6
6
|
import { RegenCaller } from "../regen/index.js";
|
|
7
|
-
import {
|
|
7
|
+
import { DAType } from "./blockInput/index.js";
|
|
8
8
|
import { DENEB_BLOWFISH_BANNER } from "./utils/blowfishBanner.js";
|
|
9
9
|
import { ELECTRA_GIRAFFE_BANNER } from "./utils/giraffeBanner.js";
|
|
10
10
|
import { CAPELLA_OWL_BANNER } from "./utils/ownBanner.js";
|
|
@@ -26,8 +26,8 @@ import { writeBlockInputToDb } from "./writeBlockInputToDb.js";
|
|
|
26
26
|
*
|
|
27
27
|
* If there's an error during one of the steps, the rest are aborted with an AbortController.
|
|
28
28
|
*/
|
|
29
|
-
export async function verifyBlocksInEpoch(parentBlock,
|
|
30
|
-
const blocks =
|
|
29
|
+
export async function verifyBlocksInEpoch(parentBlock, blockInputs, opts) {
|
|
30
|
+
const blocks = blockInputs.map((blockInput) => blockInput.getBlock());
|
|
31
31
|
const lastBlock = blocks.at(-1);
|
|
32
32
|
if (!lastBlock) {
|
|
33
33
|
throw Error("Empty partiallyVerifiedBlocks");
|
|
@@ -65,20 +65,20 @@ export async function verifyBlocksInEpoch(parentBlock, blocksInput, opts) {
|
|
|
65
65
|
const abortController = new AbortController();
|
|
66
66
|
try {
|
|
67
67
|
// batch all I/O operations to reduce overhead
|
|
68
|
-
const [segmentExecStatus, { dataAvailabilityStatuses, availableTime
|
|
68
|
+
const [segmentExecStatus, { dataAvailabilityStatuses, availableTime }, { postStates, proposerBalanceDeltas, verifyStateTime }, { verifySignaturesTime },] = await Promise.all([
|
|
69
69
|
// Execution payloads
|
|
70
70
|
opts.skipVerifyExecutionPayload !== true
|
|
71
|
-
? verifyBlocksExecutionPayload(this, parentBlock,
|
|
71
|
+
? verifyBlocksExecutionPayload(this, parentBlock, blockInputs, preState0, abortController.signal, opts)
|
|
72
72
|
: Promise.resolve({
|
|
73
73
|
execAborted: null,
|
|
74
74
|
executionStatuses: blocks.map((_blk) => ExecutionStatus.Syncing),
|
|
75
75
|
mergeBlockFound: null,
|
|
76
76
|
}),
|
|
77
77
|
// data availability for the blobs
|
|
78
|
-
verifyBlocksDataAvailability(
|
|
78
|
+
verifyBlocksDataAvailability(blockInputs, abortController.signal),
|
|
79
79
|
// Run state transition only
|
|
80
80
|
// TODO: Ensure it yields to allow flushing to workers and engine API
|
|
81
|
-
verifyBlocksStateTransitionOnly(preState0,
|
|
81
|
+
verifyBlocksStateTransitionOnly(preState0, blockInputs,
|
|
82
82
|
// hack availability for state transition eval as availability is separately determined
|
|
83
83
|
blocks.map(() => DataAvailabilityStatus.Available), this.logger, this.metrics, this.validatorMonitor, abortController.signal, opts),
|
|
84
84
|
// All signatures at once
|
|
@@ -89,7 +89,7 @@ export async function verifyBlocksInEpoch(parentBlock, blocksInput, opts) {
|
|
|
89
89
|
// rarely invalid blocks we'll batch all I/O operation here to reduce the overhead if there's
|
|
90
90
|
// an error, we'll remove blocks not in forkchoice
|
|
91
91
|
opts.verifyOnly !== true && opts.eagerPersistBlock
|
|
92
|
-
? writeBlockInputToDb.call(this,
|
|
92
|
+
? writeBlockInputToDb.call(this, blockInputs)
|
|
93
93
|
: Promise.resolve(),
|
|
94
94
|
]);
|
|
95
95
|
if (opts.verifyOnly !== true) {
|
|
@@ -133,23 +133,24 @@ export async function verifyBlocksInEpoch(parentBlock, blocksInput, opts) {
|
|
|
133
133
|
}
|
|
134
134
|
if (segmentExecStatus.execAborted === null) {
|
|
135
135
|
const { executionStatuses, executionTime } = segmentExecStatus;
|
|
136
|
-
if (
|
|
136
|
+
if (blockInputs.length === 1 &&
|
|
137
137
|
// gossip blocks have seenTimestampSec
|
|
138
138
|
opts.seenTimestampSec !== undefined &&
|
|
139
|
-
|
|
139
|
+
blockInputs[0].type !== DAType.PreData &&
|
|
140
140
|
executionStatuses[0] === ExecutionStatus.Valid) {
|
|
141
141
|
// Find the max time when the block was actually verified
|
|
142
142
|
const fullyVerifiedTime = Math.max(executionTime, verifyStateTime, verifySignaturesTime);
|
|
143
143
|
const recvTofullyVerifedTime = fullyVerifiedTime / 1000 - opts.seenTimestampSec;
|
|
144
144
|
this.metrics?.gossipBlock.receivedToFullyVerifiedTime.observe(recvTofullyVerifedTime);
|
|
145
145
|
const verifiedToBlobsAvailabiltyTime = Math.max(availableTime - fullyVerifiedTime, 0) / 1000;
|
|
146
|
-
const
|
|
146
|
+
const block = blockInputs[0].getBlock();
|
|
147
|
+
const numBlobs = block.message.body.blobKzgCommitments.length;
|
|
147
148
|
this.metrics?.gossipBlock.verifiedToBlobsAvailabiltyTime.observe({ numBlobs }, verifiedToBlobsAvailabiltyTime);
|
|
148
149
|
this.logger.verbose("Verified blockInput fully with blobs availability", {
|
|
149
|
-
slot:
|
|
150
|
+
slot: block.message.slot,
|
|
150
151
|
recvTofullyVerifedTime,
|
|
151
152
|
verifiedToBlobsAvailabiltyTime,
|
|
152
|
-
type:
|
|
153
|
+
type: blockInputs[0].type,
|
|
153
154
|
numBlobs,
|
|
154
155
|
});
|
|
155
156
|
}
|
|
@@ -157,7 +158,7 @@ export async function verifyBlocksInEpoch(parentBlock, blocksInput, opts) {
|
|
|
157
158
|
else {
|
|
158
159
|
this.logger.verbose("Block verification aborted due to execution payload", {}, segmentExecStatus.execAborted.execError);
|
|
159
160
|
}
|
|
160
|
-
return { postStates, dataAvailabilityStatuses, proposerBalanceDeltas, segmentExecStatus
|
|
161
|
+
return { postStates, dataAvailabilityStatuses, proposerBalanceDeltas, segmentExecStatus };
|
|
161
162
|
}
|
|
162
163
|
finally {
|
|
163
164
|
abortController.abort();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlock.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAa,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAEL,sBAAsB,EACtB,kBAAkB,EAClB,+BAA+B,GAChC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAS,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"verifyBlock.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,14 @@
|
|
|
1
|
-
import { ChainForkConfig } from "@lodestar/config";
|
|
2
1
|
import { DataAvailabilityStatus } from "@lodestar/state-transition";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { Metrics } from "../../metrics/metrics.js";
|
|
6
|
-
import { BlockInput, ImportBlockOpts } from "./types.js";
|
|
2
|
+
import { IBlockInput } from "./blockInput/index.js";
|
|
3
|
+
export declare const BLOB_AVAILABILITY_TIMEOUT = 12000;
|
|
7
4
|
/**
|
|
8
|
-
* Verifies
|
|
9
|
-
*
|
|
10
|
-
* -
|
|
11
|
-
* -
|
|
12
|
-
* - check_block_relevancy()
|
|
13
|
-
* - Block not in the future
|
|
14
|
-
* - Not genesis block
|
|
15
|
-
* - Block's slot is < Infinity
|
|
16
|
-
* - Not finalized slot
|
|
17
|
-
* - Not already known
|
|
5
|
+
* Verifies that all block inputs have data available.
|
|
6
|
+
* - Waits a max of BLOB_AVAILABILITY_TIMEOUT for all data to be available
|
|
7
|
+
* - Returns the time at which all data was available
|
|
8
|
+
* - Returns the data availability status for each block input
|
|
18
9
|
*/
|
|
19
|
-
export declare function verifyBlocksDataAvailability(
|
|
20
|
-
config: ChainForkConfig;
|
|
21
|
-
genesisTime: UintNum64;
|
|
22
|
-
logger: Logger;
|
|
23
|
-
metrics: Metrics | null;
|
|
24
|
-
}, blocks: BlockInput[], signal: AbortSignal, opts: ImportBlockOpts): Promise<{
|
|
10
|
+
export declare function verifyBlocksDataAvailability(blocks: IBlockInput[], signal: AbortSignal): Promise<{
|
|
25
11
|
dataAvailabilityStatuses: DataAvailabilityStatus[];
|
|
26
12
|
availableTime: number;
|
|
27
|
-
availableBlockInputs: BlockInput[];
|
|
28
13
|
}>;
|
|
29
14
|
//# sourceMappingURL=verifyBlocksDataAvailability.d.ts.map
|
|
@@ -1,118 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { ErrorAborted } from "@lodestar/utils";
|
|
4
|
-
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
5
|
-
import { validateBlobSidecars } from "../validation/blobSidecar.js";
|
|
6
|
-
import { validateDataColumnsSidecars } from "../validation/dataColumnSidecar.js";
|
|
7
|
-
import { BlobSidecarValidation, BlockInputType, getBlockInput, } from "./types.js";
|
|
1
|
+
import { DataAvailabilityStatus } from "@lodestar/state-transition";
|
|
2
|
+
import { DAType } from "./blockInput/index.js";
|
|
8
3
|
// we can now wait for full 12 seconds because unavailable block sync will try pulling
|
|
9
4
|
// the blobs from the network anyway after 500ms of seeing the block
|
|
10
|
-
const BLOB_AVAILABILITY_TIMEOUT = 12_000;
|
|
5
|
+
export const BLOB_AVAILABILITY_TIMEOUT = 12_000;
|
|
11
6
|
/**
|
|
12
|
-
* Verifies
|
|
13
|
-
*
|
|
14
|
-
* -
|
|
15
|
-
* -
|
|
16
|
-
* - check_block_relevancy()
|
|
17
|
-
* - Block not in the future
|
|
18
|
-
* - Not genesis block
|
|
19
|
-
* - Block's slot is < Infinity
|
|
20
|
-
* - Not finalized slot
|
|
21
|
-
* - Not already known
|
|
7
|
+
* Verifies that all block inputs have data available.
|
|
8
|
+
* - Waits a max of BLOB_AVAILABILITY_TIMEOUT for all data to be available
|
|
9
|
+
* - Returns the time at which all data was available
|
|
10
|
+
* - Returns the data availability status for each block input
|
|
22
11
|
*/
|
|
23
|
-
export async function verifyBlocksDataAvailability(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const seenTime = opts.seenTimestampSec !== undefined ? opts.seenTimestampSec * 1000 : Date.now();
|
|
30
|
-
const availableBlockInputs = [];
|
|
31
|
-
for (const blockInput of blocks) {
|
|
32
|
-
if (signal.aborted) {
|
|
33
|
-
throw new ErrorAborted("verifyBlocksDataAvailability");
|
|
12
|
+
export async function verifyBlocksDataAvailability(blocks, signal) {
|
|
13
|
+
await Promise.all(blocks.map((blockInput) => blockInput.waitForAllData(BLOB_AVAILABILITY_TIMEOUT, signal)));
|
|
14
|
+
const availableTime = Math.max(0, Math.max(...blocks.map((blockInput) => blockInput.getTimeComplete())));
|
|
15
|
+
const dataAvailabilityStatuses = blocks.map((blockInput) => {
|
|
16
|
+
if (blockInput.type === DAType.PreData) {
|
|
17
|
+
return DataAvailabilityStatus.PreData;
|
|
34
18
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const { dataAvailabilityStatus, availableBlockInput } = await maybeValidateBlobs(chain, blockInput, signal, opts);
|
|
38
|
-
dataAvailabilityStatuses.push(dataAvailabilityStatus);
|
|
39
|
-
availableBlockInputs.push(availableBlockInput);
|
|
40
|
-
}
|
|
41
|
-
const availableTime = lastBlock.type === BlockInputType.dataPromise ? Date.now() : seenTime;
|
|
42
|
-
if (blocks.length === 1 && opts.seenTimestampSec !== undefined && blocks[0].type !== BlockInputType.preData) {
|
|
43
|
-
const recvToAvailableTime = availableTime / 1000 - opts.seenTimestampSec;
|
|
44
|
-
const numBlobs = blocks[0].block.message.body.blobKzgCommitments.length;
|
|
45
|
-
chain.metrics?.gossipBlock.receivedToBlobsAvailabilityTime.observe({ numBlobs }, recvToAvailableTime);
|
|
46
|
-
chain.logger.verbose("Verified blobs availability", {
|
|
47
|
-
slot: blocks[0].block.message.slot,
|
|
48
|
-
recvToAvailableTime,
|
|
49
|
-
type: blocks[0].type,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return { dataAvailabilityStatuses, availableTime, availableBlockInputs };
|
|
53
|
-
}
|
|
54
|
-
async function maybeValidateBlobs(chain, blockInput, signal, opts) {
|
|
55
|
-
switch (blockInput.type) {
|
|
56
|
-
case BlockInputType.preData:
|
|
57
|
-
return { dataAvailabilityStatus: DataAvailabilityStatus.PreData, availableBlockInput: blockInput };
|
|
58
|
-
case BlockInputType.outOfRangeData:
|
|
59
|
-
return { dataAvailabilityStatus: DataAvailabilityStatus.OutOfRange, availableBlockInput: blockInput };
|
|
60
|
-
// biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
|
|
61
|
-
case BlockInputType.availableData:
|
|
62
|
-
if (opts.validBlobSidecars === BlobSidecarValidation.Full) {
|
|
63
|
-
return { dataAvailabilityStatus: DataAvailabilityStatus.Available, availableBlockInput: blockInput };
|
|
64
|
-
}
|
|
65
|
-
case BlockInputType.dataPromise: {
|
|
66
|
-
// run full validation
|
|
67
|
-
const { block } = blockInput;
|
|
68
|
-
const blockSlot = block.message.slot;
|
|
69
|
-
const { blobKzgCommitments } = block.message.body;
|
|
70
|
-
const beaconBlockRoot = chain.config.getForkTypes(blockSlot).BeaconBlock.hashTreeRoot(block.message);
|
|
71
|
-
const blockData = blockInput.type === BlockInputType.availableData
|
|
72
|
-
? blockInput.blockData
|
|
73
|
-
: await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
|
|
74
|
-
if (isForkPostFulu(blockData.fork)) {
|
|
75
|
-
const { dataColumns } = blockData;
|
|
76
|
-
const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
|
|
77
|
-
await validateDataColumnsSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, dataColumns, chain.metrics, {
|
|
78
|
-
skipProofsCheck,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
else if (isForkPostDeneb(blockData.fork)) {
|
|
82
|
-
const { blobs } = blockData;
|
|
83
|
-
// if the blob sidecars have been individually verified then we can skip kzg proof check
|
|
84
|
-
// but other checks to match blobs with block data still need to be performed
|
|
85
|
-
const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
|
|
86
|
-
await validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
|
|
87
|
-
}
|
|
88
|
-
const availableBlockInput = getBlockInput.availableData(chain.config, blockInput.block, blockInput.source, blockData);
|
|
89
|
-
return { dataAvailabilityStatus: DataAvailabilityStatus.Available, availableBlockInput: availableBlockInput };
|
|
19
|
+
if (blockInput.daOutOfRange) {
|
|
20
|
+
return DataAvailabilityStatus.OutOfRange;
|
|
90
21
|
}
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
* Wait for blobs to become available with a cutoff time. If fails then throw DATA_UNAVAILABLE error
|
|
95
|
-
* which may try unknownblock/blobs fill (by root).
|
|
96
|
-
*/
|
|
97
|
-
async function raceWithCutoff(chain, blockInput, availabilityPromise, signal) {
|
|
98
|
-
const { block } = blockInput;
|
|
99
|
-
const blockSlot = block.message.slot;
|
|
100
|
-
const cutoffTime = computeTimeAtSlot(chain.config, blockSlot, chain.genesisTime) * 1000 + BLOB_AVAILABILITY_TIMEOUT - Date.now();
|
|
101
|
-
const cutoffTimeout = cutoffTime > 0
|
|
102
|
-
? new Promise((_resolve, reject) => {
|
|
103
|
-
setTimeout(() => reject(new Error("Timeout exceeded")), cutoffTime);
|
|
104
|
-
signal.addEventListener("abort", () => reject(signal.reason));
|
|
105
|
-
})
|
|
106
|
-
: Promise.reject(new Error("Cutoff time must be greater than 0"));
|
|
107
|
-
chain.logger.debug("Racing for blob availabilityPromise", { blockSlot, cutoffTime });
|
|
108
|
-
try {
|
|
109
|
-
await Promise.race([availabilityPromise, cutoffTimeout]);
|
|
110
|
-
}
|
|
111
|
-
catch (_e) {
|
|
112
|
-
// throw unavailable so that the unknownblock/blobs can be triggered to pull the block
|
|
113
|
-
throw new BlockError(block, { code: BlockErrorCode.DATA_UNAVAILABLE });
|
|
114
|
-
}
|
|
115
|
-
// we can only be here if availabilityPromise has resolved else an error will be thrown
|
|
116
|
-
return availabilityPromise;
|
|
22
|
+
return DataAvailabilityStatus.Available;
|
|
23
|
+
});
|
|
24
|
+
return { dataAvailabilityStatuses, availableTime };
|
|
117
25
|
}
|
|
118
26
|
//# sourceMappingURL=verifyBlocksDataAvailability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,MAAM,EAAc,MAAM,uBAAuB,CAAC;AAE1D,sFAAsF;AACtF,oEAAoE;AACpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAqB,EACrB,MAAmB;IAKnB,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;IACzG,MAAM,wBAAwB,GAA6B,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QACnF,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,sBAAsB,CAAC,OAAO,CAAC;QACxC,CAAC;QACD,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;YAC5B,OAAO,sBAAsB,CAAC,UAAU,CAAC;QAC3C,CAAC;QACD,OAAO,sBAAsB,CAAC,SAAS,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,OAAO,EAAC,wBAAwB,EAAE,aAAa,EAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
2
|
import { ExecutionStatus, IForkChoice, LVHInvalidResponse, LVHValidResponse, MaybeValidExecutionStatus, ProtoBlock } from "@lodestar/fork-choice";
|
|
3
3
|
import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
|
|
4
|
-
import {
|
|
4
|
+
import { Slot, bellatrix } from "@lodestar/types";
|
|
5
5
|
import { Logger } from "@lodestar/utils";
|
|
6
6
|
import { IEth1ForBlockProduction } from "../../eth1/index.js";
|
|
7
7
|
import { IExecutionEngine } from "../../execution/engine/interface.js";
|
|
@@ -10,6 +10,7 @@ import { IClock } from "../../util/clock.js";
|
|
|
10
10
|
import { BlockError } from "../errors/index.js";
|
|
11
11
|
import { BlockProcessOpts } from "../options.js";
|
|
12
12
|
import { ImportBlockOpts } from "./types.js";
|
|
13
|
+
import { IBlockInput } from "./blockInput/types.js";
|
|
13
14
|
export type VerifyBlockExecutionPayloadModules = {
|
|
14
15
|
eth1: IEth1ForBlockProduction;
|
|
15
16
|
executionEngine: IExecutionEngine;
|
|
@@ -60,10 +61,10 @@ type VerifyBlockExecutionResponse = VerifyExecutionErrorResponse | {
|
|
|
60
61
|
*
|
|
61
62
|
* Since the EL client must be aware of each parent, all payloads must be submitted in sequence.
|
|
62
63
|
*/
|
|
63
|
-
export declare function verifyBlocksExecutionPayload(chain: VerifyBlockExecutionPayloadModules, parentBlock: ProtoBlock,
|
|
64
|
+
export declare function verifyBlocksExecutionPayload(chain: VerifyBlockExecutionPayloadModules, parentBlock: ProtoBlock, blockInputs: IBlockInput[], preState0: CachedBeaconStateAllForks, signal: AbortSignal, opts: BlockProcessOpts & ImportBlockOpts): Promise<SegmentExecStatus>;
|
|
64
65
|
/**
|
|
65
66
|
* Verifies a single block execution payload by sending it to the EL client (via HTTP).
|
|
66
67
|
*/
|
|
67
|
-
export declare function verifyBlockExecutionPayload(chain: VerifyBlockExecutionPayloadModules,
|
|
68
|
+
export declare function verifyBlockExecutionPayload(chain: VerifyBlockExecutionPayloadModules, blockInput: IBlockInput, preState0: CachedBeaconStateAllForks, opts: BlockProcessOpts, isOptimisticallySafe: boolean, currentSlot: Slot): Promise<VerifyBlockExecutionResponse>;
|
|
68
69
|
export {};
|
|
69
70
|
//# sourceMappingURL=verifyBlocksExecutionPayloads.d.ts.map
|