UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

40 lines (33 loc) 1.47 kB
import {Bytes32} from "@lodestar/types"; import {GRAFFITI_SIZE} from "../constants/index.js"; import {ClientVersion} from "../execution/index.js"; /** * Parses a graffiti UTF8 string and returns a 32 bytes buffer right padded with zeros */ export function toGraffitiBytes(graffiti: string): Bytes32 { return Buffer.concat([Buffer.from(graffiti, "utf8"), Buffer.alloc(GRAFFITI_SIZE, 0)], GRAFFITI_SIZE); } /** * Converts a graffiti from 32 bytes buffer back to a UTF-8 string */ export function fromGraffitiBytes(graffiti: Bytes32): string { return Buffer.from(graffiti.buffer, graffiti.byteOffset, graffiti.byteLength) .toString("utf8") .replaceAll("\u0000", ""); } export function getDefaultGraffiti( consensusClientVersion: ClientVersion, executionClientVersion: ClientVersion | null | undefined, opts: {private?: boolean} ): string { if (opts.private) { return ""; } if (executionClientVersion != null) { const {code: executionCode, commit: executionCommit} = executionClientVersion; // Follow the 2-byte commit format in https://github.com/ethereum/execution-apis/pull/517#issuecomment-1918512560 return `${executionCode}${executionCommit.slice(0, 4)}${consensusClientVersion.code}${consensusClientVersion.commit.slice(0, 4)}`; } // No EL client info available. We still want to include CL info albeit not spec compliant return `${consensusClientVersion.code}${consensusClientVersion.commit.slice(0, 4)}`; }