@lodestar/beacon-node 1.51.0-dev.5619357e93 → 1.51.0-dev.5a82190416
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 +19 -61
- 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 +17 -0
- package/lib/api/impl/beacon/pool/index.js.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 +7 -31
- package/lib/chain/GetBlobsTracker.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 +6 -10
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +26 -17
- 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 +21 -16
- 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 +6 -1
- 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 +7 -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 +1 -3
- 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.map +1 -1
- package/lib/chain/bls/multithread/index.js +8 -6
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/chain.d.ts +24 -3
- 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/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 +7 -4
- 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 +177 -37
- package/lib/chain/opPools/aggregatedAttestationPool.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/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/options.d.ts +5 -2
- package/lib/chain/options.d.ts.map +1 -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/interface.d.ts +17 -5
- 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 +0 -8
- 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 +27 -8
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +74 -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/network/core/networkCore.d.ts +2 -1
- package/lib/network/core/networkCore.d.ts.map +1 -1
- package/lib/network/core/networkCore.js +4 -0
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorker.js +1 -0
- package/lib/network/core/networkCoreWorker.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +2 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.js +3 -0
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +4 -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 +2 -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 +6 -7
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +50 -37
- 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.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/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 +46 -126
- 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 +2 -0
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +37 -19
- 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/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/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/sszBytes.d.ts +5 -1
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +34 -17
- 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 +24 -64
- package/src/api/impl/beacon/pool/index.ts +26 -0
- package/src/api/impl/validator/index.ts +43 -29
- package/src/chain/GetBlobsTracker.ts +10 -39
- 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 +44 -33
- package/src/chain/blocks/index.ts +5 -2
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +32 -21
- package/src/chain/blocks/types.ts +5 -31
- package/src/chain/blocks/verifyBlock.ts +30 -16
- package/src/chain/blocks/verifyBlocksDataAvailability.ts +6 -1
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
- package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
- package/src/chain/blocks/verifyBlocksSignatures.ts +7 -5
- package/src/chain/blocks/verifyPayloadsDataAvailability.ts +1 -3
- package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
- package/src/chain/bls/interface.ts +2 -0
- package/src/chain/bls/multithread/index.ts +9 -5
- package/src/chain/chain.ts +135 -37
- package/src/chain/emitter.ts +8 -8
- 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 +7 -3
- package/src/chain/opPools/aggregatedAttestationPool.ts +222 -35
- package/src/chain/opPools/index.ts +1 -0
- package/src/chain/opPools/singleAttestationPool.ts +287 -0
- package/src/chain/options.ts +5 -2
- 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/interface.ts +18 -9
- 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 +0 -17
- 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 +75 -18
- package/src/metrics/server/http.ts +5 -5
- package/src/network/core/networkCore.ts +6 -1
- package/src/network/core/networkCoreWorker.ts +1 -0
- package/src/network/core/networkCoreWorkerHandler.ts +4 -1
- package/src/network/core/types.ts +4 -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 +0 -5
- package/src/network/libp2p/index.ts +5 -1
- package/src/network/network.ts +50 -60
- package/src/network/options.ts +4 -0
- package/src/network/peers/peerManager.ts +27 -2
- 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 +59 -159
- 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 +34 -15
- package/src/node/options.ts +5 -1
- package/src/sync/range/batch.ts +9 -21
- package/src/sync/range/chain.ts +2 -14
- 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/sszBytes.ts +40 -22
- 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,8 +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
|
-
// Columns fetched here feed payloadInput.addColumn, which resolves waitForAllData
|
|
709
|
-
//
|
|
620
|
+
// Columns fetched here feed payloadInput.addColumn, which resolves the waitForAllData of a
|
|
621
|
+
// pending payload import. No processExecutionPayload trigger needed from this path.
|
|
710
622
|
chain.getBlobsTracker.triggerGetBlobs(payloadInput);
|
|
711
623
|
}
|
|
712
624
|
})
|
|
@@ -813,57 +725,6 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
813
725
|
}
|
|
814
726
|
},
|
|
815
727
|
|
|
816
|
-
[GossipType.blob_sidecar]: async ({
|
|
817
|
-
gossipData,
|
|
818
|
-
topic,
|
|
819
|
-
peerIdStr,
|
|
820
|
-
seenTimestampSec,
|
|
821
|
-
}: GossipHandlerParamGeneric<GossipType.blob_sidecar>) => {
|
|
822
|
-
const {serializedData} = gossipData;
|
|
823
|
-
const blobSidecar = sszDeserialize(topic, serializedData);
|
|
824
|
-
const blobSlot = blobSidecar.signedBlockHeader.message.slot;
|
|
825
|
-
const index = blobSidecar.index;
|
|
826
|
-
|
|
827
|
-
if (config.getForkSeq(blobSlot) < ForkSeq.deneb) {
|
|
828
|
-
throw new GossipActionError(GossipAction.REJECT, {code: "PRE_DENEB_BLOCK"});
|
|
829
|
-
}
|
|
830
|
-
const blockInput = await validateBeaconBlob(blobSidecar, topic.subnet, peerIdStr, seenTimestampSec);
|
|
831
|
-
// Handler - deferred to next event loop so the validation result propagates first
|
|
832
|
-
callInNextEventLoop(() => {
|
|
833
|
-
try {
|
|
834
|
-
chain.serializedCache.set(blobSidecar, serializedData);
|
|
835
|
-
if (!blockInput.hasBlockAndAllData()) {
|
|
836
|
-
const cutoffTimeMs = getCutoffTimeMs(chain, blobSlot, BLOCK_AVAILABILITY_CUTOFF_MS);
|
|
837
|
-
chain.logger.debug("Received gossip blob, waiting for full data availability", {
|
|
838
|
-
msToWait: cutoffTimeMs,
|
|
839
|
-
blobIndex: index,
|
|
840
|
-
...blockInput.getLogMeta(),
|
|
841
|
-
});
|
|
842
|
-
blockInput.waitForAllData(cutoffTimeMs).catch((_e) => {
|
|
843
|
-
chain.logger.debug(
|
|
844
|
-
"Waited for data after receiving gossip blob. Cut-off reached so attempting to fetch remainder of BlockInput",
|
|
845
|
-
{
|
|
846
|
-
blobIndex: index,
|
|
847
|
-
...blockInput.getLogMeta(),
|
|
848
|
-
}
|
|
849
|
-
);
|
|
850
|
-
chain.emitter.emit(ChainEvent.incompleteBlockInput, {
|
|
851
|
-
blockInput,
|
|
852
|
-
peer: peerIdStr,
|
|
853
|
-
source: BlockInputSource.gossip,
|
|
854
|
-
});
|
|
855
|
-
});
|
|
856
|
-
}
|
|
857
|
-
} catch (e) {
|
|
858
|
-
logger.debug(
|
|
859
|
-
"Error handling gossip blob",
|
|
860
|
-
{slot: blobSlot, root: blockInput.blockRootHex, index},
|
|
861
|
-
e as Error
|
|
862
|
-
);
|
|
863
|
-
}
|
|
864
|
-
});
|
|
865
|
-
},
|
|
866
|
-
|
|
867
728
|
[GossipType.data_column_sidecar]: async ({
|
|
868
729
|
gossipData,
|
|
869
730
|
topic,
|
|
@@ -927,7 +788,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
927
788
|
}
|
|
928
789
|
|
|
929
790
|
// NOTE: we do NOT call chain.processExecutionPayload here. That is triggered only by
|
|
930
|
-
// envelope arrival (gossip or API).
|
|
791
|
+
// envelope arrival (gossip or API). A pending payload import is awaiting
|
|
931
792
|
// payloadInput.waitForAllData(); addColumn above will resolve it once hasAllData flips.
|
|
932
793
|
|
|
933
794
|
scheduleIncompletePayloadEnvelope(payloadInput, peerIdStr);
|
|
@@ -1276,6 +1137,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
1276
1137
|
seenTimestampSec,
|
|
1277
1138
|
}: GossipHandlerParamGeneric<GossipType.execution_payload>) => {
|
|
1278
1139
|
const {serializedData} = gossipData;
|
|
1140
|
+
validateGossipExecutionPayloadEnvelopeSerialized(chain, serializedData);
|
|
1279
1141
|
const signedEnvelope = sszDeserialize(topic, serializedData);
|
|
1280
1142
|
const envelope = signedEnvelope.message;
|
|
1281
1143
|
|
|
@@ -1328,18 +1190,22 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
1328
1190
|
});
|
|
1329
1191
|
}
|
|
1330
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
|
+
|
|
1331
1206
|
// Handler - deferred to next event loop so the validation result propagates first
|
|
1332
1207
|
callInNextEventLoop(() => {
|
|
1333
1208
|
try {
|
|
1334
|
-
chain.serializedCache.set(signedEnvelope, serializedData);
|
|
1335
|
-
|
|
1336
|
-
payloadInput.addPayloadEnvelope({
|
|
1337
|
-
envelope: signedEnvelope,
|
|
1338
|
-
source: PayloadEnvelopeInputSource.gossip,
|
|
1339
|
-
seenTimestampSec,
|
|
1340
|
-
peerIdStr,
|
|
1341
|
-
});
|
|
1342
|
-
|
|
1343
1209
|
scheduleIncompletePayloadEnvelope(payloadInput, peerIdStr);
|
|
1344
1210
|
|
|
1345
1211
|
chain.emitter.emit(routes.events.EventType.executionPayloadGossip, {
|
|
@@ -1349,7 +1215,9 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
1349
1215
|
blockRoot: blockRootHex,
|
|
1350
1216
|
});
|
|
1351
1217
|
|
|
1352
|
-
|
|
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) => {
|
|
1353
1221
|
// Adjust verbosity based on error type
|
|
1354
1222
|
let logLevel: LogLevel;
|
|
1355
1223
|
|
|
@@ -1367,11 +1235,17 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
1367
1235
|
// Errors might indicate an issue with our node or the connected EL client
|
|
1368
1236
|
logLevel = LogLevel.error;
|
|
1369
1237
|
break;
|
|
1370
|
-
|
|
1238
|
+
case PayloadErrorCode.BLOCK_EXECUTION_INVALID:
|
|
1239
|
+
logLevel = LogLevel.warn;
|
|
1240
|
+
break;
|
|
1241
|
+
// INVALID_SIGNATURE only happens for an envelope added by another source
|
|
1371
1242
|
case PayloadErrorCode.INVALID_SIGNATURE:
|
|
1372
1243
|
case PayloadErrorCode.ENVELOPE_VERIFICATION_ERROR:
|
|
1373
1244
|
case PayloadErrorCode.EXECUTION_ENGINE_INVALID:
|
|
1374
|
-
|
|
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
|
+
}
|
|
1375
1249
|
// The builder may have signed another envelope that is valid, keeping this one would make
|
|
1376
1250
|
// by-root and range sync reuse it and never import the payload
|
|
1377
1251
|
chain.seenPayloadEnvelopeInputCache.removeInvalid(payloadInput);
|
|
@@ -1646,6 +1520,32 @@ function getBatchHandlers(modules: ValidatorFnsModules, options: GossipHandlerOp
|
|
|
1646
1520
|
logger.debug("Error adding gossip unaggregated attestation to pool", {subnet}, e as Error);
|
|
1647
1521
|
}
|
|
1648
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
|
+
|
|
1649
1549
|
// Separate boundary: a pool insertion error above must not skip the fork-choice vote
|
|
1650
1550
|
if (!options.dontSendGossipAttestationsToForkchoice) {
|
|
1651
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(
|
|
@@ -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},
|
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
SignedBeaconBlock,
|
|
14
14
|
Status,
|
|
15
15
|
altair,
|
|
16
|
-
deneb,
|
|
17
16
|
fulu,
|
|
18
17
|
gloas,
|
|
19
18
|
heze,
|
|
@@ -24,8 +23,6 @@ import {
|
|
|
24
23
|
import {
|
|
25
24
|
BeaconBlocksByRootRequest,
|
|
26
25
|
BeaconBlocksByRootRequestType,
|
|
27
|
-
BlobSidecarsByRootRequest,
|
|
28
|
-
BlobSidecarsByRootRequestType,
|
|
29
26
|
DataColumnSidecarsByRootRequest,
|
|
30
27
|
DataColumnSidecarsByRootRequestType,
|
|
31
28
|
ExecutionPayloadEnvelopesByRootRequest,
|
|
@@ -44,8 +41,6 @@ export enum ReqRespMethod {
|
|
|
44
41
|
BeaconBlocksByRange = "beacon_blocks_by_range",
|
|
45
42
|
BeaconBlocksByRoot = "beacon_blocks_by_root",
|
|
46
43
|
BeaconBlocksByHead = "beacon_blocks_by_head",
|
|
47
|
-
BlobSidecarsByRange = "blob_sidecars_by_range",
|
|
48
|
-
BlobSidecarsByRoot = "blob_sidecars_by_root",
|
|
49
44
|
DataColumnSidecarsByRange = "data_column_sidecars_by_range",
|
|
50
45
|
DataColumnSidecarsByRoot = "data_column_sidecars_by_root",
|
|
51
46
|
ExecutionPayloadEnvelopesByRoot = "execution_payload_envelopes_by_root",
|
|
@@ -66,8 +61,6 @@ export type RequestBodyByMethod = {
|
|
|
66
61
|
[ReqRespMethod.BeaconBlocksByRange]: phase0.BeaconBlocksByRangeRequest;
|
|
67
62
|
[ReqRespMethod.BeaconBlocksByRoot]: BeaconBlocksByRootRequest;
|
|
68
63
|
[ReqRespMethod.BeaconBlocksByHead]: fulu.BeaconBlocksByHeadRequest;
|
|
69
|
-
[ReqRespMethod.BlobSidecarsByRange]: deneb.BlobSidecarsByRangeRequest;
|
|
70
|
-
[ReqRespMethod.BlobSidecarsByRoot]: BlobSidecarsByRootRequest;
|
|
71
64
|
[ReqRespMethod.DataColumnSidecarsByRange]: fulu.DataColumnSidecarsByRangeRequest;
|
|
72
65
|
[ReqRespMethod.DataColumnSidecarsByRoot]: DataColumnSidecarsByRootRequest;
|
|
73
66
|
[ReqRespMethod.ExecutionPayloadEnvelopesByRoot]: ExecutionPayloadEnvelopesByRootRequest;
|
|
@@ -88,8 +81,6 @@ type ResponseBodyByMethod = {
|
|
|
88
81
|
[ReqRespMethod.BeaconBlocksByRange]: SignedBeaconBlock;
|
|
89
82
|
[ReqRespMethod.BeaconBlocksByRoot]: SignedBeaconBlock;
|
|
90
83
|
[ReqRespMethod.BeaconBlocksByHead]: SignedBeaconBlock;
|
|
91
|
-
[ReqRespMethod.BlobSidecarsByRange]: deneb.BlobSidecar;
|
|
92
|
-
[ReqRespMethod.BlobSidecarsByRoot]: deneb.BlobSidecar;
|
|
93
84
|
[ReqRespMethod.DataColumnSidecarsByRange]: DataColumnSidecar;
|
|
94
85
|
[ReqRespMethod.DataColumnSidecarsByRoot]: DataColumnSidecar;
|
|
95
86
|
[ReqRespMethod.ExecutionPayloadEnvelopesByRoot]: gloas.SignedExecutionPayloadEnvelope;
|
|
@@ -119,8 +110,6 @@ export const requestSszTypeByMethod: (
|
|
|
119
110
|
[ReqRespMethod.BeaconBlocksByRange]: ssz.phase0.BeaconBlocksByRangeRequest,
|
|
120
111
|
[ReqRespMethod.BeaconBlocksByRoot]: BeaconBlocksByRootRequestType(fork, config),
|
|
121
112
|
[ReqRespMethod.BeaconBlocksByHead]: ssz.fulu.BeaconBlocksByHeadRequest,
|
|
122
|
-
[ReqRespMethod.BlobSidecarsByRange]: ssz.deneb.BlobSidecarsByRangeRequest,
|
|
123
|
-
[ReqRespMethod.BlobSidecarsByRoot]: BlobSidecarsByRootRequestType(fork, config),
|
|
124
113
|
[ReqRespMethod.DataColumnSidecarsByRange]: ssz.fulu.DataColumnSidecarsByRangeRequest,
|
|
125
114
|
[ReqRespMethod.DataColumnSidecarsByRoot]: DataColumnSidecarsByRootRequestType(config),
|
|
126
115
|
[ReqRespMethod.ExecutionPayloadEnvelopesByRoot]: ExecutionPayloadEnvelopesByRootRequestType(config),
|
|
@@ -152,8 +141,6 @@ export const responseSszTypeByMethod: {[K in ReqRespMethod]: ResponseTypeGetter<
|
|
|
152
141
|
[ReqRespMethod.BeaconBlocksByRange]: blocksResponseType,
|
|
153
142
|
[ReqRespMethod.BeaconBlocksByRoot]: blocksResponseType,
|
|
154
143
|
[ReqRespMethod.BeaconBlocksByHead]: (fork) => ssz[fork].SignedBeaconBlock,
|
|
155
|
-
[ReqRespMethod.BlobSidecarsByRange]: () => ssz.deneb.BlobSidecar,
|
|
156
|
-
[ReqRespMethod.BlobSidecarsByRoot]: () => ssz.deneb.BlobSidecar,
|
|
157
144
|
[ReqRespMethod.LightClientBootstrap]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientBootstrap,
|
|
158
145
|
[ReqRespMethod.LightClientUpdatesByRange]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientUpdate,
|
|
159
146
|
[ReqRespMethod.LightClientFinalityUpdate]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientFinalityUpdate,
|