UNPKG

@lodestar/state-transition

Version:

Beacon Chain state transition function and utils

25 lines 1.43 kB
import { DOMAIN_BEACON_PROPOSER } from "@lodestar/params"; import { ssz } from "@lodestar/types"; import { SignatureSetType, computeSigningRoot } from "../util/index.js"; /** * Extract signatures to allow validating all block signatures at once */ export function getProposerSlashingSignatureSets(state, proposerSlashing) { const { epochCtx } = state; const pubkey = epochCtx.index2pubkey[proposerSlashing.signedHeader1.message.proposerIndex]; // In state transition, ProposerSlashing headers are only partially validated. Their slot could be higher than the // clock and the slashing would still be valid. Must use bigint variants to hash correctly to all possible values return [proposerSlashing.signedHeader1, proposerSlashing.signedHeader2].map((signedHeader) => { const domain = state.config.getDomain(state.slot, DOMAIN_BEACON_PROPOSER, Number(signedHeader.message.slot)); return { type: SignatureSetType.single, pubkey, signingRoot: computeSigningRoot(ssz.phase0.BeaconBlockHeaderBigint, signedHeader.message, domain), signature: signedHeader.signature, }; }); } export function getProposerSlashingsSignatureSets(state, signedBlock) { return signedBlock.message.body.proposerSlashings.flatMap((proposerSlashing) => getProposerSlashingSignatureSets(state, proposerSlashing)); } //# sourceMappingURL=proposerSlashings.js.map