@lodestar/beacon-node 1.51.0-dev.ec493d509d → 1.51.0-dev.efd5633468
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 +42 -26
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/GetBlobsTracker.d.ts +13 -2
- package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
- package/lib/chain/GetBlobsTracker.js +69 -35
- package/lib/chain/GetBlobsTracker.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +4 -4
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +7 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/archiveStore/utils/pruneHistory.d.ts +9 -2
- package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/pruneHistory.js +12 -4
- package/lib/chain/archiveStore/utils/pruneHistory.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 +4 -4
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +12 -9
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +24 -19
- 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 +18 -7
- 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 +3 -3
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js +11 -6
- 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/aggregateAndProof.js +1 -1
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attestation.js +1 -1
- package/lib/chain/validation/attestation.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/validation/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/syncCommittee.js +16 -10
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +11 -0
- package/lib/chain/validation/syncCommitteeContributionAndProof.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/beacon.d.ts +7 -0
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +32 -0
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/dataColumnStore.d.ts +1 -1
- package/lib/db/dataColumnStore.d.ts.map +1 -1
- package/lib/db/dataColumnStore.js +1 -4
- package/lib/db/dataColumnStore.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/interface.d.ts +1 -0
- package/lib/db/interface.d.ts.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/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
- package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
- package/lib/db/repositories/dataColumnSidecarArchive.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/beaconBlocksByHead.js +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByHead.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 +47 -21
- 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 +15 -0
- package/lib/sync/sync.d.ts.map +1 -1
- package/lib/sync/sync.js +103 -25
- 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 +47 -30
- package/src/chain/GetBlobsTracker.ts +82 -52
- package/src/chain/archiveStore/archiveStore.ts +6 -4
- package/src/chain/archiveStore/utils/archiveBlocks.ts +12 -4
- package/src/chain/archiveStore/utils/pruneHistory.ts +16 -6
- 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 +11 -4
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
- package/src/chain/blocks/types.ts +5 -31
- package/src/chain/blocks/verifyBlock.ts +31 -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 +14 -6
- 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/aggregateAndProof.ts +1 -1
- package/src/chain/validation/attestation.ts +1 -1
- package/src/chain/validation/executionPayloadBid.ts +14 -13
- package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
- package/src/chain/validation/syncCommittee.ts +31 -15
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +13 -0
- package/src/chain/validatorMonitor.ts +0 -6
- package/src/db/beacon.ts +39 -0
- package/src/db/dataColumnStore.ts +2 -4
- package/src/db/flatFileStore/flatFileStore.ts +7 -7
- package/src/db/flatFileStore/slotIndex.ts +4 -3
- package/src/db/interface.ts +2 -0
- package/src/db/repositories/blobSidecars.ts +0 -1
- package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
- 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/beaconBlocksByHead.ts +1 -1
- 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 +58 -22
- 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 +108 -26
- 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
|
@@ -21,7 +21,6 @@ import {
|
|
|
21
21
|
Slot,
|
|
22
22
|
SubnetID,
|
|
23
23
|
UintNum64,
|
|
24
|
-
deneb,
|
|
25
24
|
fulu,
|
|
26
25
|
gloas,
|
|
27
26
|
isGloasBeaconBlock,
|
|
@@ -39,13 +38,11 @@ import {
|
|
|
39
38
|
} from "../../chain/blocks/blockInput/index.js";
|
|
40
39
|
import {PayloadError, PayloadErrorCode} from "../../chain/blocks/importExecutionPayload.js";
|
|
41
40
|
import {PayloadEnvelopeInput, PayloadEnvelopeInputSource} from "../../chain/blocks/payloadEnvelopeInput/index.js";
|
|
42
|
-
import {
|
|
41
|
+
import {InclusionListSource} from "../../chain/blocks/types.js";
|
|
43
42
|
import {ChainEvent} from "../../chain/emitter.js";
|
|
44
43
|
import {
|
|
45
44
|
AttestationError,
|
|
46
45
|
AttestationErrorCode,
|
|
47
|
-
BlobSidecarErrorCode,
|
|
48
|
-
BlobSidecarGossipError,
|
|
49
46
|
BlockError,
|
|
50
47
|
BlockErrorCode,
|
|
51
48
|
BlockGossipError,
|
|
@@ -60,13 +57,15 @@ import {
|
|
|
60
57
|
SyncCommitteeError,
|
|
61
58
|
} from "../../chain/errors/index.js";
|
|
62
59
|
import {IBeaconChain} from "../../chain/interface.js";
|
|
63
|
-
import {validateGossipBlobSidecar} from "../../chain/validation/blobSidecar.js";
|
|
64
60
|
import {
|
|
65
61
|
validateGossipFuluDataColumnSidecar,
|
|
66
62
|
validateGossipGloasDataColumnSidecar,
|
|
67
63
|
} from "../../chain/validation/dataColumnSidecar.js";
|
|
68
64
|
import {validateGossipExecutionPayloadBid} from "../../chain/validation/executionPayloadBid.js";
|
|
69
|
-
import {
|
|
65
|
+
import {
|
|
66
|
+
validateGossipExecutionPayloadEnvelope,
|
|
67
|
+
validateGossipExecutionPayloadEnvelopeSerialized,
|
|
68
|
+
} from "../../chain/validation/executionPayloadEnvelope.js";
|
|
70
69
|
import {InclusionListValidationResult, validateGossipInclusionList} from "../../chain/validation/inclusionList.js";
|
|
71
70
|
import {
|
|
72
71
|
AggregateAndProofValidationResult,
|
|
@@ -89,7 +88,6 @@ import {validateGossipPayloadAttestationMessage} from "../../chain/validation/pa
|
|
|
89
88
|
import {validateGossipProposerPreferences} from "../../chain/validation/proposerPreferences.js";
|
|
90
89
|
import {OpSource} from "../../chain/validatorMonitor.js";
|
|
91
90
|
import {Metrics} from "../../metrics/index.js";
|
|
92
|
-
import {kzgCommitmentToVersionedHash} from "../../util/blobs.js";
|
|
93
91
|
import {getBlobKzgCommitments, getDataColumnSidecarSlot} from "../../util/dataColumns.js";
|
|
94
92
|
import {callInNextEventLoop} from "../../util/eventLoop.js";
|
|
95
93
|
import {INetworkCore} from "../core/index.js";
|
|
@@ -322,90 +320,6 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
322
320
|
}
|
|
323
321
|
}
|
|
324
322
|
|
|
325
|
-
async function validateBeaconBlob(
|
|
326
|
-
blobSidecar: deneb.BlobSidecar,
|
|
327
|
-
subnet: SubnetID,
|
|
328
|
-
peerIdStr: string,
|
|
329
|
-
seenTimestampSec: number
|
|
330
|
-
): Promise<BlockInput> {
|
|
331
|
-
const blobBlockHeader = blobSidecar.signedBlockHeader.message;
|
|
332
|
-
const slot = blobBlockHeader.slot;
|
|
333
|
-
const fork = config.getForkName(slot);
|
|
334
|
-
const blockRootHex = toRootHex(ssz.phase0.BeaconBlockHeader.hashTreeRoot(blobBlockHeader));
|
|
335
|
-
|
|
336
|
-
const delaySec = chain.clock.secFromSlot(slot, seenTimestampSec);
|
|
337
|
-
const recvToValLatency = Date.now() / 1000 - seenTimestampSec;
|
|
338
|
-
|
|
339
|
-
try {
|
|
340
|
-
await validateGossipBlobSidecar(fork, chain, blobSidecar, subnet);
|
|
341
|
-
const blockInput = chain.seenBlockInputCache.getByBlob({
|
|
342
|
-
blockRootHex,
|
|
343
|
-
blobSidecar,
|
|
344
|
-
source: BlockInputSource.gossip,
|
|
345
|
-
seenTimestampSec,
|
|
346
|
-
peerIdStr,
|
|
347
|
-
});
|
|
348
|
-
const recvToValidation = Date.now() / 1000 - seenTimestampSec;
|
|
349
|
-
const validationTime = recvToValidation - recvToValLatency;
|
|
350
|
-
|
|
351
|
-
metrics?.gossipBlob.recvToValidation.observe(recvToValidation);
|
|
352
|
-
metrics?.gossipBlob.validationTime.observe(validationTime);
|
|
353
|
-
|
|
354
|
-
if (chain.emitter.listenerCount(routes.events.EventType.blobSidecar)) {
|
|
355
|
-
let versionedHash: Uint8Array;
|
|
356
|
-
if (blockInput.hasBlock()) {
|
|
357
|
-
// if block hasn't arrived yet then this will throw and need to calculate the versionedHash as a 1-off
|
|
358
|
-
versionedHash = blockInput.getVersionedHashes()[blobSidecar.index];
|
|
359
|
-
} else {
|
|
360
|
-
versionedHash = kzgCommitmentToVersionedHash(blobSidecar.kzgCommitment);
|
|
361
|
-
}
|
|
362
|
-
chain.emitter.emit(routes.events.EventType.blobSidecar, {
|
|
363
|
-
blockRoot: blockRootHex,
|
|
364
|
-
slot,
|
|
365
|
-
index: blobSidecar.index,
|
|
366
|
-
kzgCommitment: toHex(blobSidecar.kzgCommitment),
|
|
367
|
-
versionedHash: toHex(versionedHash),
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
logger.debug("Received gossip blob", {
|
|
372
|
-
...blockInput.getLogMeta(),
|
|
373
|
-
currentSlot: chain.clock.currentSlot,
|
|
374
|
-
peerId: peerIdStr,
|
|
375
|
-
delaySec,
|
|
376
|
-
subnet,
|
|
377
|
-
recvToValLatency,
|
|
378
|
-
recvToValidation,
|
|
379
|
-
validationTime,
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
return blockInput;
|
|
383
|
-
} catch (e) {
|
|
384
|
-
if (e instanceof BlobSidecarGossipError) {
|
|
385
|
-
// Don't trigger this yet if full block and blobs haven't arrived yet
|
|
386
|
-
if (e.type.code === BlobSidecarErrorCode.PARENT_UNKNOWN) {
|
|
387
|
-
logger.debug("Gossip blob has error", {slot, root: blockRootHex, code: e.type.code});
|
|
388
|
-
// no need to trigger `unknownBlockParent` event here, as we already did it in `validateBeaconBlock()`
|
|
389
|
-
//
|
|
390
|
-
// TODO(fulu): is this note above correct? Could have random blob that we see that could trigger
|
|
391
|
-
// unknownBlockSync. And duplicate addition of a block will be deduplicated by the
|
|
392
|
-
// BlockInputSync event handler. Check this!!
|
|
393
|
-
// events.emit(NetworkEvent.unknownBlockParent, {blockInput, peer: peerIdStr});
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
if (e.action === GossipAction.REJECT) {
|
|
397
|
-
chain.persistInvalidSszValue(
|
|
398
|
-
ssz.deneb.BlobSidecar,
|
|
399
|
-
blobSidecar,
|
|
400
|
-
`gossip_reject_slot_${slot}_index_${blobSidecar.index}`
|
|
401
|
-
);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
throw e;
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
|
|
409
323
|
async function validateBeaconDataColumn(
|
|
410
324
|
dataColumnSidecar: fulu.DataColumnSidecar,
|
|
411
325
|
_dataColumnBytes: Uint8Array,
|
|
@@ -676,8 +590,6 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
676
590
|
ignoreIfKnown: true,
|
|
677
591
|
// proposer signature already checked in validateBeaconBlock()
|
|
678
592
|
validProposerSignature: true,
|
|
679
|
-
// blobSidecars already checked in validateGossipBlobSidecars()
|
|
680
|
-
validBlobSidecars: BlobSidecarValidation.Individual,
|
|
681
593
|
// It's critical to keep a good number of mesh peers.
|
|
682
594
|
// To do that, the Gossip Job Wait Time should be consistently <3s to avoid the behavior penalties in gossip
|
|
683
595
|
// Gossip Job Wait Time depends on the BLS Job Wait Time
|
|
@@ -705,10 +617,8 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
705
617
|
|
|
706
618
|
// Immediately attempt fetch of data columns from execution engine as the bid contains kzg commitments
|
|
707
619
|
// which is all the information we need so there is no reason to delay until execution payload arrives
|
|
708
|
-
//
|
|
709
|
-
//
|
|
710
|
-
// Columns fetched here feed payloadInput.addColumn, which resolves waitForAllData for any
|
|
711
|
-
// in-flight importExecutionPayload. No processExecutionPayload trigger needed from this path.
|
|
620
|
+
// Columns fetched here feed payloadInput.addColumn, which resolves the waitForAllData of a
|
|
621
|
+
// pending payload import. No processExecutionPayload trigger needed from this path.
|
|
712
622
|
chain.getBlobsTracker.triggerGetBlobs(payloadInput);
|
|
713
623
|
}
|
|
714
624
|
})
|
|
@@ -718,11 +628,10 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
718
628
|
|
|
719
629
|
if (e instanceof BlockError) {
|
|
720
630
|
switch (e.type.code) {
|
|
721
|
-
case BlockErrorCode.DATA_UNAVAILABLE:
|
|
722
|
-
//
|
|
631
|
+
case BlockErrorCode.DATA_UNAVAILABLE:
|
|
632
|
+
// Data did not arrive in time, BlockInputSync keeps pulling it and retries the import
|
|
723
633
|
logLevel = LogLevel.debug;
|
|
724
634
|
break;
|
|
725
|
-
}
|
|
726
635
|
// ALREADY_KNOWN should not happen with ignoreIfKnown=true above
|
|
727
636
|
// PARENT_BLOCK_UNKNOWN should not happen, we handled this in validateBeaconBlock() function above
|
|
728
637
|
case BlockErrorCode.ALREADY_KNOWN:
|
|
@@ -816,57 +725,6 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
816
725
|
}
|
|
817
726
|
},
|
|
818
727
|
|
|
819
|
-
[GossipType.blob_sidecar]: async ({
|
|
820
|
-
gossipData,
|
|
821
|
-
topic,
|
|
822
|
-
peerIdStr,
|
|
823
|
-
seenTimestampSec,
|
|
824
|
-
}: GossipHandlerParamGeneric<GossipType.blob_sidecar>) => {
|
|
825
|
-
const {serializedData} = gossipData;
|
|
826
|
-
const blobSidecar = sszDeserialize(topic, serializedData);
|
|
827
|
-
const blobSlot = blobSidecar.signedBlockHeader.message.slot;
|
|
828
|
-
const index = blobSidecar.index;
|
|
829
|
-
|
|
830
|
-
if (config.getForkSeq(blobSlot) < ForkSeq.deneb) {
|
|
831
|
-
throw new GossipActionError(GossipAction.REJECT, {code: "PRE_DENEB_BLOCK"});
|
|
832
|
-
}
|
|
833
|
-
const blockInput = await validateBeaconBlob(blobSidecar, topic.subnet, peerIdStr, seenTimestampSec);
|
|
834
|
-
// Handler - deferred to next event loop so the validation result propagates first
|
|
835
|
-
callInNextEventLoop(() => {
|
|
836
|
-
try {
|
|
837
|
-
chain.serializedCache.set(blobSidecar, serializedData);
|
|
838
|
-
if (!blockInput.hasBlockAndAllData()) {
|
|
839
|
-
const cutoffTimeMs = getCutoffTimeMs(chain, blobSlot, BLOCK_AVAILABILITY_CUTOFF_MS);
|
|
840
|
-
chain.logger.debug("Received gossip blob, waiting for full data availability", {
|
|
841
|
-
msToWait: cutoffTimeMs,
|
|
842
|
-
blobIndex: index,
|
|
843
|
-
...blockInput.getLogMeta(),
|
|
844
|
-
});
|
|
845
|
-
blockInput.waitForAllData(cutoffTimeMs).catch((_e) => {
|
|
846
|
-
chain.logger.debug(
|
|
847
|
-
"Waited for data after receiving gossip blob. Cut-off reached so attempting to fetch remainder of BlockInput",
|
|
848
|
-
{
|
|
849
|
-
blobIndex: index,
|
|
850
|
-
...blockInput.getLogMeta(),
|
|
851
|
-
}
|
|
852
|
-
);
|
|
853
|
-
chain.emitter.emit(ChainEvent.incompleteBlockInput, {
|
|
854
|
-
blockInput,
|
|
855
|
-
peer: peerIdStr,
|
|
856
|
-
source: BlockInputSource.gossip,
|
|
857
|
-
});
|
|
858
|
-
});
|
|
859
|
-
}
|
|
860
|
-
} catch (e) {
|
|
861
|
-
logger.debug(
|
|
862
|
-
"Error handling gossip blob",
|
|
863
|
-
{slot: blobSlot, root: blockInput.blockRootHex, index},
|
|
864
|
-
e as Error
|
|
865
|
-
);
|
|
866
|
-
}
|
|
867
|
-
});
|
|
868
|
-
},
|
|
869
|
-
|
|
870
728
|
[GossipType.data_column_sidecar]: async ({
|
|
871
729
|
gossipData,
|
|
872
730
|
topic,
|
|
@@ -930,7 +788,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
930
788
|
}
|
|
931
789
|
|
|
932
790
|
// NOTE: we do NOT call chain.processExecutionPayload here. That is triggered only by
|
|
933
|
-
// envelope arrival (gossip or API).
|
|
791
|
+
// envelope arrival (gossip or API). A pending payload import is awaiting
|
|
934
792
|
// payloadInput.waitForAllData(); addColumn above will resolve it once hasAllData flips.
|
|
935
793
|
|
|
936
794
|
scheduleIncompletePayloadEnvelope(payloadInput, peerIdStr);
|
|
@@ -1279,6 +1137,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
1279
1137
|
seenTimestampSec,
|
|
1280
1138
|
}: GossipHandlerParamGeneric<GossipType.execution_payload>) => {
|
|
1281
1139
|
const {serializedData} = gossipData;
|
|
1140
|
+
validateGossipExecutionPayloadEnvelopeSerialized(chain, serializedData);
|
|
1282
1141
|
const signedEnvelope = sszDeserialize(topic, serializedData);
|
|
1283
1142
|
const envelope = signedEnvelope.message;
|
|
1284
1143
|
|
|
@@ -1331,18 +1190,22 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
1331
1190
|
});
|
|
1332
1191
|
}
|
|
1333
1192
|
|
|
1193
|
+
// Add the envelope in the same tick as validation, otherwise a by-root download that completes
|
|
1194
|
+
// before the next event loop sees no envelope, validates it again and adds it first
|
|
1195
|
+
if (!payloadInput.hasPayloadEnvelope()) {
|
|
1196
|
+
chain.serializedCache.set(signedEnvelope, serializedData);
|
|
1197
|
+
|
|
1198
|
+
payloadInput.addPayloadEnvelope({
|
|
1199
|
+
envelope: signedEnvelope,
|
|
1200
|
+
source: PayloadEnvelopeInputSource.gossip,
|
|
1201
|
+
seenTimestampSec,
|
|
1202
|
+
peerIdStr,
|
|
1203
|
+
});
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1334
1206
|
// Handler - deferred to next event loop so the validation result propagates first
|
|
1335
1207
|
callInNextEventLoop(() => {
|
|
1336
1208
|
try {
|
|
1337
|
-
chain.serializedCache.set(signedEnvelope, serializedData);
|
|
1338
|
-
|
|
1339
|
-
payloadInput.addPayloadEnvelope({
|
|
1340
|
-
envelope: signedEnvelope,
|
|
1341
|
-
source: PayloadEnvelopeInputSource.gossip,
|
|
1342
|
-
seenTimestampSec,
|
|
1343
|
-
peerIdStr,
|
|
1344
|
-
});
|
|
1345
|
-
|
|
1346
1209
|
scheduleIncompletePayloadEnvelope(payloadInput, peerIdStr);
|
|
1347
1210
|
|
|
1348
1211
|
chain.emitter.emit(routes.events.EventType.executionPayloadGossip, {
|
|
@@ -1352,12 +1215,18 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
1352
1215
|
blockRoot: blockRootHex,
|
|
1353
1216
|
});
|
|
1354
1217
|
|
|
1355
|
-
|
|
1218
|
+
// Signature is verified above only for this envelope, one added by another source is verified at import
|
|
1219
|
+
const validSignature = payloadInput.getPayloadEnvelope() === signedEnvelope;
|
|
1220
|
+
chain.processExecutionPayload(payloadInput, {validSignature}).catch((e) => {
|
|
1356
1221
|
// Adjust verbosity based on error type
|
|
1357
1222
|
let logLevel: LogLevel;
|
|
1358
1223
|
|
|
1359
1224
|
if (e instanceof PayloadError) {
|
|
1360
1225
|
switch (e.type.code) {
|
|
1226
|
+
case PayloadErrorCode.DATA_UNAVAILABLE:
|
|
1227
|
+
// Columns did not arrive in time, BlockInputSync keeps pulling them and retries the import
|
|
1228
|
+
logLevel = LogLevel.debug;
|
|
1229
|
+
break;
|
|
1361
1230
|
// BLOCK_NOT_IN_FORK_CHOICE should not happen, validateGossipExecutionPayloadEnvelope above
|
|
1362
1231
|
// already verified the block is in fork choice
|
|
1363
1232
|
case PayloadErrorCode.BLOCK_NOT_IN_FORK_CHOICE:
|
|
@@ -1366,11 +1235,17 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
1366
1235
|
// Errors might indicate an issue with our node or the connected EL client
|
|
1367
1236
|
logLevel = LogLevel.error;
|
|
1368
1237
|
break;
|
|
1369
|
-
|
|
1238
|
+
case PayloadErrorCode.BLOCK_EXECUTION_INVALID:
|
|
1239
|
+
logLevel = LogLevel.warn;
|
|
1240
|
+
break;
|
|
1241
|
+
// INVALID_SIGNATURE only happens for an envelope added by another source
|
|
1370
1242
|
case PayloadErrorCode.INVALID_SIGNATURE:
|
|
1371
1243
|
case PayloadErrorCode.ENVELOPE_VERIFICATION_ERROR:
|
|
1372
1244
|
case PayloadErrorCode.EXECUTION_ENGINE_INVALID:
|
|
1373
|
-
|
|
1245
|
+
// Penalize only when the stored envelope is the one this peer sent, not one added by another source
|
|
1246
|
+
if (validSignature) {
|
|
1247
|
+
core.reportPeer(peerIdStr, PeerAction.LowToleranceError, "BadGossipPayload");
|
|
1248
|
+
}
|
|
1374
1249
|
// The builder may have signed another envelope that is valid, keeping this one would make
|
|
1375
1250
|
// by-root and range sync reuse it and never import the payload
|
|
1376
1251
|
chain.seenPayloadEnvelopeInputCache.removeInvalid(payloadInput);
|
|
@@ -1645,6 +1520,32 @@ function getBatchHandlers(modules: ValidatorFnsModules, options: GossipHandlerOp
|
|
|
1645
1520
|
logger.debug("Error adding gossip unaggregated attestation to pool", {subnet}, e as Error);
|
|
1646
1521
|
}
|
|
1647
1522
|
|
|
1523
|
+
// Collected only for vote slots that an upcoming block of a connected validator can include
|
|
1524
|
+
if (isForkPostElectra(fork) && chain.proposerTracker.shouldCollect(indexedAttestation.data.slot)) {
|
|
1525
|
+
try {
|
|
1526
|
+
const insertOutcome = chain.singleAttestationPool.add(
|
|
1527
|
+
attestation as SingleAttestation<ForkPostElectra>,
|
|
1528
|
+
attDataRootHex,
|
|
1529
|
+
validatorCommitteeIndex,
|
|
1530
|
+
committeeSize
|
|
1531
|
+
);
|
|
1532
|
+
metrics?.opPool.singleAttestationPool.gossipInsertOutcome.inc({insertOutcome});
|
|
1533
|
+
} catch (e) {
|
|
1534
|
+
logger.debug(
|
|
1535
|
+
"Error adding gossip single attestation to pool",
|
|
1536
|
+
{
|
|
1537
|
+
slot: indexedAttestation.data.slot,
|
|
1538
|
+
committeeIndex,
|
|
1539
|
+
validatorCommitteeIndex,
|
|
1540
|
+
validatorIndex: (attestation as SingleAttestation<ForkPostElectra>).attesterIndex,
|
|
1541
|
+
subnet,
|
|
1542
|
+
attDataRoot: attDataRootHex,
|
|
1543
|
+
},
|
|
1544
|
+
e as Error
|
|
1545
|
+
);
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1648
1549
|
// Separate boundary: a pool insertion error above must not skip the fork-choice vote
|
|
1649
1550
|
if (!options.dontSendGossipAttestationsToForkchoice) {
|
|
1650
1551
|
try {
|
|
@@ -25,12 +25,6 @@ const linearGossipQueueOpts: {
|
|
|
25
25
|
} = {
|
|
26
26
|
// validation gossip block asap
|
|
27
27
|
[GossipType.beacon_block]: {maxLength: 1024, type: QueueType.FIFO, dropOpts: {type: DropType.count, count: 1}},
|
|
28
|
-
// gossip length for blob is beacon block length * max blobs per block = 4096
|
|
29
|
-
[GossipType.blob_sidecar]: {
|
|
30
|
-
maxLength: 4096,
|
|
31
|
-
type: QueueType.FIFO,
|
|
32
|
-
dropOpts: {type: DropType.count, count: 1},
|
|
33
|
-
},
|
|
34
28
|
[GossipType.data_column_sidecar]: {
|
|
35
29
|
maxLength: 4096,
|
|
36
30
|
type: QueueType.FIFO,
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
AttestationError,
|
|
6
6
|
AttestationErrorCode,
|
|
7
7
|
AttesterSlashingErrorCode,
|
|
8
|
-
BlobSidecarErrorCode,
|
|
9
8
|
BlockErrorCode,
|
|
10
9
|
BlsToExecutionChangeErrorCode,
|
|
11
10
|
DataColumnSidecarErrorCode,
|
|
@@ -55,10 +54,6 @@ const gossipRejectPeerAction: Record<GossipType, RejectPeerActionRule> = {
|
|
|
55
54
|
default: PeerAction.LowToleranceError,
|
|
56
55
|
byCode: {[BlockErrorCode.PROPOSAL_SIGNATURE_INVALID]: PeerAction.Fatal},
|
|
57
56
|
},
|
|
58
|
-
[GossipType.blob_sidecar]: {
|
|
59
|
-
default: PeerAction.LowToleranceError,
|
|
60
|
-
byCode: {[BlobSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID]: PeerAction.Fatal},
|
|
61
|
-
},
|
|
62
57
|
[GossipType.data_column_sidecar]: {
|
|
63
58
|
default: PeerAction.LowToleranceError,
|
|
64
59
|
byCode: {[DataColumnSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID]: PeerAction.Fatal},
|
|
@@ -125,7 +125,6 @@ type WorkOpts = {
|
|
|
125
125
|
const executeGossipWorkOrderObj: Record<GossipType, WorkOpts> = {
|
|
126
126
|
[GossipType.beacon_block]: {bypassQueue: true},
|
|
127
127
|
[GossipType.execution_payload]: {bypassQueue: true},
|
|
128
|
-
[GossipType.blob_sidecar]: {bypassQueue: true},
|
|
129
128
|
[GossipType.data_column_sidecar]: {bypassQueue: true},
|
|
130
129
|
[GossipType.beacon_aggregate_and_proof]: {},
|
|
131
130
|
[GossipType.voluntary_exit]: {},
|
|
@@ -244,6 +243,12 @@ type SearchUnknownRootTarget =
|
|
|
244
243
|
* Such that enough work is processed to fill either one of the queue.
|
|
245
244
|
*/
|
|
246
245
|
export class NetworkProcessor {
|
|
246
|
+
private stopped = false;
|
|
247
|
+
/**
|
|
248
|
+
* Replaced by dropAllJobs(). Loops that yield while re-queueing awaiting messages compare it after each yield
|
|
249
|
+
* and stop, so no message is queued after a drop.
|
|
250
|
+
*/
|
|
251
|
+
private jobGeneration = Symbol();
|
|
247
252
|
private readonly chain: IBeaconChain;
|
|
248
253
|
private readonly core: INetworkCore;
|
|
249
254
|
private readonly events: NetworkEventBus;
|
|
@@ -335,16 +340,27 @@ export class NetworkProcessor {
|
|
|
335
340
|
}
|
|
336
341
|
|
|
337
342
|
async stop(): Promise<void> {
|
|
343
|
+
if (this.stopped) return;
|
|
344
|
+
this.stopped = true;
|
|
338
345
|
this.events.off(NetworkEvent.pendingGossipsubMessage, this.onPendingGossipsubMessage);
|
|
339
346
|
this.chain.emitter.off(routes.events.EventType.block, this.onBlockProcessed);
|
|
340
347
|
this.chain.emitter.off(routes.events.EventType.executionPayload, this.onPayloadEnvelopeProcessed);
|
|
341
|
-
this.chain.
|
|
348
|
+
this.chain.clock.off(ClockEvent.slot, this.onClockSlot);
|
|
349
|
+
this.dropAllJobs();
|
|
342
350
|
}
|
|
343
351
|
|
|
344
352
|
dropAllJobs(): void {
|
|
353
|
+
this.jobGeneration = Symbol();
|
|
345
354
|
for (const topic of executeGossipWorkOrder) {
|
|
346
355
|
this.gossipQueues[topic].clear();
|
|
347
356
|
}
|
|
357
|
+
this.awaitingMessagesByBlockRoot.clear();
|
|
358
|
+
this.awaitingBlockMessageCount = 0;
|
|
359
|
+
this.awaitingMessagesByPayloadBlockRoot.clear();
|
|
360
|
+
this.awaitingPayloadMessageCount = 0;
|
|
361
|
+
this.searchedRootsBySlot.clear();
|
|
362
|
+
this.bufferedRootsBySlot.clear();
|
|
363
|
+
this.fatalPeers.clear();
|
|
348
364
|
}
|
|
349
365
|
|
|
350
366
|
dumpGossipQueue(topic: GossipType): PendingGossipsubMessage[] {
|
|
@@ -364,7 +380,7 @@ export class NetworkProcessor {
|
|
|
364
380
|
* prefer them as by-root download candidates.
|
|
365
381
|
*/
|
|
366
382
|
searchUnknownBlock({slot, root}: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void {
|
|
367
|
-
if (this.chain.seenBlock(root)) {
|
|
383
|
+
if (this.stopped || this.chain.seenBlock(root)) {
|
|
368
384
|
return;
|
|
369
385
|
}
|
|
370
386
|
const entry = this.searchedRootsBySlot.getOrDefault(slot).getOrDefault(root);
|
|
@@ -398,7 +414,7 @@ export class NetworkProcessor {
|
|
|
398
414
|
peer?: PeerIdStr,
|
|
399
415
|
slotIsPayloadSlot = false
|
|
400
416
|
): void {
|
|
401
|
-
if (this.chain.seenPayloadEnvelope(root)) {
|
|
417
|
+
if (this.stopped || this.chain.seenPayloadEnvelope(root)) {
|
|
402
418
|
return;
|
|
403
419
|
}
|
|
404
420
|
const entry = this.searchedRootsBySlot.getOrDefault(slot).getOrDefault(root);
|
|
@@ -801,6 +817,7 @@ export class NetworkProcessor {
|
|
|
801
817
|
this.awaitingBlockMessageCount -= total;
|
|
802
818
|
}
|
|
803
819
|
|
|
820
|
+
const generation = this.jobGeneration;
|
|
804
821
|
const nowSec = Date.now() / 1000;
|
|
805
822
|
let count = 0;
|
|
806
823
|
// TODO: we can group attestations to process in batches but since we have the SeenAttestationDatas
|
|
@@ -819,6 +836,7 @@ export class NetworkProcessor {
|
|
|
819
836
|
if (count === MAX_AWAITING_GOSSIP_OBJECTS_PER_TICK) {
|
|
820
837
|
count = 0;
|
|
821
838
|
await sleep(AWAITING_GOSSIP_OBJECTS_YIELD_EVERY_MS);
|
|
839
|
+
if (generation !== this.jobGeneration) return;
|
|
822
840
|
}
|
|
823
841
|
}
|
|
824
842
|
}
|
|
@@ -843,6 +861,7 @@ export class NetworkProcessor {
|
|
|
843
861
|
this.awaitingPayloadMessageCount -= total;
|
|
844
862
|
}
|
|
845
863
|
|
|
864
|
+
const generation = this.jobGeneration;
|
|
846
865
|
const nowSec = Date.now() / 1000;
|
|
847
866
|
let count = 0;
|
|
848
867
|
for (const messages of messagesByTopic.values()) {
|
|
@@ -858,6 +877,7 @@ export class NetworkProcessor {
|
|
|
858
877
|
if (count === MAX_AWAITING_GOSSIP_OBJECTS_PER_TICK) {
|
|
859
878
|
count = 0;
|
|
860
879
|
await sleep(AWAITING_GOSSIP_OBJECTS_YIELD_EVERY_MS);
|
|
880
|
+
if (generation !== this.jobGeneration) return;
|
|
861
881
|
}
|
|
862
882
|
}
|
|
863
883
|
}
|
|
@@ -937,6 +957,7 @@ export class NetworkProcessor {
|
|
|
937
957
|
};
|
|
938
958
|
|
|
939
959
|
private executeWork(): void {
|
|
960
|
+
if (this.stopped) return;
|
|
940
961
|
// TODO: Maybe de-bounce by timing the last time executeWork was run
|
|
941
962
|
|
|
942
963
|
this.metrics?.networkProcessor.executeWorkCalls.inc();
|
|
@@ -267,13 +267,6 @@ export class ReqRespBeaconNode extends ReqResp {
|
|
|
267
267
|
);
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
if (ForkSeq[fork] >= ForkSeq.deneb) {
|
|
271
|
-
protocolsAtFork.push(
|
|
272
|
-
[protocols.BlobSidecarsByRoot(fork, this.config), this.getHandler(ReqRespMethod.BlobSidecarsByRoot)],
|
|
273
|
-
[protocols.BlobSidecarsByRange(fork, this.config), this.getHandler(ReqRespMethod.BlobSidecarsByRange)]
|
|
274
|
-
);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
270
|
if (ForkSeq[fork] < ForkSeq.fulu) {
|
|
278
271
|
// Unregister StatusV1, MetadataV2 at the fork boundary, so only declare for pre-fulu
|
|
279
272
|
protocolsAtFork.push(
|
|
@@ -23,7 +23,7 @@ export async function* onBeaconBlocksByHead(
|
|
|
23
23
|
let blockRootHex = requestedRootHex;
|
|
24
24
|
const minimumRequestEpoch = Math.max(
|
|
25
25
|
GENESIS_EPOCH,
|
|
26
|
-
chain.clock.currentEpoch - chain.config.
|
|
26
|
+
chain.clock.currentEpoch - chain.config.getMinEpochsForBlockRequests(chain.clock.currentEpoch)
|
|
27
27
|
);
|
|
28
28
|
const minimumRequestSlot = computeStartSlotAtEpoch(minimumRequestEpoch);
|
|
29
29
|
|
|
@@ -3,7 +3,7 @@ import {BeaconConfig} from "@lodestar/config";
|
|
|
3
3
|
import {GENESIS_SLOT, isForkPostDeneb} from "@lodestar/params";
|
|
4
4
|
import {RespStatus, ResponseError, ResponseOutgoing} from "@lodestar/reqresp";
|
|
5
5
|
import {computeEpochAtSlot} from "@lodestar/state-transition";
|
|
6
|
-
import {
|
|
6
|
+
import {phase0} from "@lodestar/types";
|
|
7
7
|
import {IBeaconChain} from "../../../chain/index.js";
|
|
8
8
|
import {IBeaconDb} from "../../../db/index.js";
|
|
9
9
|
import {prettyPrintPeerId} from "../../util.js";
|
|
@@ -104,7 +104,7 @@ export async function* onBeaconBlocksByRange(
|
|
|
104
104
|
export function validateBeaconBlocksByRangeRequest(
|
|
105
105
|
config: BeaconConfig,
|
|
106
106
|
request: phase0.BeaconBlocksByRangeRequest
|
|
107
|
-
):
|
|
107
|
+
): Pick<phase0.BeaconBlocksByRangeRequest, "startSlot" | "count"> {
|
|
108
108
|
const {startSlot} = request;
|
|
109
109
|
let {count} = request;
|
|
110
110
|
|
|
@@ -5,7 +5,6 @@ import {IBeaconChain} from "../../../chain/index.js";
|
|
|
5
5
|
import {IBeaconDb} from "../../../db/index.js";
|
|
6
6
|
import {
|
|
7
7
|
BeaconBlocksByRootRequestType,
|
|
8
|
-
BlobSidecarsByRootRequestType,
|
|
9
8
|
DataColumnSidecarsByRootRequestType,
|
|
10
9
|
ExecutionPayloadEnvelopesByRootRequestType,
|
|
11
10
|
} from "../../../util/types.js";
|
|
@@ -13,8 +12,6 @@ import {GetReqRespHandlerFn, ReqRespMethod} from "../types.js";
|
|
|
13
12
|
import {onBeaconBlocksByHead} from "./beaconBlocksByHead.js";
|
|
14
13
|
import {onBeaconBlocksByRange} from "./beaconBlocksByRange.js";
|
|
15
14
|
import {onBeaconBlocksByRoot} from "./beaconBlocksByRoot.js";
|
|
16
|
-
import {onBlobSidecarsByRange} from "./blobSidecarsByRange.js";
|
|
17
|
-
import {onBlobSidecarsByRoot} from "./blobSidecarsByRoot.js";
|
|
18
15
|
import {onDataColumnSidecarsByRange} from "./dataColumnSidecarsByRange.js";
|
|
19
16
|
import {onDataColumnSidecarsByRoot} from "./dataColumnSidecarsByRoot.js";
|
|
20
17
|
import {onExecutionPayloadEnvelopesByRange} from "./executionPayloadEnvelopesByRange.js";
|
|
@@ -90,20 +87,6 @@ export function getReqRespHandlers({db, chain}: {db: IBeaconDb; chain: IBeaconCh
|
|
|
90
87
|
const body = deserializeRequestBody(ssz.fulu.BeaconBlocksByHeadRequest, req.data);
|
|
91
88
|
return onBeaconBlocksByHead(body, chain, peerId, peerClient);
|
|
92
89
|
},
|
|
93
|
-
[ReqRespMethod.BlobSidecarsByRoot]: (req) => {
|
|
94
|
-
const fork = chain.config.getForkName(chain.clock.currentSlot);
|
|
95
|
-
const body = deserializeRequestBody(BlobSidecarsByRootRequestType(fork, chain.config), req.data);
|
|
96
|
-
return onBlobSidecarsByRoot(body, chain);
|
|
97
|
-
},
|
|
98
|
-
[ReqRespMethod.BlobSidecarsByRange]: (req) => {
|
|
99
|
-
const body = deserializeRequestBody(ssz.deneb.BlobSidecarsByRangeRequest, req.data);
|
|
100
|
-
return trackByRangeResponse(
|
|
101
|
-
chain,
|
|
102
|
-
ReqRespMethod.BlobSidecarsByRange,
|
|
103
|
-
body.count,
|
|
104
|
-
onBlobSidecarsByRange(body, chain, db)
|
|
105
|
-
);
|
|
106
|
-
},
|
|
107
90
|
[ReqRespMethod.DataColumnSidecarsByRange]: (req, peerId, peerClient) => {
|
|
108
91
|
const body = deserializeRequestBody(ssz.fulu.DataColumnSidecarsByRangeRequest, req.data);
|
|
109
92
|
return trackByRangeResponse(
|
|
@@ -77,18 +77,6 @@ export const BeaconBlocksByHead = toProtocol({
|
|
|
77
77
|
contextBytesType: ContextBytesType.ForkDigest,
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
-
export const BlobSidecarsByRange = toProtocol({
|
|
81
|
-
method: ReqRespMethod.BlobSidecarsByRange,
|
|
82
|
-
version: Version.V1,
|
|
83
|
-
contextBytesType: ContextBytesType.ForkDigest,
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
export const BlobSidecarsByRoot = toProtocol({
|
|
87
|
-
method: ReqRespMethod.BlobSidecarsByRoot,
|
|
88
|
-
version: Version.V1,
|
|
89
|
-
contextBytesType: ContextBytesType.ForkDigest,
|
|
90
|
-
});
|
|
91
|
-
|
|
92
80
|
export const DataColumnSidecarsByRange = toProtocol({
|
|
93
81
|
method: ReqRespMethod.DataColumnSidecarsByRange,
|
|
94
82
|
version: Version.V1,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {BeaconConfig} from "@lodestar/config";
|
|
2
|
-
import {ForkName, MAX_REQUEST_LIGHT_CLIENT_UPDATES, isForkPostDeneb
|
|
2
|
+
import {ForkName, MAX_REQUEST_LIGHT_CLIENT_UPDATES, isForkPostDeneb} from "@lodestar/params";
|
|
3
3
|
import {InboundRateLimitQuota} from "@lodestar/reqresp";
|
|
4
4
|
import {ReqRespMethod, RequestBodyByMethod, requestSszTypeByMethod} from "./types.js";
|
|
5
5
|
|
|
@@ -44,22 +44,6 @@ export const rateLimitQuotas: (fork: ForkName, config: BeaconConfig) => Record<R
|
|
|
44
44
|
byPeer: {quota: config.MAX_REQUEST_BLOCKS_DENEB, quotaTimeMs: 10_000},
|
|
45
45
|
getRequestCount: getRequestCountFn(fork, config, ReqRespMethod.BeaconBlocksByHead, (req) => req.count),
|
|
46
46
|
},
|
|
47
|
-
[ReqRespMethod.BlobSidecarsByRange]: {
|
|
48
|
-
// Rationale: MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK
|
|
49
|
-
byPeer: {
|
|
50
|
-
quota: isForkPostElectra(fork) ? config.MAX_REQUEST_BLOB_SIDECARS_ELECTRA : config.MAX_REQUEST_BLOB_SIDECARS,
|
|
51
|
-
quotaTimeMs: 10_000,
|
|
52
|
-
},
|
|
53
|
-
getRequestCount: getRequestCountFn(fork, config, ReqRespMethod.BlobSidecarsByRange, (req) => req.count),
|
|
54
|
-
},
|
|
55
|
-
[ReqRespMethod.BlobSidecarsByRoot]: {
|
|
56
|
-
// Rationale: quota of BeaconBlocksByRoot * MAX_BLOBS_PER_BLOCK
|
|
57
|
-
byPeer: {
|
|
58
|
-
quota: isForkPostElectra(fork) ? config.MAX_REQUEST_BLOB_SIDECARS_ELECTRA : config.MAX_REQUEST_BLOB_SIDECARS,
|
|
59
|
-
quotaTimeMs: 10_000,
|
|
60
|
-
},
|
|
61
|
-
getRequestCount: getRequestCountFn(fork, config, ReqRespMethod.BlobSidecarsByRoot, (req) => req.length),
|
|
62
|
-
},
|
|
63
47
|
[ReqRespMethod.DataColumnSidecarsByRange]: {
|
|
64
48
|
// Rationale: MAX_REQUEST_BLOCKS_DENEB * NUMBER_OF_COLUMNS
|
|
65
49
|
byPeer: {quota: config.MAX_REQUEST_DATA_COLUMN_SIDECARS, quotaTimeMs: 10_000},
|