@lodestar/beacon-node 1.51.0-dev.f8eff664d2 → 1.51.0-dev.f921fbf6b7
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/api.js +1 -1
- package/lib/api/impl/api.js.map +1 -1
- package/lib/api/impl/beacon/blocks/index.d.ts +2 -1
- package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +48 -95
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/index.d.ts +2 -1
- package/lib/api/impl/beacon/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/index.js +2 -2
- package/lib/api/impl/beacon/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/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/index.js +8 -2
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +3 -2
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/utils.js +17 -9
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts.map +1 -1
- package/lib/api/impl/debug/index.js +3 -0
- package/lib/api/impl/debug/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 +143 -35
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/options.d.ts +2 -0
- package/lib/api/options.d.ts.map +1 -1
- package/lib/api/options.js +1 -0
- package/lib/api/options.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 +1 -0
- 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 +61 -97
- package/lib/chain/archiveStore/utils/archiveBlocks.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 +42 -57
- 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 +82 -20
- 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 +7 -19
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js +5 -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 +26 -4
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +127 -43
- 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/executionPayloadBid.d.ts +11 -1
- package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadBid.js +2 -0
- package/lib/chain/errors/executionPayloadBid.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/inclusionList.d.ts +60 -0
- package/lib/chain/errors/inclusionList.d.ts.map +1 -0
- package/lib/chain/errors/inclusionList.js +19 -0
- package/lib/chain/errors/inclusionList.js.map +1 -0
- package/lib/chain/errors/index.d.ts +1 -1
- package/lib/chain/errors/index.d.ts.map +1 -1
- package/lib/chain/errors/index.js +1 -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 +10 -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/inclusionListStore.d.ts +63 -0
- package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -0
- package/lib/chain/opPools/inclusionListStore.js +171 -0
- package/lib/chain/opPools/inclusionListStore.js.map +1 -0
- package/lib/chain/opPools/index.d.ts +2 -0
- package/lib/chain/opPools/index.d.ts.map +1 -1
- package/lib/chain/opPools/index.js +2 -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 +6 -3
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +32 -11
- 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 +2 -2
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +1 -1
- package/lib/chain/regen/interface.js.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.d.ts +0 -15
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +37 -158
- 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/inclusionList.d.ts +14 -0
- package/lib/chain/validation/inclusionList.d.ts.map +1 -0
- package/lib/chain/validation/inclusionList.js +150 -0
- package/lib/chain/validation/inclusionList.js.map +1 -0
- package/lib/chain/validation/index.d.ts +1 -0
- package/lib/chain/validation/index.d.ts.map +1 -1
- package/lib/chain/validation/index.js +1 -0
- package/lib/chain/validation/index.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 +34 -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/builder/validateBid.d.ts.map +1 -1
- package/lib/execution/builder/validateBid.js +14 -1
- package/lib/execution/builder/validateBid.js.map +1 -1
- package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
- package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
- package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
- package/lib/execution/engine/disabled.d.ts +1 -0
- package/lib/execution/engine/disabled.d.ts.map +1 -1
- package/lib/execution/engine/disabled.js +3 -0
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +12 -8
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +35 -14
- 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 +29 -8
- 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 +5 -6
- package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.js +34 -20
- package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -1
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +31 -11
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +5 -3
- package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
- package/lib/execution/engine/payloadIdCache.js +15 -4
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/restTransport.d.ts +4 -5
- package/lib/execution/engine/restTransport.d.ts.map +1 -1
- package/lib/execution/engine/restTransport.js +4 -15
- package/lib/execution/engine/restTransport.js.map +1 -1
- package/lib/execution/engine/sszTypes.d.ts +38 -47
- 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 +4 -14
- package/lib/execution/engine/transport.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +25 -9
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +19 -14
- 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 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +16 -9
- package/lib/metrics/metrics/beacon.d.ts.map +1 -1
- package/lib/metrics/metrics/beacon.js +35 -30
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +42 -8
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +104 -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 +8 -9
- package/lib/network/gossip/interface.d.ts.map +1 -1
- package/lib/network/gossip/interface.js +1 -1
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +13 -21
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +13 -24
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +5 -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 +9 -7
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +58 -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/enrSubnetsDeserialize.d.ts.map +1 -1
- package/lib/network/peers/utils/enrSubnetsDeserialize.js +5 -2
- package/lib/network/peers/utils/enrSubnetsDeserialize.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 +118 -149
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +6 -6
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/gossipValidatorFn.js +5 -5
- package/lib/network/processor/gossipValidatorFn.js.map +1 -1
- package/lib/network/processor/index.d.ts +11 -0
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +66 -30
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +6 -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/inclusionListsByIndices.d.ts +10 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts.map +1 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.js +30 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.js.map +1 -0
- package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.js +6 -12
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +1 -2
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +5 -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 +5 -17
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +6 -9
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +4 -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 +7 -0
- package/lib/sync/sync.d.ts.map +1 -1
- package/lib/sync/sync.js +61 -3
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +43 -25
- 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 +31 -32
- package/src/api/impl/api.ts +1 -1
- package/src/api/impl/beacon/blocks/index.ts +81 -126
- package/src/api/impl/beacon/index.ts +3 -1
- package/src/api/impl/beacon/pool/index.ts +31 -1
- package/src/api/impl/beacon/state/index.ts +10 -1
- package/src/api/impl/beacon/state/utils.ts +20 -10
- package/src/api/impl/debug/index.ts +4 -0
- package/src/api/impl/validator/index.ts +178 -39
- package/src/api/options.ts +3 -0
- package/src/chain/GetBlobsTracker.ts +82 -52
- package/src/chain/archiveStore/archiveStore.ts +1 -0
- package/src/chain/archiveStore/utils/archiveBlocks.ts +76 -130
- 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 +58 -77
- package/src/chain/blocks/importExecutionPayload.ts +123 -36
- package/src/chain/blocks/index.ts +11 -4
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
- package/src/chain/blocks/types.ts +8 -29
- 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 +144 -42
- package/src/chain/emitter.ts +8 -8
- package/src/chain/errors/blockError.ts +1 -1
- package/src/chain/errors/executionPayloadBid.ts +12 -0
- package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
- package/src/chain/errors/inclusionList.ts +38 -0
- package/src/chain/errors/index.ts +1 -1
- package/src/chain/forkChoice/index.ts +11 -0
- package/src/chain/forkChoiceExecutionEngine.ts +183 -0
- package/src/chain/interface.ts +11 -6
- package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
- package/src/chain/opPools/attestationPool.ts +16 -4
- package/src/chain/opPools/inclusionListStore.ts +208 -0
- package/src/chain/opPools/index.ts +2 -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 +67 -22
- package/src/chain/proposerTracker.ts +94 -0
- package/src/chain/regen/interface.ts +2 -2
- package/src/chain/regen/queued.ts +6 -4
- package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
- package/src/chain/validation/executionPayloadBid.ts +54 -183
- package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
- package/src/chain/validation/inclusionList.ts +192 -0
- package/src/chain/validation/index.ts +1 -0
- package/src/chain/validatorMonitor.ts +0 -6
- package/src/db/beacon.ts +44 -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/builder/validateBid.ts +23 -2
- package/src/execution/engine/blobVersionedHashes.ts +1 -1
- package/src/execution/engine/disabled.ts +4 -0
- package/src/execution/engine/http.ts +59 -47
- package/src/execution/engine/index.ts +1 -1
- package/src/execution/engine/interface.ts +46 -13
- package/src/execution/engine/jsonRpcTransport.ts +56 -31
- package/src/execution/engine/mock.ts +32 -14
- package/src/execution/engine/payloadIdCache.ts +24 -6
- package/src/execution/engine/restTransport.ts +18 -23
- package/src/execution/engine/sszTypes.ts +0 -9
- package/src/execution/engine/transport.ts +13 -17
- package/src/execution/engine/types.ts +44 -24
- package/src/execution/engine/utils.ts +4 -2
- package/src/index.ts +2 -0
- package/src/metrics/metrics/beacon.ts +37 -30
- package/src/metrics/metrics/lodestar.ts +106 -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 +5 -5
- package/src/network/gossip/topic.ts +14 -25
- package/src/network/interface.ts +4 -5
- package/src/network/libp2p/index.ts +5 -1
- package/src/network/network.ts +66 -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/enrSubnetsDeserialize.ts +5 -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 +150 -183
- package/src/network/processor/gossipQueues/index.ts +6 -6
- package/src/network/processor/gossipValidatorFn.ts +5 -5
- package/src/network/processor/index.ts +58 -28
- package/src/network/processor/types.ts +1 -1
- package/src/network/reqresp/ReqRespBeaconNode.ts +7 -7
- package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
- package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
- package/src/network/reqresp/handlers/index.ts +5 -17
- package/src/network/reqresp/protocols.ts +6 -12
- package/src/network/reqresp/rateLimit.ts +5 -17
- package/src/network/reqresp/types.ts +6 -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 +65 -4
- package/src/sync/unknownBlock.ts +48 -36
- 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
|
@@ -63,7 +63,7 @@ export type NetworkProcessorOpts = GossipHandlerOpts & {
|
|
|
63
63
|
/**
|
|
64
64
|
* Keep up to 3 slot of unknown roots, so we don't always emit to UnknownBlock sync.
|
|
65
65
|
*/
|
|
66
|
-
const MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE = 3;
|
|
66
|
+
export const MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE = 3;
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* Max distinct roots we BUFFER messages for, per slot. Kept tight to avoid the OOM
|
|
@@ -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]: {},
|
|
@@ -140,6 +139,7 @@ const executeGossipWorkOrderObj: Record<GossipType, WorkOpts> = {
|
|
|
140
139
|
[GossipType.payload_attestation_message]: {},
|
|
141
140
|
[GossipType.execution_payload_bid]: {},
|
|
142
141
|
[GossipType.proposer_preferences]: {},
|
|
142
|
+
[GossipType.inclusion_list]: {},
|
|
143
143
|
};
|
|
144
144
|
const executeGossipWorkOrder = Object.keys(executeGossipWorkOrderObj) as (keyof typeof executeGossipWorkOrderObj)[];
|
|
145
145
|
|
|
@@ -243,6 +243,12 @@ type SearchUnknownRootTarget =
|
|
|
243
243
|
* Such that enough work is processed to fill either one of the queue.
|
|
244
244
|
*/
|
|
245
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();
|
|
246
252
|
private readonly chain: IBeaconChain;
|
|
247
253
|
private readonly core: INetworkCore;
|
|
248
254
|
private readonly events: NetworkEventBus;
|
|
@@ -334,16 +340,27 @@ export class NetworkProcessor {
|
|
|
334
340
|
}
|
|
335
341
|
|
|
336
342
|
async stop(): Promise<void> {
|
|
343
|
+
if (this.stopped) return;
|
|
344
|
+
this.stopped = true;
|
|
337
345
|
this.events.off(NetworkEvent.pendingGossipsubMessage, this.onPendingGossipsubMessage);
|
|
338
346
|
this.chain.emitter.off(routes.events.EventType.block, this.onBlockProcessed);
|
|
339
347
|
this.chain.emitter.off(routes.events.EventType.executionPayload, this.onPayloadEnvelopeProcessed);
|
|
340
|
-
this.chain.
|
|
348
|
+
this.chain.clock.off(ClockEvent.slot, this.onClockSlot);
|
|
349
|
+
this.dropAllJobs();
|
|
341
350
|
}
|
|
342
351
|
|
|
343
352
|
dropAllJobs(): void {
|
|
353
|
+
this.jobGeneration = Symbol();
|
|
344
354
|
for (const topic of executeGossipWorkOrder) {
|
|
345
355
|
this.gossipQueues[topic].clear();
|
|
346
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();
|
|
347
364
|
}
|
|
348
365
|
|
|
349
366
|
dumpGossipQueue(topic: GossipType): PendingGossipsubMessage[] {
|
|
@@ -363,7 +380,7 @@ export class NetworkProcessor {
|
|
|
363
380
|
* prefer them as by-root download candidates.
|
|
364
381
|
*/
|
|
365
382
|
searchUnknownBlock({slot, root}: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void {
|
|
366
|
-
if (this.chain.seenBlock(root)) {
|
|
383
|
+
if (this.stopped || this.chain.seenBlock(root)) {
|
|
367
384
|
return;
|
|
368
385
|
}
|
|
369
386
|
const entry = this.searchedRootsBySlot.getOrDefault(slot).getOrDefault(root);
|
|
@@ -397,7 +414,7 @@ export class NetworkProcessor {
|
|
|
397
414
|
peer?: PeerIdStr,
|
|
398
415
|
slotIsPayloadSlot = false
|
|
399
416
|
): void {
|
|
400
|
-
if (this.chain.seenPayloadEnvelope(root)) {
|
|
417
|
+
if (this.stopped || this.chain.seenPayloadEnvelope(root)) {
|
|
401
418
|
return;
|
|
402
419
|
}
|
|
403
420
|
const entry = this.searchedRootsBySlot.getOrDefault(slot).getOrDefault(root);
|
|
@@ -665,6 +682,7 @@ export class NetworkProcessor {
|
|
|
665
682
|
*
|
|
666
683
|
* For DOS protection, the message is ignored (reject metric incremented) when any cap is hit:
|
|
667
684
|
* - MAX_QUEUED_UNKNOWN_BLOCK_GOSSIP_OBJECTS: global awaiting-block message count
|
|
685
|
+
* - MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE: message slot already pruned by onClockSlot, so not bounded by the per-slot root budget
|
|
668
686
|
* - MAX_BUFFERED_ROOTS_PER_SLOT: distinct roots we buffer messages for, per slot
|
|
669
687
|
* - MAX_AWAITING_MESSAGES_PER_ROOT[topic]: messages buffered per (root, topic)
|
|
670
688
|
*/
|
|
@@ -675,6 +693,10 @@ export class NetworkProcessor {
|
|
|
675
693
|
metric?.reject.inc({reason: ReprocessRejectReason.reached_limit, topic: topicType});
|
|
676
694
|
return;
|
|
677
695
|
}
|
|
696
|
+
if (slot <= this.chain.clock.currentSlot - MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE) {
|
|
697
|
+
metric?.reject.inc({reason: ReprocessRejectReason.expired, topic: topicType});
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
678
700
|
// per-(root, topic) message cap: e.g. <= NUMBER_OF_COLUMNS columns per root
|
|
679
701
|
const perRootCap = MAX_AWAITING_MESSAGES_PER_ROOT[topicType];
|
|
680
702
|
if (
|
|
@@ -701,6 +723,10 @@ export class NetworkProcessor {
|
|
|
701
723
|
metric?.reject.inc({reason: ReprocessRejectReason.reached_limit, topic: topicType});
|
|
702
724
|
return;
|
|
703
725
|
}
|
|
726
|
+
if (slot <= this.chain.clock.currentSlot - MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE) {
|
|
727
|
+
metric?.reject.inc({reason: ReprocessRejectReason.expired, topic: topicType});
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
704
730
|
const perRootCap = MAX_AWAITING_MESSAGES_PER_ROOT[topicType];
|
|
705
731
|
if (
|
|
706
732
|
perRootCap !== undefined &&
|
|
@@ -791,6 +817,7 @@ export class NetworkProcessor {
|
|
|
791
817
|
this.awaitingBlockMessageCount -= total;
|
|
792
818
|
}
|
|
793
819
|
|
|
820
|
+
const generation = this.jobGeneration;
|
|
794
821
|
const nowSec = Date.now() / 1000;
|
|
795
822
|
let count = 0;
|
|
796
823
|
// TODO: we can group attestations to process in batches but since we have the SeenAttestationDatas
|
|
@@ -809,6 +836,7 @@ export class NetworkProcessor {
|
|
|
809
836
|
if (count === MAX_AWAITING_GOSSIP_OBJECTS_PER_TICK) {
|
|
810
837
|
count = 0;
|
|
811
838
|
await sleep(AWAITING_GOSSIP_OBJECTS_YIELD_EVERY_MS);
|
|
839
|
+
if (generation !== this.jobGeneration) return;
|
|
812
840
|
}
|
|
813
841
|
}
|
|
814
842
|
}
|
|
@@ -833,6 +861,7 @@ export class NetworkProcessor {
|
|
|
833
861
|
this.awaitingPayloadMessageCount -= total;
|
|
834
862
|
}
|
|
835
863
|
|
|
864
|
+
const generation = this.jobGeneration;
|
|
836
865
|
const nowSec = Date.now() / 1000;
|
|
837
866
|
let count = 0;
|
|
838
867
|
for (const messages of messagesByTopic.values()) {
|
|
@@ -848,6 +877,7 @@ export class NetworkProcessor {
|
|
|
848
877
|
if (count === MAX_AWAITING_GOSSIP_OBJECTS_PER_TICK) {
|
|
849
878
|
count = 0;
|
|
850
879
|
await sleep(AWAITING_GOSSIP_OBJECTS_YIELD_EVERY_MS);
|
|
880
|
+
if (generation !== this.jobGeneration) return;
|
|
851
881
|
}
|
|
852
882
|
}
|
|
853
883
|
}
|
|
@@ -857,19 +887,20 @@ export class NetworkProcessor {
|
|
|
857
887
|
const nowSec = Date.now() / 1000;
|
|
858
888
|
const minSlot = clockSlot - MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE;
|
|
859
889
|
|
|
860
|
-
for (const [slot,
|
|
890
|
+
for (const [slot, bufferedRoots] of this.bufferedRootsBySlot) {
|
|
861
891
|
if (slot > minSlot) continue;
|
|
862
892
|
|
|
863
|
-
|
|
864
|
-
// for (blockPeerIds set) have block waits keyed here; skipping the rest avoids deleting a payload wait
|
|
865
|
-
// that a newer slot created for the same root (block/envelope searches share searchedRootsBySlot).
|
|
866
|
-
for (const [rootHex, entry] of searchedRoots) {
|
|
867
|
-
if (entry.blockPeerIds === undefined) continue;
|
|
893
|
+
for (const rootHex of bufferedRoots) {
|
|
868
894
|
const messagesByTopic = this.awaitingMessagesByBlockRoot.get(rootHex);
|
|
869
895
|
if (messagesByTopic === undefined) continue;
|
|
870
|
-
let
|
|
896
|
+
let remaining = 0;
|
|
871
897
|
for (const messages of messagesByTopic.values()) {
|
|
872
898
|
for (const message of messages) {
|
|
899
|
+
// the same root may be buffered again from a newer slot, keep those messages.
|
|
900
|
+
// msgSlot is always set before buffering, a missing one expires rather than leaks
|
|
901
|
+
if ((message.msgSlot ?? minSlot) > minSlot) continue;
|
|
902
|
+
messages.delete(message);
|
|
903
|
+
this.awaitingBlockMessageCount--;
|
|
873
904
|
const topicType = message.topic.type;
|
|
874
905
|
this.metrics?.awaitingBlockGossipMessages.reject.inc({
|
|
875
906
|
topic: topicType,
|
|
@@ -881,22 +912,22 @@ export class NetworkProcessor {
|
|
|
881
912
|
);
|
|
882
913
|
// No need to report the dropped job to gossip. It will be eventually pruned from the mcache
|
|
883
914
|
}
|
|
884
|
-
|
|
885
|
-
}
|
|
886
|
-
if (this.awaitingMessagesByBlockRoot.delete(rootHex)) {
|
|
887
|
-
this.awaitingBlockMessageCount -= removed;
|
|
915
|
+
remaining += messages.size;
|
|
888
916
|
}
|
|
917
|
+
if (remaining === 0) this.awaitingMessagesByBlockRoot.delete(rootHex);
|
|
889
918
|
}
|
|
890
919
|
|
|
891
|
-
|
|
892
|
-
// only roots this slot did an ENVELOPE search for (envelopePeerIds set) have payload waits keyed here.
|
|
893
|
-
for (const [rootHex, entry] of searchedRoots) {
|
|
894
|
-
if (entry.envelopePeerIds === undefined) continue;
|
|
920
|
+
for (const rootHex of bufferedRoots) {
|
|
895
921
|
const messagesByTopic = this.awaitingMessagesByPayloadBlockRoot.get(rootHex);
|
|
896
922
|
if (messagesByTopic === undefined) continue;
|
|
897
|
-
let
|
|
923
|
+
let remaining = 0;
|
|
898
924
|
for (const messages of messagesByTopic.values()) {
|
|
899
925
|
for (const message of messages) {
|
|
926
|
+
// the same root may be buffered again from a newer slot, keep those messages.
|
|
927
|
+
// msgSlot is always set before buffering, a missing one expires rather than leaks
|
|
928
|
+
if ((message.msgSlot ?? minSlot) > minSlot) continue;
|
|
929
|
+
messages.delete(message);
|
|
930
|
+
this.awaitingPayloadMessageCount--;
|
|
900
931
|
const topicType = message.topic.type;
|
|
901
932
|
this.metrics?.awaitingPayloadGossipMessages.reject.inc({
|
|
902
933
|
topic: topicType,
|
|
@@ -908,18 +939,16 @@ export class NetworkProcessor {
|
|
|
908
939
|
);
|
|
909
940
|
// No need to report the dropped job to gossip. It will be eventually pruned from the mcache
|
|
910
941
|
}
|
|
911
|
-
|
|
912
|
-
}
|
|
913
|
-
if (this.awaitingMessagesByPayloadBlockRoot.delete(rootHex)) {
|
|
914
|
-
this.awaitingPayloadMessageCount -= removed;
|
|
942
|
+
remaining += messages.size;
|
|
915
943
|
}
|
|
944
|
+
if (remaining === 0) this.awaitingMessagesByPayloadBlockRoot.delete(rootHex);
|
|
916
945
|
}
|
|
917
946
|
|
|
918
|
-
this.
|
|
947
|
+
this.bufferedRootsBySlot.delete(slot);
|
|
919
948
|
}
|
|
920
949
|
|
|
921
|
-
for (const slot of this.
|
|
922
|
-
if (slot <= minSlot) this.
|
|
950
|
+
for (const slot of this.searchedRootsBySlot.keys()) {
|
|
951
|
+
if (slot <= minSlot) this.searchedRootsBySlot.delete(slot);
|
|
923
952
|
}
|
|
924
953
|
|
|
925
954
|
for (const [peer, slot] of this.fatalPeers) {
|
|
@@ -928,6 +957,7 @@ export class NetworkProcessor {
|
|
|
928
957
|
};
|
|
929
958
|
|
|
930
959
|
private executeWork(): void {
|
|
960
|
+
if (this.stopped) return;
|
|
931
961
|
// TODO: Maybe de-bounce by timing the last time executeWork was run
|
|
932
962
|
|
|
933
963
|
this.metrics?.networkProcessor.executeWorkCalls.inc();
|
|
@@ -11,7 +11,7 @@ export type GossipAttestationsWork = {
|
|
|
11
11
|
export type PendingGossipsubMessage = {
|
|
12
12
|
topic: GossipTopic;
|
|
13
13
|
msg: Message;
|
|
14
|
-
//
|
|
14
|
+
// set for every topic with a slot, held messages expire by it
|
|
15
15
|
msgSlot?: Slot;
|
|
16
16
|
msgId: string;
|
|
17
17
|
propagationSource: PeerIdStr;
|
|
@@ -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(
|
|
@@ -311,6 +304,13 @@ export class ReqRespBeaconNode extends ReqResp {
|
|
|
311
304
|
);
|
|
312
305
|
}
|
|
313
306
|
|
|
307
|
+
if (ForkSeq[fork] >= ForkSeq.heze) {
|
|
308
|
+
protocolsAtFork.push([
|
|
309
|
+
protocols.InclusionListsByIndices(fork, this.config),
|
|
310
|
+
this.getHandler(ReqRespMethod.InclusionListsByIndices),
|
|
311
|
+
]);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
314
|
return protocolsAtFork;
|
|
315
315
|
}
|
|
316
316
|
|
|
@@ -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
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {PeerId} from "@libp2p/interface";
|
|
2
|
+
import {ResponseOutgoing} from "@lodestar/reqresp";
|
|
3
|
+
import {computeEpochAtSlot, computeStartSlotAtEpoch} from "@lodestar/state-transition";
|
|
4
|
+
import {heze, ssz} from "@lodestar/types";
|
|
5
|
+
import {toRootHex} from "@lodestar/utils";
|
|
6
|
+
import {IBeaconChain} from "../../../chain/index.js";
|
|
7
|
+
import {prettyPrintPeerId} from "../../util.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Only lists that passed gossip validation are stored and the store skips equivocators, so the spec's
|
|
11
|
+
* "SHOULD NOT respond with lists that fail gossip validation or are from equivocators" holds by construction.
|
|
12
|
+
*/
|
|
13
|
+
export async function* onInclusionListsByIndices(
|
|
14
|
+
requestBody: heze.InclusionListsByIndicesRequest,
|
|
15
|
+
chain: IBeaconChain,
|
|
16
|
+
peerId: PeerId,
|
|
17
|
+
peerClient: string
|
|
18
|
+
): AsyncIterable<ResponseOutgoing> {
|
|
19
|
+
const {slot, dependentRoot, indices} = requestBody;
|
|
20
|
+
|
|
21
|
+
const minimumRequestSlot = Math.max(
|
|
22
|
+
chain.clock.currentSlot - chain.config.MIN_SLOTS_FOR_INCLUSION_LISTS_REQUESTS,
|
|
23
|
+
computeStartSlotAtEpoch(chain.config.HEZE_FORK_EPOCH)
|
|
24
|
+
);
|
|
25
|
+
if (slot < minimumRequestSlot) {
|
|
26
|
+
chain.logger.debug("Cannot serve InclusionListsByIndices: slot below minimum request slot", {
|
|
27
|
+
slot,
|
|
28
|
+
minimumRequestSlot,
|
|
29
|
+
peer: prettyPrintPeerId(peerId),
|
|
30
|
+
client: peerClient,
|
|
31
|
+
});
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const signedInclusionLists = chain.inclusionListStore.getByIndices(slot, toRootHex(dependentRoot), indices);
|
|
36
|
+
|
|
37
|
+
const boundary = chain.config.getForkBoundaryAtEpoch(computeEpochAtSlot(slot));
|
|
38
|
+
for (const signedInclusionList of signedInclusionLists.slice(0, chain.config.MAX_REQUEST_INCLUSION_LIST)) {
|
|
39
|
+
yield {
|
|
40
|
+
data: ssz.heze.SignedInclusionList.serialize(signedInclusionList),
|
|
41
|
+
boundary,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -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,12 +12,11 @@ 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";
|
|
21
18
|
import {onExecutionPayloadEnvelopesByRoot} from "./executionPayloadEnvelopesByRoot.js";
|
|
19
|
+
import {onInclusionListsByIndices} from "./inclusionListsByIndices.js";
|
|
22
20
|
import {onLightClientBootstrap} from "./lightClientBootstrap.js";
|
|
23
21
|
import {onLightClientFinalityUpdate} from "./lightClientFinalityUpdate.js";
|
|
24
22
|
import {onLightClientOptimisticUpdate} from "./lightClientOptimisticUpdate.js";
|
|
@@ -89,20 +87,6 @@ export function getReqRespHandlers({db, chain}: {db: IBeaconDb; chain: IBeaconCh
|
|
|
89
87
|
const body = deserializeRequestBody(ssz.fulu.BeaconBlocksByHeadRequest, req.data);
|
|
90
88
|
return onBeaconBlocksByHead(body, chain, peerId, peerClient);
|
|
91
89
|
},
|
|
92
|
-
[ReqRespMethod.BlobSidecarsByRoot]: (req) => {
|
|
93
|
-
const fork = chain.config.getForkName(chain.clock.currentSlot);
|
|
94
|
-
const body = deserializeRequestBody(BlobSidecarsByRootRequestType(fork, chain.config), req.data);
|
|
95
|
-
return onBlobSidecarsByRoot(body, chain);
|
|
96
|
-
},
|
|
97
|
-
[ReqRespMethod.BlobSidecarsByRange]: (req) => {
|
|
98
|
-
const body = deserializeRequestBody(ssz.deneb.BlobSidecarsByRangeRequest, req.data);
|
|
99
|
-
return trackByRangeResponse(
|
|
100
|
-
chain,
|
|
101
|
-
ReqRespMethod.BlobSidecarsByRange,
|
|
102
|
-
body.count,
|
|
103
|
-
onBlobSidecarsByRange(body, chain, db)
|
|
104
|
-
);
|
|
105
|
-
},
|
|
106
90
|
[ReqRespMethod.DataColumnSidecarsByRange]: (req, peerId, peerClient) => {
|
|
107
91
|
const body = deserializeRequestBody(ssz.fulu.DataColumnSidecarsByRangeRequest, req.data);
|
|
108
92
|
return trackByRangeResponse(
|
|
@@ -142,6 +126,10 @@ export function getReqRespHandlers({db, chain}: {db: IBeaconDb; chain: IBeaconCh
|
|
|
142
126
|
},
|
|
143
127
|
[ReqRespMethod.LightClientFinalityUpdate]: () => onLightClientFinalityUpdate(chain),
|
|
144
128
|
[ReqRespMethod.LightClientOptimisticUpdate]: () => onLightClientOptimisticUpdate(chain),
|
|
129
|
+
[ReqRespMethod.InclusionListsByIndices]: (req, peerId, peerClient) => {
|
|
130
|
+
const body = deserializeRequestBody(ssz.heze.InclusionListsByIndicesRequest, req.data);
|
|
131
|
+
return onInclusionListsByIndices(body, chain, peerId, peerClient);
|
|
132
|
+
},
|
|
145
133
|
};
|
|
146
134
|
|
|
147
135
|
return (method) => handlers[method];
|
|
@@ -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,
|
|
@@ -113,6 +101,12 @@ export const ExecutionPayloadEnvelopesByRange = toProtocol({
|
|
|
113
101
|
contextBytesType: ContextBytesType.ForkDigest,
|
|
114
102
|
});
|
|
115
103
|
|
|
104
|
+
export const InclusionListsByIndices = toProtocol({
|
|
105
|
+
method: ReqRespMethod.InclusionListsByIndices,
|
|
106
|
+
version: Version.V1,
|
|
107
|
+
contextBytesType: ContextBytesType.ForkDigest,
|
|
108
|
+
});
|
|
109
|
+
|
|
116
110
|
export const LightClientBootstrap = toProtocol({
|
|
117
111
|
method: ReqRespMethod.LightClientBootstrap,
|
|
118
112
|
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},
|
|
@@ -109,6 +93,10 @@ export const rateLimitQuotas: (fork: ForkName, config: BeaconConfig) => Record<R
|
|
|
109
93
|
// Allow 2 per slot and a very safe bound until there's more testing of real usage.
|
|
110
94
|
byPeer: {quota: 2, quotaTimeMs: config.getSlotDurationMs(fork)},
|
|
111
95
|
},
|
|
96
|
+
[ReqRespMethod.InclusionListsByIndices]: {
|
|
97
|
+
// Peers only backfill what gossip missed, so a small per-slot allowance is enough
|
|
98
|
+
byPeer: {quota: 5, quotaTimeMs: config.getSlotDurationMs(fork)},
|
|
99
|
+
},
|
|
112
100
|
[ReqRespMethod.LightClientOptimisticUpdate]: {
|
|
113
101
|
// Optimistic updates should not be requested more than once per slot.
|
|
114
102
|
// Allow 2 per slot and a very safe bound until there's more testing of real usage.
|
|
@@ -13,9 +13,9 @@ import {
|
|
|
13
13
|
SignedBeaconBlock,
|
|
14
14
|
Status,
|
|
15
15
|
altair,
|
|
16
|
-
deneb,
|
|
17
16
|
fulu,
|
|
18
17
|
gloas,
|
|
18
|
+
heze,
|
|
19
19
|
phase0,
|
|
20
20
|
ssz,
|
|
21
21
|
sszTypesFor,
|
|
@@ -23,8 +23,6 @@ import {
|
|
|
23
23
|
import {
|
|
24
24
|
BeaconBlocksByRootRequest,
|
|
25
25
|
BeaconBlocksByRootRequestType,
|
|
26
|
-
BlobSidecarsByRootRequest,
|
|
27
|
-
BlobSidecarsByRootRequestType,
|
|
28
26
|
DataColumnSidecarsByRootRequest,
|
|
29
27
|
DataColumnSidecarsByRootRequestType,
|
|
30
28
|
ExecutionPayloadEnvelopesByRootRequest,
|
|
@@ -43,8 +41,6 @@ export enum ReqRespMethod {
|
|
|
43
41
|
BeaconBlocksByRange = "beacon_blocks_by_range",
|
|
44
42
|
BeaconBlocksByRoot = "beacon_blocks_by_root",
|
|
45
43
|
BeaconBlocksByHead = "beacon_blocks_by_head",
|
|
46
|
-
BlobSidecarsByRange = "blob_sidecars_by_range",
|
|
47
|
-
BlobSidecarsByRoot = "blob_sidecars_by_root",
|
|
48
44
|
DataColumnSidecarsByRange = "data_column_sidecars_by_range",
|
|
49
45
|
DataColumnSidecarsByRoot = "data_column_sidecars_by_root",
|
|
50
46
|
ExecutionPayloadEnvelopesByRoot = "execution_payload_envelopes_by_root",
|
|
@@ -53,6 +49,7 @@ export enum ReqRespMethod {
|
|
|
53
49
|
LightClientUpdatesByRange = "light_client_updates_by_range",
|
|
54
50
|
LightClientFinalityUpdate = "light_client_finality_update",
|
|
55
51
|
LightClientOptimisticUpdate = "light_client_optimistic_update",
|
|
52
|
+
InclusionListsByIndices = "inclusion_lists_by_indices",
|
|
56
53
|
}
|
|
57
54
|
|
|
58
55
|
// To typesafe events to network
|
|
@@ -64,8 +61,6 @@ export type RequestBodyByMethod = {
|
|
|
64
61
|
[ReqRespMethod.BeaconBlocksByRange]: phase0.BeaconBlocksByRangeRequest;
|
|
65
62
|
[ReqRespMethod.BeaconBlocksByRoot]: BeaconBlocksByRootRequest;
|
|
66
63
|
[ReqRespMethod.BeaconBlocksByHead]: fulu.BeaconBlocksByHeadRequest;
|
|
67
|
-
[ReqRespMethod.BlobSidecarsByRange]: deneb.BlobSidecarsByRangeRequest;
|
|
68
|
-
[ReqRespMethod.BlobSidecarsByRoot]: BlobSidecarsByRootRequest;
|
|
69
64
|
[ReqRespMethod.DataColumnSidecarsByRange]: fulu.DataColumnSidecarsByRangeRequest;
|
|
70
65
|
[ReqRespMethod.DataColumnSidecarsByRoot]: DataColumnSidecarsByRootRequest;
|
|
71
66
|
[ReqRespMethod.ExecutionPayloadEnvelopesByRoot]: ExecutionPayloadEnvelopesByRootRequest;
|
|
@@ -74,6 +69,7 @@ export type RequestBodyByMethod = {
|
|
|
74
69
|
[ReqRespMethod.LightClientUpdatesByRange]: altair.LightClientUpdatesByRange;
|
|
75
70
|
[ReqRespMethod.LightClientFinalityUpdate]: null;
|
|
76
71
|
[ReqRespMethod.LightClientOptimisticUpdate]: null;
|
|
72
|
+
[ReqRespMethod.InclusionListsByIndices]: heze.InclusionListsByIndicesRequest;
|
|
77
73
|
};
|
|
78
74
|
|
|
79
75
|
type ResponseBodyByMethod = {
|
|
@@ -85,8 +81,6 @@ type ResponseBodyByMethod = {
|
|
|
85
81
|
[ReqRespMethod.BeaconBlocksByRange]: SignedBeaconBlock;
|
|
86
82
|
[ReqRespMethod.BeaconBlocksByRoot]: SignedBeaconBlock;
|
|
87
83
|
[ReqRespMethod.BeaconBlocksByHead]: SignedBeaconBlock;
|
|
88
|
-
[ReqRespMethod.BlobSidecarsByRange]: deneb.BlobSidecar;
|
|
89
|
-
[ReqRespMethod.BlobSidecarsByRoot]: deneb.BlobSidecar;
|
|
90
84
|
[ReqRespMethod.DataColumnSidecarsByRange]: DataColumnSidecar;
|
|
91
85
|
[ReqRespMethod.DataColumnSidecarsByRoot]: DataColumnSidecar;
|
|
92
86
|
[ReqRespMethod.ExecutionPayloadEnvelopesByRoot]: gloas.SignedExecutionPayloadEnvelope;
|
|
@@ -96,6 +90,7 @@ type ResponseBodyByMethod = {
|
|
|
96
90
|
[ReqRespMethod.LightClientUpdatesByRange]: LightClientUpdate;
|
|
97
91
|
[ReqRespMethod.LightClientFinalityUpdate]: LightClientFinalityUpdate;
|
|
98
92
|
[ReqRespMethod.LightClientOptimisticUpdate]: LightClientOptimisticUpdate;
|
|
93
|
+
[ReqRespMethod.InclusionListsByIndices]: heze.SignedInclusionList;
|
|
99
94
|
};
|
|
100
95
|
|
|
101
96
|
/** Request SSZ type for each method and ForkName */
|
|
@@ -115,8 +110,6 @@ export const requestSszTypeByMethod: (
|
|
|
115
110
|
[ReqRespMethod.BeaconBlocksByRange]: ssz.phase0.BeaconBlocksByRangeRequest,
|
|
116
111
|
[ReqRespMethod.BeaconBlocksByRoot]: BeaconBlocksByRootRequestType(fork, config),
|
|
117
112
|
[ReqRespMethod.BeaconBlocksByHead]: ssz.fulu.BeaconBlocksByHeadRequest,
|
|
118
|
-
[ReqRespMethod.BlobSidecarsByRange]: ssz.deneb.BlobSidecarsByRangeRequest,
|
|
119
|
-
[ReqRespMethod.BlobSidecarsByRoot]: BlobSidecarsByRootRequestType(fork, config),
|
|
120
113
|
[ReqRespMethod.DataColumnSidecarsByRange]: ssz.fulu.DataColumnSidecarsByRangeRequest,
|
|
121
114
|
[ReqRespMethod.DataColumnSidecarsByRoot]: DataColumnSidecarsByRootRequestType(config),
|
|
122
115
|
[ReqRespMethod.ExecutionPayloadEnvelopesByRoot]: ExecutionPayloadEnvelopesByRootRequestType(config),
|
|
@@ -126,6 +119,7 @@ export const requestSszTypeByMethod: (
|
|
|
126
119
|
[ReqRespMethod.LightClientUpdatesByRange]: ssz.altair.LightClientUpdatesByRange,
|
|
127
120
|
[ReqRespMethod.LightClientFinalityUpdate]: null,
|
|
128
121
|
[ReqRespMethod.LightClientOptimisticUpdate]: null,
|
|
122
|
+
[ReqRespMethod.InclusionListsByIndices]: ssz.heze.InclusionListsByIndicesRequest,
|
|
129
123
|
});
|
|
130
124
|
|
|
131
125
|
export type ResponseTypeGetter<T> = (fork: ForkName, version: number) => Type<T>;
|
|
@@ -147,8 +141,6 @@ export const responseSszTypeByMethod: {[K in ReqRespMethod]: ResponseTypeGetter<
|
|
|
147
141
|
[ReqRespMethod.BeaconBlocksByRange]: blocksResponseType,
|
|
148
142
|
[ReqRespMethod.BeaconBlocksByRoot]: blocksResponseType,
|
|
149
143
|
[ReqRespMethod.BeaconBlocksByHead]: (fork) => ssz[fork].SignedBeaconBlock,
|
|
150
|
-
[ReqRespMethod.BlobSidecarsByRange]: () => ssz.deneb.BlobSidecar,
|
|
151
|
-
[ReqRespMethod.BlobSidecarsByRoot]: () => ssz.deneb.BlobSidecar,
|
|
152
144
|
[ReqRespMethod.LightClientBootstrap]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientBootstrap,
|
|
153
145
|
[ReqRespMethod.LightClientUpdatesByRange]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientUpdate,
|
|
154
146
|
[ReqRespMethod.LightClientFinalityUpdate]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientFinalityUpdate,
|
|
@@ -158,6 +150,7 @@ export const responseSszTypeByMethod: {[K in ReqRespMethod]: ResponseTypeGetter<
|
|
|
158
150
|
[ReqRespMethod.ExecutionPayloadEnvelopesByRange]: () => ssz.gloas.SignedExecutionPayloadEnvelope,
|
|
159
151
|
[ReqRespMethod.LightClientOptimisticUpdate]: (fork) =>
|
|
160
152
|
sszTypesFor(onlyPostAltairFork(fork)).LightClientOptimisticUpdate,
|
|
153
|
+
[ReqRespMethod.InclusionListsByIndices]: () => ssz.heze.SignedInclusionList,
|
|
161
154
|
};
|
|
162
155
|
|
|
163
156
|
function onlyPostAltairFork(fork: ForkName): ForkPostAltair {
|