UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

35 lines 1.53 kB
import { Signature, verify, verifyMultipleAggregateSignatures } from "@chainsafe/blst"; const MIN_SET_COUNT_TO_BATCH = 2; /** * Verify signatures sets with batch verification or regular core verify depending on the set count. * Abstracted in a separate file to be consumed by the threaded pool and the main thread implementation. */ export function verifySignatureSetsMaybeBatch(sets) { try { if (sets.length >= MIN_SET_COUNT_TO_BATCH) { return verifyMultipleAggregateSignatures(sets.map((s) => ({ pk: s.publicKey, msg: s.message, // true = validate signature sig: Signature.fromBytes(s.signature, true), }))); } // .every on an empty array returns true if (sets.length === 0) { throw Error("Empty signature set"); } // If too few signature sets verify them without batching return sets.every((set) => { // true = validate signature const sig = Signature.fromBytes(set.signature, true); return verify(set.message, set.publicKey, sig); }); } catch (_) { // A signature could be malformed, in that case fromBytes throws error // blst-ts `verifyMultipleSignatures` is also a fallible operation if mul_n_aggregate fails // see https://github.com/ChainSafe/blst-ts/blob/b1ba6333f664b08e5c50b2b0d18c4f079203962b/src/lib.ts#L291 return false; } } //# sourceMappingURL=maybeBatch.js.map