UNPKG

@lodestar/state-transition

Version:

Beacon Chain state transition function and utils

32 lines 1.68 kB
import { DOMAIN_BEACON_PROPOSER } from "@lodestar/params"; import { isBlindedBeaconBlock, ssz } from "@lodestar/types"; import { computeSigningRoot } from "../util/index.js"; import { SignatureSetType, verifySignatureSet } from "../util/signatureSets.js"; export function verifyProposerSignature(state, signedBlock) { const signatureSet = getBlockProposerSignatureSet(state, signedBlock); return verifySignatureSet(signatureSet); } export function getBlockProposerSignatureSet(state, signedBlock) { const { config, epochCtx } = state; const domain = config.getDomain(state.slot, DOMAIN_BEACON_PROPOSER, signedBlock.message.slot); const blockType = isBlindedBeaconBlock(signedBlock.message) ? config.getPostBellatrixForkTypes(signedBlock.message.slot).BlindedBeaconBlock : config.getForkTypes(signedBlock.message.slot).BeaconBlock; return { type: SignatureSetType.single, pubkey: epochCtx.index2pubkey[signedBlock.message.proposerIndex], signingRoot: computeSigningRoot(blockType, signedBlock.message, domain), signature: signedBlock.signature, }; } export function getBlockHeaderProposerSignatureSet(state, signedBlockHeader) { const { config, epochCtx } = state; const domain = config.getDomain(state.slot, DOMAIN_BEACON_PROPOSER, signedBlockHeader.message.slot); return { type: SignatureSetType.single, pubkey: epochCtx.index2pubkey[signedBlockHeader.message.proposerIndex], signingRoot: computeSigningRoot(ssz.phase0.BeaconBlockHeader, signedBlockHeader.message, domain), signature: signedBlockHeader.signature, }; } //# sourceMappingURL=proposer.js.map