@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
62 lines • 2.93 kB
TypeScript
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