@lodestar/beacon-node 1.50.1 → 1.51.0-dev.0586e6e617
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 +36 -36
- 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 +5 -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.map +1 -1
- package/lib/api/impl/validator/index.js +136 -27
- 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/ColumnReconstructionTracker.d.ts +11 -13
- package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
- package/lib/chain/ColumnReconstructionTracker.js +49 -44
- package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
- package/lib/chain/GetBlobsTracker.d.ts +11 -0
- package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
- package/lib/chain/GetBlobsTracker.js +85 -27
- 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 +63 -100
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/blockInput/utils.js +2 -2
- package/lib/chain/blocks/blockInput/utils.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +16 -11
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +6 -11
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +58 -17
- package/lib/chain/blocks/importExecutionPayload.js.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 +12 -9
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +24 -19
- package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +4 -0
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js +5 -0
- 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 +1 -1
- 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 +8 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.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/bls/multithread/index.js +5 -5
- 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 +3 -2
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +12 -7
- package/lib/chain/chain.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/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 -0
- package/lib/chain/errors/index.d.ts.map +1 -1
- package/lib/chain/errors/index.js +1 -0
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/interface.d.ts +5 -5
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +23 -10
- 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 +1 -0
- package/lib/chain/opPools/index.d.ts.map +1 -1
- package/lib/chain/opPools/index.js +1 -0
- package/lib/chain/opPools/index.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.js +17 -7
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
- package/lib/chain/opPools/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 +0 -1
- 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/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +4 -3
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +37 -15
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +1 -1
- 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/reprocess.d.ts +2 -1
- package/lib/chain/reprocess.d.ts.map +1 -1
- package/lib/chain/reprocess.js +2 -1
- package/lib/chain/reprocess.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.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/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.map +1 -1
- package/lib/chain/validatorMonitor.js +6 -4
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/constants/constants.d.ts +1 -0
- package/lib/constants/constants.d.ts.map +1 -1
- package/lib/constants/constants.js +1 -0
- package/lib/constants/constants.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/blockArchive.js +2 -2
- package/lib/db/repositories/blockArchive.js.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.js +1 -2
- package/lib/db/repositories/blockArchiveIndex.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/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 +8 -2
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +27 -4
- 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 +2 -2
- package/lib/execution/engine/index.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +12 -3
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcHttpClient.js +14 -4
- package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.d.ts +3 -2
- package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.js +33 -9
- package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +31 -7
- 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 +5 -2
- package/lib/execution/engine/restTransport.d.ts.map +1 -1
- package/lib/execution/engine/restTransport.js +36 -21
- package/lib/execution/engine/restTransport.js.map +1 -1
- package/lib/execution/engine/sszTypes.d.ts +38 -38
- package/lib/execution/engine/transport.d.ts +5 -2
- package/lib/execution/engine/transport.d.ts.map +1 -1
- package/lib/execution/engine/transportMetrics.d.ts +5 -1
- package/lib/execution/engine/transportMetrics.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +25 -1
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +31 -17
- package/lib/execution/engine/types.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 -0
- package/lib/metrics/metrics/beacon.d.ts.map +1 -1
- package/lib/metrics/metrics/beacon.js +35 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +26 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +61 -1
- package/lib/metrics/metrics/lodestar.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 +2 -0
- package/lib/network/core/networkCore.d.ts.map +1 -1
- package/lib/network/core/networkCore.js +3 -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 -0
- 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 +2 -0
- package/lib/network/core/types.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.js +3 -1
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +8 -2
- package/lib/network/gossip/interface.d.ts.map +1 -1
- package/lib/network/gossip/interface.js +1 -0
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +13 -19
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +13 -1
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +4 -1
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +4 -1
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +11 -1
- package/lib/network/network.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.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/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +76 -27
- 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 +6 -0
- 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 +5 -1
- package/lib/network/processor/gossipValidatorFn.js.map +1 -1
- package/lib/network/processor/index.d.ts +5 -0
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +40 -29
- 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 +6 -0
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +4 -4
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +3 -3
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.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 +5 -0
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +1 -0
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +5 -0
- 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 +6 -2
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +5 -2
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +3 -0
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/subnets/attnetsService.d.ts.map +1 -1
- package/lib/network/subnets/attnetsService.js +3 -1
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/node/nodejs.d.ts +1 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +10 -2
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.d.ts.map +1 -1
- package/lib/node/notifier.js +12 -13
- package/lib/node/notifier.js.map +1 -1
- package/lib/node/options.d.ts +1 -1
- package/lib/node/options.d.ts.map +1 -1
- package/lib/node/options.js +1 -1
- 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/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 +45 -20
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/clock.d.ts.map +1 -1
- package/lib/util/clock.js +3 -4
- package/lib/util/clock.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 +2 -2
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +24 -16
- package/lib/util/sszBytes.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 +67 -65
- package/src/api/impl/beacon/index.ts +3 -1
- package/src/api/impl/beacon/pool/index.ts +5 -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 +176 -29
- package/src/api/options.ts +3 -0
- package/src/chain/ColumnReconstructionTracker.ts +63 -46
- package/src/chain/GetBlobsTracker.ts +97 -38
- package/src/chain/archiveStore/archiveStore.ts +1 -0
- package/src/chain/archiveStore/utils/archiveBlocks.ts +78 -133
- package/src/chain/blocks/blockInput/blockInput.ts +1 -1
- package/src/chain/blocks/blockInput/utils.ts +2 -2
- package/src/chain/blocks/importBlock.ts +19 -18
- package/src/chain/blocks/importExecutionPayload.ts +81 -23
- package/src/chain/blocks/index.ts +6 -2
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
- package/src/chain/blocks/types.ts +5 -0
- package/src/chain/blocks/verifyBlock.ts +1 -0
- package/src/chain/blocks/verifyBlocksDataAvailability.ts +10 -1
- package/src/chain/blocks/verifyPayloadsDataAvailability.ts +14 -6
- package/src/chain/bls/multithread/index.ts +5 -5
- 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 +13 -7
- package/src/chain/errors/blockError.ts +1 -1
- package/src/chain/errors/executionPayloadBid.ts +12 -0
- package/src/chain/errors/inclusionList.ts +38 -0
- package/src/chain/errors/index.ts +1 -0
- package/src/chain/interface.ts +6 -4
- package/src/chain/opPools/aggregatedAttestationPool.ts +25 -9
- package/src/chain/opPools/attestationPool.ts +16 -4
- package/src/chain/opPools/inclusionListStore.ts +208 -0
- package/src/chain/opPools/index.ts +1 -0
- package/src/chain/opPools/payloadAttestationPool.ts +18 -7
- 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 +0 -2
- package/src/chain/prepareNextSlot.ts +7 -3
- package/src/chain/produceBlock/computeNewStateRoot.ts +9 -2
- package/src/chain/produceBlock/produceBlockBody.ts +70 -24
- package/src/chain/regen/interface.ts +1 -1
- package/src/chain/reprocess.ts +2 -1
- package/src/chain/seenCache/seenGossipBlockInput.ts +2 -1
- package/src/chain/stateCache/persistentCheckpointsCache.ts +4 -1
- package/src/chain/validation/executionPayloadBid.ts +54 -183
- package/src/chain/validation/inclusionList.ts +192 -0
- package/src/chain/validation/index.ts +1 -0
- package/src/chain/validatorMonitor.ts +7 -4
- package/src/constants/constants.ts +1 -0
- 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/blockArchive.ts +2 -2
- package/src/db/repositories/blockArchiveIndex.ts +2 -3
- package/src/db/repositories/dataColumnSidecarArchive.ts +20 -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 +40 -5
- package/src/execution/engine/index.ts +3 -2
- package/src/execution/engine/interface.ts +28 -4
- package/src/execution/engine/jsonRpcHttpClient.ts +12 -5
- package/src/execution/engine/jsonRpcTransport.ts +46 -9
- package/src/execution/engine/mock.ts +32 -7
- package/src/execution/engine/payloadIdCache.ts +24 -6
- package/src/execution/engine/restTransport.ts +68 -23
- package/src/execution/engine/transport.ts +7 -2
- package/src/execution/engine/transportMetrics.ts +2 -1
- package/src/execution/engine/types.ts +56 -17
- package/src/index.ts +2 -0
- package/src/metrics/metrics/beacon.ts +37 -0
- package/src/metrics/metrics/lodestar.ts +63 -1
- package/src/monitoring/service.ts +1 -1
- package/src/network/core/networkCore.ts +5 -0
- package/src/network/core/networkCoreWorker.ts +1 -0
- package/src/network/core/networkCoreWorkerHandler.ts +4 -0
- package/src/network/core/types.ts +2 -0
- package/src/network/gossip/gossipsub.ts +3 -1
- package/src/network/gossip/interface.ts +5 -0
- package/src/network/gossip/topic.ts +14 -0
- package/src/network/interface.ts +4 -0
- package/src/network/network.ts +19 -1
- package/src/network/peers/peerManager.ts +1 -1
- package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
- package/src/network/peers/utils/enrSubnetsDeserialize.ts +5 -2
- package/src/network/processor/gossipHandlers.ts +96 -29
- package/src/network/processor/gossipQueues/index.ts +6 -0
- package/src/network/processor/gossipValidatorFn.ts +5 -0
- package/src/network/processor/index.ts +36 -27
- package/src/network/processor/types.ts +1 -1
- package/src/network/reqresp/ReqRespBeaconNode.ts +7 -0
- package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +4 -10
- package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +3 -3
- package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
- package/src/network/reqresp/handlers/index.ts +5 -0
- package/src/network/reqresp/protocols.ts +6 -0
- package/src/network/reqresp/rateLimit.ts +6 -2
- package/src/network/reqresp/types.ts +6 -0
- package/src/network/subnets/attnetsService.ts +8 -3
- package/src/node/nodejs.ts +24 -7
- package/src/node/notifier.ts +14 -13
- package/src/node/options.ts +4 -5
- package/src/sync/interface.ts +1 -0
- package/src/sync/sync.ts +65 -4
- package/src/sync/unknownBlock.ts +50 -30
- package/src/util/clock.ts +3 -4
- package/src/util/file.ts +8 -9
- package/src/util/queue/itemQueue.ts +1 -1
- package/src/util/sszBytes.ts +27 -14
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {BitArray} from "@chainsafe/ssz";
|
|
2
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
3
2
|
import {
|
|
4
3
|
IForkChoice,
|
|
@@ -16,10 +15,10 @@ import {
|
|
|
16
15
|
ForkPostGloas,
|
|
17
16
|
ForkPreGloas,
|
|
18
17
|
ForkSeq,
|
|
19
|
-
INCLUSION_LIST_COMMITTEE_SIZE,
|
|
20
18
|
isForkPostAltair,
|
|
21
19
|
isForkPostBellatrix,
|
|
22
20
|
isForkPostGloas,
|
|
21
|
+
isForkPostHeze,
|
|
23
22
|
} from "@lodestar/params";
|
|
24
23
|
import {
|
|
25
24
|
G2_POINT_AT_INFINITY,
|
|
@@ -80,7 +79,7 @@ import {kzg} from "../../util/kzg.js";
|
|
|
80
79
|
import {BeaconProposerCache} from "../beaconProposerCache.js";
|
|
81
80
|
import type {BeaconChain} from "../chain.js";
|
|
82
81
|
import {CommonBlockBody} from "../interface.js";
|
|
83
|
-
import {ProposerPreferencesPool} from "../opPools/index.js";
|
|
82
|
+
import {InclusionListStore, ProposerPreferencesPool} from "../opPools/index.js";
|
|
84
83
|
import {validateBlobsAndKzgCommitments, validateCellsAndKzgCommitments} from "./validateBlobsAndKzgCommitments.js";
|
|
85
84
|
|
|
86
85
|
// Time to provide the EL to generate a payload from new payload id
|
|
@@ -390,8 +389,19 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
390
389
|
executionRequestsRoot: ssz.gloas.ExecutionRequests.hashTreeRoot(executionRequests as gloas.ExecutionRequests),
|
|
391
390
|
};
|
|
392
391
|
if (ForkSeq[fork] >= ForkSeq.heze) {
|
|
393
|
-
//
|
|
394
|
-
|
|
392
|
+
// Built from the full view (only_timely=False), a superset of the receiver's timely-only
|
|
393
|
+
// is_inclusion_list_bits_inclusive check
|
|
394
|
+
const inclusionListSlot = blockSlot - 1;
|
|
395
|
+
(bid as heze.ExecutionPayloadBid).inclusionListBits = this.inclusionListStore.getInclusionListBits(
|
|
396
|
+
inclusionListSlot,
|
|
397
|
+
getShufflingDependentRoot(
|
|
398
|
+
this.forkChoice,
|
|
399
|
+
computeEpochAtSlot(inclusionListSlot),
|
|
400
|
+
computeEpochAtSlot(parentBlock.slot),
|
|
401
|
+
parentBlock
|
|
402
|
+
),
|
|
403
|
+
false
|
|
404
|
+
);
|
|
395
405
|
}
|
|
396
406
|
const signedBid: gloas.SignedExecutionPayloadBid = {
|
|
397
407
|
message: bid,
|
|
@@ -684,12 +694,11 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
684
694
|
executionPayloadValue = BigInt(0);
|
|
685
695
|
}
|
|
686
696
|
|
|
687
|
-
const {graffiti, attestations,
|
|
697
|
+
const {graffiti, attestations, voluntaryExits, attesterSlashings, proposerSlashings} = blockBody;
|
|
688
698
|
|
|
689
699
|
Object.assign(logMeta, {
|
|
690
700
|
graffiti: fromGraffitiBytes(graffiti),
|
|
691
701
|
attestations: attestations.length,
|
|
692
|
-
deposits: deposits.length,
|
|
693
702
|
voluntaryExits: voluntaryExits.length,
|
|
694
703
|
attesterSlashings: attesterSlashings.length,
|
|
695
704
|
proposerSlashings: proposerSlashings.length,
|
|
@@ -737,6 +746,7 @@ export async function prepareExecutionPayload(
|
|
|
737
746
|
config: ChainForkConfig;
|
|
738
747
|
forkChoice: IForkChoice;
|
|
739
748
|
proposerPreferencesPool: ProposerPreferencesPool;
|
|
749
|
+
inclusionListStore: InclusionListStore;
|
|
740
750
|
},
|
|
741
751
|
logger: Logger,
|
|
742
752
|
fork: ForkPostBellatrix,
|
|
@@ -756,12 +766,25 @@ export async function prepareExecutionPayload(
|
|
|
756
766
|
const timestamp = computeTimeAtSlot(chain.config, state.slot, state.genesisTime);
|
|
757
767
|
const prevRandao = state.getRandaoMix(state.epoch);
|
|
758
768
|
|
|
769
|
+
// Post-heze the inclusion lists are part of the cache key, so a list set that changed since the
|
|
770
|
+
// payload was prepared triggers a new forkchoiceUpdated instead of reusing a payload built without them
|
|
771
|
+
let attributes = payloadAttributes;
|
|
772
|
+
if (attributes === undefined && ForkSeq[fork] >= ForkSeq.heze) {
|
|
773
|
+
attributes = preparePayloadAttributes(fork, chain, {
|
|
774
|
+
prepareState: state,
|
|
775
|
+
prepareSlot: state.slot,
|
|
776
|
+
parentBlockRoot,
|
|
777
|
+
parentBlockHash,
|
|
778
|
+
feeRecipient: suggestedFeeRecipient,
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
|
|
759
782
|
const payloadIdCached = chain.executionEngine.payloadIdCache.get({
|
|
760
783
|
headBlockHash: toRootHex(parentBlockHash),
|
|
761
|
-
finalizedBlockHash,
|
|
762
784
|
timestamp: numToQuantity(timestamp),
|
|
763
785
|
prevRandao: toHex(prevRandao),
|
|
764
786
|
suggestedFeeRecipient,
|
|
787
|
+
inclusionListTransactions: attributes?.inclusionListTransactions,
|
|
765
788
|
});
|
|
766
789
|
|
|
767
790
|
// prepareExecutionPayload will throw error via notifyForkchoiceUpdate if
|
|
@@ -782,22 +805,19 @@ export async function prepareExecutionPayload(
|
|
|
782
805
|
prepType = PayloadPreparationType.Fresh;
|
|
783
806
|
}
|
|
784
807
|
|
|
785
|
-
const attributes: PayloadAttributes =
|
|
786
|
-
payloadAttributes ??
|
|
787
|
-
preparePayloadAttributes(fork, chain, {
|
|
788
|
-
prepareState: state,
|
|
789
|
-
prepareSlot: state.slot,
|
|
790
|
-
parentBlockRoot,
|
|
791
|
-
parentBlockHash,
|
|
792
|
-
feeRecipient: suggestedFeeRecipient,
|
|
793
|
-
});
|
|
794
|
-
|
|
795
808
|
payloadId = await chain.executionEngine.notifyForkchoiceUpdate(
|
|
796
809
|
fork,
|
|
797
810
|
toRootHex(parentBlockHash),
|
|
798
811
|
safeBlockHash,
|
|
799
812
|
finalizedBlockHash,
|
|
800
|
-
attributes
|
|
813
|
+
attributes ??
|
|
814
|
+
preparePayloadAttributes(fork, chain, {
|
|
815
|
+
prepareState: state,
|
|
816
|
+
prepareSlot: state.slot,
|
|
817
|
+
parentBlockRoot,
|
|
818
|
+
parentBlockHash,
|
|
819
|
+
feeRecipient: suggestedFeeRecipient,
|
|
820
|
+
})
|
|
801
821
|
);
|
|
802
822
|
logger.verbose("Prepared payload id from execution engine", {payloadId});
|
|
803
823
|
}
|
|
@@ -842,6 +862,7 @@ export function getPayloadAttributesForSSE(
|
|
|
842
862
|
config: ChainForkConfig;
|
|
843
863
|
forkChoice: IForkChoice;
|
|
844
864
|
proposerPreferencesPool: ProposerPreferencesPool;
|
|
865
|
+
inclusionListStore: InclusionListStore;
|
|
845
866
|
},
|
|
846
867
|
{
|
|
847
868
|
prepareState,
|
|
@@ -898,6 +919,7 @@ function preparePayloadAttributes(
|
|
|
898
919
|
config: ChainForkConfig;
|
|
899
920
|
forkChoice: IForkChoice;
|
|
900
921
|
proposerPreferencesPool: ProposerPreferencesPool;
|
|
922
|
+
inclusionListStore: InclusionListStore;
|
|
901
923
|
},
|
|
902
924
|
{
|
|
903
925
|
prepareState,
|
|
@@ -966,8 +988,27 @@ function preparePayloadAttributes(
|
|
|
966
988
|
}
|
|
967
989
|
|
|
968
990
|
if (ForkSeq[fork] >= ForkSeq.heze) {
|
|
969
|
-
//
|
|
970
|
-
|
|
991
|
+
// Built from the full view including untimely lists (only_timely=False in prepare_execution_payload),
|
|
992
|
+
// a superset of the timely-only set every validator enforces
|
|
993
|
+
const parentBlockRootHex = toRootHex(parentBlockRoot);
|
|
994
|
+
const parentBlock = chain.forkChoice.getBlockHexAndBlockHash(parentBlockRootHex, toRootHex(parentBlockHash));
|
|
995
|
+
if (parentBlock === null) {
|
|
996
|
+
throw new Error(
|
|
997
|
+
`Parent block not in fork choice for Heze payload attributes parentBlockRoot=${parentBlockRootHex} parentBlockHash=${toRootHex(parentBlockHash)}`
|
|
998
|
+
);
|
|
999
|
+
}
|
|
1000
|
+
const inclusionListSlot = prepareSlot - 1;
|
|
1001
|
+
(payloadAttributes as heze.SSEPayloadAttributes["payloadAttributes"]).inclusionListTransactions =
|
|
1002
|
+
chain.inclusionListStore.getInclusionListTransactions(
|
|
1003
|
+
inclusionListSlot,
|
|
1004
|
+
getShufflingDependentRoot(
|
|
1005
|
+
chain.forkChoice,
|
|
1006
|
+
computeEpochAtSlot(inclusionListSlot),
|
|
1007
|
+
computeEpochAtSlot(parentBlock.slot),
|
|
1008
|
+
parentBlock
|
|
1009
|
+
),
|
|
1010
|
+
false
|
|
1011
|
+
);
|
|
971
1012
|
}
|
|
972
1013
|
|
|
973
1014
|
return payloadAttributes;
|
|
@@ -1106,16 +1147,21 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
1106
1147
|
});
|
|
1107
1148
|
|
|
1108
1149
|
// Live proposal production is supported from Fulu onward.
|
|
1109
|
-
|
|
1150
|
+
const commonBlockBody: CommonBlockBody = {
|
|
1110
1151
|
randaoReveal,
|
|
1111
1152
|
graffiti,
|
|
1112
|
-
eth1Data: currentState.eth1Data,
|
|
1113
1153
|
proposerSlashings: this.opts.disableProposerSlashings === true ? [] : proposerSlashings,
|
|
1114
1154
|
attesterSlashings,
|
|
1115
1155
|
attestations,
|
|
1116
|
-
deposits: [],
|
|
1117
1156
|
voluntaryExits,
|
|
1118
1157
|
blsToExecutionChanges,
|
|
1119
1158
|
syncAggregate,
|
|
1120
1159
|
};
|
|
1160
|
+
|
|
1161
|
+
if (!isForkPostHeze(fork)) {
|
|
1162
|
+
commonBlockBody.eth1Data = currentState.eth1Data;
|
|
1163
|
+
commonBlockBody.deposits = [];
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
return commonBlockBody;
|
|
1121
1167
|
}
|
|
@@ -24,7 +24,7 @@ export enum RegenCaller {
|
|
|
24
24
|
validateApiVoluntaryExit = "validateApiVoluntaryExit",
|
|
25
25
|
publishDeferredVoluntaryExits = "publishDeferredVoluntaryExits",
|
|
26
26
|
validateGossipExecutionPayloadBid = "validateGossipExecutionPayloadBid",
|
|
27
|
-
|
|
27
|
+
validateGossipInclusionList = "validateGossipInclusionList",
|
|
28
28
|
validateGossipPayloadAttestationMessage = "validateGossipPayloadAttestationMessage",
|
|
29
29
|
validateGossipProposerPreferences = "validateGossipProposerPreferences",
|
|
30
30
|
onForkChoiceFinalized = "onForkChoiceFinalized",
|
package/src/chain/reprocess.ts
CHANGED
|
@@ -5,8 +5,9 @@ import {Metrics} from "../metrics/index.js";
|
|
|
5
5
|
/**
|
|
6
6
|
* To prevent our node from having to reprocess while struggling to sync,
|
|
7
7
|
* we only want to reprocess attestations if block reaches our node before this time.
|
|
8
|
+
* Expressed in basis points of slot duration (1667 BPS = 2s for 12s slots).
|
|
8
9
|
*/
|
|
9
|
-
export const
|
|
10
|
+
export const REPROCESS_MIN_TIME_TO_NEXT_SLOT_BPS = 1667;
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Reprocess status for metrics
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
ForkName,
|
|
5
5
|
ForkPostFulu,
|
|
6
6
|
ForkPostGloas,
|
|
7
|
+
ForkPreDeneb,
|
|
7
8
|
ForkPreGloas,
|
|
8
9
|
SLOTS_PER_EPOCH,
|
|
9
10
|
isForkPostDeneb,
|
|
@@ -240,7 +241,7 @@ export class SeenBlockInput {
|
|
|
240
241
|
} else if (!isForkPostDeneb(forkName)) {
|
|
241
242
|
// Pre-deneb
|
|
242
243
|
blockInput = BlockInputPreData.createFromBlock({
|
|
243
|
-
block
|
|
244
|
+
block: block as SignedBeaconBlock<ForkPreDeneb>,
|
|
244
245
|
blockRootHex,
|
|
245
246
|
daOutOfRange,
|
|
246
247
|
forkName,
|
|
@@ -592,7 +592,10 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
592
592
|
}
|
|
593
593
|
|
|
594
594
|
const blockSlot = state.slot;
|
|
595
|
-
const processCPStatesTimeMs = this.config.getSlotComponentDurationMs(
|
|
595
|
+
const processCPStatesTimeMs = this.config.getSlotComponentDurationMs(
|
|
596
|
+
this.config.getForkName(blockSlot),
|
|
597
|
+
PROCESS_CHECKPOINT_STATES_BPS
|
|
598
|
+
);
|
|
596
599
|
// we always have clock in production, fallback value is only for test
|
|
597
600
|
const msFromSlot = this.clock?.msFromSlot(blockSlot) ?? processCPStatesTimeMs;
|
|
598
601
|
const msToProcessCPStates = processCPStatesTimeMs - msFromSlot;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ProtoBlock} from "@lodestar/fork-choice";
|
|
2
|
-
import {PAYLOAD_BUILDER_VERSION} from "@lodestar/params";
|
|
2
|
+
import {PAYLOAD_BUILDER_VERSION, isForkPostHeze} from "@lodestar/params";
|
|
3
3
|
import {
|
|
4
4
|
computeEpochAtSlot,
|
|
5
5
|
createSingleSignatureSetFromComponents,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
isStartSlotOfEpoch,
|
|
10
10
|
isStatePostGloas,
|
|
11
11
|
} from "@lodestar/state-transition";
|
|
12
|
-
import {RootHex, Slot, ValidatorIndex, gloas} from "@lodestar/types";
|
|
12
|
+
import {RootHex, Slot, ValidatorIndex, gloas, heze} from "@lodestar/types";
|
|
13
13
|
import {byteArrayEquals, toHex, toRootHex} from "@lodestar/utils";
|
|
14
14
|
import {getShufflingDependentRoot} from "../../util/dependentRoot.js";
|
|
15
15
|
import {ExecutionPayloadBidError, ExecutionPayloadBidErrorCode, GossipAction} from "../errors/index.js";
|
|
@@ -83,174 +83,6 @@ function isBidCompatibleWithHead(
|
|
|
83
83
|
return buildsOnParentPayload;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
/**
|
|
87
|
-
* Validation for bids submitted via the API by the operator's own builder.
|
|
88
|
-
*
|
|
89
|
-
* Only non-transient checks are applied: slot later than parent, zero execution payment, blob
|
|
90
|
-
* commitment count, builder eligibility, version and balance coverage, prev_randao, and signature.
|
|
91
|
-
* Transient gossip rules (head compatibility, first bid per tuple, value increment, proposer
|
|
92
|
-
* preferences) are not applied, since those only limit forwarding of peers' messages and the
|
|
93
|
-
* builder may legitimately bid on a branch this node does not consider head.
|
|
94
|
-
* The parent-payload builder-exit rule is omitted because this endpoint only accepts bids from
|
|
95
|
-
* the operator's own builder.
|
|
96
|
-
*
|
|
97
|
-
* Throws on any failed check. Also throws if the bid's parent block is unknown or its state is
|
|
98
|
-
* unavailable, since the checks cannot be evaluated against the parent branch.
|
|
99
|
-
*/
|
|
100
|
-
export async function validateApiExecutionPayloadBid(
|
|
101
|
-
chain: IBeaconChain,
|
|
102
|
-
signedExecutionPayloadBid: gloas.SignedExecutionPayloadBid
|
|
103
|
-
): Promise<void> {
|
|
104
|
-
const bid = signedExecutionPayloadBid.message;
|
|
105
|
-
const bidParentBlockRoot = toRootHex(bid.parentBlockRoot);
|
|
106
|
-
|
|
107
|
-
// [REJECT] `bid.execution_payment` is zero.
|
|
108
|
-
if (bid.executionPayment !== 0n) {
|
|
109
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
110
|
-
code: ExecutionPayloadBidErrorCode.NON_ZERO_EXECUTION_PAYMENT,
|
|
111
|
-
builderIndex: bid.builderIndex,
|
|
112
|
-
executionPayment: bid.executionPayment,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// [REJECT] The bid's block hash is not equal to its parent block hash -- i.e.
|
|
117
|
-
// `bid.block_hash != bid.parent_block_hash`.
|
|
118
|
-
if (byteArrayEquals(bid.blockHash, bid.parentBlockHash)) {
|
|
119
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
120
|
-
code: ExecutionPayloadBidErrorCode.BLOCK_HASH_EQUALS_PARENT_BLOCK_HASH,
|
|
121
|
-
blockHash: toRootHex(bid.blockHash),
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// [REJECT] The length of KZG commitments is less than or equal to the limitation defined in the
|
|
126
|
-
// consensus layer -- i.e. validate that
|
|
127
|
-
// `len(bid.blob_kzg_commitments) <= get_blob_parameters(compute_epoch_at_slot(bid.slot)).max_blobs_per_block`.
|
|
128
|
-
const blobKzgCommitmentsLen = bid.blobKzgCommitments.length;
|
|
129
|
-
const maxBlobsPerBlock = chain.config.getMaxBlobsPerBlock(computeEpochAtSlot(bid.slot));
|
|
130
|
-
if (blobKzgCommitmentsLen > maxBlobsPerBlock) {
|
|
131
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
132
|
-
code: ExecutionPayloadBidErrorCode.TOO_MANY_KZG_COMMITMENTS,
|
|
133
|
-
blobKzgCommitmentsLen,
|
|
134
|
-
commitmentLimit: maxBlobsPerBlock,
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// [IGNORE] `bid.slot` is the current slot, or the next slot (`bid.slot - 1` is current), allowing for `MAXIMUM_GOSSIP_CLOCK_DISPARITY`.
|
|
139
|
-
if (
|
|
140
|
-
!chain.clock.isCurrentSlotGivenGossipDisparity(bid.slot) &&
|
|
141
|
-
!chain.clock.isCurrentSlotGivenGossipDisparity(bid.slot - 1)
|
|
142
|
-
) {
|
|
143
|
-
throw new ExecutionPayloadBidError(GossipAction.IGNORE, {
|
|
144
|
-
code: ExecutionPayloadBidErrorCode.INVALID_SLOT,
|
|
145
|
-
builderIndex: bid.builderIndex,
|
|
146
|
-
slot: bid.slot,
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// [IGNORE] `bid.parent_block_root` is the hash tree root of a known beacon block in fork choice.
|
|
151
|
-
// Moved earlier than the spec ordering so we can derive the proposer dependent root for the
|
|
152
|
-
// proposer-preferences lookup below from a known fork-choice block.
|
|
153
|
-
const parentBlock = chain.forkChoice.getBlockHexDefaultStatus(bidParentBlockRoot);
|
|
154
|
-
if (parentBlock === null) {
|
|
155
|
-
throw new ExecutionPayloadBidError(GossipAction.IGNORE, {
|
|
156
|
-
code: ExecutionPayloadBidErrorCode.UNKNOWN_BLOCK_ROOT,
|
|
157
|
-
parentBlockRoot: bidParentBlockRoot,
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// [REJECT] The bid is for a higher slot than its parent block -- i.e.
|
|
162
|
-
// validate that `bid.slot` is greater than the slot of the block with root
|
|
163
|
-
// `bid.parent_block_root`.
|
|
164
|
-
if (bid.slot <= parentBlock.slot) {
|
|
165
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
166
|
-
code: ExecutionPayloadBidErrorCode.NOT_LATER_THAN_PARENT,
|
|
167
|
-
parentSlot: parentBlock.slot,
|
|
168
|
-
slot: bid.slot,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const state = await chain.regen
|
|
173
|
-
.getBlockSlotState(parentBlock, bid.slot, {dontTransferCache: true}, RegenCaller.validateApiExecutionPayloadBid)
|
|
174
|
-
.catch(() => {
|
|
175
|
-
throw new ExecutionPayloadBidError(GossipAction.IGNORE, {
|
|
176
|
-
code: ExecutionPayloadBidErrorCode.UNKNOWN_BLOCK_ROOT,
|
|
177
|
-
parentBlockRoot: bidParentBlockRoot,
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
if (!isStatePostGloas(state)) {
|
|
182
|
-
throw new Error(`Expected gloas+ state for execution payload bid validation, got fork=${state.forkName}`);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// [REJECT] `bid.builder_index` is within bounds -- i.e. `bid.builder_index < len(state.builders)`.
|
|
186
|
-
// `state.getBuilder` returns a lazy SSZ `getReadonly` view that is not bounds-checked eagerly; an
|
|
187
|
-
// out-of-range index only throws (`LeafNode has no right node`) on deferred field access (e.g. inside
|
|
188
|
-
// `isActiveBuilder`), escaping a try/catch around `getBuilder`. Check the length explicitly instead.
|
|
189
|
-
if (bid.builderIndex >= state.getBuildersLength()) {
|
|
190
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
191
|
-
code: ExecutionPayloadBidErrorCode.BUILDER_NOT_ELIGIBLE,
|
|
192
|
-
builderIndex: bid.builderIndex,
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// [REJECT] `bid.builder_index` is a valid/active builder index -- i.e.
|
|
197
|
-
// `is_active_builder(state, bid.builder_index)` returns `True`.
|
|
198
|
-
const builder = state.getBuilder(bid.builderIndex);
|
|
199
|
-
if (!isActiveBuilder(builder, state.finalizedCheckpoint.epoch)) {
|
|
200
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
201
|
-
code: ExecutionPayloadBidErrorCode.BUILDER_NOT_ELIGIBLE,
|
|
202
|
-
builderIndex: bid.builderIndex,
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// [REJECT] The builder version is `PAYLOAD_BUILDER_VERSION` -- i.e.
|
|
207
|
-
// `state.builders[bid.builder_index].version == PAYLOAD_BUILDER_VERSION`.
|
|
208
|
-
if (builder.version !== PAYLOAD_BUILDER_VERSION) {
|
|
209
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
210
|
-
code: ExecutionPayloadBidErrorCode.INVALID_BUILDER_VERSION,
|
|
211
|
-
builderIndex: bid.builderIndex,
|
|
212
|
-
version: builder.version,
|
|
213
|
-
expectedVersion: PAYLOAD_BUILDER_VERSION,
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// [IGNORE] `bid.value` is less or equal than the builder's excess balance --
|
|
218
|
-
// i.e. `can_builder_cover_bid(state, builder_index, amount)` returns `True`.
|
|
219
|
-
if (!state.canBuilderCoverBid(bid.builderIndex, bid.value)) {
|
|
220
|
-
throw new ExecutionPayloadBidError(GossipAction.IGNORE, {
|
|
221
|
-
code: ExecutionPayloadBidErrorCode.BID_TOO_HIGH,
|
|
222
|
-
bidValue: bid.value,
|
|
223
|
-
builderBalance: builder.balance,
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// [REJECT] `bid.prev_randao` is the correct RANDAO mix -- i.e. validate that
|
|
228
|
-
// `bid.prev_randao == get_randao_mix(parent_state, get_current_epoch(parent_state))`.
|
|
229
|
-
const randaoMix = state.getRandaoMix(computeEpochAtSlot(state.slot));
|
|
230
|
-
if (!byteArrayEquals(bid.prevRandao, randaoMix)) {
|
|
231
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
232
|
-
code: ExecutionPayloadBidErrorCode.INVALID_PREV_RANDAO,
|
|
233
|
-
builderIndex: bid.builderIndex,
|
|
234
|
-
bidPrevRandao: toHex(bid.prevRandao),
|
|
235
|
-
expectedPrevRandao: toHex(randaoMix),
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// [REJECT] `signed_execution_payload_bid.signature` is valid with respect to the `bid.builder_index`.
|
|
240
|
-
const signatureSet = createSingleSignatureSetFromComponents(
|
|
241
|
-
builder.pubkey,
|
|
242
|
-
getExecutionPayloadBidSigningRoot(chain.config, bid),
|
|
243
|
-
signedExecutionPayloadBid.signature
|
|
244
|
-
);
|
|
245
|
-
if (!(await chain.bls.verifySignatureSets([signatureSet]))) {
|
|
246
|
-
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
247
|
-
code: ExecutionPayloadBidErrorCode.INVALID_SIGNATURE,
|
|
248
|
-
builderIndex: bid.builderIndex,
|
|
249
|
-
slot: bid.slot,
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
86
|
export async function validateGossipExecutionPayloadBid(
|
|
255
87
|
chain: IBeaconChain,
|
|
256
88
|
signedExecutionPayloadBid: gloas.SignedExecutionPayloadBid
|
|
@@ -309,6 +141,18 @@ async function validateExecutionPayloadBid(
|
|
|
309
141
|
});
|
|
310
142
|
}
|
|
311
143
|
|
|
144
|
+
// [IGNORE] The bid is received after the inclusion list deadline of `bid.slot - 1`
|
|
145
|
+
if (
|
|
146
|
+
isForkPostHeze(chain.config.getForkName(bid.slot)) &&
|
|
147
|
+
chain.clock.msFromSlot(bid.slot - 1) < chain.config.getInclusionListDueMs(chain.config.getForkName(bid.slot - 1))
|
|
148
|
+
) {
|
|
149
|
+
throw new ExecutionPayloadBidError(GossipAction.IGNORE, {
|
|
150
|
+
code: ExecutionPayloadBidErrorCode.BEFORE_INCLUSION_LIST_DEADLINE,
|
|
151
|
+
builderIndex: bid.builderIndex,
|
|
152
|
+
slot: bid.slot,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
312
156
|
// [IGNORE] The bid is compatible with the current head branch.
|
|
313
157
|
const head = chain.forkChoice.getHead();
|
|
314
158
|
if (!isBidCompatibleWithHead(chain, head, bid.slot, bidParentBlockRoot, bidParentBlockHash)) {
|
|
@@ -335,6 +179,20 @@ async function validateExecutionPayloadBid(
|
|
|
335
179
|
});
|
|
336
180
|
}
|
|
337
181
|
|
|
182
|
+
// [IGNORE] this bid is the highest value bid seen for the tuple
|
|
183
|
+
// `(bid.slot, bid.parent_block_hash, bid.parent_block_root)`.
|
|
184
|
+
// As a DoS prevention measure, the bid must also exceed the current highest bid by a minimum
|
|
185
|
+
// increment, see https://github.com/ethereum/consensus-specs/pull/4831. This prevents spam
|
|
186
|
+
// from builders submitting numerous bids with minimal value increments.
|
|
187
|
+
const bestBid = chain.executionPayloadBidPool.getBestBid(bid.slot, bidParentBlockHash, bidParentBlockRoot);
|
|
188
|
+
if (bestBid !== null && bid.value < getMinBidValue(bestBid.signedBid.message.value)) {
|
|
189
|
+
throw new ExecutionPayloadBidError(GossipAction.IGNORE, {
|
|
190
|
+
code: ExecutionPayloadBidErrorCode.BID_TOO_LOW,
|
|
191
|
+
bidValue: bid.value,
|
|
192
|
+
currentHighestBid: bestBid.signedBid.message.value,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
|
|
338
196
|
// [IGNORE] `bid.parent_block_root` is the hash tree root of a known beacon block in fork choice.
|
|
339
197
|
// Moved earlier than the spec ordering so we can derive the proposer dependent root for the
|
|
340
198
|
// proposer-preferences lookup below from a known fork-choice block.
|
|
@@ -357,6 +215,32 @@ async function validateExecutionPayloadBid(
|
|
|
357
215
|
});
|
|
358
216
|
}
|
|
359
217
|
|
|
218
|
+
// [IGNORE] bid.inclusionListBits is inclusive of our timely inclusion lists for
|
|
219
|
+
// (bid.slot - 1, get_shuffling_dependent_root(store, bid.parent_block_root, epoch)).
|
|
220
|
+
if (isForkPostHeze(chain.config.getForkName(bid.slot))) {
|
|
221
|
+
const {inclusionListBits} = bid as heze.ExecutionPayloadBid;
|
|
222
|
+
const inclusionListSlot = bid.slot - 1;
|
|
223
|
+
const inclusionListDependentRoot = getShufflingDependentRoot(
|
|
224
|
+
chain.forkChoice,
|
|
225
|
+
computeEpochAtSlot(inclusionListSlot),
|
|
226
|
+
computeEpochAtSlot(parentBlock.slot),
|
|
227
|
+
parentBlock
|
|
228
|
+
);
|
|
229
|
+
if (
|
|
230
|
+
!chain.inclusionListStore.isInclusionListBitsInclusive(
|
|
231
|
+
inclusionListSlot,
|
|
232
|
+
inclusionListDependentRoot,
|
|
233
|
+
inclusionListBits
|
|
234
|
+
)
|
|
235
|
+
) {
|
|
236
|
+
throw new ExecutionPayloadBidError(GossipAction.IGNORE, {
|
|
237
|
+
code: ExecutionPayloadBidErrorCode.INCLUSION_LIST_BITS_NOT_INCLUSIVE,
|
|
238
|
+
builderIndex: bid.builderIndex,
|
|
239
|
+
slot: bid.slot,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
360
244
|
// [IGNORE] A `SignedProposerPreferences` matching `bid.slot` and the bid's branch has been
|
|
361
245
|
// seen — i.e. `proposal_slot == bid.slot` AND `dependent_root ==
|
|
362
246
|
// get_proposer_dependent_root(parent_state, compute_epoch_at_slot(bid.slot))`.
|
|
@@ -482,19 +366,6 @@ async function validateExecutionPayloadBid(
|
|
|
482
366
|
});
|
|
483
367
|
}
|
|
484
368
|
|
|
485
|
-
// [IGNORE] this bid is the highest value bid seen for the tuple
|
|
486
|
-
// `(bid.slot, bid.parent_block_hash, bid.parent_block_root)`.
|
|
487
|
-
// As a DoS prevention measure, the bid must also exceed the current highest bid by a minimum
|
|
488
|
-
// increment, see https://github.com/ethereum/consensus-specs/pull/4831. This prevents spam
|
|
489
|
-
// from builders submitting numerous bids with minimal value increments.
|
|
490
|
-
const bestBid = chain.executionPayloadBidPool.getBestBid(bid.slot, bidParentBlockHash, bidParentBlockRoot);
|
|
491
|
-
if (bestBid !== null && bid.value < getMinBidValue(bestBid.signedBid.message.value)) {
|
|
492
|
-
throw new ExecutionPayloadBidError(GossipAction.IGNORE, {
|
|
493
|
-
code: ExecutionPayloadBidErrorCode.BID_TOO_LOW,
|
|
494
|
-
bidValue: bid.value,
|
|
495
|
-
currentHighestBid: bestBid.signedBid.message.value,
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
369
|
// [IGNORE] `bid.value` is less or equal than the builder's excess balance --
|
|
499
370
|
// i.e. `can_builder_cover_bid(state, builder_index, amount)` returns `True`.
|
|
500
371
|
if (!state.canBuilderCoverBid(bid.builderIndex, bid.value)) {
|