@lodestar/beacon-node 1.42.0-dev.5f2fffc2ce → 1.42.0-dev.6fa48cb5f2
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 +36 -17
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +1 -1
- 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 +27 -32
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +4 -4
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/utils.js +7 -10
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/lodestar/index.d.ts.map +1 -1
- package/lib/api/impl/lodestar/index.js +4 -6
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/proof/index.d.ts.map +1 -1
- package/lib/api/impl/proof/index.js +2 -6
- package/lib/api/impl/proof/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +27 -27
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/impl/validator/utils.d.ts +2 -2
- package/lib/api/impl/validator/utils.d.ts.map +1 -1
- package/lib/api/impl/validator/utils.js +3 -3
- package/lib/api/impl/validator/utils.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/historicalState/getHistoricalState.d.ts +3 -7
- package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
- package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
- package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/worker.js +1 -3
- package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
- package/lib/chain/archiveStore/interface.d.ts +1 -0
- package/lib/chain/archiveStore/interface.d.ts.map +1 -1
- package/lib/chain/balancesCache.d.ts +2 -2
- package/lib/chain/balancesCache.d.ts.map +1 -1
- package/lib/chain/balancesCache.js +4 -4
- package/lib/chain/balancesCache.js.map +1 -1
- package/lib/chain/blocks/blockInput/types.d.ts +4 -3
- package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/types.js +1 -0
- package/lib/chain/blocks/blockInput/types.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts +3 -3
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +27 -11
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +48 -0
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
- package/lib/chain/blocks/importExecutionPayload.js +158 -0
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
- package/lib/chain/blocks/index.js +1 -1
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts +3 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.js +3 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +80 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +248 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +29 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.js +11 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +15 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +46 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -0
- package/lib/chain/blocks/types.d.ts +9 -2
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
- package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
- package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts +2 -2
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +4 -4
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +3 -3
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +3 -3
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +12 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +40 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -0
- package/lib/chain/chain.d.ts +19 -14
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +75 -42
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +2 -2
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/errors/blockError.d.ts +4 -4
- package/lib/chain/errors/blockError.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.d.ts +12 -2
- package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.js +3 -1
- package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts +4 -4
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +27 -33
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/initState.d.ts +2 -2
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +1 -1
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +17 -15
- package/lib/chain/interface.d.ts.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 +4 -4
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +10 -13
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +3 -3
- package/lib/chain/opPools/opPool.d.ts.map +1 -1
- package/lib/chain/opPools/opPool.js +7 -7
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +2 -2
- package/lib/chain/opPools/utils.d.ts.map +1 -1
- package/lib/chain/opPools/utils.js +2 -2
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/options.d.ts +1 -0
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js +1 -0
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +2 -2
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +3 -3
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js +8 -4
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +5 -5
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +13 -17
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +15 -13
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +2 -0
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +14 -14
- package/lib/chain/regen/queued.d.ts.map +1 -1
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +6 -5
- package/lib/chain/regen/regen.d.ts.map +1 -1
- package/lib/chain/regen/regen.js +6 -6
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/index.d.ts +1 -1
- package/lib/chain/seenCache/index.d.ts.map +1 -1
- package/lib/chain/seenCache/index.js +1 -1
- package/lib/chain/seenCache/index.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +38 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +76 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -0
- package/lib/chain/serializeState.d.ts +2 -2
- package/lib/chain/serializeState.d.ts.map +1 -1
- package/lib/chain/serializeState.js +1 -1
- package/lib/chain/serializeState.js.map +1 -1
- package/lib/chain/shufflingCache.d.ts +2 -2
- package/lib/chain/shufflingCache.d.ts.map +1 -1
- package/lib/chain/shufflingCache.js +3 -4
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +14 -14
- package/lib/chain/stateCache/types.d.ts.map +1 -1
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +3 -3
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/blobSidecar.js +1 -1
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/block.d.ts.map +1 -1
- package/lib/chain/validation/block.js +3 -3
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/blsToExecutionChange.js +2 -2
- package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +1 -1
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +4 -4
- 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 +29 -19
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validation/lightClientFinalityUpdate.js +1 -1
- package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.js +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +1 -2
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
- package/lib/chain/validation/proposerSlashing.js +1 -1
- package/lib/chain/validation/proposerSlashing.js.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.d.ts +4 -4
- package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/syncCommittee.js +13 -12
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
- package/lib/chain/validation/voluntaryExit.js +3 -3
- package/lib/chain/validation/voluntaryExit.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +5 -4
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +13 -8
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +2 -2
- package/lib/metrics/metrics/lodestar.d.ts +40 -4
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +93 -15
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/gossip/encoding.d.ts.map +1 -1
- package/lib/network/gossip/encoding.js +15 -0
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +727 -0
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/interface.d.ts +4 -2
- 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 -0
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/network.d.ts +4 -2
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +11 -5
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
- package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
- package/lib/network/processor/extractSlotRootFns.js +15 -5
- package/lib/network/processor/extractSlotRootFns.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +39 -9
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/index.d.ts +12 -7
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +99 -78
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +10 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
- package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.js +11 -1
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +2 -0
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +10 -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 +8 -0
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/score.d.ts.map +1 -1
- package/lib/network/reqresp/score.js +2 -0
- package/lib/network/reqresp/score.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +8 -2
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +7 -1
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/node/nodejs.d.ts +2 -2
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +1 -4
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.d.ts.map +1 -1
- package/lib/node/notifier.js +3 -3
- package/lib/node/notifier.js.map +1 -1
- package/lib/sync/backfill/backfill.d.ts +3 -3
- package/lib/sync/backfill/backfill.d.ts.map +1 -1
- package/lib/sync/backfill/backfill.js +3 -3
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/constants.d.ts +1 -1
- package/lib/sync/constants.js +1 -1
- package/lib/sync/unknownBlock.d.ts +3 -9
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +8 -41
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/sszBytes.d.ts +4 -1
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +69 -12
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/types.d.ts +2 -0
- package/lib/util/types.d.ts.map +1 -1
- package/lib/util/types.js +1 -0
- package/lib/util/types.js.map +1 -1
- package/package.json +16 -16
- package/src/api/impl/beacon/blocks/index.ts +37 -18
- package/src/api/impl/beacon/pool/index.ts +1 -1
- package/src/api/impl/beacon/state/index.ts +29 -41
- package/src/api/impl/beacon/state/utils.ts +11 -25
- package/src/api/impl/lodestar/index.ts +4 -8
- package/src/api/impl/proof/index.ts +2 -9
- package/src/api/impl/validator/index.ts +29 -41
- package/src/api/impl/validator/utils.ts +4 -7
- package/src/chain/archiveStore/archiveStore.ts +1 -0
- package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
- package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
- package/src/chain/archiveStore/historicalState/types.ts +2 -0
- package/src/chain/archiveStore/historicalState/worker.ts +1 -4
- package/src/chain/archiveStore/interface.ts +1 -0
- package/src/chain/balancesCache.ts +5 -11
- package/src/chain/blocks/blockInput/types.ts +4 -3
- package/src/chain/blocks/importBlock.ts +47 -16
- package/src/chain/blocks/importExecutionPayload.ts +236 -0
- package/src/chain/blocks/index.ts +1 -1
- package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
- package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +336 -0
- package/src/chain/blocks/payloadEnvelopeInput/types.ts +33 -0
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
- package/src/chain/blocks/types.ts +10 -2
- package/src/chain/blocks/utils/checkpoint.ts +2 -2
- package/src/chain/blocks/verifyBlock.ts +5 -10
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +5 -10
- package/src/chain/blocks/verifyBlocksSignatures.ts +3 -3
- package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
- package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
- package/src/chain/chain.ts +112 -70
- package/src/chain/emitter.ts +2 -2
- package/src/chain/errors/blockError.ts +4 -4
- package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
- package/src/chain/forkChoice/index.ts +33 -52
- package/src/chain/initState.ts +7 -2
- package/src/chain/interface.ts +18 -16
- package/src/chain/lightClient/index.ts +9 -22
- package/src/chain/opPools/aggregatedAttestationPool.ts +15 -21
- package/src/chain/opPools/opPool.ts +13 -14
- package/src/chain/opPools/utils.ts +4 -4
- package/src/chain/options.ts +2 -0
- package/src/chain/prepareNextSlot.ts +6 -8
- package/src/chain/produceBlock/computeNewStateRoot.ts +11 -10
- package/src/chain/produceBlock/produceBlockBody.ts +23 -50
- package/src/chain/regen/interface.ts +15 -17
- package/src/chain/regen/queued.ts +16 -20
- package/src/chain/regen/regen.ts +16 -17
- package/src/chain/seenCache/index.ts +1 -1
- package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
- package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +106 -0
- package/src/chain/serializeState.ts +3 -3
- package/src/chain/shufflingCache.ts +5 -7
- package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
- package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
- package/src/chain/stateCache/types.ts +14 -18
- package/src/chain/validation/attesterSlashing.ts +3 -3
- package/src/chain/validation/blobSidecar.ts +1 -1
- package/src/chain/validation/block.ts +2 -4
- package/src/chain/validation/blsToExecutionChange.ts +2 -2
- package/src/chain/validation/dataColumnSidecar.ts +1 -1
- package/src/chain/validation/executionPayloadBid.ts +3 -7
- package/src/chain/validation/executionPayloadEnvelope.ts +36 -29
- package/src/chain/validation/lightClientFinalityUpdate.ts +1 -1
- package/src/chain/validation/lightClientOptimisticUpdate.ts +1 -1
- package/src/chain/validation/payloadAttestationMessage.ts +2 -4
- package/src/chain/validation/proposerSlashing.ts +1 -1
- package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
- package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
- package/src/chain/validation/syncCommittee.ts +21 -20
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -10
- package/src/chain/validation/voluntaryExit.ts +3 -8
- package/src/chain/validatorMonitor.ts +23 -12
- package/src/execution/engine/interface.ts +2 -2
- package/src/metrics/metrics/lodestar.ts +100 -19
- package/src/network/gossip/encoding.ts +16 -0
- package/src/network/interface.ts +15 -2
- package/src/network/libp2p/index.ts +5 -0
- package/src/network/network.ts +34 -6
- package/src/network/processor/extractSlotRootFns.ts +19 -6
- package/src/network/processor/gossipHandlers.ts +45 -8
- package/src/network/processor/index.ts +110 -89
- package/src/network/reqresp/ReqRespBeaconNode.ts +14 -1
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
- package/src/network/reqresp/handlers/index.ts +12 -0
- package/src/network/reqresp/protocols.ts +12 -0
- package/src/network/reqresp/rateLimit.ts +18 -0
- package/src/network/reqresp/score.ts +2 -0
- package/src/network/reqresp/types.ts +13 -0
- package/src/node/nodejs.ts +3 -5
- package/src/node/notifier.ts +4 -10
- package/src/sync/backfill/backfill.ts +4 -4
- package/src/sync/constants.ts +1 -1
- package/src/sync/unknownBlock.ts +10 -50
- package/src/util/sszBytes.ts +90 -10
- package/src/util/types.ts +6 -0
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +0 -15
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +0 -1
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +0 -28
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +0 -1
- package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +0 -34
|
@@ -9,19 +9,33 @@ import {
|
|
|
9
9
|
getSafeExecutionBlockHash,
|
|
10
10
|
isGloasBlock,
|
|
11
11
|
} from "@lodestar/fork-choice";
|
|
12
|
-
import {ForkPostAltair, ForkPostElectra, ForkSeq, MAX_SEED_LOOKAHEAD, SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
13
12
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
ForkPostAltair,
|
|
14
|
+
ForkPostElectra,
|
|
15
|
+
ForkPostGloas,
|
|
16
|
+
ForkSeq,
|
|
17
|
+
MAX_SEED_LOOKAHEAD,
|
|
18
|
+
SLOTS_PER_EPOCH,
|
|
19
|
+
} from "@lodestar/params";
|
|
20
|
+
import {
|
|
21
|
+
IBeaconStateView,
|
|
16
22
|
RootCache,
|
|
17
23
|
computeEpochAtSlot,
|
|
18
24
|
computeStartSlotAtEpoch,
|
|
19
25
|
computeTimeAtSlot,
|
|
20
|
-
isExecutionStateType,
|
|
21
26
|
isStartSlotOfEpoch,
|
|
22
|
-
isStateValidatorsNodesPopulated,
|
|
23
27
|
} from "@lodestar/state-transition";
|
|
24
|
-
import {
|
|
28
|
+
import {
|
|
29
|
+
Attestation,
|
|
30
|
+
BeaconBlock,
|
|
31
|
+
SignedBeaconBlock,
|
|
32
|
+
altair,
|
|
33
|
+
capella,
|
|
34
|
+
electra,
|
|
35
|
+
isGloasBeaconBlock,
|
|
36
|
+
phase0,
|
|
37
|
+
ssz,
|
|
38
|
+
} from "@lodestar/types";
|
|
25
39
|
import {isErrorAborted, toRootHex} from "@lodestar/utils";
|
|
26
40
|
import {ZERO_HASH_HEX} from "../../constants/index.js";
|
|
27
41
|
import {callInNextEventLoop} from "../../util/eventLoop.js";
|
|
@@ -123,6 +137,23 @@ export async function importBlock(
|
|
|
123
137
|
// processState manages both block state and payload state variants together for memory/disk management
|
|
124
138
|
this.regen.processBlockState(blockRootHex, postState);
|
|
125
139
|
|
|
140
|
+
// For Gloas blocks, create PayloadEnvelopeInput so it's available for later payload import
|
|
141
|
+
if (fork >= ForkSeq.gloas) {
|
|
142
|
+
this.seenPayloadEnvelopeInputCache.add({
|
|
143
|
+
blockRootHex,
|
|
144
|
+
block: block as SignedBeaconBlock<ForkPostGloas>,
|
|
145
|
+
sampledColumns: this.custodyConfig.sampledColumns,
|
|
146
|
+
custodyColumns: this.custodyConfig.custodyColumns,
|
|
147
|
+
timeCreatedSec: fullyVerifiedBlock.seenTimestampSec,
|
|
148
|
+
});
|
|
149
|
+
this.logger.debug("Created PayloadEnvelopeInput for block", {
|
|
150
|
+
slot: blockSlot,
|
|
151
|
+
root: blockRootHex,
|
|
152
|
+
source: source.source,
|
|
153
|
+
...(opts.seenTimestampSec !== undefined ? {recvToImport: Date.now() / 1000 - opts.seenTimestampSec} : {}),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
126
157
|
this.metrics?.importBlock.bySource.inc({source: source.source});
|
|
127
158
|
this.logger.verbose("Added block to forkchoice and state cache", {slot: blockSlot, root: blockRootHex});
|
|
128
159
|
|
|
@@ -154,7 +185,7 @@ export async function importBlock(
|
|
|
154
185
|
const attDataRoot = toRootHex(ssz.phase0.AttestationData.hashTreeRoot(indexedAttestation.data));
|
|
155
186
|
addAttestation.call(
|
|
156
187
|
this,
|
|
157
|
-
postState
|
|
188
|
+
postState,
|
|
158
189
|
target,
|
|
159
190
|
attDataRoot,
|
|
160
191
|
attestation as Attestation<ForkPostElectra>,
|
|
@@ -341,7 +372,7 @@ export async function importBlock(
|
|
|
341
372
|
try {
|
|
342
373
|
this.lightClientServer?.onImportBlockHead(
|
|
343
374
|
block.message as BeaconBlock<ForkPostAltair>,
|
|
344
|
-
postState
|
|
375
|
+
postState,
|
|
345
376
|
parentBlockSlot
|
|
346
377
|
);
|
|
347
378
|
} catch (e) {
|
|
@@ -362,11 +393,11 @@ export async function importBlock(
|
|
|
362
393
|
// and the block is weak and can potentially be reorged out.
|
|
363
394
|
let shouldOverrideFcu = false;
|
|
364
395
|
|
|
365
|
-
if (blockSlot >= currentSlot && isExecutionStateType
|
|
396
|
+
if (blockSlot >= currentSlot && postState.isExecutionStateType) {
|
|
366
397
|
let notOverrideFcuReason = NotReorgedReason.Unknown;
|
|
367
398
|
const proposalSlot = blockSlot + 1;
|
|
368
399
|
try {
|
|
369
|
-
const proposerIndex = postState.
|
|
400
|
+
const proposerIndex = postState.getBeaconProposer(proposalSlot);
|
|
370
401
|
const feeRecipient = this.beaconProposerCache.get(proposerIndex);
|
|
371
402
|
|
|
372
403
|
if (feeRecipient) {
|
|
@@ -446,7 +477,7 @@ export async function importBlock(
|
|
|
446
477
|
}
|
|
447
478
|
}
|
|
448
479
|
|
|
449
|
-
if (!isStateValidatorsNodesPopulated(
|
|
480
|
+
if (!postState.isStateValidatorsNodesPopulated()) {
|
|
450
481
|
this.logger.verbose("After importBlock caching postState without SSZ cache", {slot: postState.slot});
|
|
451
482
|
}
|
|
452
483
|
|
|
@@ -468,7 +499,7 @@ export async function importBlock(
|
|
|
468
499
|
// Note: in-lined code from previos handler of ChainEvent.checkpoint
|
|
469
500
|
this.logger.verbose("Checkpoint processed", toCheckpointHexPayload(cp, payloadPresent));
|
|
470
501
|
|
|
471
|
-
const activeValidatorsCount = checkpointState.
|
|
502
|
+
const activeValidatorsCount = checkpointState.activeValidatorCount;
|
|
472
503
|
this.metrics?.currentActiveValidators.set(activeValidatorsCount);
|
|
473
504
|
this.metrics?.currentValidators.set({status: "active"}, activeValidatorsCount);
|
|
474
505
|
|
|
@@ -553,7 +584,7 @@ export async function importBlock(
|
|
|
553
584
|
this.validatorMonitor?.registerSyncAggregateInBlock(
|
|
554
585
|
blockEpoch,
|
|
555
586
|
(block as altair.SignedBeaconBlock).message.body.syncAggregate,
|
|
556
|
-
fullyVerifiedBlock.postState.
|
|
587
|
+
fullyVerifiedBlock.postState.currentSyncCommitteeIndexed.validatorIndices
|
|
557
588
|
);
|
|
558
589
|
}
|
|
559
590
|
|
|
@@ -595,7 +626,7 @@ export async function importBlock(
|
|
|
595
626
|
export function addAttestationPreElectra(
|
|
596
627
|
this: BeaconChain,
|
|
597
628
|
// added to have the same signature as addAttestationPostElectra
|
|
598
|
-
_:
|
|
629
|
+
_: IBeaconStateView,
|
|
599
630
|
target: phase0.Checkpoint,
|
|
600
631
|
attDataRoot: string,
|
|
601
632
|
attestation: Attestation,
|
|
@@ -612,7 +643,7 @@ export function addAttestationPreElectra(
|
|
|
612
643
|
|
|
613
644
|
export function addAttestationPostElectra(
|
|
614
645
|
this: BeaconChain,
|
|
615
|
-
|
|
646
|
+
state: IBeaconStateView,
|
|
616
647
|
target: phase0.Checkpoint,
|
|
617
648
|
attDataRoot: string,
|
|
618
649
|
attestation: Attestation<ForkPostElectra>,
|
|
@@ -630,7 +661,7 @@ export function addAttestationPostElectra(
|
|
|
630
661
|
} else {
|
|
631
662
|
const attSlot = attestation.data.slot;
|
|
632
663
|
const attEpoch = computeEpochAtSlot(attSlot);
|
|
633
|
-
const decisionRoot =
|
|
664
|
+
const decisionRoot = state.getShufflingDecisionRoot(attEpoch);
|
|
634
665
|
const committees = this.shufflingCache.getBeaconCommittees(attEpoch, decisionRoot, attSlot, committeeIndices);
|
|
635
666
|
const aggregationBools = attestation.aggregationBits.toBoolArray();
|
|
636
667
|
let offset = 0;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import {routes} from "@lodestar/api";
|
|
2
|
+
import {ForkName} from "@lodestar/params";
|
|
3
|
+
import {getExecutionPayloadEnvelopeSignatureSet} from "@lodestar/state-transition";
|
|
4
|
+
import {byteArrayEquals, fromHex, toRootHex} from "@lodestar/utils";
|
|
5
|
+
import {ExecutionPayloadStatus} from "../../execution/index.js";
|
|
6
|
+
import {isQueueErrorAborted} from "../../util/queue/index.js";
|
|
7
|
+
import {BeaconChain} from "../chain.js";
|
|
8
|
+
import {RegenCaller} from "../regen/interface.js";
|
|
9
|
+
import {PayloadEnvelopeInput} from "../seenCache/seenPayloadEnvelopeInput.js";
|
|
10
|
+
import {ImportPayloadOpts} from "./types.js";
|
|
11
|
+
|
|
12
|
+
const EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS = 64;
|
|
13
|
+
|
|
14
|
+
export enum PayloadErrorCode {
|
|
15
|
+
EXECUTION_ENGINE_INVALID = "PAYLOAD_ERROR_EXECUTION_ENGINE_INVALID",
|
|
16
|
+
EXECUTION_ENGINE_ERROR = "PAYLOAD_ERROR_EXECUTION_ENGINE_ERROR",
|
|
17
|
+
BLOCK_NOT_IN_FORK_CHOICE = "PAYLOAD_ERROR_BLOCK_NOT_IN_FORK_CHOICE",
|
|
18
|
+
STATE_TRANSITION_ERROR = "PAYLOAD_ERROR_STATE_TRANSITION_ERROR",
|
|
19
|
+
INVALID_SIGNATURE = "PAYLOAD_ERROR_INVALID_SIGNATURE",
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type PayloadErrorType =
|
|
23
|
+
| {
|
|
24
|
+
code: PayloadErrorCode.EXECUTION_ENGINE_INVALID;
|
|
25
|
+
execStatus: ExecutionPayloadStatus;
|
|
26
|
+
errorMessage: string;
|
|
27
|
+
}
|
|
28
|
+
| {
|
|
29
|
+
code: PayloadErrorCode.EXECUTION_ENGINE_ERROR;
|
|
30
|
+
execStatus: ExecutionPayloadStatus;
|
|
31
|
+
errorMessage: string;
|
|
32
|
+
}
|
|
33
|
+
| {
|
|
34
|
+
code: PayloadErrorCode.BLOCK_NOT_IN_FORK_CHOICE;
|
|
35
|
+
blockRootHex: string;
|
|
36
|
+
}
|
|
37
|
+
| {
|
|
38
|
+
code: PayloadErrorCode.STATE_TRANSITION_ERROR;
|
|
39
|
+
message: string;
|
|
40
|
+
}
|
|
41
|
+
| {
|
|
42
|
+
code: PayloadErrorCode.INVALID_SIGNATURE;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export class PayloadError extends Error {
|
|
46
|
+
type: PayloadErrorType;
|
|
47
|
+
|
|
48
|
+
constructor(type: PayloadErrorType, message?: string) {
|
|
49
|
+
super(message ?? type.code);
|
|
50
|
+
this.type = type;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Import an execution payload envelope after all data is available.
|
|
56
|
+
*
|
|
57
|
+
* This function:
|
|
58
|
+
* 1. Gets the ProtoBlock from fork choice
|
|
59
|
+
* 2. Applies write-queue backpressure (waitForSpace) early, before verification
|
|
60
|
+
* 3. Regenerates the block state
|
|
61
|
+
* 4. Runs EL verification (notifyNewPayload) in parallel with signature verification and processExecutionPayloadEnvelope
|
|
62
|
+
* 5. Persists verified payload envelope to hot DB
|
|
63
|
+
* 6. Updates fork choice
|
|
64
|
+
* 7. Caches the post-execution payload state
|
|
65
|
+
* 8. Records metrics for column sources
|
|
66
|
+
*
|
|
67
|
+
*/
|
|
68
|
+
export async function importExecutionPayload(
|
|
69
|
+
this: BeaconChain,
|
|
70
|
+
payloadInput: PayloadEnvelopeInput,
|
|
71
|
+
opts: ImportPayloadOpts = {}
|
|
72
|
+
): Promise<void> {
|
|
73
|
+
const envelope = payloadInput.getPayloadEnvelope();
|
|
74
|
+
const blockRootHex = payloadInput.blockRootHex;
|
|
75
|
+
|
|
76
|
+
// 1. Get ProtoBlock for parent root lookup
|
|
77
|
+
const protoBlock = this.forkChoice.getBlockHexDefaultStatus(blockRootHex);
|
|
78
|
+
if (!protoBlock) {
|
|
79
|
+
throw new PayloadError({
|
|
80
|
+
code: PayloadErrorCode.BLOCK_NOT_IN_FORK_CHOICE,
|
|
81
|
+
blockRootHex,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// 2. Apply backpressure from the write queue early, before doing verification work.
|
|
86
|
+
// The actual DB write is deferred until after verification succeeds.
|
|
87
|
+
await this.unfinalizedPayloadEnvelopeWrites.waitForSpace();
|
|
88
|
+
|
|
89
|
+
// 3. Get pre-state for processExecutionPayloadEnvelope
|
|
90
|
+
// We need the block state (post-block, pre-payload) to process the envelope
|
|
91
|
+
const blockState = await this.regen.getBlockSlotState(
|
|
92
|
+
protoBlock,
|
|
93
|
+
protoBlock.slot,
|
|
94
|
+
{dontTransferCache: true},
|
|
95
|
+
RegenCaller.processBlock
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
// 4. Run verification steps in parallel
|
|
99
|
+
// Note: No data availability check needed here - importExecutionPayload is only
|
|
100
|
+
// called when payloadInput.isComplete() is true, so all data is already available.
|
|
101
|
+
const [execResult, signatureValid, postPayloadResult] = await Promise.all([
|
|
102
|
+
this.executionEngine.notifyNewPayload(
|
|
103
|
+
ForkName.gloas,
|
|
104
|
+
envelope.message.payload,
|
|
105
|
+
payloadInput.getVersionedHashes(),
|
|
106
|
+
fromHex(protoBlock.parentRoot),
|
|
107
|
+
envelope.message.executionRequests
|
|
108
|
+
),
|
|
109
|
+
|
|
110
|
+
opts.validSignature === true
|
|
111
|
+
? Promise.resolve(true)
|
|
112
|
+
: (async () => {
|
|
113
|
+
const signatureSet = getExecutionPayloadEnvelopeSignatureSet(
|
|
114
|
+
this.config,
|
|
115
|
+
this.pubkeyCache,
|
|
116
|
+
blockState,
|
|
117
|
+
envelope,
|
|
118
|
+
payloadInput.proposerIndex
|
|
119
|
+
);
|
|
120
|
+
return this.bls.verifySignatureSets([signatureSet]);
|
|
121
|
+
})(),
|
|
122
|
+
|
|
123
|
+
// Signature verified separately above.
|
|
124
|
+
// State root check is done separately below with better error typing (matching block pipeline pattern).
|
|
125
|
+
(async () => {
|
|
126
|
+
try {
|
|
127
|
+
return {
|
|
128
|
+
postPayloadState: blockState.processExecutionPayloadEnvelope(envelope, {
|
|
129
|
+
verifySignature: false,
|
|
130
|
+
verifyStateRoot: false,
|
|
131
|
+
}),
|
|
132
|
+
};
|
|
133
|
+
} catch (e) {
|
|
134
|
+
throw new PayloadError(
|
|
135
|
+
{
|
|
136
|
+
code: PayloadErrorCode.STATE_TRANSITION_ERROR,
|
|
137
|
+
message: (e as Error).message,
|
|
138
|
+
},
|
|
139
|
+
`State transition error: ${(e as Error).message}`
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
})(),
|
|
143
|
+
]);
|
|
144
|
+
|
|
145
|
+
// 4b. Check signature verification result
|
|
146
|
+
if (!signatureValid) {
|
|
147
|
+
throw new PayloadError({code: PayloadErrorCode.INVALID_SIGNATURE});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// 5. Handle EL response
|
|
151
|
+
switch (execResult.status) {
|
|
152
|
+
case ExecutionPayloadStatus.VALID:
|
|
153
|
+
break;
|
|
154
|
+
|
|
155
|
+
case ExecutionPayloadStatus.INVALID:
|
|
156
|
+
throw new PayloadError({
|
|
157
|
+
code: PayloadErrorCode.EXECUTION_ENGINE_INVALID,
|
|
158
|
+
execStatus: execResult.status,
|
|
159
|
+
errorMessage: execResult.validationError ?? "",
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
case ExecutionPayloadStatus.ACCEPTED:
|
|
163
|
+
case ExecutionPayloadStatus.SYNCING:
|
|
164
|
+
// TODO GLOAS: Handle optimistic import for payload - for now treat as error
|
|
165
|
+
throw new PayloadError({
|
|
166
|
+
code: PayloadErrorCode.EXECUTION_ENGINE_ERROR,
|
|
167
|
+
execStatus: execResult.status,
|
|
168
|
+
errorMessage: execResult.validationError ?? "EL syncing, payload not yet validated",
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
case ExecutionPayloadStatus.INVALID_BLOCK_HASH:
|
|
172
|
+
case ExecutionPayloadStatus.ELERROR:
|
|
173
|
+
case ExecutionPayloadStatus.UNAVAILABLE:
|
|
174
|
+
throw new PayloadError({
|
|
175
|
+
code: PayloadErrorCode.EXECUTION_ENGINE_ERROR,
|
|
176
|
+
execStatus: execResult.status,
|
|
177
|
+
errorMessage: execResult.validationError ?? "",
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// 5b. Verify envelope state root matches post-state
|
|
182
|
+
const postPayloadState = postPayloadResult.postPayloadState;
|
|
183
|
+
const postPayloadStateRoot = postPayloadState.hashTreeRoot();
|
|
184
|
+
if (!byteArrayEquals(envelope.message.stateRoot, postPayloadStateRoot)) {
|
|
185
|
+
throw new PayloadError({
|
|
186
|
+
code: PayloadErrorCode.STATE_TRANSITION_ERROR,
|
|
187
|
+
message: `Envelope state root mismatch expected=${toRootHex(envelope.message.stateRoot)} actual=${toRootHex(postPayloadStateRoot)}`,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// 5c. Persist payload envelope to hot DB (performed asynchronously to avoid blocking)
|
|
192
|
+
this.unfinalizedPayloadEnvelopeWrites.push(payloadInput).catch((e) => {
|
|
193
|
+
if (!isQueueErrorAborted(e)) {
|
|
194
|
+
this.logger.error(
|
|
195
|
+
"Error pushing payload envelope to unfinalized write queue",
|
|
196
|
+
{slot: payloadInput.slot, root: blockRootHex},
|
|
197
|
+
e as Error
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// 6. Update fork choice
|
|
203
|
+
this.forkChoice.onExecutionPayload(
|
|
204
|
+
blockRootHex,
|
|
205
|
+
payloadInput.getBlockHashHex(),
|
|
206
|
+
envelope.message.payload.blockNumber,
|
|
207
|
+
toRootHex(postPayloadStateRoot)
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
// 7. Cache payload state
|
|
211
|
+
// TODO GLOAS: Enable when PR #8868 merged (adds processPayloadState)
|
|
212
|
+
// this.regen.processPayloadState(postPayloadState);
|
|
213
|
+
// if epoch boundary also call
|
|
214
|
+
// this.regen.addCheckpointState(cp, checkpointState, true);
|
|
215
|
+
|
|
216
|
+
// 8. Record metrics for payload envelope and column sources
|
|
217
|
+
this.metrics?.importPayload.bySource.inc({source: payloadInput.getPayloadEnvelopeSource().source});
|
|
218
|
+
for (const {source} of payloadInput.getSampledColumnsWithSource()) {
|
|
219
|
+
this.metrics?.importPayload.columnsBySource.inc({source});
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
this.logger.verbose("Execution payload imported", {
|
|
223
|
+
slot: payloadInput.slot,
|
|
224
|
+
root: blockRootHex,
|
|
225
|
+
blockHash: payloadInput.getBlockHashHex(),
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// 9. Emit event after payload is fully verified and imported to fork choice, only for recent enough payloads
|
|
229
|
+
const currentSlot = this.clock.currentSlot;
|
|
230
|
+
if (currentSlot - payloadInput.slot < EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS) {
|
|
231
|
+
this.emitter.emit(routes.events.EventType.executionPayloadAvailable, {
|
|
232
|
+
slot: payloadInput.slot,
|
|
233
|
+
blockRoot: blockRootHex,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
@@ -126,7 +126,7 @@ export async function processBlocks(
|
|
|
126
126
|
const {state} = err.type;
|
|
127
127
|
const forkTypes = this.config.getForkTypes(blockSlot);
|
|
128
128
|
this.persistInvalidSszValue(forkTypes.SignedBeaconBlock, signedBlock, `${blockSlot}_invalid_signature`);
|
|
129
|
-
this.
|
|
129
|
+
this.persistInvalidSszBytes("BeaconState", state.serialize(), `${state.slot}_invalid_signature`);
|
|
130
130
|
} else if (err.type.code === BlockErrorCode.INVALID_STATE_ROOT) {
|
|
131
131
|
const {signedBlock} = err;
|
|
132
132
|
const blockSlot = signedBlock.message.slot;
|