@lodestar/beacon-node 1.51.0-dev.32db66b396 → 1.51.0-dev.36022cc5cb
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 +29 -34
- 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 +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 +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 +61 -97
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +23 -51
- 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 +8 -1
- 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 +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 +8 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +7 -5
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +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/interface.d.ts +2 -0
- package/lib/chain/bls/interface.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.js +13 -11
- 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 +10 -3
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +61 -8
- 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/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 -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/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 +53 -0
- package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
- package/lib/chain/forkChoiceExecutionEngine.js +121 -0
- package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
- package/lib/chain/interface.d.ts +7 -6
- 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/produceBlock/produceBlockBody.d.ts +6 -3
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +30 -10
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- 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/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/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/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 +10 -4
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +32 -8
- 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 +28 -5
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.d.ts +5 -4
- package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.js +34 -10
- 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 +4 -3
- package/lib/execution/engine/restTransport.d.ts.map +1 -1
- package/lib/execution/engine/restTransport.js +3 -0
- 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 +4 -12
- package/lib/execution/engine/transport.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 +19 -6
- 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 -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 +16 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +35 -0
- 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 +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 +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 -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 -5
- 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/libp2p/index.d.ts.map +1 -1
- package/lib/network/libp2p/index.js +5 -1
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/network.d.ts +6 -2
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +50 -15
- 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.map +1 -1
- package/lib/network/peers/peerManager.d.ts +2 -1
- package/lib/network/peers/peerManager.d.ts.map +1 -1
- package/lib/network/peers/peerManager.js +28 -1
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.js +8 -16
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +100 -38
- 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 +11 -0
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +66 -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/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 +4 -0
- 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/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/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 +42 -18
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/execution.d.ts +4 -4
- package/lib/util/execution.d.ts.map +1 -1
- 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 -0
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +35 -2
- 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 +57 -62
- 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 +178 -39
- package/src/api/options.ts +3 -0
- package/src/chain/GetBlobsTracker.ts +99 -40
- package/src/chain/archiveStore/archiveStore.ts +1 -0
- package/src/chain/archiveStore/utils/archiveBlocks.ts +76 -130
- package/src/chain/blocks/importBlock.ts +37 -72
- 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 +9 -1
- package/src/chain/blocks/verifyBlock.ts +31 -16
- package/src/chain/blocks/verifyBlocksDataAvailability.ts +10 -1
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +1 -1
- package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
- package/src/chain/blocks/verifyBlocksSignatures.ts +7 -5
- package/src/chain/blocks/verifyPayloadsDataAvailability.ts +14 -6
- package/src/chain/bls/interface.ts +2 -0
- package/src/chain/bls/multithread/index.ts +14 -10
- 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 +71 -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 -0
- package/src/chain/forkChoice/index.ts +11 -0
- package/src/chain/forkChoiceExecutionEngine.ts +197 -0
- package/src/chain/interface.ts +7 -5
- 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/produceBlock/produceBlockBody.ts +64 -21
- package/src/chain/regen/interface.ts +2 -2
- package/src/chain/regen/queued.ts +6 -4
- 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/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/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 +52 -18
- package/src/execution/engine/index.ts +1 -1
- package/src/execution/engine/interface.ts +46 -6
- package/src/execution/engine/jsonRpcTransport.ts +56 -11
- package/src/execution/engine/mock.ts +32 -7
- package/src/execution/engine/payloadIdCache.ts +24 -6
- package/src/execution/engine/restTransport.ts +18 -2
- package/src/execution/engine/transport.ts +13 -14
- package/src/execution/engine/types.ts +44 -7
- package/src/execution/engine/utils.ts +4 -2
- package/src/index.ts +2 -0
- package/src/metrics/metrics/beacon.ts +37 -0
- package/src/metrics/metrics/lodestar.ts +36 -0
- package/src/metrics/server/http.ts +5 -5
- 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 +11 -0
- 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/libp2p/index.ts +5 -1
- package/src/network/network.ts +56 -19
- package/src/network/options.ts +2 -0
- package/src/network/peers/peerManager.ts +28 -3
- package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
- package/src/network/peers/utils/prioritizePeers.ts +14 -22
- package/src/network/processor/gossipHandlers.ts +124 -41
- package/src/network/processor/gossipQueues/index.ts +6 -0
- package/src/network/processor/gossipValidatorFn.ts +5 -0
- package/src/network/processor/index.ts +58 -27
- package/src/network/processor/types.ts +1 -1
- package/src/network/reqresp/ReqRespBeaconNode.ts +7 -0
- 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 +4 -0
- package/src/network/reqresp/types.ts +6 -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/sync.ts +65 -4
- package/src/sync/unknownBlock.ts +47 -28
- package/src/util/execution.ts +6 -6
- package/src/util/file.ts +8 -9
- package/src/util/queue/itemQueue.ts +1 -1
- package/src/util/sszBytes.ts +42 -2
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
DataAvailabilityStatus,
|
|
5
5
|
IBeaconStateView,
|
|
6
6
|
computeEpochAtSlot,
|
|
7
|
-
|
|
7
|
+
getAttestingIndices,
|
|
8
8
|
signedBlockToSignedHeader,
|
|
9
9
|
} from "@lodestar/state-transition";
|
|
10
10
|
import {IndexedAttestation, Slot, deneb} from "@lodestar/types";
|
|
@@ -119,7 +119,13 @@ export async function verifyBlocksInEpoch(
|
|
|
119
119
|
const shuffling =
|
|
120
120
|
this.shufflingCache.getSync(attEpoch, preState0.getShufflingDecisionRoot(attEpoch)) ??
|
|
121
121
|
preState0.getShufflingAtEpoch(attEpoch);
|
|
122
|
-
|
|
122
|
+
// Unlike getIndexedAttestation, keep attestingIndices in committee order: sorting them dominates building
|
|
123
|
+
// these on mainnet blocks. See FullyVerifiedBlock.indexedAttestations.
|
|
124
|
+
return {
|
|
125
|
+
attestingIndices: getAttestingIndices(shuffling, fork, attestation),
|
|
126
|
+
data: attestation.data,
|
|
127
|
+
signature: attestation.signature,
|
|
128
|
+
};
|
|
123
129
|
});
|
|
124
130
|
}
|
|
125
131
|
|
|
@@ -143,6 +149,7 @@ export async function verifyBlocksInEpoch(
|
|
|
143
149
|
? Array.from(payloadEnvelopes.values()).filter((payloadInput) => payloadInput.hasPayloadEnvelope())
|
|
144
150
|
: [];
|
|
145
151
|
const {dataAvailabilityStatuses, availableTime} = await verifyPayloadsDataAvailability(
|
|
152
|
+
this.config,
|
|
146
153
|
payloadInputsForDa,
|
|
147
154
|
abortController.signal
|
|
148
155
|
);
|
|
@@ -174,16 +181,29 @@ export async function verifyBlocksInEpoch(
|
|
|
174
181
|
const [
|
|
175
182
|
segmentExecStatus,
|
|
176
183
|
{blockDAStatuses, payloadDAStatuses, availableTime},
|
|
177
|
-
{postStates, proposerBalanceDeltas, verifyStateTime},
|
|
178
184
|
{verifySignaturesTime},
|
|
185
|
+
{postStates, proposerBalanceDeltas, verifyStateTime},
|
|
179
186
|
] = await Promise.all([
|
|
180
187
|
verifyExecutionPayloadsPromise,
|
|
181
188
|
|
|
182
189
|
// data availability (fork-specific; see daAvailabilityPromise above)
|
|
183
190
|
daAvailabilityPromise,
|
|
184
191
|
|
|
192
|
+
// All signatures at once. Must be called before verifyBlocksStateTransitionOnly()
|
|
193
|
+
// so we hand the BLS job to the worker pool before the main thread
|
|
194
|
+
// is busy with the state transition.
|
|
195
|
+
verifyBlocksSignatures(
|
|
196
|
+
this.config,
|
|
197
|
+
this.bls,
|
|
198
|
+
this.logger,
|
|
199
|
+
this.metrics,
|
|
200
|
+
preState0,
|
|
201
|
+
blocks,
|
|
202
|
+
indexedAttestationsByBlock,
|
|
203
|
+
opts
|
|
204
|
+
),
|
|
205
|
+
|
|
185
206
|
// Run state transition only
|
|
186
|
-
// TODO: Ensure it yields to allow flushing to workers and engine API
|
|
187
207
|
verifyBlocksStateTransitionOnly(
|
|
188
208
|
preState0,
|
|
189
209
|
blockInputs,
|
|
@@ -197,22 +217,17 @@ export async function verifyBlocksInEpoch(
|
|
|
197
217
|
opts
|
|
198
218
|
),
|
|
199
219
|
|
|
200
|
-
// All signatures at once
|
|
201
|
-
verifyBlocksSignatures(
|
|
202
|
-
this.config,
|
|
203
|
-
this.bls,
|
|
204
|
-
this.logger,
|
|
205
|
-
this.metrics,
|
|
206
|
-
preState0,
|
|
207
|
-
blocks,
|
|
208
|
-
indexedAttestationsByBlock,
|
|
209
|
-
opts
|
|
210
|
-
),
|
|
211
|
-
|
|
212
220
|
// TODO GLOAS: can verify payload signatures in batch too
|
|
213
221
|
// maybe chain with the above verifyBlocksSignatures()
|
|
214
222
|
]);
|
|
215
223
|
|
|
224
|
+
if (blockInputs.length === 1 && opts.seenTimestampSec !== undefined) {
|
|
225
|
+
const consensusVerifiedTime = Math.max(verifyStateTime, verifySignaturesTime);
|
|
226
|
+
this.metrics?.gossipBlock.receivedToConsensusVerifiedTime.observe(
|
|
227
|
+
consensusVerifiedTime / 1000 - opts.seenTimestampSec
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
216
231
|
for (const blockInput of blockInputs) {
|
|
217
232
|
const block = blockInput.getBlock();
|
|
218
233
|
const {slot, proposerIndex} = block.message;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import {DataAvailabilityStatus} from "@lodestar/state-transition";
|
|
2
|
+
import {TimeoutError} from "@lodestar/utils";
|
|
3
|
+
import {BlockError, BlockErrorCode} from "../errors/index.js";
|
|
2
4
|
import {DAData, DAType, IBlockInput} from "./blockInput/index.js";
|
|
3
5
|
|
|
4
6
|
// we can now wait for full 12 seconds because unavailable block sync will try pulling
|
|
@@ -22,7 +24,14 @@ export async function verifyBlocksDataAvailability(
|
|
|
22
24
|
for (const blockInput of blocks) {
|
|
23
25
|
// block verification is triggered on a verified gossip block so we only need to wait for all data
|
|
24
26
|
if (!blockInput.hasAllData()) {
|
|
25
|
-
promises.push(
|
|
27
|
+
promises.push(
|
|
28
|
+
blockInput.waitForAllData(BLOB_AVAILABILITY_TIMEOUT, signal).catch((e) => {
|
|
29
|
+
if (e instanceof TimeoutError) {
|
|
30
|
+
throw new BlockError(blockInput.getBlock(), {code: BlockErrorCode.DATA_UNAVAILABLE});
|
|
31
|
+
}
|
|
32
|
+
throw e;
|
|
33
|
+
})
|
|
34
|
+
);
|
|
26
35
|
}
|
|
27
36
|
}
|
|
28
37
|
await Promise.all(promises);
|
|
@@ -21,7 +21,7 @@ import {IBlockInput} from "./blockInput/types.js";
|
|
|
21
21
|
import {ImportBlockOpts} from "./types.js";
|
|
22
22
|
|
|
23
23
|
export type VerifyBlockExecutionPayloadModules = {
|
|
24
|
-
executionEngine: IExecutionEngine
|
|
24
|
+
executionEngine: Pick<IExecutionEngine, "notifyNewPayload">;
|
|
25
25
|
clock: IClock;
|
|
26
26
|
logger: Logger;
|
|
27
27
|
metrics: Metrics | null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
2
|
-
import {IForkChoice, ProtoBlock} from "@lodestar/fork-choice";
|
|
2
|
+
import {ExecutionStatus, IForkChoice, ProtoBlock} from "@lodestar/fork-choice";
|
|
3
3
|
import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
|
|
4
4
|
import {RootHex, Slot, isGloasBeaconBlock} from "@lodestar/types";
|
|
5
5
|
import {toRootHex} from "@lodestar/utils";
|
|
@@ -118,6 +118,9 @@ export function verifyBlocksSanityChecks(
|
|
|
118
118
|
parentBlock = parentBlockWithPayload;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
+
if (parentBlock.executionStatus === ExecutionStatus.Invalid) {
|
|
122
|
+
throw new BlockError(block, {code: BlockErrorCode.PARENT_EXECUTION_INVALID, parentRoot});
|
|
123
|
+
}
|
|
121
124
|
// Parent is known to the fork-choice
|
|
122
125
|
parentBlockSlot = parentBlock.slot;
|
|
123
126
|
}
|
|
@@ -36,10 +36,9 @@ export async function verifyBlocksSignatures(
|
|
|
36
36
|
? preState0.currentSyncCommitteeIndexed
|
|
37
37
|
: new SyncCommitteeCacheEmpty();
|
|
38
38
|
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
// so the attester and proposer shufflings are correct.
|
|
39
|
+
// Runs concurrently with the state transition. Signature sets are built from preState0, which
|
|
40
|
+
// verifyBlocksInEpoch() guarantees is in the same epoch as every block, so the proposer and attester shufflings
|
|
41
|
+
// and the sync committee are the ones the blocks were signed under.
|
|
43
42
|
for (const [i, block] of blocks.entries()) {
|
|
44
43
|
// Use [i] to make clear that the index has to be correct to blame the right block below on BlockError()
|
|
45
44
|
isValidPromises[i] = opts.validSignatures
|
|
@@ -50,7 +49,10 @@ export async function verifyBlocksSignatures(
|
|
|
50
49
|
bls.verifySignatureSets(
|
|
51
50
|
getBlockSignatureSets(config, currentSyncCommitteeIndexed, preState0, block, indexedAttestationsByBlock[i], {
|
|
52
51
|
skipProposerSignature: opts.validProposerSignature,
|
|
53
|
-
})
|
|
52
|
+
}),
|
|
53
|
+
// Prioritize block verification over attestations, since
|
|
54
|
+
// attestations already buffer up to `MAX_BUFFER_WAIT_MS`
|
|
55
|
+
{priority: true}
|
|
54
56
|
);
|
|
55
57
|
|
|
56
58
|
// getBlockSignatureSets() takes 45ms in benchmarks for 2022Q2 mainnet blocks (100 sigs). When syncing a 32 blocks
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
+
import {ChainForkConfig} from "@lodestar/config";
|
|
1
2
|
import {DataAvailabilityStatus} from "@lodestar/state-transition";
|
|
2
3
|
import {gloas} from "@lodestar/types";
|
|
4
|
+
import {TimeoutError} from "@lodestar/utils";
|
|
3
5
|
import {PayloadEnvelopeInput} from "../seenCache/seenPayloadEnvelopeInput.js";
|
|
4
|
-
|
|
5
|
-
// we can now wait for full 12 seconds because sync and reconstruction will try pulling
|
|
6
|
-
// the data columns from the network anyway while the envelope is being processed
|
|
7
|
-
export const PAYLOAD_DATA_AVAILABILITY_TIMEOUT = 12_000;
|
|
6
|
+
import {PayloadError, PayloadErrorCode} from "./importExecutionPayload.js";
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* Verifies that all payload envelope inputs have their data columns available.
|
|
11
|
-
* - Waits a max of
|
|
10
|
+
* - Waits a max of one slot duration of the payload's fork for all data to be available
|
|
12
11
|
* - Returns the time at which all data was available
|
|
13
12
|
* - Returns the data availability status for each payload input
|
|
14
13
|
*/
|
|
15
14
|
export async function verifyPayloadsDataAvailability(
|
|
15
|
+
config: ChainForkConfig,
|
|
16
16
|
payloadInputs: PayloadEnvelopeInput[],
|
|
17
17
|
signal: AbortSignal
|
|
18
18
|
): Promise<{
|
|
@@ -22,7 +22,15 @@ export async function verifyPayloadsDataAvailability(
|
|
|
22
22
|
const promises: Promise<gloas.DataColumnSidecar[]>[] = [];
|
|
23
23
|
for (const payloadInput of payloadInputs) {
|
|
24
24
|
if (!payloadInput.hasAllData()) {
|
|
25
|
-
|
|
25
|
+
// Sync and reconstruction keep pulling the data columns from the network while we wait
|
|
26
|
+
promises.push(
|
|
27
|
+
payloadInput.waitForAllData(config.getSlotDurationMs(payloadInput.forkName), signal).catch((e) => {
|
|
28
|
+
if (e instanceof TimeoutError) {
|
|
29
|
+
throw new PayloadError(payloadInput, {code: PayloadErrorCode.DATA_UNAVAILABLE});
|
|
30
|
+
}
|
|
31
|
+
throw e;
|
|
32
|
+
})
|
|
33
|
+
);
|
|
26
34
|
}
|
|
27
35
|
}
|
|
28
36
|
await Promise.all(promises);
|
|
@@ -22,6 +22,8 @@ export type VerifySignatureOpts = {
|
|
|
22
22
|
verifyOnMainThread?: boolean;
|
|
23
23
|
/**
|
|
24
24
|
* Some signature sets are more important than others, and should be verified first.
|
|
25
|
+
* Non-batchable priority jobs are posted to an idle worker before this call returns, so the caller
|
|
26
|
+
* can run synchronous work right after without delaying the verification.
|
|
25
27
|
*/
|
|
26
28
|
priority?: boolean;
|
|
27
29
|
};
|
|
@@ -333,16 +333,20 @@ export class BlsMultiThreadWorkerPool implements IBlsVerifier {
|
|
|
333
333
|
}
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
+
// First hand work to an idle worker before returning to the caller.
|
|
337
|
+
// Deferring the post to the next macrotask would make the worker
|
|
338
|
+
// sit idle while waiting for the next synchronous work
|
|
339
|
+
else if (job.opts.priority) {
|
|
340
|
+
this.jobs.unshift(job);
|
|
341
|
+
void this.runJob();
|
|
342
|
+
}
|
|
343
|
+
|
|
336
344
|
// Push job and schedule to call `runJob` in the next macro event loop cycle.
|
|
337
345
|
// This is useful to allow batching job submitted from a synchronous for loop,
|
|
338
346
|
// and to prevent large stacks since runJob may be called recursively.
|
|
339
347
|
else {
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
} else {
|
|
343
|
-
this.jobs.push(job);
|
|
344
|
-
}
|
|
345
|
-
callInNextEventLoop(this.runJob);
|
|
348
|
+
this.jobs.push(job);
|
|
349
|
+
callInNextEventLoop(() => void this.runJob());
|
|
346
350
|
}
|
|
347
351
|
}
|
|
348
352
|
|
|
@@ -377,7 +381,7 @@ export class BlsMultiThreadWorkerPool implements IBlsVerifier {
|
|
|
377
381
|
let completedJobsCount = 0;
|
|
378
382
|
|
|
379
383
|
if (this.jobs.length > 0) {
|
|
380
|
-
callInNextEventLoop(this.runJob);
|
|
384
|
+
callInNextEventLoop(() => void this.runJob());
|
|
381
385
|
}
|
|
382
386
|
|
|
383
387
|
try {
|
|
@@ -423,7 +427,7 @@ export class BlsMultiThreadWorkerPool implements IBlsVerifier {
|
|
|
423
427
|
if (workReqs.length === 0) {
|
|
424
428
|
worker.status = {code: WorkerStatusCode.idle, workerApi};
|
|
425
429
|
this.workersBusy--;
|
|
426
|
-
callInNextEventLoop(this.runJob);
|
|
430
|
+
callInNextEventLoop(() => void this.runJob());
|
|
427
431
|
return;
|
|
428
432
|
}
|
|
429
433
|
|
|
@@ -499,7 +503,7 @@ export class BlsMultiThreadWorkerPool implements IBlsVerifier {
|
|
|
499
503
|
this.workersBusy--;
|
|
500
504
|
|
|
501
505
|
// Potentially run a new job
|
|
502
|
-
callInNextEventLoop(this.runJob);
|
|
506
|
+
callInNextEventLoop(() => void this.runJob());
|
|
503
507
|
};
|
|
504
508
|
|
|
505
509
|
/**
|
|
@@ -542,7 +546,7 @@ export class BlsMultiThreadWorkerPool implements IBlsVerifier {
|
|
|
542
546
|
this.jobs.unshift(job);
|
|
543
547
|
}
|
|
544
548
|
this.bufferedJobs = null;
|
|
545
|
-
callInNextEventLoop(this.runJob);
|
|
549
|
+
callInNextEventLoop(() => void this.runJob());
|
|
546
550
|
}
|
|
547
551
|
};
|
|
548
552
|
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import worker from "node:worker_threads";
|
|
2
|
-
import {
|
|
3
|
-
type BlsSignatureSet,
|
|
4
|
-
verifySignatureSets,
|
|
5
|
-
verifySignatureSetsSameMessage,
|
|
6
|
-
} from "@chainsafe/lodestar-z/bls-verifier";
|
|
7
2
|
import {expose} from "@chainsafe/threads/worker";
|
|
3
|
+
import {type BlsSignatureSet, verifySignatureSets, verifySignatureSetsSameMessage} from "@lodestar/native/bls-verifier";
|
|
8
4
|
import {
|
|
9
5
|
BlsWorkReq,
|
|
10
6
|
BlsWorkResult,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {verifySignatureSetsSameMessage} from "@
|
|
1
|
+
import {verifySignatureSetsSameMessage} from "@lodestar/native/bls-verifier";
|
|
2
2
|
import {ISignatureSet} from "@lodestar/state-transition";
|
|
3
3
|
import {Metrics} from "../../metrics/index.js";
|
|
4
4
|
import {IBlsVerifier, SameMessageSignatureSet} from "./interface.js";
|
package/src/chain/bls/utils.ts
CHANGED
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
BLS_VERIFIER_MAX_BATCH_SIZE,
|
|
3
3
|
BLS_VERIFIER_MAX_SAME_MESSAGE_BATCH_SIZE,
|
|
4
4
|
verifySignatureSets,
|
|
5
|
-
} from "@
|
|
5
|
+
} from "@lodestar/native/bls-verifier";
|
|
6
6
|
import {ISignatureSet, SignatureSetType, toBlsSignatureSet} from "@lodestar/state-transition";
|
|
7
7
|
import {SameMessageSignatureSet} from "./interface.js";
|
|
8
8
|
|
package/src/chain/chain.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import {PrivateKey} from "@libp2p/interface";
|
|
3
|
-
import {type PubkeyCache} from "@chainsafe/lodestar-z/pubkeys";
|
|
4
3
|
import {Type} from "@chainsafe/ssz";
|
|
5
4
|
import {routes} from "@lodestar/api";
|
|
6
5
|
import {BeaconConfig} from "@lodestar/config";
|
|
7
6
|
import {
|
|
7
|
+
AncestorStatus,
|
|
8
8
|
CheckpointWithHex,
|
|
9
9
|
EpochDifference,
|
|
10
10
|
ForkChoiceStateGetter,
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
UpdateHeadOpt,
|
|
15
15
|
} from "@lodestar/fork-choice";
|
|
16
16
|
import {LoggerNode} from "@lodestar/logger/node";
|
|
17
|
+
import {type PubkeyCache} from "@lodestar/native/pubkeys";
|
|
17
18
|
import {
|
|
18
19
|
EFFECTIVE_BALANCE_INCREMENT,
|
|
19
20
|
type ForkPostFulu,
|
|
@@ -90,8 +91,9 @@ import {persistPayloadEnvelopeInput} from "./blocks/writePayloadEnvelopeInputToD
|
|
|
90
91
|
import {BlsMultiThreadWorkerPool, BlsSingleThreadVerifier, IBlsVerifier} from "./bls/index.js";
|
|
91
92
|
import {BuilderCircuitBreaker} from "./builderCircuitBreaker.js";
|
|
92
93
|
import {ColumnReconstructionTracker} from "./ColumnReconstructionTracker.js";
|
|
93
|
-
import {ChainEvent, ChainEventEmitter} from "./emitter.js";
|
|
94
|
+
import {ChainEvent, ChainEventEmitter, ReorgEventData} from "./emitter.js";
|
|
94
95
|
import {ForkchoiceCaller, initializeForkChoice} from "./forkChoice/index.js";
|
|
96
|
+
import {ForkChoiceExecutionEngine} from "./forkChoiceExecutionEngine.js";
|
|
95
97
|
import {GetBlobsTracker} from "./GetBlobsTracker.js";
|
|
96
98
|
import {CommonBlockBody, FindHeadFnName, IBeaconChain, ProposerPreparationData, StateGetOpts} from "./interface.js";
|
|
97
99
|
import {LightClientServer} from "./lightClient/index.js";
|
|
@@ -100,6 +102,7 @@ import {
|
|
|
100
102
|
AttestationPool,
|
|
101
103
|
DeferredVoluntaryExitPool,
|
|
102
104
|
ExecutionPayloadBidPool,
|
|
105
|
+
InclusionListStore,
|
|
103
106
|
OpPool,
|
|
104
107
|
PayloadAttestationPool,
|
|
105
108
|
ProposerPreferencesPool,
|
|
@@ -165,7 +168,7 @@ const DEFAULT_MAX_PENDING_UNFINALIZED_PAYLOAD_ENVELOPE_WRITES = 16;
|
|
|
165
168
|
export class BeaconChain implements IBeaconChain {
|
|
166
169
|
readonly genesisTime: UintNum64;
|
|
167
170
|
readonly genesisValidatorsRoot: Root;
|
|
168
|
-
readonly executionEngine:
|
|
171
|
+
readonly executionEngine: ForkChoiceExecutionEngine;
|
|
169
172
|
readonly executionBuilder?: IExecutionBuilder;
|
|
170
173
|
readonly builderCircuitBreaker: BuilderCircuitBreaker;
|
|
171
174
|
readonly builderApiClient: BuilderApiClient;
|
|
@@ -198,6 +201,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
198
201
|
readonly executionPayloadBidPool: ExecutionPayloadBidPool;
|
|
199
202
|
readonly payloadAttestationPool: PayloadAttestationPool;
|
|
200
203
|
readonly proposerPreferencesPool = new ProposerPreferencesPool();
|
|
204
|
+
readonly inclusionListStore: InclusionListStore;
|
|
201
205
|
readonly opPool: OpPool;
|
|
202
206
|
readonly deferredVoluntaryExitPool: DeferredVoluntaryExitPool;
|
|
203
207
|
|
|
@@ -315,7 +319,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
315
319
|
this.genesisTime = anchorState.genesisTime;
|
|
316
320
|
this.anchorStateLatestBlockSlot = anchorState.latestBlockHeader.slot;
|
|
317
321
|
this.genesisValidatorsRoot = anchorState.genesisValidatorsRoot;
|
|
318
|
-
this.executionEngine = executionEngine;
|
|
319
322
|
this.executionBuilder = executionBuilder;
|
|
320
323
|
const signal = this.abortController.signal;
|
|
321
324
|
const emitter = new ChainEventEmitter();
|
|
@@ -335,6 +338,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
335
338
|
this.payloadAttestationPool = new PayloadAttestationPool(config, clock, metrics);
|
|
336
339
|
this.opPool = new OpPool(config);
|
|
337
340
|
this.deferredVoluntaryExitPool = new DeferredVoluntaryExitPool(logger);
|
|
341
|
+
this.inclusionListStore = new InclusionListStore(config);
|
|
338
342
|
|
|
339
343
|
this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
|
|
340
344
|
this.seenContributionAndProof = new SeenContributionAndProof(metrics);
|
|
@@ -454,6 +458,12 @@ export class BeaconChain implements IBeaconChain {
|
|
|
454
458
|
this.payloadEnvelopeProcessor = new PayloadEnvelopeProcessor(this, metrics, signal);
|
|
455
459
|
|
|
456
460
|
this.forkChoice = forkChoice;
|
|
461
|
+
this.executionEngine = new ForkChoiceExecutionEngine(executionEngine, {
|
|
462
|
+
forkChoice,
|
|
463
|
+
recomputeHeadAfterELInvalidResponse: () => this.recomputeHeadAfterELInvalidResponse(),
|
|
464
|
+
logger,
|
|
465
|
+
metrics,
|
|
466
|
+
});
|
|
457
467
|
|
|
458
468
|
this.builderCircuitBreaker = new BuilderCircuitBreaker(
|
|
459
469
|
{faultInspectionWindow: opts.faultInspectionWindow, allowedFaults: opts.allowedFaults},
|
|
@@ -1427,6 +1437,58 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1427
1437
|
}
|
|
1428
1438
|
}
|
|
1429
1439
|
|
|
1440
|
+
/**
|
|
1441
|
+
* Apply chain side effects of a fork choice head change: head state, head metrics, and reorg detection
|
|
1442
|
+
*/
|
|
1443
|
+
onHeadChanged(oldHead: ProtoBlock, newHead: ProtoBlock, maybeHeadState?: IBeaconStateView): void {
|
|
1444
|
+
// Set head state as strong reference
|
|
1445
|
+
this.regen.updateHeadState(newHead, maybeHeadState);
|
|
1446
|
+
|
|
1447
|
+
const delaySec = this.clock.secFromSlot(newHead.slot);
|
|
1448
|
+
this.logger.verbose("New chain head", {
|
|
1449
|
+
slot: newHead.slot,
|
|
1450
|
+
root: newHead.blockRoot,
|
|
1451
|
+
payloadStatus: newHead.payloadStatus,
|
|
1452
|
+
delaySec,
|
|
1453
|
+
});
|
|
1454
|
+
this.metrics?.headSlot.set(newHead.slot);
|
|
1455
|
+
|
|
1456
|
+
this.onNewHead(newHead);
|
|
1457
|
+
this.metrics?.forkChoice.changedHead.inc();
|
|
1458
|
+
|
|
1459
|
+
const ancestorResult = this.forkChoice.getCommonAncestorDepth(oldHead, newHead);
|
|
1460
|
+
if (ancestorResult.code === AncestorStatus.CommonAncestor) {
|
|
1461
|
+
// CommonAncestor = chain reorg, old head and new head not direct descendants
|
|
1462
|
+
|
|
1463
|
+
const forkChoiceReorgEventData: ReorgEventData = {
|
|
1464
|
+
depth: ancestorResult.depth,
|
|
1465
|
+
epoch: computeEpochAtSlot(newHead.slot),
|
|
1466
|
+
slot: newHead.slot,
|
|
1467
|
+
newHeadBlock: newHead.blockRoot,
|
|
1468
|
+
oldHeadBlock: oldHead.blockRoot,
|
|
1469
|
+
newHeadState: newHead.stateRoot,
|
|
1470
|
+
oldHeadState: oldHead.stateRoot,
|
|
1471
|
+
executionOptimistic: isOptimisticBlock(newHead),
|
|
1472
|
+
};
|
|
1473
|
+
|
|
1474
|
+
this.emitter.emit(routes.events.EventType.chainReorg, forkChoiceReorgEventData);
|
|
1475
|
+
this.logger.verbose("Chain reorg", forkChoiceReorgEventData);
|
|
1476
|
+
|
|
1477
|
+
this.metrics?.forkChoice.reorg.inc();
|
|
1478
|
+
this.metrics?.forkChoice.reorgDistance.observe(ancestorResult.depth);
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
private recomputeHeadAfterELInvalidResponse(): void {
|
|
1483
|
+
// validateLatestHash only re-scores proto-array, the cached head is still the old one
|
|
1484
|
+
const oldHead = this.forkChoice.getHead();
|
|
1485
|
+
const newHead = this.recomputeForkChoiceHead(ForkchoiceCaller.executionInvalid);
|
|
1486
|
+
if (newHead.blockRoot === oldHead.blockRoot && newHead.payloadStatus === oldHead.payloadStatus) {
|
|
1487
|
+
return;
|
|
1488
|
+
}
|
|
1489
|
+
this.onHeadChanged(oldHead, newHead);
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1430
1492
|
/**
|
|
1431
1493
|
* Emit `head` and `head_v2` when the fork choice head differs between two observations. Every caller that
|
|
1432
1494
|
* can move the head, `updateAndGetHead()` and `updateTime()`, must capture the head before and pass both.
|
|
@@ -1483,10 +1545,10 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1483
1545
|
this.metrics?.forkChoice.requests.inc();
|
|
1484
1546
|
const timer = this.metrics?.forkChoice.findHead.startTimer({caller: FindHeadFnName.predictProposerHead});
|
|
1485
1547
|
const slot = this.clock.currentSlot;
|
|
1486
|
-
const
|
|
1548
|
+
const msFromSlot = this.clock.msFromSlot(slot);
|
|
1487
1549
|
|
|
1488
1550
|
try {
|
|
1489
|
-
return this.forkChoice.updateAndGetHead({mode: UpdateHeadOpt.GetPredictedProposerHead,
|
|
1551
|
+
return this.forkChoice.updateAndGetHead({mode: UpdateHeadOpt.GetPredictedProposerHead, msFromSlot, slot}).head;
|
|
1490
1552
|
} catch (e) {
|
|
1491
1553
|
this.metrics?.forkChoice.errors.inc({entrypoint: UpdateHeadOpt.GetPredictedProposerHead});
|
|
1492
1554
|
throw e;
|
|
@@ -1498,13 +1560,13 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1498
1560
|
getProposerHead(slot: Slot): ProtoBlock {
|
|
1499
1561
|
this.metrics?.forkChoice.requests.inc();
|
|
1500
1562
|
const timer = this.metrics?.forkChoice.findHead.startTimer({caller: FindHeadFnName.getProposerHead});
|
|
1501
|
-
const
|
|
1563
|
+
const msFromSlot = this.clock.msFromSlot(slot);
|
|
1502
1564
|
|
|
1503
1565
|
try {
|
|
1504
1566
|
// Do not emit head event here, when proposing we rely on the one emitted when importing our own block
|
|
1505
1567
|
const {head, isHeadTimely, notReorgedReason} = this.forkChoice.updateAndGetHead({
|
|
1506
1568
|
mode: UpdateHeadOpt.GetProposerHead,
|
|
1507
|
-
|
|
1569
|
+
msFromSlot,
|
|
1508
1570
|
slot,
|
|
1509
1571
|
});
|
|
1510
1572
|
|
|
@@ -1832,6 +1894,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1832
1894
|
this.executionPayloadBidPool.prune(slot);
|
|
1833
1895
|
this.seenExecutionPayloadBids.prune(slot);
|
|
1834
1896
|
this.proposerPreferencesPool.prune(slot);
|
|
1897
|
+
this.inclusionListStore.prune(slot);
|
|
1835
1898
|
this.seenAttestationDatas.onSlot(slot);
|
|
1836
1899
|
this.reprocessController.onSlot(slot);
|
|
1837
1900
|
|
|
@@ -72,7 +72,7 @@ export enum BlockErrorCode {
|
|
|
72
72
|
* whoever served the block MAY be downscored. Mirrors PayloadErrorCode.EXECUTION_ENGINE_INVALID.
|
|
73
73
|
*/
|
|
74
74
|
EXECUTION_ENGINE_INVALID = "BLOCK_ERROR_EXECUTION_INVALID",
|
|
75
|
-
/** The
|
|
75
|
+
/** The blob or column data did not arrive within the availability wait */
|
|
76
76
|
DATA_UNAVAILABLE = "BLOCK_ERROR_DATA_UNAVAILABLE",
|
|
77
77
|
/** Block contains too many kzg commitments */
|
|
78
78
|
TOO_MANY_KZG_COMMITMENTS = "BLOCK_ERROR_TOO_MANY_KZG_COMMITMENTS",
|
|
@@ -21,6 +21,8 @@ export enum ExecutionPayloadBidErrorCode {
|
|
|
21
21
|
NO_MATCHING_PROPOSER_PREFERENCES = "EXECUTION_PAYLOAD_BID_ERROR_NO_MATCHING_PROPOSER_PREFERENCES",
|
|
22
22
|
PROPOSER_PREFERENCES_FEE_RECIPIENT_MISMATCH = "EXECUTION_PAYLOAD_BID_ERROR_PROPOSER_PREFERENCES_FEE_RECIPIENT_MISMATCH",
|
|
23
23
|
PROPOSER_PREFERENCES_GAS_LIMIT_MISMATCH = "EXECUTION_PAYLOAD_BID_ERROR_PROPOSER_PREFERENCES_GAS_LIMIT_MISMATCH",
|
|
24
|
+
INCLUSION_LIST_BITS_NOT_INCLUSIVE = "EXECUTION_PAYLOAD_BID_ERROR_INCLUSION_LIST_BITS_NOT_INCLUSIVE",
|
|
25
|
+
BEFORE_INCLUSION_LIST_DEADLINE = "EXECUTION_PAYLOAD_BID_ERROR_BEFORE_INCLUSION_LIST_DEADLINE",
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
export type ExecutionPayloadBidErrorType =
|
|
@@ -86,6 +88,16 @@ export type ExecutionPayloadBidErrorType =
|
|
|
86
88
|
bidFeeRecipient: string;
|
|
87
89
|
expectedFeeRecipient: string;
|
|
88
90
|
}
|
|
91
|
+
| {
|
|
92
|
+
code: ExecutionPayloadBidErrorCode.INCLUSION_LIST_BITS_NOT_INCLUSIVE;
|
|
93
|
+
builderIndex: BuilderIndex;
|
|
94
|
+
slot: Slot;
|
|
95
|
+
}
|
|
96
|
+
| {
|
|
97
|
+
code: ExecutionPayloadBidErrorCode.BEFORE_INCLUSION_LIST_DEADLINE;
|
|
98
|
+
builderIndex: BuilderIndex;
|
|
99
|
+
slot: Slot;
|
|
100
|
+
}
|
|
89
101
|
| {
|
|
90
102
|
code: ExecutionPayloadBidErrorCode.PROPOSER_PREFERENCES_GAS_LIMIT_MISMATCH;
|
|
91
103
|
builderIndex: BuilderIndex;
|
|
@@ -12,6 +12,7 @@ export enum ExecutionPayloadEnvelopeErrorCode {
|
|
|
12
12
|
BUILDER_INDEX_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BUILDER_INDEX_MISMATCH",
|
|
13
13
|
BLOCK_HASH_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BLOCK_HASH_MISMATCH",
|
|
14
14
|
EXECUTION_REQUESTS_ROOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_EXECUTION_REQUESTS_ROOT_MISMATCH",
|
|
15
|
+
TOO_MANY_TRANSACTIONS = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_TOO_MANY_TRANSACTIONS",
|
|
15
16
|
INVALID_SIGNATURE = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_INVALID_SIGNATURE",
|
|
16
17
|
PAYLOAD_ENVELOPE_INPUT_MISSING = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_PAYLOAD_ENVELOPE_INPUT_MISSING",
|
|
17
18
|
}
|
|
@@ -54,6 +55,13 @@ export type ExecutionPayloadEnvelopeErrorType =
|
|
|
54
55
|
envelopeRequestsRoot: RootHex;
|
|
55
56
|
bidRequestsRoot: RootHex;
|
|
56
57
|
}
|
|
58
|
+
| {
|
|
59
|
+
code: ExecutionPayloadEnvelopeErrorCode.TOO_MANY_TRANSACTIONS;
|
|
60
|
+
slot: Slot;
|
|
61
|
+
root: RootHex;
|
|
62
|
+
transactionCount: number;
|
|
63
|
+
maxTransactionCount: number;
|
|
64
|
+
}
|
|
57
65
|
| {code: ExecutionPayloadEnvelopeErrorCode.INVALID_SIGNATURE; slot: Slot; root: RootHex}
|
|
58
66
|
| {code: ExecutionPayloadEnvelopeErrorCode.PAYLOAD_ENVELOPE_INPUT_MISSING; blockRoot: RootHex};
|
|
59
67
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {Epoch, RootHex, Slot, ValidatorIndex} from "@lodestar/types";
|
|
2
|
+
import {GossipActionError} from "./gossipValidation.js";
|
|
3
|
+
|
|
4
|
+
export enum InclusionListErrorCode {
|
|
5
|
+
EMPTY_TRANSACTIONS = "INCLUSION_LIST_ERROR_EMPTY_TRANSACTIONS",
|
|
6
|
+
MAXIMUM_SIZE_EXCEEDED = "INCLUSION_LIST_ERROR_MAXIMUM_SIZE_EXCEEDED",
|
|
7
|
+
EMPTY_TRANSACTION = "INCLUSION_LIST_ERROR_EMPTY_TRANSACTION",
|
|
8
|
+
INVALID_SLOT = "INCLUSION_LIST_ERROR_INVALID_SLOT",
|
|
9
|
+
MORE_THAN_TWO = "INCLUSION_LIST_ERROR_MORE_THAN_TWO",
|
|
10
|
+
VALIDATOR_NOT_IN_COMMITTEE = "INCLUSION_LIST_ERROR_VALIDATOR_NOT_IN_COMMITTEE",
|
|
11
|
+
UNKNOWN_DEPENDENT_ROOT = "INCLUSION_LIST_ERROR_UNKNOWN_DEPENDENT_ROOT",
|
|
12
|
+
INVALID_DEPENDENT_ROOT_SLOT = "INCLUSION_LIST_ERROR_INVALID_DEPENDENT_ROOT_SLOT",
|
|
13
|
+
INVALID_DEPENDENT_ROOT = "INCLUSION_LIST_ERROR_INVALID_DEPENDENT_ROOT",
|
|
14
|
+
MISSING_SHUFFLING = "INCLUSION_LIST_ERROR_MISSING_SHUFFLING",
|
|
15
|
+
INVALID_SIGNATURE = "INCLUSION_LIST_ERROR_INVALID_SIGNATURE",
|
|
16
|
+
PRE_HEZE_SLOT = "INCLUSION_LIST_ERROR_PRE_HEZE_SLOT",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type InclusionListErrorType =
|
|
20
|
+
| {code: InclusionListErrorCode.EMPTY_TRANSACTIONS}
|
|
21
|
+
| {code: InclusionListErrorCode.MAXIMUM_SIZE_EXCEEDED; totalBytes: number; maxBytes: number}
|
|
22
|
+
| {code: InclusionListErrorCode.EMPTY_TRANSACTION; transactionIndex: number}
|
|
23
|
+
| {code: InclusionListErrorCode.INVALID_SLOT; inclusionListSlot: Slot; currentSlot: Slot}
|
|
24
|
+
| {code: InclusionListErrorCode.MORE_THAN_TWO; validatorIndex: ValidatorIndex}
|
|
25
|
+
| {code: InclusionListErrorCode.VALIDATOR_NOT_IN_COMMITTEE; validatorIndex: ValidatorIndex}
|
|
26
|
+
| {code: InclusionListErrorCode.UNKNOWN_DEPENDENT_ROOT; dependentRoot: RootHex}
|
|
27
|
+
| {
|
|
28
|
+
code: InclusionListErrorCode.INVALID_DEPENDENT_ROOT_SLOT;
|
|
29
|
+
dependentRoot: RootHex;
|
|
30
|
+
dependentSlot: Slot;
|
|
31
|
+
maxSlot: Slot;
|
|
32
|
+
}
|
|
33
|
+
| {code: InclusionListErrorCode.INVALID_DEPENDENT_ROOT; dependentRoot: RootHex; epoch: Epoch}
|
|
34
|
+
| {code: InclusionListErrorCode.MISSING_SHUFFLING; dependentRoot: RootHex; epoch: Epoch}
|
|
35
|
+
| {code: InclusionListErrorCode.INVALID_SIGNATURE}
|
|
36
|
+
| {code: InclusionListErrorCode.PRE_HEZE_SLOT; inclusionListSlot: Slot};
|
|
37
|
+
|
|
38
|
+
export class InclusionListError extends GossipActionError<InclusionListErrorType> {}
|
|
@@ -8,6 +8,7 @@ export * from "./envelopeReconstructionError.js";
|
|
|
8
8
|
export * from "./executionPayloadBid.js";
|
|
9
9
|
export * from "./executionPayloadEnvelope.js";
|
|
10
10
|
export * from "./gossipValidation.js";
|
|
11
|
+
export * from "./inclusionList.js";
|
|
11
12
|
export * from "./payloadAttestation.js";
|
|
12
13
|
export * from "./proposerPreferences.js";
|
|
13
14
|
export * from "./proposerSlashingError.js";
|
|
@@ -34,6 +34,17 @@ export type ForkChoiceOpts = RawForkChoiceOpts & {
|
|
|
34
34
|
export enum ForkchoiceCaller {
|
|
35
35
|
prepareNextSlot = "prepare_next_slot",
|
|
36
36
|
importBlock = "import_block",
|
|
37
|
+
executionInvalid = "execution_invalid",
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Where an execution engine INVALID verdict comes from. Only `blockSegment` verdicts are about the payload the engine
|
|
42
|
+
* just processed and keep the consensus failure semantics in fork choice, the others are applied leniently.
|
|
43
|
+
*/
|
|
44
|
+
export enum ExecutionInvalidSource {
|
|
45
|
+
forkchoiceUpdated = "forkchoice_updated",
|
|
46
|
+
newPayload = "new_payload",
|
|
47
|
+
blockSegment = "block_segment",
|
|
37
48
|
}
|
|
38
49
|
|
|
39
50
|
/**
|