@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
64 lines • 2.54 kB
TypeScript
import { PublicKey } from "@chainsafe/blst";
import { ISignatureSet } from "@lodestar/state-transition";
import { Logger } from "@lodestar/utils";
import { Metrics } from "../../../metrics/index.js";
import { IBlsVerifier, VerifySignatureOpts } from "../interface.js";
import { JobQueueItemType } from "./jobItem.js";
export type BlsMultiThreadWorkerPoolModules = {
logger: Logger;
metrics: Metrics | null;
};
export type BlsMultiThreadWorkerPoolOptions = {
blsVerifyAllMultiThread?: boolean;
};
export type { JobQueueItemType };
/**
* Wraps "threads" library thread pool queue system with the goals:
* - Complete total outstanding jobs in total minimum time possible.
* Will split large signature sets into smaller sets and send to different workers
* - Reduce the latency cost for small signature sets. In NodeJS 12,14 worker <-> main thread
* communication has very high latency, of around ~5 ms. So package multiple small signature
* sets into packages of work and send at once to a worker to distribute the latency cost
*/
export declare class BlsMultiThreadWorkerPool implements IBlsVerifier {
private readonly logger;
private readonly metrics;
private readonly workers;
private readonly jobs;
private bufferedJobs;
private blsVerifyAllMultiThread;
private closed;
private workersBusy;
constructor(options: BlsMultiThreadWorkerPoolOptions, modules: BlsMultiThreadWorkerPoolModules);
canAcceptWork(): boolean;
verifySignatureSets(sets: ISignatureSet[], opts?: VerifySignatureOpts): Promise<boolean>;
/**
* Verify signature sets of the same message, only supports worker verification.
*/
verifySignatureSetsSameMessage(sets: {
publicKey: PublicKey;
signature: Uint8Array;
}[], message: Uint8Array, opts?: Omit<VerifySignatureOpts, "verifyOnMainThread">): Promise<boolean[]>;
close(): Promise<void>;
private createWorkers;
/**
* Register BLS work to be done eventually in a worker
*/
private queueBlsWork;
/**
* Potentially submit jobs to an idle worker, only if there's a worker and jobs
*/
private runJob;
/**
* Grab pending work up to a max number of signatures
*/
private prepareWork;
/**
* Add all buffered jobs to the job queue and potentially run them immediately
*/
private runBufferedJobs;
private retryJobItemSameMessage;
/** For testing */
protected waitTillInitialized(): Promise<void>;
}
//# sourceMappingURL=index.d.ts.map