UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

62 lines 2.93 kB
import { PublicKey } from "@chainsafe/blst"; import { ISignatureSet } from "@lodestar/state-transition"; export type VerifySignatureOpts = { /** * A batchable set MAY be verified with more sets to reduce the verification costs. * Multiple sets may be merged and verified as one set. If the result is correct, success is returned * for all them. If at least one set is invalid, all sets are reverified individually. For normal network * conditions this strategy can yield 50% improvement in CPU time spent verifying gossip objects. * Only non-time critical objects should be marked as batchable, since the pool may hold them for 100ms. */ batchable?: boolean; /** * Use main thread to verify signatures, use this with care. * Ignore the batchable option if this is true. */ verifyOnMainThread?: boolean; /** * Some signature sets are more important than others, and should be verified first. */ priority?: boolean; }; export interface IBlsVerifier { /** * Verify 1 or more signature sets. Sets may be verified on batch or not depending on their count * * Signatures all come from the wire (untrusted) are all bytes compressed, must be: * - Parsed from bytes * - Uncompressed * - subgroup_check * - consume in Pairing.aggregate as affine, or mul_n_aggregate as affine * Just send the raw signture recevied as bytes to the thread and verify there * * Pubkeys all come from cache (trusted) have already been checked for subgroup and infinity * - Some pubkeys will have to be aggregated, some don't * - Pubkeys must be available in jacobian coordinates to make aggregation x3 faster * - Then, consume in Pairing.aggregate as affine, or mul_n_aggregate as affine * * All signatures are not trusted and must be group checked (p2.subgroup_check) * * Public keys have already been checked for subgroup and infinity * Signatures have already been checked for subgroup * Signature checks above could be done here for convienence as well */ verifySignatureSets(sets: ISignatureSet[], opts?: VerifySignatureOpts): Promise<boolean>; /** * Similar to verifySignatureSets but: * - all signatures have the same message * - return an array of boolean, each element indicates whether the corresponding signature set is valid * - only support `batchable` option */ verifySignatureSetsSameMessage(sets: { publicKey: PublicKey; signature: Uint8Array; }[], messsage: Uint8Array, opts?: Omit<VerifySignatureOpts, "verifyOnMainThread">): Promise<boolean[]>; /** For multithread pool awaits terminating all workers */ close(): Promise<void>; /** * Returns true if BLS worker pool is ready to accept more work jobs. */ canAcceptWork(): boolean; } //# sourceMappingURL=interface.d.ts.map