@lodestar/state-transition
Version:
Beacon Chain state transition function and utils
32 lines • 1.68 kB
JavaScript
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