UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

28 lines (26 loc) 1.12 kB
import {ChainForkConfig} from "@lodestar/config"; import {RootHex, SignedBeaconBlock} from "@lodestar/types"; import {toRootHex} from "@lodestar/utils"; import {IBlockInput} from "../../../chain/blocks/blockInput/types.js"; /** * String to uniquely identify block segments. Used for peer scoring and to compare if batches are equivalent. */ export function hashBlocks(blocks: IBlockInput[], config: ChainForkConfig): RootHex { switch (blocks.length) { case 0: return "0x"; case 1: { const block0 = blocks[0].getBlock(); return toRootHex(config.getForkTypes(block0.message.slot).SignedBeaconBlock.hashTreeRoot(block0)); } default: { const block0 = blocks[0].getBlock(); const blockN = blocks.at(-1)?.getBlock() as SignedBeaconBlock; return ( // TODO(fulu): should we be doing checks for presence to make sure these do not blow up? toRootHex(config.getForkTypes(block0.message.slot).SignedBeaconBlock.hashTreeRoot(block0)) + toRootHex(config.getForkTypes(blockN.message.slot).SignedBeaconBlock.hashTreeRoot(blockN)) ); } } }