@lodestar/beacon-node 1.51.0-dev.d2b5232209 → 1.51.0-dev.d5620be4a1
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.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +36 -88
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +22 -2
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/validator/index.d.ts +6 -0
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +38 -25
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/GetBlobsTracker.d.ts +2 -2
- package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
- package/lib/chain/GetBlobsTracker.js +11 -33
- package/lib/chain/GetBlobsTracker.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +1 -0
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js +5 -241
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
- package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/errors.js.map +1 -1
- package/lib/chain/blocks/blockInput/types.d.ts +2 -18
- package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/types.js +0 -1
- package/lib/chain/blocks/blockInput/types.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +36 -53
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +10 -11
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +32 -18
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/blocks/index.d.ts.map +1 -1
- package/lib/chain/blocks/index.js +2 -2
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +10 -7
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +22 -17
- package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +4 -20
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js +0 -24
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +17 -6
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +14 -2
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +10 -5
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js +9 -4
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
- package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/interface.d.ts +2 -0
- package/lib/chain/bls/interface.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.d.ts +1 -1
- package/lib/chain/bls/multithread/index.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.js +50 -22
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/bls/multithread/types.d.ts +1 -1
- package/lib/chain/bls/multithread/types.d.ts.map +1 -1
- package/lib/chain/bls/multithread/worker.js +1 -1
- package/lib/chain/bls/multithread/worker.js.map +1 -1
- package/lib/chain/bls/singleThread.js +1 -1
- package/lib/chain/bls/singleThread.js.map +1 -1
- package/lib/chain/bls/utils.js +1 -1
- package/lib/chain/bls/utils.js.map +1 -1
- package/lib/chain/chain.d.ts +25 -4
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +120 -39
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +7 -7
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/emitter.js +5 -5
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/blockError.d.ts +1 -1
- package/lib/chain/errors/blockError.d.ts.map +1 -1
- package/lib/chain/errors/blockError.js +1 -1
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
- package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
- package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/errors/index.d.ts +0 -1
- package/lib/chain/errors/index.d.ts.map +1 -1
- package/lib/chain/errors/index.js +0 -1
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts +11 -1
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +11 -0
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
- package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
- package/lib/chain/forkChoiceExecutionEngine.js +117 -0
- package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
- package/lib/chain/interface.d.ts +9 -7
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +199 -46
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +1 -1
- package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/attestationPool.js +15 -4
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/index.d.ts +1 -0
- package/lib/chain/opPools/index.d.ts.map +1 -1
- package/lib/chain/opPools/index.js +1 -0
- package/lib/chain/opPools/index.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.js +17 -7
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
- package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
- package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
- package/lib/chain/opPools/singleAttestationPool.js +209 -0
- package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
- package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +1 -1
- package/lib/chain/opPools/utils.d.ts.map +1 -1
- package/lib/chain/opPools/utils.js +1 -1
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/options.d.ts +5 -3
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js +0 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +3 -2
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/proposerTracker.d.ts +31 -0
- package/lib/chain/proposerTracker.d.ts.map +1 -0
- package/lib/chain/proposerTracker.js +75 -0
- package/lib/chain/proposerTracker.js.map +1 -0
- package/lib/chain/regen/interface.d.ts +1 -1
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/queued.d.ts +1 -1
- package/lib/chain/regen/queued.d.ts.map +1 -1
- package/lib/chain/regen/queued.js +5 -3
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +13 -13
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
- package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +1 -2
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +0 -3
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/flatFileStore/flatFileStore.js +5 -5
- package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
- package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
- package/lib/db/flatFileStore/slotIndex.js +2 -2
- package/lib/db/flatFileStore/slotIndex.js.map +1 -1
- package/lib/db/repositories/blobSidecars.d.ts +0 -1
- package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
- package/lib/db/repositories/blobSidecars.js +0 -1
- package/lib/db/repositories/blobSidecars.js.map +1 -1
- package/lib/execution/builder/apiClient.d.ts +14 -8
- package/lib/execution/builder/apiClient.d.ts.map +1 -1
- package/lib/execution/builder/apiClient.js +12 -10
- package/lib/execution/builder/apiClient.js.map +1 -1
- package/lib/execution/builder/http.d.ts +2 -0
- package/lib/execution/builder/http.d.ts.map +1 -1
- package/lib/execution/builder/http.js +2 -0
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/engine/http.d.ts +4 -6
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +8 -10
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/index.d.ts +1 -1
- package/lib/execution/engine/index.d.ts.map +1 -1
- package/lib/execution/engine/index.js +1 -1
- package/lib/execution/engine/index.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +18 -6
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.d.ts +2 -4
- package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.js +2 -12
- package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +0 -1
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +0 -4
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/restTransport.d.ts +2 -4
- package/lib/execution/engine/restTransport.d.ts.map +1 -1
- package/lib/execution/engine/restTransport.js +1 -15
- package/lib/execution/engine/restTransport.js.map +1 -1
- package/lib/execution/engine/sszTypes.d.ts +0 -9
- package/lib/execution/engine/sszTypes.d.ts.map +1 -1
- package/lib/execution/engine/sszTypes.js +0 -5
- package/lib/execution/engine/sszTypes.js.map +1 -1
- package/lib/execution/engine/transport.d.ts +1 -14
- package/lib/execution/engine/transport.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +0 -8
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +2 -10
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/execution/engine/utils.d.ts.map +1 -1
- package/lib/execution/engine/utils.js +3 -2
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +0 -9
- package/lib/metrics/metrics/beacon.d.ts.map +1 -1
- package/lib/metrics/metrics/beacon.js +0 -30
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +30 -8
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +79 -18
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/server/http.js +5 -5
- package/lib/metrics/server/http.js.map +1 -1
- package/lib/monitoring/service.js +1 -1
- package/lib/monitoring/service.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +4 -1
- package/lib/network/core/networkCore.d.ts.map +1 -1
- package/lib/network/core/networkCore.js +7 -0
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorker.js +2 -0
- package/lib/network/core/networkCoreWorker.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.js +6 -0
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +6 -1
- package/lib/network/core/types.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts +1 -0
- package/lib/network/gossip/gossipsub.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.js +10 -0
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +1 -8
- package/lib/network/gossip/interface.d.ts.map +1 -1
- package/lib/network/gossip/interface.js +0 -1
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +0 -16
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +0 -23
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +4 -5
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/libp2p/index.d.ts.map +1 -1
- package/lib/network/libp2p/index.js +5 -1
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/network.d.ts +8 -7
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +53 -35
- package/lib/network/network.js.map +1 -1
- package/lib/network/options.d.ts +2 -0
- package/lib/network/options.d.ts.map +1 -1
- package/lib/network/options.js +2 -0
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts +2 -1
- package/lib/network/peers/peerManager.d.ts.map +1 -1
- package/lib/network/peers/peerManager.js +28 -1
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.js +8 -16
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/lib/network/peers/utils/subnetMap.d.ts +5 -2
- package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
- package/lib/network/peers/utils/subnetMap.js +6 -3
- package/lib/network/peers/utils/subnetMap.js.map +1 -1
- package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
- package/lib/network/processor/extractSlotRootFns.js +1 -8
- package/lib/network/processor/extractSlotRootFns.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +52 -131
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +0 -6
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
- package/lib/network/processor/gossipValidatorFn.js +1 -5
- package/lib/network/processor/gossipValidatorFn.js.map +1 -1
- package/lib/network/processor/index.d.ts +6 -0
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +29 -4
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +0 -3
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.js +1 -12
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +0 -2
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +0 -10
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
- package/lib/network/reqresp/rateLimit.js +1 -17
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +2 -8
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +1 -7
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/subnets/attnetsService.d.ts +35 -5
- package/lib/network/subnets/attnetsService.d.ts.map +1 -1
- package/lib/network/subnets/attnetsService.js +84 -6
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/network/subnets/interface.d.ts +7 -0
- package/lib/network/subnets/interface.d.ts.map +1 -1
- package/lib/network/subnets/interface.js.map +1 -1
- package/lib/node/nodejs.d.ts +3 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +38 -20
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/options.d.ts +3 -1
- package/lib/node/options.d.ts.map +1 -1
- package/lib/node/options.js +4 -2
- package/lib/node/options.js.map +1 -1
- package/lib/sync/interface.d.ts.map +1 -1
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/range/batch.d.ts +2 -3
- package/lib/sync/range/batch.d.ts.map +1 -1
- package/lib/sync/range/batch.js +9 -22
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts.map +1 -1
- package/lib/sync/range/chain.js +2 -15
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/sync.d.ts +7 -0
- package/lib/sync/sync.d.ts.map +1 -1
- package/lib/sync/sync.js +61 -3
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +1 -7
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +6 -34
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +24 -128
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts +2 -18
- package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRoot.js +14 -99
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/util/blobs.d.ts +1 -7
- package/lib/util/blobs.d.ts.map +1 -1
- package/lib/util/blobs.js +0 -19
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/execution.d.ts +3 -4
- package/lib/util/execution.d.ts.map +1 -1
- package/lib/util/execution.js +1 -73
- package/lib/util/execution.js.map +1 -1
- package/lib/util/file.d.ts.map +1 -1
- package/lib/util/file.js +8 -9
- package/lib/util/file.js.map +1 -1
- package/lib/util/queue/itemQueue.js +1 -1
- package/lib/util/queue/itemQueue.js.map +1 -1
- package/lib/util/sszBytes.d.ts +5 -1
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +36 -19
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/types.d.ts +0 -5
- package/lib/util/types.d.ts.map +1 -1
- package/lib/util/types.js +1 -2
- package/lib/util/types.js.map +1 -1
- package/package.json +16 -17
- package/src/api/impl/beacon/blocks/index.ts +59 -109
- package/src/api/impl/beacon/pool/index.ts +31 -1
- package/src/api/impl/beacon/state/utils.ts +1 -1
- package/src/api/impl/validator/index.ts +43 -29
- package/src/chain/GetBlobsTracker.ts +14 -41
- package/src/chain/archiveStore/archiveStore.ts +1 -0
- package/src/chain/blocks/blockInput/blockInput.ts +11 -343
- package/src/chain/blocks/blockInput/errors.ts +1 -2
- package/src/chain/blocks/blockInput/types.ts +2 -20
- package/src/chain/blocks/importBlock.ts +56 -72
- package/src/chain/blocks/importExecutionPayload.ts +55 -34
- package/src/chain/blocks/index.ts +5 -2
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +33 -22
- package/src/chain/blocks/types.ts +5 -31
- package/src/chain/blocks/verifyBlock.ts +30 -16
- package/src/chain/blocks/verifyBlocksDataAvailability.ts +16 -2
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
- package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
- package/src/chain/blocks/verifyBlocksSignatures.ts +10 -5
- package/src/chain/blocks/verifyPayloadsDataAvailability.ts +11 -4
- package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
- package/src/chain/bls/interface.ts +2 -0
- package/src/chain/bls/multithread/index.ts +48 -24
- package/src/chain/bls/multithread/types.ts +1 -1
- package/src/chain/bls/multithread/worker.ts +1 -5
- package/src/chain/bls/singleThread.ts +1 -1
- package/src/chain/bls/utils.ts +1 -1
- package/src/chain/chain.ts +136 -38
- package/src/chain/emitter.ts +8 -8
- package/src/chain/errors/blockError.ts +1 -1
- package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
- package/src/chain/errors/index.ts +0 -1
- package/src/chain/forkChoice/index.ts +11 -0
- package/src/chain/forkChoiceExecutionEngine.ts +183 -0
- package/src/chain/interface.ts +9 -6
- package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
- package/src/chain/opPools/attestationPool.ts +16 -4
- package/src/chain/opPools/index.ts +1 -0
- package/src/chain/opPools/payloadAttestationPool.ts +18 -7
- package/src/chain/opPools/singleAttestationPool.ts +287 -0
- package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
- package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
- package/src/chain/opPools/utils.ts +1 -1
- package/src/chain/options.ts +5 -4
- package/src/chain/produceBlock/produceBlockBody.ts +7 -3
- package/src/chain/proposerTracker.ts +94 -0
- package/src/chain/regen/interface.ts +1 -1
- package/src/chain/regen/queued.ts +6 -4
- package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
- package/src/chain/validation/executionPayloadBid.ts +14 -13
- package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
- package/src/chain/validatorMonitor.ts +0 -6
- package/src/db/flatFileStore/flatFileStore.ts +7 -7
- package/src/db/flatFileStore/slotIndex.ts +4 -3
- package/src/db/repositories/blobSidecars.ts +0 -1
- package/src/execution/builder/apiClient.ts +16 -13
- package/src/execution/builder/http.ts +4 -0
- package/src/execution/engine/http.ts +19 -42
- package/src/execution/engine/index.ts +1 -1
- package/src/execution/engine/interface.ts +19 -10
- package/src/execution/engine/jsonRpcTransport.ts +10 -22
- package/src/execution/engine/mock.ts +0 -7
- package/src/execution/engine/restTransport.ts +3 -22
- package/src/execution/engine/sszTypes.ts +0 -9
- package/src/execution/engine/transport.ts +8 -17
- package/src/execution/engine/types.ts +3 -18
- package/src/execution/engine/utils.ts +4 -2
- package/src/index.ts +1 -1
- package/src/metrics/metrics/beacon.ts +0 -30
- package/src/metrics/metrics/lodestar.ts +80 -18
- package/src/metrics/server/http.ts +5 -5
- package/src/monitoring/service.ts +1 -1
- package/src/network/core/networkCore.ts +11 -1
- package/src/network/core/networkCoreWorker.ts +2 -0
- package/src/network/core/networkCoreWorkerHandler.ts +8 -1
- package/src/network/core/types.ts +6 -1
- package/src/network/gossip/gossipsub.ts +11 -0
- package/src/network/gossip/interface.ts +0 -5
- package/src/network/gossip/topic.ts +0 -25
- package/src/network/interface.ts +2 -5
- package/src/network/libp2p/index.ts +5 -1
- package/src/network/network.ts +55 -58
- package/src/network/options.ts +4 -0
- package/src/network/peers/peerManager.ts +28 -3
- package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
- package/src/network/peers/utils/prioritizePeers.ts +14 -22
- package/src/network/peers/utils/subnetMap.ts +6 -3
- package/src/network/processor/extractSlotRootFns.ts +0 -9
- package/src/network/processor/gossipHandlers.ts +65 -164
- package/src/network/processor/gossipQueues/index.ts +0 -6
- package/src/network/processor/gossipValidatorFn.ts +0 -5
- package/src/network/processor/index.ts +25 -4
- package/src/network/reqresp/ReqRespBeaconNode.ts +0 -7
- package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
- package/src/network/reqresp/handlers/index.ts +0 -17
- package/src/network/reqresp/protocols.ts +0 -12
- package/src/network/reqresp/rateLimit.ts +1 -17
- package/src/network/reqresp/types.ts +0 -13
- package/src/network/subnets/attnetsService.ts +94 -6
- package/src/network/subnets/interface.ts +7 -0
- package/src/node/nodejs.ts +40 -21
- package/src/node/options.ts +9 -6
- package/src/sync/interface.ts +1 -0
- package/src/sync/range/batch.ts +9 -21
- package/src/sync/range/chain.ts +2 -14
- package/src/sync/sync.ts +65 -4
- package/src/sync/unknownBlock.ts +1 -8
- package/src/sync/utils/downloadByRange.ts +31 -230
- package/src/sync/utils/downloadByRoot.ts +15 -142
- package/src/util/blobs.ts +0 -34
- package/src/util/execution.ts +8 -102
- package/src/util/file.ts +8 -9
- package/src/util/queue/itemQueue.ts +1 -1
- package/src/util/sszBytes.ts +42 -24
- package/src/util/types.ts +1 -8
- package/lib/chain/errors/blobSidecarError.d.ts +0 -108
- package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
- package/lib/chain/errors/blobSidecarError.js +0 -38
- package/lib/chain/errors/blobSidecarError.js.map +0 -1
- package/lib/chain/validation/blobSidecar.d.ts +0 -16
- package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
- package/lib/chain/validation/blobSidecar.js +0 -276
- package/lib/chain/validation/blobSidecar.js.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
- package/src/chain/errors/blobSidecarError.ts +0 -70
- package/src/chain/validation/blobSidecar.ts +0 -357
- package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
- package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
import {ForkName, ForkPostFulu, ForkPostGloas,
|
|
2
|
-
import {BeaconBlockBody,
|
|
3
|
-
import {
|
|
1
|
+
import {ForkName, ForkPostFulu, ForkPostGloas, ForkPreFulu, ForkPreGloas, NUMBER_OF_COLUMNS} from "@lodestar/params";
|
|
2
|
+
import {BeaconBlockBody, ColumnIndex, SignedBeaconBlock, Slot, deneb, fulu, gloas} from "@lodestar/types";
|
|
3
|
+
import {prettyBytes, toRootHex, withTimeout} from "@lodestar/utils";
|
|
4
4
|
import {VersionedHashes} from "../../../execution/index.js";
|
|
5
5
|
import {kzgCommitmentToVersionedHash} from "../../../util/blobs.js";
|
|
6
6
|
import {BlockInputError, BlockInputErrorCode} from "./errors.js";
|
|
7
7
|
import {
|
|
8
|
-
AddBlob,
|
|
9
8
|
AddBlock,
|
|
10
9
|
AddColumn,
|
|
11
|
-
BlobMeta,
|
|
12
|
-
BlobWithSource,
|
|
13
10
|
BlockInputInit,
|
|
14
11
|
ColumnWithSource,
|
|
15
12
|
CreateBlockInputMeta,
|
|
@@ -17,22 +14,17 @@ import {
|
|
|
17
14
|
DAType,
|
|
18
15
|
IBlockInput,
|
|
19
16
|
LogMetaBasic,
|
|
20
|
-
LogMetaBlobs,
|
|
21
17
|
LogMetaColumns,
|
|
22
18
|
MissingColumnMeta,
|
|
23
19
|
PromiseParts,
|
|
24
20
|
SourceMeta,
|
|
25
21
|
} from "./types.js";
|
|
26
22
|
|
|
27
|
-
export type BlockInput = BlockInputPreData |
|
|
23
|
+
export type BlockInput = BlockInputPreData | BlockInputColumns | BlockInputNoData;
|
|
28
24
|
|
|
29
|
-
export function
|
|
25
|
+
export function isBlockInputPreData(blockInput: IBlockInput): blockInput is BlockInputPreData {
|
|
30
26
|
return blockInput.type === DAType.PreData;
|
|
31
27
|
}
|
|
32
|
-
export function isBlockInputBlobs(blockInput: IBlockInput): blockInput is BlockInputBlobs {
|
|
33
|
-
return blockInput.type === DAType.Blobs;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
28
|
export function isBlockInputColumns(blockInput: IBlockInput): blockInput is BlockInputColumns {
|
|
37
29
|
return blockInput.type === DAType.Columns;
|
|
38
30
|
}
|
|
@@ -189,16 +181,18 @@ abstract class AbstractBlockInput<F extends ForkName = ForkName, TData extends D
|
|
|
189
181
|
type BlockInputPreDataState = {
|
|
190
182
|
hasBlock: true;
|
|
191
183
|
hasAllData: true;
|
|
192
|
-
block: SignedBeaconBlock<
|
|
184
|
+
block: SignedBeaconBlock<ForkPreFulu>;
|
|
193
185
|
source: SourceMeta;
|
|
194
186
|
timeCompleteSec: number;
|
|
195
187
|
};
|
|
196
188
|
|
|
197
189
|
/**
|
|
198
|
-
* Pre-
|
|
190
|
+
* Pre-fulu BlockInput, it only has a single state.
|
|
199
191
|
* - the block simply exists
|
|
192
|
+
*
|
|
193
|
+
* Legacy deneb..electra blob sidecars are not tracked.
|
|
200
194
|
*/
|
|
201
|
-
export class BlockInputPreData extends AbstractBlockInput<
|
|
195
|
+
export class BlockInputPreData extends AbstractBlockInput<ForkPreFulu, null> {
|
|
202
196
|
type = DAType.PreData as const;
|
|
203
197
|
|
|
204
198
|
state: BlockInputPreDataState;
|
|
@@ -210,7 +204,7 @@ export class BlockInputPreData extends AbstractBlockInput<ForkPreDeneb, null> {
|
|
|
210
204
|
this.blockPromise.resolve(state.block);
|
|
211
205
|
}
|
|
212
206
|
|
|
213
|
-
static createFromBlock(props: AddBlock<
|
|
207
|
+
static createFromBlock(props: AddBlock<ForkPreFulu> & CreateBlockInputMeta): BlockInputPreData {
|
|
214
208
|
const init: BlockInputInit = {
|
|
215
209
|
daOutOfRange: props.daOutOfRange,
|
|
216
210
|
timeCreated: props.seenTimestampSec,
|
|
@@ -250,332 +244,6 @@ export class BlockInputPreData extends AbstractBlockInput<ForkPreDeneb, null> {
|
|
|
250
244
|
}
|
|
251
245
|
}
|
|
252
246
|
|
|
253
|
-
// Blobs DA
|
|
254
|
-
|
|
255
|
-
export type ForkBlobsDA = ForkName.deneb | ForkName.electra;
|
|
256
|
-
|
|
257
|
-
type BlockInputBlobsState =
|
|
258
|
-
| {
|
|
259
|
-
hasBlock: true;
|
|
260
|
-
hasAllData: true;
|
|
261
|
-
versionedHashes: VersionedHashes;
|
|
262
|
-
block: SignedBeaconBlock<ForkBlobsDA>;
|
|
263
|
-
source: SourceMeta;
|
|
264
|
-
timeCompleteSec: number;
|
|
265
|
-
}
|
|
266
|
-
| {
|
|
267
|
-
hasBlock: true;
|
|
268
|
-
hasAllData: false;
|
|
269
|
-
versionedHashes: VersionedHashes;
|
|
270
|
-
block: SignedBeaconBlock<ForkBlobsDA>;
|
|
271
|
-
source: SourceMeta;
|
|
272
|
-
}
|
|
273
|
-
| {
|
|
274
|
-
hasBlock: false;
|
|
275
|
-
hasAllData: false;
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* With blobs, BlockInput has several states:
|
|
280
|
-
* - The block is seen and all blobs are seen
|
|
281
|
-
* - The block is seen and all blobs are not yet seen
|
|
282
|
-
* - The block is yet not seen and its unknown if all blobs are seen
|
|
283
|
-
*/
|
|
284
|
-
export class BlockInputBlobs extends AbstractBlockInput<ForkBlobsDA, deneb.BlobSidecars> {
|
|
285
|
-
type = DAType.Blobs as const;
|
|
286
|
-
|
|
287
|
-
state: BlockInputBlobsState;
|
|
288
|
-
private blobsCache = new Map<BlobIndex, BlobWithSource>();
|
|
289
|
-
|
|
290
|
-
private constructor(init: BlockInputInit, state: BlockInputBlobsState) {
|
|
291
|
-
super(init);
|
|
292
|
-
this.state = state;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
static createFromBlock(props: AddBlock<ForkBlobsDA> & CreateBlockInputMeta): BlockInputBlobs {
|
|
296
|
-
const hasAllData = props.daOutOfRange || props.block.message.body.blobKzgCommitments.length === 0;
|
|
297
|
-
|
|
298
|
-
const state = {
|
|
299
|
-
hasBlock: true,
|
|
300
|
-
hasAllData,
|
|
301
|
-
versionedHashes: props.block.message.body.blobKzgCommitments.map(kzgCommitmentToVersionedHash),
|
|
302
|
-
block: props.block,
|
|
303
|
-
source: {
|
|
304
|
-
source: props.source,
|
|
305
|
-
seenTimestampSec: props.seenTimestampSec,
|
|
306
|
-
peerIdStr: props.peerIdStr,
|
|
307
|
-
},
|
|
308
|
-
timeCompleteSec: hasAllData ? props.seenTimestampSec : undefined,
|
|
309
|
-
} as BlockInputBlobsState;
|
|
310
|
-
const init: BlockInputInit = {
|
|
311
|
-
daOutOfRange: props.daOutOfRange,
|
|
312
|
-
timeCreated: props.seenTimestampSec,
|
|
313
|
-
forkName: props.forkName,
|
|
314
|
-
slot: props.block.message.slot,
|
|
315
|
-
blockRootHex: props.blockRootHex,
|
|
316
|
-
parentRootHex: toRootHex(props.block.message.parentRoot),
|
|
317
|
-
};
|
|
318
|
-
const blockInput = new BlockInputBlobs(init, state);
|
|
319
|
-
blockInput.blockPromise.resolve(props.block);
|
|
320
|
-
if (hasAllData) {
|
|
321
|
-
blockInput.dataPromise.resolve([]);
|
|
322
|
-
}
|
|
323
|
-
return blockInput;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
static createFromBlob(props: AddBlob & CreateBlockInputMeta): BlockInputBlobs {
|
|
327
|
-
const state: BlockInputBlobsState = {
|
|
328
|
-
hasBlock: false,
|
|
329
|
-
hasAllData: false,
|
|
330
|
-
};
|
|
331
|
-
const init: BlockInputInit = {
|
|
332
|
-
daOutOfRange: props.daOutOfRange,
|
|
333
|
-
timeCreated: props.seenTimestampSec,
|
|
334
|
-
forkName: props.forkName,
|
|
335
|
-
blockRootHex: props.blockRootHex,
|
|
336
|
-
parentRootHex: toRootHex(props.blobSidecar.signedBlockHeader.message.parentRoot),
|
|
337
|
-
slot: props.blobSidecar.signedBlockHeader.message.slot,
|
|
338
|
-
};
|
|
339
|
-
const blockInput = new BlockInputBlobs(init, state);
|
|
340
|
-
blockInput.blobsCache.set(props.blobSidecar.index, {
|
|
341
|
-
blobSidecar: props.blobSidecar,
|
|
342
|
-
source: props.source,
|
|
343
|
-
seenTimestampSec: props.seenTimestampSec,
|
|
344
|
-
peerIdStr: props.peerIdStr,
|
|
345
|
-
});
|
|
346
|
-
return blockInput;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
getLogMeta(): LogMetaBlobs {
|
|
350
|
-
return {
|
|
351
|
-
slot: this.slot,
|
|
352
|
-
blockRoot: prettyBytes(this.blockRootHex),
|
|
353
|
-
timeCreatedSec: this.timeCreatedSec,
|
|
354
|
-
expectedBlobs: this.state.hasBlock ? this.state.block.message.body.blobKzgCommitments.length : "unknown",
|
|
355
|
-
receivedBlobs: this.blobsCache.size,
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
addBlock(
|
|
360
|
-
{blockRootHex, block, source, seenTimestampSec, peerIdStr}: AddBlock<ForkBlobsDA>,
|
|
361
|
-
opts = {throwOnDuplicateAdd: true}
|
|
362
|
-
): void {
|
|
363
|
-
// this check suffices for checking slot, parentRoot, and forkName
|
|
364
|
-
if (blockRootHex !== this.blockRootHex) {
|
|
365
|
-
throw new BlockInputError(
|
|
366
|
-
{
|
|
367
|
-
code: BlockInputErrorCode.MISMATCHED_ROOT_HEX,
|
|
368
|
-
blockInputRoot: this.blockRootHex,
|
|
369
|
-
mismatchedRoot: blockRootHex,
|
|
370
|
-
source,
|
|
371
|
-
peerId: `${peerIdStr}`,
|
|
372
|
-
},
|
|
373
|
-
"addBlock blockRootHex does not match BlockInput.blockRootHex"
|
|
374
|
-
);
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
if (!opts.throwOnDuplicateAdd) {
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
if (this.state.hasBlock) {
|
|
382
|
-
throw new BlockInputError(
|
|
383
|
-
{
|
|
384
|
-
code: BlockInputErrorCode.INVALID_CONSTRUCTION,
|
|
385
|
-
blockRoot: this.blockRootHex,
|
|
386
|
-
},
|
|
387
|
-
"Cannot addBlock to BlockInputBlobs after it already has a block"
|
|
388
|
-
);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
for (const {blobSidecar} of this.blobsCache.values()) {
|
|
392
|
-
if (!blockAndBlobArePaired(block, blobSidecar)) {
|
|
393
|
-
this.blobsCache.delete(blobSidecar.index);
|
|
394
|
-
// TODO: (@matthewkeil) spec says to ignore invalid blobs but should we downscore the peer maybe?
|
|
395
|
-
// this.logger?.error(`Removing blobIndex=${blobSidecar.index} from BlockInput`, {}, err);
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
const hasAllData = this.blobsCache.size === block.message.body.blobKzgCommitments.length;
|
|
400
|
-
|
|
401
|
-
this.state = {
|
|
402
|
-
...this.state,
|
|
403
|
-
hasBlock: true,
|
|
404
|
-
hasAllData,
|
|
405
|
-
block,
|
|
406
|
-
versionedHashes: block.message.body.blobKzgCommitments.map(kzgCommitmentToVersionedHash),
|
|
407
|
-
source: {
|
|
408
|
-
source,
|
|
409
|
-
seenTimestampSec,
|
|
410
|
-
peerIdStr,
|
|
411
|
-
},
|
|
412
|
-
timeCompleteSec: hasAllData ? seenTimestampSec : undefined,
|
|
413
|
-
} as BlockInputBlobsState;
|
|
414
|
-
this.blockPromise.resolve(block);
|
|
415
|
-
if (hasAllData) {
|
|
416
|
-
this.dataPromise.resolve(this.getBlobs());
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
hasBlob(blobIndex: BlobIndex): boolean {
|
|
421
|
-
return this.blobsCache.has(blobIndex);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
getBlob(blobIndex: BlobIndex): deneb.BlobSidecar | undefined {
|
|
425
|
-
return this.blobsCache.get(blobIndex)?.blobSidecar;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
addBlob(
|
|
429
|
-
{blockRootHex, blobSidecar, source, peerIdStr, seenTimestampSec}: AddBlob,
|
|
430
|
-
opts = {throwOnDuplicateAdd: true}
|
|
431
|
-
): void {
|
|
432
|
-
// this check suffices for checking slot, parentRoot, and forkName
|
|
433
|
-
if (blockRootHex !== this.blockRootHex) {
|
|
434
|
-
throw new BlockInputError(
|
|
435
|
-
{
|
|
436
|
-
code: BlockInputErrorCode.MISMATCHED_ROOT_HEX,
|
|
437
|
-
blockInputRoot: this.blockRootHex,
|
|
438
|
-
mismatchedRoot: blockRootHex,
|
|
439
|
-
source: source,
|
|
440
|
-
peerId: `${peerIdStr}`,
|
|
441
|
-
},
|
|
442
|
-
"Blob BeaconBlockHeader blockRootHex does not match BlockInput.blockRootHex"
|
|
443
|
-
);
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
const isDuplicate = this.blobsCache.has(blobSidecar.index);
|
|
447
|
-
if (isDuplicate && opts.throwOnDuplicateAdd) {
|
|
448
|
-
throw new BlockInputError(
|
|
449
|
-
{
|
|
450
|
-
code: BlockInputErrorCode.INVALID_CONSTRUCTION,
|
|
451
|
-
blockRoot: this.blockRootHex,
|
|
452
|
-
},
|
|
453
|
-
"Cannot addBlob to BlockInputBlobs with duplicate blobIndex"
|
|
454
|
-
);
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
if (this.state.hasBlock) {
|
|
458
|
-
assertBlockAndBlobArePaired(this.blockRootHex, this.state.block, blobSidecar);
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
if (isDuplicate) {
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
this.blobsCache.set(blobSidecar.index, {blobSidecar, source, seenTimestampSec, peerIdStr});
|
|
466
|
-
|
|
467
|
-
if (this.state.hasBlock && this.blobsCache.size === this.state.block.message.body.blobKzgCommitments.length) {
|
|
468
|
-
this.state = {
|
|
469
|
-
...this.state,
|
|
470
|
-
hasAllData: true,
|
|
471
|
-
timeCompleteSec: seenTimestampSec,
|
|
472
|
-
};
|
|
473
|
-
this.dataPromise.resolve([...this.blobsCache.values()].map(({blobSidecar}) => blobSidecar));
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
getVersionedHashes(): VersionedHashes {
|
|
478
|
-
if (!this.state.hasBlock) {
|
|
479
|
-
throw new BlockInputError(
|
|
480
|
-
{
|
|
481
|
-
code: BlockInputErrorCode.INCOMPLETE_DATA,
|
|
482
|
-
...this.getLogMeta(),
|
|
483
|
-
},
|
|
484
|
-
"Cannot get versioned hashes. Block is unknown"
|
|
485
|
-
);
|
|
486
|
-
}
|
|
487
|
-
return this.state.versionedHashes;
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
getMissingBlobMeta(): BlobMeta[] {
|
|
491
|
-
if (!this.state.hasBlock) {
|
|
492
|
-
throw new BlockInputError(
|
|
493
|
-
{
|
|
494
|
-
code: BlockInputErrorCode.INCOMPLETE_DATA,
|
|
495
|
-
...this.getLogMeta(),
|
|
496
|
-
},
|
|
497
|
-
"Cannot get missing blobs. Block is unknown"
|
|
498
|
-
);
|
|
499
|
-
}
|
|
500
|
-
if (this.state.hasAllData) {
|
|
501
|
-
return [];
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
const blobMeta: BlobMeta[] = [];
|
|
505
|
-
const versionedHashes = this.state.versionedHashes;
|
|
506
|
-
for (let index = 0; index < versionedHashes.length; index++) {
|
|
507
|
-
if (!this.blobsCache.has(index)) {
|
|
508
|
-
blobMeta.push({
|
|
509
|
-
index,
|
|
510
|
-
blockRoot: fromHex(this.blockRootHex),
|
|
511
|
-
versionedHash: versionedHashes[index],
|
|
512
|
-
});
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
return blobMeta;
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
getAllBlobsWithSource(): BlobWithSource[] {
|
|
519
|
-
if (!this.state.hasAllData) {
|
|
520
|
-
throw new BlockInputError(
|
|
521
|
-
{
|
|
522
|
-
code: BlockInputErrorCode.INCOMPLETE_DATA,
|
|
523
|
-
...this.getLogMeta(),
|
|
524
|
-
},
|
|
525
|
-
"Cannot get all blobs. DA status is not complete"
|
|
526
|
-
);
|
|
527
|
-
}
|
|
528
|
-
return [...this.blobsCache.values()];
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
getBlobs(): deneb.BlobSidecars {
|
|
532
|
-
return this.getAllBlobsWithSource().map(({blobSidecar}) => blobSidecar);
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
getSerializedCacheKeys(): object[] {
|
|
536
|
-
const objects: object[] = [];
|
|
537
|
-
|
|
538
|
-
if (this.state.hasBlock) {
|
|
539
|
-
objects.push(this.state.block);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
for (const {blobSidecar} of this.blobsCache.values()) {
|
|
543
|
-
objects.push(blobSidecar);
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
return objects;
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
function blockAndBlobArePaired(block: SignedBeaconBlock<ForkBlobsDA>, blobSidecar: deneb.BlobSidecar): boolean {
|
|
551
|
-
const blockCommitment = block.message.body.blobKzgCommitments[blobSidecar.index];
|
|
552
|
-
if (!blockCommitment || !blobSidecar.kzgCommitment) {
|
|
553
|
-
return false;
|
|
554
|
-
}
|
|
555
|
-
return byteArrayEquals(blockCommitment, blobSidecar.kzgCommitment);
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
function assertBlockAndBlobArePaired(
|
|
559
|
-
blockRootHex: string,
|
|
560
|
-
block: SignedBeaconBlock<ForkBlobsDA>,
|
|
561
|
-
blobSidecar: deneb.BlobSidecar
|
|
562
|
-
): void {
|
|
563
|
-
if (!blockAndBlobArePaired(block, blobSidecar)) {
|
|
564
|
-
// TODO: (@matthewkeil) should this eject the bad blob instead? No way to tell if the blob or the block
|
|
565
|
-
// has the invalid commitment. Guessing it would be the blob though because we match via block
|
|
566
|
-
// hashTreeRoot and we do not take a hashTreeRoot of the BlobSidecar
|
|
567
|
-
throw new BlockInputError(
|
|
568
|
-
{
|
|
569
|
-
code: BlockInputErrorCode.MISMATCHED_KZG_COMMITMENT,
|
|
570
|
-
blockRoot: blockRootHex,
|
|
571
|
-
slot: block.message.slot,
|
|
572
|
-
sidecarIndex: blobSidecar.index,
|
|
573
|
-
},
|
|
574
|
-
"BlobSidecar commitment does not match block commitment"
|
|
575
|
-
);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
|
|
579
247
|
// Columns DA
|
|
580
248
|
|
|
581
249
|
export type ForkColumnsDA = ForkName.fulu;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {Slot} from "@lodestar/types";
|
|
2
2
|
import {LodestarError} from "@lodestar/utils";
|
|
3
3
|
import {PeerIdStr} from "../../../util/peerId.js";
|
|
4
|
-
import {BlockInputSource,
|
|
4
|
+
import {BlockInputSource, LogMetaColumns} from "./types.js";
|
|
5
5
|
|
|
6
6
|
export enum BlockInputErrorCode {
|
|
7
7
|
// Bad Arguments
|
|
@@ -42,7 +42,6 @@ export type BlockInputErrorType =
|
|
|
42
42
|
sidecarIndex: number;
|
|
43
43
|
commitmentIndex?: number;
|
|
44
44
|
}
|
|
45
|
-
| (LogMetaBlobs & {code: BlockInputErrorCode.INCOMPLETE_DATA})
|
|
46
45
|
| (LogMetaColumns & {code: BlockInputErrorCode.INCOMPLETE_DATA});
|
|
47
46
|
|
|
48
47
|
export class BlockInputError extends LodestarError<BlockInputErrorType> {}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import {ForkName} from "@lodestar/params";
|
|
2
|
-
import {ColumnIndex, DataColumnSidecar, RootHex, SignedBeaconBlock, Slot,
|
|
2
|
+
import {ColumnIndex, DataColumnSidecar, RootHex, SignedBeaconBlock, Slot, fulu} from "@lodestar/types";
|
|
3
3
|
import {VersionedHashes} from "../../../execution/index.js";
|
|
4
4
|
|
|
5
5
|
export enum DAType {
|
|
6
6
|
PreData = "pre-data",
|
|
7
|
-
Blobs = "blobs",
|
|
8
7
|
Columns = "columns",
|
|
9
8
|
NoData = "no-data",
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
export type DAData = null |
|
|
11
|
+
export type DAData = null | fulu.DataColumnSidecar[];
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Represents were input originated. Blocks and Data can come from different
|
|
@@ -37,11 +36,6 @@ export type LogMetaBasic = {
|
|
|
37
36
|
timeCreatedSec: number;
|
|
38
37
|
};
|
|
39
38
|
|
|
40
|
-
export type LogMetaBlobs = LogMetaBasic & {
|
|
41
|
-
expectedBlobs: number | string;
|
|
42
|
-
receivedBlobs: number;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
39
|
export type LogMetaColumns = LogMetaBasic & {
|
|
46
40
|
expectedColumns: number;
|
|
47
41
|
receivedColumns: number;
|
|
@@ -55,8 +49,6 @@ export type SourceMeta = {
|
|
|
55
49
|
|
|
56
50
|
export type BlockWithSource = SourceMeta & {block: SignedBeaconBlock; blockRootHex: RootHex};
|
|
57
51
|
|
|
58
|
-
export type BlobWithSource = SourceMeta & {blobSidecar: deneb.BlobSidecar};
|
|
59
|
-
|
|
60
52
|
export type ColumnWithSource = SourceMeta & {columnSidecar: fulu.DataColumnSidecar};
|
|
61
53
|
|
|
62
54
|
export type BlockHeaderMeta = {
|
|
@@ -82,20 +74,10 @@ export type AddBlock<F extends ForkName = ForkName> = SourceMeta & {
|
|
|
82
74
|
blockRootHex: string;
|
|
83
75
|
};
|
|
84
76
|
|
|
85
|
-
export type AddBlob = BlobWithSource & {
|
|
86
|
-
blockRootHex: RootHex;
|
|
87
|
-
};
|
|
88
|
-
|
|
89
77
|
export type AddColumn = ColumnWithSource & {
|
|
90
78
|
blockRootHex: RootHex;
|
|
91
79
|
};
|
|
92
80
|
|
|
93
|
-
export type BlobMeta = {
|
|
94
|
-
index: number;
|
|
95
|
-
blockRoot: Uint8Array;
|
|
96
|
-
versionedHash: Uint8Array;
|
|
97
|
-
};
|
|
98
|
-
|
|
99
81
|
export type MissingColumnMeta = {
|
|
100
82
|
missing: ColumnIndex[];
|
|
101
83
|
versionedHashes: VersionedHashes;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {BitArray} from "@chainsafe/ssz";
|
|
2
2
|
import {routes} from "@lodestar/api";
|
|
3
3
|
import {
|
|
4
|
-
AncestorStatus,
|
|
5
|
-
ExecutionStatus,
|
|
6
4
|
ForkChoiceError,
|
|
7
5
|
ForkChoiceErrorCode,
|
|
6
|
+
InvalidBlockCode,
|
|
8
7
|
NotReorgedReason,
|
|
8
|
+
ProtoBlock,
|
|
9
9
|
getFinalizedExecutionBlockHash,
|
|
10
10
|
getSafeExecutionBlockHash,
|
|
11
11
|
} from "@lodestar/fork-choice";
|
|
@@ -43,11 +43,13 @@ import {callInNextEventLoop} from "../../util/eventLoop.js";
|
|
|
43
43
|
import {isOptimisticBlock} from "../../util/forkChoice.js";
|
|
44
44
|
import {isQueueErrorAborted} from "../../util/queue/index.js";
|
|
45
45
|
import type {BeaconChain} from "../chain.js";
|
|
46
|
-
import {ChainEvent
|
|
46
|
+
import {ChainEvent} from "../emitter.js";
|
|
47
|
+
import {BlockError, BlockErrorCode} from "../errors/index.js";
|
|
47
48
|
import {ForkchoiceCaller} from "../forkChoice/index.js";
|
|
49
|
+
import {IncludedAttesters} from "../opPools/singleAttestationPool.js";
|
|
48
50
|
import {REPROCESS_MIN_TIME_TO_NEXT_SLOT_BPS} from "../reprocess.js";
|
|
49
51
|
import {toCheckpointHex} from "../stateCache/persistentCheckpointsCache.js";
|
|
50
|
-
import {
|
|
52
|
+
import {isBlockInputColumns} from "./blockInput/blockInput.js";
|
|
51
53
|
import {AttestationImportOpt, FullyVerifiedBlock, ImportBlockOpts} from "./types.js";
|
|
52
54
|
import {getCheckpointFromState} from "./utils/checkpoint.js";
|
|
53
55
|
|
|
@@ -94,8 +96,8 @@ export async function importBlock(
|
|
|
94
96
|
fullyVerifiedBlock: FullyVerifiedBlock,
|
|
95
97
|
opts: ImportBlockOpts
|
|
96
98
|
): Promise<void> {
|
|
97
|
-
const {blockInput, postState, parentBlockSlot, dataAvailabilityStatus, indexedAttestations} =
|
|
98
|
-
|
|
99
|
+
const {blockInput, postState, parentBlockSlot, executionStatus, dataAvailabilityStatus, indexedAttestations} =
|
|
100
|
+
fullyVerifiedBlock;
|
|
99
101
|
const block = blockInput.getBlock();
|
|
100
102
|
const source = blockInput.getBlockSource();
|
|
101
103
|
const {slot: blockSlot} = block.message;
|
|
@@ -131,35 +133,30 @@ export async function importBlock(
|
|
|
131
133
|
|
|
132
134
|
// Should compute checkpoint balances before forkchoice.onBlock
|
|
133
135
|
this.checkpointBalancesCache.processState(blockRootHex, postState);
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
136
|
+
const importDelayMs = this.clock.msFromSlot(blockSlot);
|
|
137
|
+
let blockSummary: ProtoBlock;
|
|
138
|
+
try {
|
|
139
|
+
blockSummary = this.forkChoice.onBlock(
|
|
140
|
+
block.message,
|
|
141
|
+
postState,
|
|
142
|
+
receiveDelayMs,
|
|
143
|
+
importDelayMs,
|
|
144
|
+
currentSlot,
|
|
145
|
+
executionStatus,
|
|
146
|
+
dataAvailabilityStatus
|
|
147
|
+
);
|
|
148
|
+
} catch (e) {
|
|
149
|
+
// The parent can be invalidated by a forkchoiceUpdated verdict after verifyBlocksSanityChecks passed
|
|
150
|
+
if (
|
|
151
|
+
e instanceof ForkChoiceError &&
|
|
152
|
+
e.type.code === ForkChoiceErrorCode.INVALID_BLOCK &&
|
|
153
|
+
e.type.err.code === InvalidBlockCode.PARENT_EXECUTION_INVALID
|
|
154
|
+
) {
|
|
155
|
+
throw new BlockError(block, {code: BlockErrorCode.PARENT_EXECUTION_INVALID, parentRoot: e.type.err.root});
|
|
148
156
|
}
|
|
149
|
-
|
|
157
|
+
throw e;
|
|
150
158
|
}
|
|
151
159
|
|
|
152
|
-
const importDelayMs = this.clock.msFromSlot(blockSlot);
|
|
153
|
-
const blockSummary = this.forkChoice.onBlock(
|
|
154
|
-
block.message,
|
|
155
|
-
postState,
|
|
156
|
-
receiveDelayMs,
|
|
157
|
-
importDelayMs,
|
|
158
|
-
currentSlot,
|
|
159
|
-
executionStatus,
|
|
160
|
-
dataAvailabilityStatus
|
|
161
|
-
);
|
|
162
|
-
|
|
163
160
|
// This adds the state necessary to process the next block
|
|
164
161
|
// Some block event handlers require state being in state cache so need to do this before emitting EventType.block
|
|
165
162
|
this.regen.processState(blockRootHex, postState);
|
|
@@ -176,6 +173,9 @@ export async function importBlock(
|
|
|
176
173
|
// Only process attestations of blocks with relevant attestations for the fork-choice:
|
|
177
174
|
// If current epoch is N, and block is epoch X, block may include attestations for epoch X or X - 1.
|
|
178
175
|
// The latest block that is useful is at epoch N - 1 which may include attestations for epoch N - 1 or N - 2.
|
|
176
|
+
// the pool is empty outside the slots before a local block proposal, nothing to prune then
|
|
177
|
+
const pruneSingleAttestations = fork >= ForkSeq.electra && !this.singleAttestationPool.isEmpty();
|
|
178
|
+
const includedAttesters: IncludedAttesters[] = [];
|
|
179
179
|
if (importsBlockAttestations(opts, blockEpoch, currentEpoch)) {
|
|
180
180
|
const attestations = block.message.body.attestations;
|
|
181
181
|
const rootCache = new RootCache(postState);
|
|
@@ -190,6 +190,14 @@ export async function importBlock(
|
|
|
190
190
|
const {target, beaconBlockRoot} = attestation.data;
|
|
191
191
|
|
|
192
192
|
const attDataRoot = toRootHex(ssz.phase0.AttestationData.hashTreeRoot(indexedAttestation.data));
|
|
193
|
+
// the block includes these attesters even if fork choice below rejects the vote
|
|
194
|
+
if (pruneSingleAttestations) {
|
|
195
|
+
includedAttesters.push({
|
|
196
|
+
slot: attestation.data.slot,
|
|
197
|
+
attDataRootHex: attDataRoot,
|
|
198
|
+
attestingIndices: indexedAttestation.attestingIndices,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
193
201
|
addAttestation.call(
|
|
194
202
|
this,
|
|
195
203
|
postState,
|
|
@@ -321,19 +329,19 @@ export async function importBlock(
|
|
|
321
329
|
});
|
|
322
330
|
}
|
|
323
331
|
|
|
332
|
+
// only a block that becomes head prunes, not a side-branch import
|
|
333
|
+
if (pruneSingleAttestations && newHead.blockRoot === blockRootHex) {
|
|
334
|
+
callInNextEventLoop(() => {
|
|
335
|
+
const deleted = this.singleAttestationPool.onHead(blockRootHex, newHead.parentRoot, includedAttesters);
|
|
336
|
+
this.metrics?.opPool.singleAttestationPool.deletedByBlock.inc(deleted);
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
|
|
324
340
|
if (newHead.blockRoot !== oldHead.blockRoot) {
|
|
325
|
-
|
|
326
|
-
this.regen.updateHeadState(newHead, postState);
|
|
341
|
+
this.onHeadChanged(oldHead, newHead, postState);
|
|
327
342
|
|
|
328
343
|
const delaySec = this.clock.secFromSlot(newHead.slot);
|
|
329
|
-
this.logger.verbose("New chain head", {
|
|
330
|
-
slot: newHead.slot,
|
|
331
|
-
root: newHead.blockRoot,
|
|
332
|
-
delaySec,
|
|
333
|
-
});
|
|
334
|
-
|
|
335
344
|
if (this.metrics) {
|
|
336
|
-
this.metrics.headSlot.set(newHead.slot);
|
|
337
345
|
// Only track "recent" blocks. Otherwise sync can distort this metrics heavily.
|
|
338
346
|
// We want to track recent blocks coming from gossip, unknown block sync, and API.
|
|
339
347
|
const headFork = this.config.getForkName(newHead.slot);
|
|
@@ -346,32 +354,6 @@ export async function importBlock(
|
|
|
346
354
|
}
|
|
347
355
|
}
|
|
348
356
|
|
|
349
|
-
this.onNewHead(newHead);
|
|
350
|
-
|
|
351
|
-
this.metrics?.forkChoice.changedHead.inc();
|
|
352
|
-
|
|
353
|
-
const ancestorResult = this.forkChoice.getCommonAncestorDepth(oldHead, newHead);
|
|
354
|
-
if (ancestorResult.code === AncestorStatus.CommonAncestor) {
|
|
355
|
-
// CommonAncestor = chain reorg, old head and new head not direct descendants
|
|
356
|
-
|
|
357
|
-
const forkChoiceReorgEventData: ReorgEventData = {
|
|
358
|
-
depth: ancestorResult.depth,
|
|
359
|
-
epoch: computeEpochAtSlot(newHead.slot),
|
|
360
|
-
slot: newHead.slot,
|
|
361
|
-
newHeadBlock: newHead.blockRoot,
|
|
362
|
-
oldHeadBlock: oldHead.blockRoot,
|
|
363
|
-
newHeadState: newHead.stateRoot,
|
|
364
|
-
oldHeadState: oldHead.stateRoot,
|
|
365
|
-
executionOptimistic: isOptimisticBlock(newHead),
|
|
366
|
-
};
|
|
367
|
-
|
|
368
|
-
this.emitter.emit(routes.events.EventType.chainReorg, forkChoiceReorgEventData);
|
|
369
|
-
this.logger.verbose("Chain reorg", forkChoiceReorgEventData);
|
|
370
|
-
|
|
371
|
-
this.metrics?.forkChoice.reorg.inc();
|
|
372
|
-
this.metrics?.forkChoice.reorgDistance.observe(ancestorResult.depth);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
357
|
// Lightclient server support (only after altair)
|
|
376
358
|
// - Persist state witness
|
|
377
359
|
// - Use block's syncAggregate
|
|
@@ -470,7 +452,13 @@ export async function importBlock(
|
|
|
470
452
|
const finalizedBlockHash = getFinalizedExecutionBlockHash(this.forkChoice);
|
|
471
453
|
if (headBlockHash !== ZERO_HASH_HEX) {
|
|
472
454
|
this.executionEngine
|
|
473
|
-
.notifyForkchoiceUpdate(
|
|
455
|
+
.notifyForkchoiceUpdate(
|
|
456
|
+
this.config.getForkName(fcuHead.slot),
|
|
457
|
+
fcuHead.blockRoot,
|
|
458
|
+
headBlockHash,
|
|
459
|
+
safeBlockHash,
|
|
460
|
+
finalizedBlockHash
|
|
461
|
+
)
|
|
474
462
|
.catch((e) => {
|
|
475
463
|
if (!isErrorAborted(e) && !isQueueErrorAborted(e)) {
|
|
476
464
|
this.logger.error("Error pushing notifyForkchoiceUpdate()", {headBlockHash, finalizedBlockHash}, e);
|
|
@@ -592,10 +580,6 @@ export async function importBlock(
|
|
|
592
580
|
for (const {source} of blockInput.getSampledColumnsWithSource()) {
|
|
593
581
|
this.metrics?.dataColumns.bySource.inc({source});
|
|
594
582
|
}
|
|
595
|
-
} else if (isBlockInputBlobs(blockInput)) {
|
|
596
|
-
for (const {source} of blockInput.getAllBlobsWithSource()) {
|
|
597
|
-
this.metrics?.importBlock.blobsBySource.inc({blobsSource: source});
|
|
598
|
-
}
|
|
599
583
|
}
|
|
600
584
|
|
|
601
585
|
const reprocessGuardSec =
|