@lodestar/beacon-node 1.42.0-rc.0 → 1.43.0-dev.05a33e512f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +37 -9
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +49 -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 +13 -10
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +2 -2
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- 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 +0 -1
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/lodestar/attesterSlashing.d.ts +8 -0
- package/lib/api/impl/lodestar/attesterSlashing.d.ts.map +1 -0
- package/lib/api/impl/lodestar/attesterSlashing.js +29 -0
- package/lib/api/impl/lodestar/attesterSlashing.js.map +1 -0
- package/lib/api/impl/lodestar/index.d.ts.map +1 -1
- package/lib/api/impl/lodestar/index.js +40 -1
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +74 -5
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/GetBlobsTracker.d.ts +1 -1
- package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
- package/lib/chain/GetBlobsTracker.js +1 -2
- package/lib/chain/GetBlobsTracker.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/interface.d.ts +4 -4
- package/lib/chain/archiveStore/interface.d.ts.map +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -4
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +2 -2
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +110 -58
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +3 -0
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js +4 -1
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +40 -58
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +32 -14
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +107 -87
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/blocks/index.d.ts +5 -3
- package/lib/chain/blocks/index.d.ts.map +1 -1
- package/lib/chain/blocks/index.js +58 -26
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +15 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +48 -2
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +17 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -5
- package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +16 -21
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
- package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.js +89 -12
- package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts +5 -3
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +50 -7
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +8 -4
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +25 -5
- 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 +4 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +80 -0
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +14 -0
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -0
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js +30 -0
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +2 -11
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +9 -6
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +73 -49
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +16 -15
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/emitter.js +5 -4
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/attestationError.d.ts +8 -1
- package/lib/chain/errors/attestationError.d.ts.map +1 -1
- package/lib/chain/errors/attestationError.js +4 -0
- package/lib/chain/errors/attestationError.js.map +1 -1
- package/lib/chain/errors/blockError.d.ts +18 -1
- package/lib/chain/errors/blockError.d.ts.map +1 -1
- package/lib/chain/errors/blockError.js +6 -0
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
- package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadBid.js +1 -0
- package/lib/chain/errors/executionPayloadBid.js.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
- package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
- package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/errors/index.d.ts +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/errors/proposerPreferences.d.ts +40 -0
- package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
- package/lib/chain/errors/proposerPreferences.js +14 -0
- package/lib/chain/errors/proposerPreferences.js.map +1 -0
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +21 -23
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +6 -1
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +8 -5
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.d.ts +2 -2
- package/lib/chain/lightClient/index.d.ts.map +1 -1
- package/lib/chain/lightClient/index.js +7 -0
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +5 -2
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
- package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
- package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
- package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
- package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.js +26 -4
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +48 -18
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts +1 -7
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js +1 -28
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +15 -10
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +83 -21
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/errors.d.ts +1 -11
- package/lib/chain/regen/errors.d.ts.map +1 -1
- package/lib/chain/regen/errors.js +0 -2
- package/lib/chain/regen/errors.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +7 -12
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +1 -0
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +6 -11
- package/lib/chain/regen/queued.d.ts.map +1 -1
- package/lib/chain/regen/queued.js +9 -44
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +0 -5
- package/lib/chain/regen/regen.d.ts.map +1 -1
- package/lib/chain/regen/regen.js +8 -38
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/index.d.ts +1 -0
- package/lib/chain/seenCache/index.d.ts.map +1 -1
- package/lib/chain/seenCache/index.js +1 -0
- package/lib/chain/seenCache/index.js.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +24 -7
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +69 -17
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
- package/lib/chain/seenCache/seenProposerPreferences.d.ts +16 -0
- package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
- package/lib/chain/seenCache/seenProposerPreferences.js +26 -0
- package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
- package/lib/chain/stateCache/datastore/db.d.ts +5 -4
- package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
- package/lib/chain/stateCache/datastore/db.js +10 -32
- package/lib/chain/stateCache/datastore/db.js.map +1 -1
- package/lib/chain/stateCache/datastore/file.d.ts +1 -1
- package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
- package/lib/chain/stateCache/datastore/file.js +5 -5
- package/lib/chain/stateCache/datastore/file.js.map +1 -1
- package/lib/chain/stateCache/datastore/types.d.ts +1 -1
- package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -7
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.js +0 -8
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +13 -30
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +120 -216
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +8 -15
- package/lib/chain/stateCache/types.d.ts.map +1 -1
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.js +12 -0
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts.map +1 -1
- package/lib/chain/validation/attestation.js +12 -0
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/block.d.ts.map +1 -1
- package/lib/chain/validation/block.js +28 -5
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +30 -12
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js +27 -12
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +8 -4
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
- package/lib/chain/validation/proposerPreferences.d.ts +8 -0
- package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
- package/lib/chain/validation/proposerPreferences.js +91 -0
- package/lib/chain/validation/proposerPreferences.js.map +1 -0
- package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/syncCommittee.js +4 -0
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +4 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +3 -3
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/repositories/executionPayloadEnvelopeArchive.js +1 -1
- package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +21 -14
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +1 -0
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +6 -0
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/types.d.ts +20 -0
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +18 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +1 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +4 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +7 -1
- 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/scoringParameters.d.ts.map +1 -1
- package/lib/network/gossip/scoringParameters.js +12 -1
- package/lib/network/gossip/scoringParameters.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +13 -2
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +6 -0
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +1 -0
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +1 -0
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +6 -1
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +64 -22
- 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 +5 -0
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +6 -5
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js +16 -7
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -0
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +2 -2
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js +18 -8
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +6 -0
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +2 -2
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +24 -8
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +9 -5
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +3 -8
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +7 -2
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.d.ts.map +1 -1
- package/lib/node/notifier.js +2 -2
- package/lib/node/notifier.js.map +1 -1
- package/lib/sync/constants.d.ts +3 -1
- package/lib/sync/constants.d.ts.map +1 -1
- package/lib/sync/constants.js +3 -4
- package/lib/sync/constants.js.map +1 -1
- package/lib/sync/range/batch.d.ts +35 -5
- package/lib/sync/range/batch.d.ts.map +1 -1
- package/lib/sync/range/batch.js +240 -59
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +19 -4
- package/lib/sync/range/chain.d.ts.map +1 -1
- package/lib/sync/range/chain.js +64 -11
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts.map +1 -1
- package/lib/sync/range/range.js +31 -9
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/sync.d.ts.map +1 -1
- package/lib/sync/sync.js +13 -0
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/types.d.ts +34 -0
- package/lib/sync/types.d.ts.map +1 -1
- package/lib/sync/types.js +34 -0
- package/lib/sync/types.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +29 -1
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +738 -61
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +67 -10
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +211 -26
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRoot.js +16 -2
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
- package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
- package/lib/sync/utils/pendingBlocksTree.js +0 -9
- package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +20 -5
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +17 -16
- package/src/api/impl/beacon/blocks/index.ts +51 -9
- package/src/api/impl/beacon/pool/index.ts +87 -1
- package/src/api/impl/beacon/state/index.ts +15 -15
- package/src/api/impl/beacon/state/utils.ts +2 -2
- package/src/api/impl/debug/index.ts +0 -1
- package/src/api/impl/lodestar/attesterSlashing.ts +43 -0
- package/src/api/impl/lodestar/index.ts +52 -2
- package/src/api/impl/validator/index.ts +91 -6
- package/src/chain/GetBlobsTracker.ts +1 -2
- package/src/chain/archiveStore/archiveStore.ts +5 -5
- package/src/chain/archiveStore/interface.ts +4 -4
- package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +6 -8
- package/src/chain/archiveStore/utils/archiveBlocks.ts +153 -94
- package/src/chain/blocks/blockInput/blockInput.ts +4 -1
- package/src/chain/blocks/importBlock.ts +45 -86
- package/src/chain/blocks/importExecutionPayload.ts +133 -103
- package/src/chain/blocks/index.ts +72 -24
- package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +64 -3
- package/src/chain/blocks/payloadEnvelopeInput/types.ts +18 -0
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -6
- package/src/chain/blocks/types.ts +16 -26
- package/src/chain/blocks/utils/chainSegment.ts +114 -17
- package/src/chain/blocks/verifyBlock.ts +70 -9
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +8 -5
- package/src/chain/blocks/verifyBlocksSanityChecks.ts +26 -7
- package/src/chain/blocks/verifyBlocksSignatures.ts +9 -2
- package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +137 -0
- package/src/chain/blocks/verifyPayloadsDataAvailability.ts +41 -0
- package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +9 -18
- package/src/chain/chain.ts +102 -72
- package/src/chain/emitter.ts +15 -14
- package/src/chain/errors/attestationError.ts +6 -1
- package/src/chain/errors/blockError.ts +10 -1
- package/src/chain/errors/executionPayloadBid.ts +6 -0
- package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
- package/src/chain/errors/index.ts +1 -0
- package/src/chain/errors/proposerPreferences.ts +47 -0
- package/src/chain/forkChoice/index.ts +19 -28
- package/src/chain/initState.ts +9 -1
- package/src/chain/interface.ts +16 -3
- package/src/chain/lightClient/index.ts +15 -3
- package/src/chain/opPools/aggregatedAttestationPool.ts +6 -1
- package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
- package/src/chain/opPools/payloadAttestationPool.ts +29 -8
- package/src/chain/prepareNextSlot.ts +58 -19
- package/src/chain/produceBlock/computeNewStateRoot.ts +1 -37
- package/src/chain/produceBlock/produceBlockBody.ts +120 -26
- package/src/chain/regen/errors.ts +1 -6
- package/src/chain/regen/interface.ts +7 -12
- package/src/chain/regen/queued.ts +14 -55
- package/src/chain/regen/regen.ts +10 -43
- package/src/chain/seenCache/index.ts +1 -0
- package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +89 -21
- package/src/chain/seenCache/seenProposerPreferences.ts +32 -0
- package/src/chain/stateCache/datastore/db.ts +10 -33
- package/src/chain/stateCache/datastore/file.ts +5 -6
- package/src/chain/stateCache/datastore/types.ts +2 -3
- package/src/chain/stateCache/fifoBlockStateCache.ts +1 -10
- package/src/chain/stateCache/persistentCheckpointsCache.ts +139 -247
- package/src/chain/stateCache/types.ts +8 -14
- package/src/chain/validation/aggregateAndProof.ts +13 -0
- package/src/chain/validation/attestation.ts +13 -0
- package/src/chain/validation/block.ts +31 -7
- package/src/chain/validation/executionPayloadBid.ts +32 -11
- package/src/chain/validation/executionPayloadEnvelope.ts +32 -13
- package/src/chain/validation/payloadAttestationMessage.ts +9 -3
- package/src/chain/validation/proposerPreferences.ts +110 -0
- package/src/chain/validation/syncCommittee.ts +5 -1
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -1
- package/src/chain/validatorMonitor.ts +3 -2
- package/src/db/repositories/executionPayloadEnvelopeArchive.ts +1 -1
- package/src/execution/engine/http.ts +21 -14
- package/src/execution/engine/interface.ts +1 -0
- package/src/execution/engine/mock.ts +8 -1
- package/src/execution/engine/types.ts +41 -0
- package/src/metrics/metrics/lodestar.ts +4 -0
- package/src/network/gossip/interface.ts +6 -0
- package/src/network/gossip/scoringParameters.ts +14 -1
- package/src/network/gossip/topic.ts +6 -0
- package/src/network/interface.ts +1 -0
- package/src/network/network.ts +12 -1
- package/src/network/processor/gossipHandlers.ts +84 -27
- package/src/network/processor/gossipQueues/index.ts +5 -0
- package/src/network/processor/index.ts +6 -5
- package/src/network/reqresp/handlers/beaconBlocksByRange.ts +17 -7
- package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +3 -0
- package/src/network/reqresp/handlers/blobSidecarsByRange.ts +26 -8
- package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +11 -0
- package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +36 -8
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +10 -5
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +3 -12
- package/src/node/nodejs.ts +8 -3
- package/src/node/notifier.ts +7 -2
- package/src/sync/constants.ts +4 -4
- package/src/sync/range/batch.ts +320 -67
- package/src/sync/range/chain.ts +89 -14
- package/src/sync/range/range.ts +34 -9
- package/src/sync/sync.ts +13 -1
- package/src/sync/types.ts +72 -0
- package/src/sync/unknownBlock.ts +928 -65
- package/src/sync/utils/downloadByRange.ts +378 -39
- package/src/sync/utils/downloadByRoot.ts +24 -2
- package/src/sync/utils/pendingBlocksTree.ts +0 -15
- package/src/util/sszBytes.ts +25 -5
package/src/chain/chain.ts
CHANGED
|
@@ -2,23 +2,14 @@ import path from "node:path";
|
|
|
2
2
|
import {PrivateKey} from "@libp2p/interface";
|
|
3
3
|
import {Type} from "@chainsafe/ssz";
|
|
4
4
|
import {BeaconConfig} from "@lodestar/config";
|
|
5
|
-
import {
|
|
6
|
-
CheckpointWithPayloadStatus,
|
|
7
|
-
IForkChoice,
|
|
8
|
-
PayloadStatus,
|
|
9
|
-
ProtoBlock,
|
|
10
|
-
UpdateHeadOpt,
|
|
11
|
-
getCheckpointPayloadStatus,
|
|
12
|
-
} from "@lodestar/fork-choice";
|
|
5
|
+
import {CheckpointWithHex, IForkChoice, ProtoBlock, UpdateHeadOpt} from "@lodestar/fork-choice";
|
|
13
6
|
import {LoggerNode} from "@lodestar/logger/node";
|
|
14
7
|
import {
|
|
15
|
-
BUILDER_INDEX_SELF_BUILD,
|
|
16
8
|
EFFECTIVE_BALANCE_INCREMENT,
|
|
17
9
|
type ForkPostFulu,
|
|
18
10
|
type ForkPostGloas,
|
|
19
11
|
GENESIS_SLOT,
|
|
20
12
|
SLOTS_PER_EPOCH,
|
|
21
|
-
isForkPostElectra,
|
|
22
13
|
isForkPostGloas,
|
|
23
14
|
} from "@lodestar/params";
|
|
24
15
|
import {
|
|
@@ -30,6 +21,9 @@ import {
|
|
|
30
21
|
computeEpochAtSlot,
|
|
31
22
|
computeStartSlotAtEpoch,
|
|
32
23
|
getEffectiveBalancesFromStateBytes,
|
|
24
|
+
isStatePostAltair,
|
|
25
|
+
isStatePostElectra,
|
|
26
|
+
isStatePostGloas,
|
|
33
27
|
} from "@lodestar/state-transition";
|
|
34
28
|
import {
|
|
35
29
|
BeaconBlock,
|
|
@@ -46,6 +40,7 @@ import {
|
|
|
46
40
|
ValidatorIndex,
|
|
47
41
|
Wei,
|
|
48
42
|
deneb,
|
|
43
|
+
electra,
|
|
49
44
|
gloas,
|
|
50
45
|
isBlindedBeaconBlock,
|
|
51
46
|
phase0,
|
|
@@ -98,8 +93,8 @@ import {
|
|
|
98
93
|
} from "./opPools/index.js";
|
|
99
94
|
import {IChainOptions} from "./options.js";
|
|
100
95
|
import {PrepareNextSlotScheduler} from "./prepareNextSlot.js";
|
|
101
|
-
import {
|
|
102
|
-
import {AssembledBlockType, BlockType,
|
|
96
|
+
import {computeNewStateRoot} from "./produceBlock/computeNewStateRoot.js";
|
|
97
|
+
import {AssembledBlockType, BlockType, ProduceResult} from "./produceBlock/index.js";
|
|
103
98
|
import {BlockAttributes, produceBlockBody, produceCommonBlockBody} from "./produceBlock/produceBlockBody.js";
|
|
104
99
|
import {QueuedStateRegenerator, RegenCaller} from "./regen/index.js";
|
|
105
100
|
import {ReprocessController} from "./reprocess.js";
|
|
@@ -112,6 +107,7 @@ import {
|
|
|
112
107
|
SeenExecutionPayloadBids,
|
|
113
108
|
SeenPayloadAttesters,
|
|
114
109
|
SeenPayloadEnvelopeInput,
|
|
110
|
+
SeenProposerPreferences,
|
|
115
111
|
SeenSyncCommitteeMessages,
|
|
116
112
|
} from "./seenCache/index.js";
|
|
117
113
|
import {SeenAggregatedAttestations} from "./seenCache/seenAggregateAndProof.js";
|
|
@@ -123,7 +119,7 @@ import {DbCPStateDatastore, checkpointToDatastoreKey} from "./stateCache/datasto
|
|
|
123
119
|
import {FileCPStateDatastore} from "./stateCache/datastore/file.js";
|
|
124
120
|
import {CPStateDatastore} from "./stateCache/datastore/types.js";
|
|
125
121
|
import {FIFOBlockStateCache} from "./stateCache/fifoBlockStateCache.js";
|
|
126
|
-
import {PersistentCheckpointStateCache
|
|
122
|
+
import {PersistentCheckpointStateCache} from "./stateCache/persistentCheckpointsCache.js";
|
|
127
123
|
import {CheckpointStateCache} from "./stateCache/types.js";
|
|
128
124
|
import {ValidatorMonitor} from "./validatorMonitor.js";
|
|
129
125
|
|
|
@@ -192,6 +188,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
192
188
|
readonly seenPayloadAttesters = new SeenPayloadAttesters();
|
|
193
189
|
readonly seenAggregatedAttestations: SeenAggregatedAttestations;
|
|
194
190
|
readonly seenExecutionPayloadBids = new SeenExecutionPayloadBids();
|
|
191
|
+
readonly seenProposerPreferences = new SeenProposerPreferences();
|
|
195
192
|
readonly seenBlockProposers = new SeenBlockProposers();
|
|
196
193
|
readonly seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
|
|
197
194
|
readonly seenContributionAndProof: SeenContributionAndProof;
|
|
@@ -339,13 +336,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
339
336
|
metrics,
|
|
340
337
|
logger,
|
|
341
338
|
});
|
|
342
|
-
this.seenPayloadEnvelopeInputCache = new SeenPayloadEnvelopeInput({
|
|
343
|
-
chainEvents: emitter,
|
|
344
|
-
signal,
|
|
345
|
-
serializedCache: this.serializedCache,
|
|
346
|
-
metrics,
|
|
347
|
-
logger,
|
|
348
|
-
});
|
|
349
339
|
|
|
350
340
|
this._earliestAvailableSlot = anchorState.slot;
|
|
351
341
|
|
|
@@ -388,8 +378,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
388
378
|
const {checkpoint} = anchorState.computeAnchorCheckpoint();
|
|
389
379
|
blockStateCache.add(anchorState);
|
|
390
380
|
blockStateCache.setHeadState(anchorState);
|
|
391
|
-
|
|
392
|
-
checkpointStateCache.add(checkpoint, anchorState, payloadPresent);
|
|
381
|
+
checkpointStateCache.add(checkpoint, anchorState);
|
|
393
382
|
|
|
394
383
|
const forkChoice = initializeForkChoice(
|
|
395
384
|
config,
|
|
@@ -402,6 +391,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
402
391
|
metrics,
|
|
403
392
|
logger
|
|
404
393
|
);
|
|
394
|
+
|
|
405
395
|
const regen = new QueuedStateRegenerator({
|
|
406
396
|
config,
|
|
407
397
|
forkChoice,
|
|
@@ -426,6 +416,33 @@ export class BeaconChain implements IBeaconChain {
|
|
|
426
416
|
this.payloadEnvelopeProcessor = new PayloadEnvelopeProcessor(this, metrics, signal);
|
|
427
417
|
|
|
428
418
|
this.forkChoice = forkChoice;
|
|
419
|
+
|
|
420
|
+
this.seenPayloadEnvelopeInputCache = new SeenPayloadEnvelopeInput({
|
|
421
|
+
config,
|
|
422
|
+
clock,
|
|
423
|
+
forkChoice,
|
|
424
|
+
chainEvents: emitter,
|
|
425
|
+
signal,
|
|
426
|
+
serializedCache: this.serializedCache,
|
|
427
|
+
metrics,
|
|
428
|
+
logger,
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
const anchorBlockSlot = anchorState.latestBlockHeader.slot;
|
|
432
|
+
if (isStatePostGloas(anchorState) && anchorBlockSlot > 0) {
|
|
433
|
+
const anchorBid = anchorState.latestExecutionPayloadBid;
|
|
434
|
+
this.seenPayloadEnvelopeInputCache.addFromBid({
|
|
435
|
+
blockRootHex: toRootHex(checkpoint.root),
|
|
436
|
+
slot: anchorBlockSlot,
|
|
437
|
+
forkName: anchorState.forkName,
|
|
438
|
+
proposerIndex: anchorState.latestBlockHeader.proposerIndex,
|
|
439
|
+
bid: anchorBid,
|
|
440
|
+
sampledColumns: this.custodyConfig.sampledColumns,
|
|
441
|
+
custodyColumns: this.custodyConfig.custodyColumns,
|
|
442
|
+
timeCreatedSec: Math.floor(Date.now() / 1000),
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
|
|
429
446
|
this.clock = clock;
|
|
430
447
|
this.regen = regen;
|
|
431
448
|
this.bls = bls;
|
|
@@ -683,16 +700,16 @@ export class BeaconChain implements IBeaconChain {
|
|
|
683
700
|
|
|
684
701
|
// TODO GLOAS: Need to revisit the design of this api. Currently we just retrieve FULL state of the checkpoint for backwards compatibility.
|
|
685
702
|
// because pre-gloas we always store FULL checkpoint state.
|
|
686
|
-
const persistedKey = checkpointToDatastoreKey(checkpoint
|
|
703
|
+
const persistedKey = checkpointToDatastoreKey(checkpoint);
|
|
687
704
|
return this.cpStateDatastore.read(persistedKey);
|
|
688
705
|
}
|
|
689
706
|
|
|
690
707
|
getStateByCheckpoint(
|
|
691
|
-
checkpoint:
|
|
708
|
+
checkpoint: CheckpointWithHex
|
|
692
709
|
): {state: IBeaconStateView; executionOptimistic: boolean; finalized: boolean} | null {
|
|
693
710
|
// finalized or justified checkpoint states maynot be available with PersistentCheckpointStateCache, use getCheckpointStateOrBytes() api to get Uint8Array
|
|
694
|
-
const
|
|
695
|
-
const cachedStateCtx = this.regen.getCheckpointStateSync(
|
|
711
|
+
const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
|
|
712
|
+
const cachedStateCtx = this.regen.getCheckpointStateSync(checkpointHex);
|
|
696
713
|
if (cachedStateCtx) {
|
|
697
714
|
const block = this.forkChoice.getBlockDefaultStatus(
|
|
698
715
|
ssz.phase0.BeaconBlockHeader.hashTreeRoot(cachedStateCtx.latestBlockHeader)
|
|
@@ -709,10 +726,10 @@ export class BeaconChain implements IBeaconChain {
|
|
|
709
726
|
}
|
|
710
727
|
|
|
711
728
|
async getStateOrBytesByCheckpoint(
|
|
712
|
-
checkpoint:
|
|
729
|
+
checkpoint: CheckpointWithHex
|
|
713
730
|
): Promise<{state: IBeaconStateView | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null> {
|
|
714
|
-
const
|
|
715
|
-
const cachedStateCtx = await this.regen.getCheckpointStateOrBytes(
|
|
731
|
+
const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
|
|
732
|
+
const cachedStateCtx = await this.regen.getCheckpointStateOrBytes(checkpointHex);
|
|
716
733
|
if (cachedStateCtx) {
|
|
717
734
|
const block = this.forkChoice.getBlockDefaultStatus(checkpoint.root);
|
|
718
735
|
const finalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
|
|
@@ -878,6 +895,37 @@ export class BeaconChain implements IBeaconChain {
|
|
|
878
895
|
);
|
|
879
896
|
}
|
|
880
897
|
|
|
898
|
+
async getExecutionPayloadEnvelope(
|
|
899
|
+
blockSlot: Slot,
|
|
900
|
+
blockRootHex: string
|
|
901
|
+
): Promise<gloas.SignedExecutionPayloadEnvelope | null> {
|
|
902
|
+
const payloadInput = this.seenPayloadEnvelopeInputCache.get(blockRootHex);
|
|
903
|
+
if (payloadInput?.hasPayloadEnvelope()) {
|
|
904
|
+
return payloadInput.getPayloadEnvelope();
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
return (
|
|
908
|
+
(await this.db.executionPayloadEnvelope.get(fromHex(blockRootHex))) ??
|
|
909
|
+
(await this.db.executionPayloadEnvelopeArchive.get(blockSlot)) ??
|
|
910
|
+
null
|
|
911
|
+
);
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
async getParentExecutionRequests(
|
|
915
|
+
parentBlockSlot: Slot,
|
|
916
|
+
parentBlockRootHex: RootHex
|
|
917
|
+
): Promise<electra.ExecutionRequests> {
|
|
918
|
+
// at the fork boundary, parent is pre-gloas
|
|
919
|
+
if (!isForkPostGloas(this.config.getForkName(parentBlockSlot))) {
|
|
920
|
+
return ssz.electra.ExecutionRequests.defaultValue();
|
|
921
|
+
}
|
|
922
|
+
const envelope = await this.getExecutionPayloadEnvelope(parentBlockSlot, parentBlockRootHex);
|
|
923
|
+
if (envelope === null) {
|
|
924
|
+
throw Error(`Parent execution payload envelope not found slot=${parentBlockSlot}, root=${parentBlockRootHex}`);
|
|
925
|
+
}
|
|
926
|
+
return envelope.message.executionRequests;
|
|
927
|
+
}
|
|
928
|
+
|
|
881
929
|
async getDataColumnSidecars(blockSlot: Slot, blockRootHex: string): Promise<DataColumnSidecar[]> {
|
|
882
930
|
const fork = this.config.getForkName(blockSlot);
|
|
883
931
|
|
|
@@ -1052,7 +1100,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1052
1100
|
body,
|
|
1053
1101
|
} as AssembledBlockType<T>;
|
|
1054
1102
|
|
|
1055
|
-
const {newStateRoot, proposerReward
|
|
1103
|
+
const {newStateRoot, proposerReward} = computeNewStateRoot(this.metrics, state, block);
|
|
1056
1104
|
block.stateRoot = newStateRoot;
|
|
1057
1105
|
const blockRoot =
|
|
1058
1106
|
produceResult.type === BlockType.Full
|
|
@@ -1061,23 +1109,9 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1061
1109
|
const blockRootHex = toRootHex(blockRoot);
|
|
1062
1110
|
|
|
1063
1111
|
const fork = this.config.getForkName(slot);
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
throw Error(`Unexpected block type=${produceResult.type} for post-gloas fork=${fork}`);
|
|
1068
|
-
}
|
|
1069
|
-
|
|
1070
|
-
const gloasResult = produceResult as ProduceFullGloas;
|
|
1071
|
-
const envelope: gloas.ExecutionPayloadEnvelope = {
|
|
1072
|
-
payload: gloasResult.executionPayload,
|
|
1073
|
-
executionRequests: gloasResult.executionRequests,
|
|
1074
|
-
builderIndex: BUILDER_INDEX_SELF_BUILD,
|
|
1075
|
-
beaconBlockRoot: blockRoot,
|
|
1076
|
-
slot,
|
|
1077
|
-
stateRoot: ZERO_HASH,
|
|
1078
|
-
};
|
|
1079
|
-
const envelopeStateRoot = computeEnvelopeStateRoot(this.metrics, postState, envelope);
|
|
1080
|
-
gloasResult.envelopeStateRoot = envelopeStateRoot;
|
|
1112
|
+
// TODO GLOAS: we should retire BlockType post-gloas, may need a new enum for self vs non-self built
|
|
1113
|
+
if (isForkPostGloas(fork) && produceResult.type !== BlockType.Full) {
|
|
1114
|
+
throw Error(`Unexpected block type=${produceResult.type} for post-gloas fork=${fork}`);
|
|
1081
1115
|
}
|
|
1082
1116
|
|
|
1083
1117
|
// Track the produced block for consensus broadcast validations, later validation, etc.
|
|
@@ -1088,11 +1122,15 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1088
1122
|
}
|
|
1089
1123
|
|
|
1090
1124
|
async processBlock(block: IBlockInput, opts?: ImportBlockOpts): Promise<void> {
|
|
1091
|
-
return this.blockProcessor.processBlocksJob([block], opts);
|
|
1125
|
+
return this.blockProcessor.processBlocksJob([block], null, opts);
|
|
1092
1126
|
}
|
|
1093
1127
|
|
|
1094
|
-
async processChainSegment(
|
|
1095
|
-
|
|
1128
|
+
async processChainSegment(
|
|
1129
|
+
blocks: IBlockInput[],
|
|
1130
|
+
payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null,
|
|
1131
|
+
opts?: ImportBlockOpts
|
|
1132
|
+
): Promise<void> {
|
|
1133
|
+
await this.blockProcessor.processBlocksJob(blocks, payloadEnvelopes, opts);
|
|
1096
1134
|
}
|
|
1097
1135
|
|
|
1098
1136
|
async processExecutionPayload(payloadInput: PayloadEnvelopeInput, opts?: ImportPayloadOpts): Promise<void> {
|
|
@@ -1283,7 +1321,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1283
1321
|
* @param blockState state that declares justified checkpoint `checkpoint`
|
|
1284
1322
|
*/
|
|
1285
1323
|
private justifiedBalancesGetter(
|
|
1286
|
-
checkpoint:
|
|
1324
|
+
checkpoint: CheckpointWithHex,
|
|
1287
1325
|
blockState: IBeaconStateView
|
|
1288
1326
|
): EffectiveBalanceIncrements {
|
|
1289
1327
|
this.metrics?.balancesCache.requests.inc();
|
|
@@ -1322,11 +1360,11 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1322
1360
|
* @param blockState state that declares justified checkpoint `checkpoint`
|
|
1323
1361
|
*/
|
|
1324
1362
|
private closestJustifiedBalancesStateToCheckpoint(
|
|
1325
|
-
checkpoint:
|
|
1363
|
+
checkpoint: CheckpointWithHex,
|
|
1326
1364
|
blockState: IBeaconStateView
|
|
1327
1365
|
): {state: IBeaconStateView; stateId: string; shouldWarn: boolean} {
|
|
1328
|
-
const
|
|
1329
|
-
const state = this.regen.getCheckpointStateSync(
|
|
1366
|
+
const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
|
|
1367
|
+
const state = this.regen.getCheckpointStateSync(checkpointHex);
|
|
1330
1368
|
if (state) {
|
|
1331
1369
|
return {state, stateId: "checkpoint_state", shouldWarn: false};
|
|
1332
1370
|
}
|
|
@@ -1337,10 +1375,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1337
1375
|
}
|
|
1338
1376
|
|
|
1339
1377
|
// Find a state in the same branch of checkpoint at same epoch. Balances should exactly the same
|
|
1340
|
-
for (const descendantBlock of this.forkChoice.
|
|
1341
|
-
checkpoint.rootHex,
|
|
1342
|
-
checkpoint.payloadStatus
|
|
1343
|
-
)) {
|
|
1378
|
+
for (const descendantBlock of this.forkChoice.forwardIterateDescendantsDefaultStatus(checkpoint.rootHex)) {
|
|
1344
1379
|
if (computeEpochAtSlot(descendantBlock.slot) === checkpoint.epoch) {
|
|
1345
1380
|
const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
|
|
1346
1381
|
if (descendantBlockState) {
|
|
@@ -1356,10 +1391,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1356
1391
|
|
|
1357
1392
|
// Find a state in the same branch of checkpoint at a latter epoch. Balances are not the same, but should be close
|
|
1358
1393
|
// Note: must call .forwardIterateDescendants() again since nodes are not sorted
|
|
1359
|
-
for (const descendantBlock of this.forkChoice.
|
|
1360
|
-
checkpoint.rootHex,
|
|
1361
|
-
checkpoint.payloadStatus
|
|
1362
|
-
)) {
|
|
1394
|
+
for (const descendantBlock of this.forkChoice.forwardIterateDescendantsDefaultStatus(checkpoint.rootHex)) {
|
|
1363
1395
|
if (computeEpochAtSlot(descendantBlock.slot) > checkpoint.epoch) {
|
|
1364
1396
|
const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
|
|
1365
1397
|
if (descendantBlockState) {
|
|
@@ -1404,9 +1436,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1404
1436
|
metrics.chain.blacklistedBlocks.set(this.blacklistedBlocks.size);
|
|
1405
1437
|
|
|
1406
1438
|
const headState = this.getHeadState();
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
if (isForkPostElectra(fork)) {
|
|
1439
|
+
if (isStatePostElectra(headState)) {
|
|
1410
1440
|
metrics.pendingDeposits.set(headState.pendingDepositsCount);
|
|
1411
1441
|
metrics.pendingPartialWithdrawals.set(headState.pendingPartialWithdrawalsCount);
|
|
1412
1442
|
metrics.pendingConsolidations.set(headState.pendingConsolidationsCount);
|
|
@@ -1431,6 +1461,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1431
1461
|
this.payloadAttestationPool.prune(slot);
|
|
1432
1462
|
this.executionPayloadBidPool.prune(slot);
|
|
1433
1463
|
this.seenExecutionPayloadBids.prune(slot);
|
|
1464
|
+
this.seenProposerPreferences.prune(slot);
|
|
1434
1465
|
this.seenAttestationDatas.onSlot(slot);
|
|
1435
1466
|
this.reprocessController.onSlot(slot);
|
|
1436
1467
|
|
|
@@ -1452,10 +1483,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1452
1483
|
private onClockEpoch(epoch: Epoch): void {
|
|
1453
1484
|
this.metrics?.clockEpoch.set(epoch);
|
|
1454
1485
|
|
|
1455
|
-
if (epoch === this.config.GLOAS_FORK_EPOCH) {
|
|
1456
|
-
this.regen.upgradeForGloas(epoch);
|
|
1457
|
-
}
|
|
1458
|
-
|
|
1459
1486
|
this.seenAttesters.prune(epoch);
|
|
1460
1487
|
this.seenAggregators.prune(epoch);
|
|
1461
1488
|
this.seenPayloadAttesters.prune(epoch);
|
|
@@ -1469,7 +1496,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1469
1496
|
this.seenContributionAndProof.prune(head.slot);
|
|
1470
1497
|
}
|
|
1471
1498
|
|
|
1472
|
-
private onForkChoiceJustified(this: BeaconChain, cp:
|
|
1499
|
+
private onForkChoiceJustified(this: BeaconChain, cp: CheckpointWithHex): void {
|
|
1473
1500
|
this.logger.verbose("Fork choice justified", {epoch: cp.epoch, root: cp.rootHex});
|
|
1474
1501
|
}
|
|
1475
1502
|
|
|
@@ -1480,7 +1507,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1480
1507
|
});
|
|
1481
1508
|
}
|
|
1482
1509
|
|
|
1483
|
-
private async onForkChoiceFinalized(this: BeaconChain, cp:
|
|
1510
|
+
private async onForkChoiceFinalized(this: BeaconChain, cp: CheckpointWithHex): Promise<void> {
|
|
1484
1511
|
this.logger.verbose("Fork choice finalized", {epoch: cp.epoch, root: cp.rootHex});
|
|
1485
1512
|
const finalizedSlot = computeStartSlotAtEpoch(cp.epoch);
|
|
1486
1513
|
this.seenBlockProposers.prune(finalizedSlot);
|
|
@@ -1521,7 +1548,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1521
1548
|
}
|
|
1522
1549
|
}
|
|
1523
1550
|
|
|
1524
|
-
private async updateValidatorsCustodyRequirement(finalizedCheckpoint:
|
|
1551
|
+
private async updateValidatorsCustodyRequirement(finalizedCheckpoint: CheckpointWithHex): Promise<void> {
|
|
1525
1552
|
if (this.custodyConfig.targetCustodyGroupCount === this.config.NUMBER_OF_CUSTODY_GROUPS) {
|
|
1526
1553
|
// Custody requirements can only be increased, we can disable dynamic custody updates
|
|
1527
1554
|
// if the node already maintains custody of all custody groups in case it is configured
|
|
@@ -1653,6 +1680,9 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1653
1680
|
}
|
|
1654
1681
|
|
|
1655
1682
|
preState = preState.processSlots(block.slot); // Dial preState's slot to block.slot
|
|
1683
|
+
if (!isStatePostAltair(preState)) {
|
|
1684
|
+
throw new Error("Sync committee rewards are not supported before Altair");
|
|
1685
|
+
}
|
|
1656
1686
|
|
|
1657
1687
|
return preState.computeSyncCommitteeRewards(block, validatorIds ?? []);
|
|
1658
1688
|
}
|
package/src/chain/emitter.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {EventEmitter} from "node:events";
|
|
2
2
|
import {StrictEventEmitter} from "strict-event-emitter-types";
|
|
3
3
|
import {routes} from "@lodestar/api";
|
|
4
|
-
import {
|
|
4
|
+
import {CheckpointWithHex} from "@lodestar/fork-choice";
|
|
5
5
|
import {IBeaconStateView} from "@lodestar/state-transition";
|
|
6
6
|
import {DataColumnSidecar, RootHex, deneb, phase0} from "@lodestar/types";
|
|
7
|
-
import {SignedExecutionPayloadEnvelope} from "@lodestar/types/gloas";
|
|
8
7
|
import {PeerIdStr} from "../util/peerId.js";
|
|
9
8
|
import {BlockInputSource, IBlockInput} from "./blocks/blockInput/types.js";
|
|
9
|
+
import {PayloadEnvelopeInput} from "./blocks/payloadEnvelopeInput/payloadEnvelopeInput.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Important chain events that occur during normal chain operation.
|
|
@@ -59,10 +59,6 @@ export enum ChainEvent {
|
|
|
59
59
|
* Post-gloas, missing parent could be a SignedBeaconBlock and/or a SignedExecutionPayloadEnvelope
|
|
60
60
|
*/
|
|
61
61
|
blockUnknownParent = "blockUnknownParent",
|
|
62
|
-
/**
|
|
63
|
-
* Trigger BlockInputSync to find a SignedBeaconBlock given a SignedExecutionPayloadEnvelop received
|
|
64
|
-
*/
|
|
65
|
-
envelopeUnknownBlock = "envelopeUnknownBlock",
|
|
66
62
|
/**
|
|
67
63
|
* Trigger BlockInputSync to find a SignedBeaconBlock with specified block root.
|
|
68
64
|
*/
|
|
@@ -76,6 +72,11 @@ export enum ChainEvent {
|
|
|
76
72
|
* cut-off window passes for waiting on gossip
|
|
77
73
|
*/
|
|
78
74
|
incompleteBlockInput = "incompleteBlockInput",
|
|
75
|
+
/**
|
|
76
|
+
* Post-gloas: trigger BlockInputSync for payload envelopes whose envelope and/or sampled columns are partially
|
|
77
|
+
* received via gossip but are not complete by time the cut-off window passes for waiting on gossip
|
|
78
|
+
*/
|
|
79
|
+
incompletePayloadEnvelope = "incompletePayloadEnvelope",
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
export type HeadEventData = routes.events.EventData[routes.events.EventType.head];
|
|
@@ -86,21 +87,21 @@ type ApiEvents = {[K in routes.events.EventType]: (data: routes.events.EventData
|
|
|
86
87
|
|
|
87
88
|
export type ChainEventData = {
|
|
88
89
|
[ChainEvent.blockUnknownParent]: {blockInput: IBlockInput; peer: PeerIdStr; source: BlockInputSource};
|
|
89
|
-
[ChainEvent.envelopeUnknownBlock]: {
|
|
90
|
-
envelope: SignedExecutionPayloadEnvelope;
|
|
91
|
-
peer?: PeerIdStr;
|
|
92
|
-
source: BlockInputSource;
|
|
93
|
-
};
|
|
94
90
|
[ChainEvent.unknownBlockRoot]: {rootHex: RootHex; peer?: PeerIdStr; source: BlockInputSource};
|
|
95
91
|
[ChainEvent.incompleteBlockInput]: {blockInput: IBlockInput; peer: PeerIdStr; source: BlockInputSource};
|
|
92
|
+
[ChainEvent.incompletePayloadEnvelope]: {
|
|
93
|
+
payloadInput: PayloadEnvelopeInput;
|
|
94
|
+
peer: PeerIdStr;
|
|
95
|
+
source: BlockInputSource;
|
|
96
|
+
};
|
|
96
97
|
[ChainEvent.unknownEnvelopeBlockRoot]: {rootHex: RootHex; peer?: PeerIdStr; source: BlockInputSource};
|
|
97
98
|
};
|
|
98
99
|
|
|
99
100
|
export type IChainEvents = ApiEvents & {
|
|
100
101
|
[ChainEvent.checkpoint]: (checkpoint: phase0.Checkpoint, state: IBeaconStateView) => void;
|
|
101
102
|
|
|
102
|
-
[ChainEvent.forkChoiceJustified]: (checkpoint:
|
|
103
|
-
[ChainEvent.forkChoiceFinalized]: (checkpoint:
|
|
103
|
+
[ChainEvent.forkChoiceJustified]: (checkpoint: CheckpointWithHex) => void;
|
|
104
|
+
[ChainEvent.forkChoiceFinalized]: (checkpoint: CheckpointWithHex) => void;
|
|
104
105
|
|
|
105
106
|
[ChainEvent.updateTargetCustodyGroupCount]: (targetGroupCount: number) => void;
|
|
106
107
|
|
|
@@ -113,9 +114,9 @@ export type IChainEvents = ApiEvents & {
|
|
|
113
114
|
// Sync events that are chain->chain. Initiated from network requests but do not cross the network
|
|
114
115
|
// barrier so are considered ChainEvent(s).
|
|
115
116
|
[ChainEvent.blockUnknownParent]: (data: ChainEventData[ChainEvent.blockUnknownParent]) => void;
|
|
116
|
-
[ChainEvent.envelopeUnknownBlock]: (data: ChainEventData[ChainEvent.envelopeUnknownBlock]) => void;
|
|
117
117
|
[ChainEvent.unknownBlockRoot]: (data: ChainEventData[ChainEvent.unknownBlockRoot]) => void;
|
|
118
118
|
[ChainEvent.incompleteBlockInput]: (data: ChainEventData[ChainEvent.incompleteBlockInput]) => void;
|
|
119
|
+
[ChainEvent.incompletePayloadEnvelope]: (data: ChainEventData[ChainEvent.incompletePayloadEnvelope]) => void;
|
|
119
120
|
[ChainEvent.unknownEnvelopeBlockRoot]: (data: ChainEventData[ChainEvent.unknownEnvelopeBlockRoot]) => void;
|
|
120
121
|
};
|
|
121
122
|
|
|
@@ -147,6 +147,10 @@ export enum AttestationErrorCode {
|
|
|
147
147
|
* Gloas: Current slot attestation is marking payload as present
|
|
148
148
|
*/
|
|
149
149
|
PREMATURELY_INDICATED_PAYLOAD_PRESENT = "ATTESTATION_ERROR_PREMATURELY_INDICATED_PAYLOAD_PRESENT",
|
|
150
|
+
/**
|
|
151
|
+
* Gloas: index-1 attestation but the execution payload has not been seen yet
|
|
152
|
+
*/
|
|
153
|
+
EXECUTION_PAYLOAD_NOT_SEEN = "ATTESTATION_ERROR_EXECUTION_PAYLOAD_NOT_SEEN",
|
|
150
154
|
}
|
|
151
155
|
|
|
152
156
|
export type AttestationErrorType =
|
|
@@ -185,7 +189,8 @@ export type AttestationErrorType =
|
|
|
185
189
|
| {code: AttestationErrorCode.NON_ZERO_ATTESTATION_DATA_INDEX}
|
|
186
190
|
| {code: AttestationErrorCode.ATTESTER_NOT_IN_COMMITTEE}
|
|
187
191
|
| {code: AttestationErrorCode.INVALID_PAYLOAD_STATUS_VALUE; attDataIndex: number}
|
|
188
|
-
| {code: AttestationErrorCode.PREMATURELY_INDICATED_PAYLOAD_PRESENT}
|
|
192
|
+
| {code: AttestationErrorCode.PREMATURELY_INDICATED_PAYLOAD_PRESENT}
|
|
193
|
+
| {code: AttestationErrorCode.EXECUTION_PAYLOAD_NOT_SEEN; beaconBlockRoot: RootHex};
|
|
189
194
|
|
|
190
195
|
export class AttestationError extends GossipActionError<AttestationErrorType> {
|
|
191
196
|
getMetadata(): Record<string, string | number | null> {
|
|
@@ -70,6 +70,12 @@ export enum BlockErrorCode {
|
|
|
70
70
|
TOO_MANY_KZG_COMMITMENTS = "BLOCK_ERROR_TOO_MANY_KZG_COMMITMENTS",
|
|
71
71
|
/** Bid parent block root does not match block parent root */
|
|
72
72
|
BID_PARENT_ROOT_MISMATCH = "BLOCK_ERROR_BID_PARENT_ROOT_MISMATCH",
|
|
73
|
+
/** The parent block's execution payload has been verified as invalid */
|
|
74
|
+
PARENT_EXECUTION_INVALID = "BLOCK_ERROR_PARENT_EXECUTION_INVALID",
|
|
75
|
+
/** The block's parent execution payload (defined by bid.parent_block_hash) has not been seen */
|
|
76
|
+
PARENT_PAYLOAD_UNKNOWN = "BLOCK_ERROR_PARENT_PAYLOAD_UNKNOWN",
|
|
77
|
+
/** An execution payload envelope in the chain segment references a block root that does not match its slot's block */
|
|
78
|
+
ENVELOPE_BLOCK_ROOT_MISMATCH = "BLOCK_ERROR_ENVELOPE_BLOCK_ROOT_MISMATCH",
|
|
73
79
|
}
|
|
74
80
|
|
|
75
81
|
type ExecutionErrorStatus = Exclude<
|
|
@@ -103,6 +109,7 @@ export type BlockErrorType =
|
|
|
103
109
|
| {code: BlockErrorCode.NOT_LATER_THAN_PARENT; parentSlot: Slot; slot: Slot}
|
|
104
110
|
| {code: BlockErrorCode.NON_LINEAR_PARENT_ROOTS}
|
|
105
111
|
| {code: BlockErrorCode.NON_LINEAR_SLOTS}
|
|
112
|
+
| {code: BlockErrorCode.ENVELOPE_BLOCK_ROOT_MISMATCH; envelopeBlockRoot: RootHex; blockRoot: RootHex}
|
|
106
113
|
| {code: BlockErrorCode.PER_BLOCK_PROCESSING_ERROR; error: Error}
|
|
107
114
|
| {code: BlockErrorCode.BEACON_CHAIN_ERROR; error: Error}
|
|
108
115
|
| {code: BlockErrorCode.KNOWN_BAD_BLOCK}
|
|
@@ -114,7 +121,9 @@ export type BlockErrorType =
|
|
|
114
121
|
| {code: BlockErrorCode.EXECUTION_ENGINE_ERROR; execStatus: ExecutionErrorStatus; errorMessage: string}
|
|
115
122
|
| {code: BlockErrorCode.DATA_UNAVAILABLE}
|
|
116
123
|
| {code: BlockErrorCode.TOO_MANY_KZG_COMMITMENTS; blobKzgCommitmentsLen: number; commitmentLimit: number}
|
|
117
|
-
| {code: BlockErrorCode.BID_PARENT_ROOT_MISMATCH; bidParentRoot: RootHex; blockParentRoot: RootHex}
|
|
124
|
+
| {code: BlockErrorCode.BID_PARENT_ROOT_MISMATCH; bidParentRoot: RootHex; blockParentRoot: RootHex}
|
|
125
|
+
| {code: BlockErrorCode.PARENT_EXECUTION_INVALID; parentRoot: RootHex}
|
|
126
|
+
| {code: BlockErrorCode.PARENT_PAYLOAD_UNKNOWN; parentRoot: RootHex; parentBlockHash: RootHex};
|
|
118
127
|
|
|
119
128
|
export class BlockGossipError extends GossipActionError<BlockErrorType> {}
|
|
120
129
|
|
|
@@ -7,6 +7,7 @@ export enum ExecutionPayloadBidErrorCode {
|
|
|
7
7
|
BID_ALREADY_KNOWN = "EXECUTION_PAYLOAD_BID_ERROR_BID_ALREADY_KNOWN",
|
|
8
8
|
BID_TOO_LOW = "EXECUTION_PAYLOAD_BID_ERROR_BID_TOO_LOW",
|
|
9
9
|
BID_TOO_HIGH = "EXECUTION_PAYLOAD_BID_ERROR_BID_TOO_HIGH",
|
|
10
|
+
TOO_MANY_KZG_COMMITMENTS = "EXECUTION_PAYLOAD_BID_ERROR_TOO_MANY_KZG_COMMITMENTS",
|
|
10
11
|
UNKNOWN_BLOCK_ROOT = "EXECUTION_PAYLOAD_BID_ERROR_UNKNOWN_BLOCK_ROOT",
|
|
11
12
|
INVALID_SLOT = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_SLOT",
|
|
12
13
|
INVALID_SIGNATURE = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_SIGNATURE",
|
|
@@ -28,6 +29,11 @@ export type ExecutionPayloadBidErrorType =
|
|
|
28
29
|
}
|
|
29
30
|
| {code: ExecutionPayloadBidErrorCode.BID_TOO_LOW; bidValue: number; currentHighestBid: number}
|
|
30
31
|
| {code: ExecutionPayloadBidErrorCode.BID_TOO_HIGH; bidValue: number; builderBalance: number}
|
|
32
|
+
| {
|
|
33
|
+
code: ExecutionPayloadBidErrorCode.TOO_MANY_KZG_COMMITMENTS;
|
|
34
|
+
blobKzgCommitmentsLen: number;
|
|
35
|
+
commitmentLimit: number;
|
|
36
|
+
}
|
|
31
37
|
| {code: ExecutionPayloadBidErrorCode.UNKNOWN_BLOCK_ROOT; parentBlockRoot: RootHex}
|
|
32
38
|
| {code: ExecutionPayloadBidErrorCode.INVALID_SLOT; builderIndex: BuilderIndex; slot: Slot}
|
|
33
39
|
| {code: ExecutionPayloadBidErrorCode.INVALID_SIGNATURE; builderIndex: BuilderIndex; slot: Slot};
|
|
@@ -11,6 +11,7 @@ export enum ExecutionPayloadEnvelopeErrorCode {
|
|
|
11
11
|
SLOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_SLOT_MISMATCH",
|
|
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
|
+
EXECUTION_REQUESTS_ROOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_EXECUTION_REQUESTS_ROOT_MISMATCH",
|
|
14
15
|
INVALID_SIGNATURE = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_INVALID_SIGNATURE",
|
|
15
16
|
PAYLOAD_ENVELOPE_INPUT_MISSING = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_PAYLOAD_ENVELOPE_INPUT_MISSING",
|
|
16
17
|
}
|
|
@@ -36,6 +37,11 @@ export type ExecutionPayloadEnvelopeErrorType =
|
|
|
36
37
|
envelopeBlockHash: RootHex;
|
|
37
38
|
bidBlockHash: RootHex | null;
|
|
38
39
|
}
|
|
40
|
+
| {
|
|
41
|
+
code: ExecutionPayloadEnvelopeErrorCode.EXECUTION_REQUESTS_ROOT_MISMATCH;
|
|
42
|
+
envelopeRequestsRoot: RootHex;
|
|
43
|
+
bidRequestsRoot: RootHex;
|
|
44
|
+
}
|
|
39
45
|
| {code: ExecutionPayloadEnvelopeErrorCode.INVALID_SIGNATURE}
|
|
40
46
|
| {code: ExecutionPayloadEnvelopeErrorCode.PAYLOAD_ENVELOPE_INPUT_MISSING; blockRoot: RootHex};
|
|
41
47
|
|
|
@@ -8,6 +8,7 @@ export * from "./executionPayloadBid.js";
|
|
|
8
8
|
export * from "./executionPayloadEnvelope.js";
|
|
9
9
|
export * from "./gossipValidation.js";
|
|
10
10
|
export * from "./payloadAttestation.js";
|
|
11
|
+
export * from "./proposerPreferences.js";
|
|
11
12
|
export * from "./proposerSlashingError.js";
|
|
12
13
|
export * from "./syncCommitteeError.js";
|
|
13
14
|
export * from "./voluntaryExitError.js";
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {RootHex, Slot, ValidatorIndex} from "@lodestar/types";
|
|
2
|
+
import {GossipActionError} from "./gossipValidation.js";
|
|
3
|
+
|
|
4
|
+
export enum ProposerPreferencesErrorCode {
|
|
5
|
+
INVALID_EPOCH = "PROPOSER_PREFERENCES_ERROR_INVALID_EPOCH",
|
|
6
|
+
PROPOSAL_SLOT_PASSED = "PROPOSER_PREFERENCES_ERROR_PROPOSAL_SLOT_PASSED",
|
|
7
|
+
UNKNOWN_DEPENDENT_ROOT = "PROPOSER_PREFERENCES_ERROR_UNKNOWN_DEPENDENT_ROOT",
|
|
8
|
+
INVALID_PROPOSER = "PROPOSER_PREFERENCES_ERROR_INVALID_PROPOSER",
|
|
9
|
+
ALREADY_KNOWN = "PROPOSER_PREFERENCES_ERROR_ALREADY_KNOWN",
|
|
10
|
+
INVALID_SIGNATURE = "PROPOSER_PREFERENCES_ERROR_INVALID_SIGNATURE",
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type ProposerPreferencesErrorType =
|
|
14
|
+
| {
|
|
15
|
+
code: ProposerPreferencesErrorCode.INVALID_EPOCH;
|
|
16
|
+
proposalSlot: Slot;
|
|
17
|
+
currentEpoch: number;
|
|
18
|
+
}
|
|
19
|
+
| {
|
|
20
|
+
code: ProposerPreferencesErrorCode.PROPOSAL_SLOT_PASSED;
|
|
21
|
+
proposalSlot: Slot;
|
|
22
|
+
currentSlot: Slot;
|
|
23
|
+
}
|
|
24
|
+
| {
|
|
25
|
+
code: ProposerPreferencesErrorCode.UNKNOWN_DEPENDENT_ROOT;
|
|
26
|
+
proposalSlot: Slot;
|
|
27
|
+
dependentRoot: RootHex;
|
|
28
|
+
}
|
|
29
|
+
| {
|
|
30
|
+
code: ProposerPreferencesErrorCode.INVALID_PROPOSER;
|
|
31
|
+
proposalSlot: Slot;
|
|
32
|
+
validatorIndex: ValidatorIndex;
|
|
33
|
+
dependentRoot: RootHex;
|
|
34
|
+
}
|
|
35
|
+
| {
|
|
36
|
+
code: ProposerPreferencesErrorCode.ALREADY_KNOWN;
|
|
37
|
+
proposalSlot: Slot;
|
|
38
|
+
validatorIndex: ValidatorIndex;
|
|
39
|
+
dependentRoot: RootHex;
|
|
40
|
+
}
|
|
41
|
+
| {
|
|
42
|
+
code: ProposerPreferencesErrorCode.INVALID_SIGNATURE;
|
|
43
|
+
proposalSlot: Slot;
|
|
44
|
+
validatorIndex: ValidatorIndex;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export class ProposerPreferencesError extends GossipActionError<ProposerPreferencesErrorType> {}
|