@lodestar/beacon-node 1.19.0-dev.deafa4f162 → 1.19.0-dev.def34eb342

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/lib/api/rest/base.js +6 -2
  2. package/lib/api/rest/base.js.map +1 -1
  3. package/lib/chain/bls/index.d.ts +2 -3
  4. package/lib/chain/bls/index.js +1 -1
  5. package/lib/chain/bls/index.js.map +1 -1
  6. package/lib/chain/bls/interface.d.ts +1 -1
  7. package/lib/chain/bls/maybeBatch.d.ts +12 -0
  8. package/lib/chain/bls/maybeBatch.js +36 -0
  9. package/lib/chain/bls/maybeBatch.js.map +1 -0
  10. package/lib/chain/bls/{multiThread.d.ts → multithread/index.d.ts} +12 -6
  11. package/lib/chain/bls/{multiThread.js → multithread/index.js} +131 -40
  12. package/lib/chain/bls/multithread/index.js.map +1 -0
  13. package/lib/chain/bls/{jobItem.d.ts → multithread/jobItem.d.ts} +5 -5
  14. package/lib/chain/bls/{jobItem.js → multithread/jobItem.js} +9 -13
  15. package/lib/chain/bls/multithread/jobItem.js.map +1 -0
  16. package/lib/chain/bls/multithread/poolSize.d.ts +6 -0
  17. package/lib/chain/bls/multithread/poolSize.js +17 -0
  18. package/lib/chain/bls/multithread/poolSize.js.map +1 -0
  19. package/lib/chain/bls/{types.d.ts → multithread/types.d.ts} +10 -11
  20. package/lib/chain/bls/multithread/types.js.map +1 -0
  21. package/lib/chain/bls/multithread/utils.d.ts +5 -0
  22. package/lib/chain/bls/multithread/utils.js +17 -0
  23. package/lib/chain/bls/multithread/utils.js.map +1 -0
  24. package/lib/chain/bls/multithread/worker.d.ts +2 -0
  25. package/lib/chain/bls/{runBlsWorkReq.js → multithread/worker.js} +32 -9
  26. package/lib/chain/bls/multithread/worker.js.map +1 -0
  27. package/lib/chain/bls/singleThread.d.ts +1 -1
  28. package/lib/chain/bls/singleThread.js +9 -9
  29. package/lib/chain/bls/singleThread.js.map +1 -1
  30. package/lib/chain/bls/utils.d.ts +1 -7
  31. package/lib/chain/bls/utils.js +2 -24
  32. package/lib/chain/bls/utils.js.map +1 -1
  33. package/lib/chain/chain.js +1 -1
  34. package/lib/chain/chain.js.map +1 -1
  35. package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
  36. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  37. package/lib/chain/opPools/attestationPool.js +9 -5
  38. package/lib/chain/opPools/attestationPool.js.map +1 -1
  39. package/lib/chain/opPools/syncCommitteeMessagePool.js +6 -5
  40. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  41. package/lib/chain/opPools/syncContributionAndProofPool.js +4 -4
  42. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  43. package/lib/chain/opPools/utils.d.ts +6 -0
  44. package/lib/chain/opPools/utils.js +9 -0
  45. package/lib/chain/opPools/utils.js.map +1 -1
  46. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +1 -1
  47. package/lib/chain/validation/signatureSets/selectionProof.d.ts +1 -1
  48. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +1 -1
  49. package/lib/node/utils/interop/deposits.js +2 -2
  50. package/lib/node/utils/interop/deposits.js.map +1 -1
  51. package/package.json +17 -16
  52. package/lib/chain/bls/jobItem.js.map +0 -1
  53. package/lib/chain/bls/multiThread.js.map +0 -1
  54. package/lib/chain/bls/runBlsWorkReq.d.ts +0 -3
  55. package/lib/chain/bls/runBlsWorkReq.js.map +0 -1
  56. package/lib/chain/bls/types.js.map +0 -1
  57. package/lib/chain/bls/verifySets.d.ts +0 -8
  58. package/lib/chain/bls/verifySets.js +0 -46
  59. package/lib/chain/bls/verifySets.js.map +0 -1
  60. /package/lib/chain/bls/{types.js → multithread/types.js} +0 -0
@@ -1,11 +1,15 @@
1
1
  import { parse as parseQueryString } from "qs";
2
- import { fastify } from "fastify";
2
+ import { fastify, errorCodes } from "fastify";
3
3
  import { fastifyCors } from "@fastify/cors";
4
4
  import bearerAuthPlugin from "@fastify/bearer-auth";
5
5
  import { ErrorAborted } from "@lodestar/utils";
6
6
  import { isLocalhostIP } from "../../util/ip.js";
7
7
  import { ApiError, NodeIsSyncing } from "../impl/errors.js";
8
8
  import { HttpActiveSocketsTracker } from "./activeSockets.js";
9
+ /**
10
+ * Error code used by Fastify if media type is not supported (415)
11
+ */
12
+ const INVALID_MEDIA_TYPE_CODE = errorCodes.FST_ERR_CTP_INVALID_MEDIA_TYPE().code;
9
13
  /**
10
14
  * REST API powered by `fastify` server.
11
15
  */
@@ -69,7 +73,7 @@ export class RestApiServer {
69
73
  if (err instanceof ErrorAborted || err instanceof NodeIsSyncing)
70
74
  return;
71
75
  const operationId = getOperationId(req);
72
- if (err instanceof ApiError) {
76
+ if (err instanceof ApiError || err.code === INVALID_MEDIA_TYPE_CODE) {
73
77
  this.logger.warn(`Req ${req.id} ${operationId} failed`, { reason: err.message });
74
78
  }
75
79
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/api/rest/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/api/rest/base.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  export type { IBlsVerifier } from "./interface.js";
2
- export type { JobQueueItemType } from "./jobItem.js";
3
- export type { BlsMultiThreadWorkerPoolModules } from "./multiThread.js";
4
- export { BlsMultiThreadWorkerPool } from "./multiThread.js";
2
+ export type { BlsMultiThreadWorkerPoolModules, JobQueueItemType } from "./multithread/index.js";
3
+ export { BlsMultiThreadWorkerPool } from "./multithread/index.js";
5
4
  export { BlsSingleThreadVerifier } from "./singleThread.js";
6
5
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
- export { BlsMultiThreadWorkerPool } from "./multiThread.js";
1
+ export { BlsMultiThreadWorkerPool } from "./multithread/index.js";
2
2
  export { BlsSingleThreadVerifier } from "./singleThread.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/bls/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,wBAAwB,EAAC,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/bls/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,wBAAwB,EAAC,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { PublicKey } from "@chainsafe/blst";
1
+ import { PublicKey } from "@chainsafe/bls/types";
2
2
  import { ISignatureSet } from "@lodestar/state-transition";
3
3
  export type VerifySignatureOpts = {
4
4
  /**
@@ -0,0 +1,12 @@
1
+ import { PublicKey } from "@chainsafe/bls/types";
2
+ export type SignatureSetDeserialized = {
3
+ publicKey: PublicKey;
4
+ message: Uint8Array;
5
+ signature: Uint8Array;
6
+ };
7
+ /**
8
+ * Verify signatures sets with batch verification or regular core verify depending on the set count.
9
+ * Abstracted in a separate file to be consumed by the threaded pool and the main thread implementation.
10
+ */
11
+ export declare function verifySignatureSetsMaybeBatch(sets: SignatureSetDeserialized[]): boolean;
12
+ //# sourceMappingURL=maybeBatch.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { CoordType } from "@chainsafe/bls/types";
2
+ import bls from "@chainsafe/bls";
3
+ const MIN_SET_COUNT_TO_BATCH = 2;
4
+ /**
5
+ * Verify signatures sets with batch verification or regular core verify depending on the set count.
6
+ * Abstracted in a separate file to be consumed by the threaded pool and the main thread implementation.
7
+ */
8
+ export function verifySignatureSetsMaybeBatch(sets) {
9
+ try {
10
+ if (sets.length >= MIN_SET_COUNT_TO_BATCH) {
11
+ return bls.Signature.verifyMultipleSignatures(sets.map((s) => ({
12
+ publicKey: s.publicKey,
13
+ message: s.message,
14
+ // true = validate signature
15
+ signature: bls.Signature.fromBytes(s.signature, CoordType.affine, true),
16
+ })));
17
+ }
18
+ // .every on an empty array returns true
19
+ if (sets.length === 0) {
20
+ throw Error("Empty signature set");
21
+ }
22
+ // If too few signature sets verify them without batching
23
+ return sets.every((set) => {
24
+ // true = validate signature
25
+ const sig = bls.Signature.fromBytes(set.signature, CoordType.affine, true);
26
+ return sig.verify(set.publicKey, set.message);
27
+ });
28
+ }
29
+ catch (_) {
30
+ // A signature could be malformed, in that case fromBytes throws error
31
+ // blst-ts `verifyMultipleSignatures` is also a fallible operation if mul_n_aggregate fails
32
+ // see https://github.com/ChainSafe/blst-ts/blob/b1ba6333f664b08e5c50b2b0d18c4f079203962b/src/lib.ts#L291
33
+ return false;
34
+ }
35
+ }
36
+ //# sourceMappingURL=maybeBatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybeBatch.js","sourceRoot":"","sources":["../../../src/chain/bls/maybeBatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,GAAG,MAAM,gBAAgB,CAAC;AAEjC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAQjC;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAgC;IAC5E,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;YAC1C,OAAO,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACf,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,4BAA4B;gBAC5B,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;aACxE,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,CAAC;QAED,yDAAyD;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACxB,4BAA4B;YAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3E,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sEAAsE;QACtE,2FAA2F;QAC3F,yGAAyG;QACzG,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,8 +1,9 @@
1
- import { PublicKey } from "@chainsafe/blst";
1
+ import { PublicKey } from "@chainsafe/bls/types";
2
2
  import { Logger } from "@lodestar/utils";
3
3
  import { ISignatureSet } from "@lodestar/state-transition";
4
- import { Metrics } from "../../metrics/index.js";
5
- import { IBlsVerifier, VerifySignatureOpts } from "./interface.js";
4
+ import { Metrics } from "../../../metrics/index.js";
5
+ import { IBlsVerifier, VerifySignatureOpts } from "../interface.js";
6
+ import { JobQueueItemType } from "./jobItem.js";
6
7
  export type BlsMultiThreadWorkerPoolModules = {
7
8
  logger: Logger;
8
9
  metrics: Metrics | null;
@@ -10,6 +11,7 @@ export type BlsMultiThreadWorkerPoolModules = {
10
11
  export type BlsMultiThreadWorkerPoolOptions = {
11
12
  blsVerifyAllMultiThread?: boolean;
12
13
  };
14
+ export type { JobQueueItemType };
13
15
  /**
14
16
  * Wraps "threads" library thread pool queue system with the goals:
15
17
  * - Complete total outstanding jobs in total minimum time possible.
@@ -21,12 +23,13 @@ export type BlsMultiThreadWorkerPoolOptions = {
21
23
  export declare class BlsMultiThreadWorkerPool implements IBlsVerifier {
22
24
  private readonly logger;
23
25
  private readonly metrics;
24
- private blsPoolSize;
25
- private workersBusy;
26
+ private readonly format;
27
+ private readonly workers;
26
28
  private readonly jobs;
27
29
  private bufferedJobs;
28
30
  private blsVerifyAllMultiThread;
29
31
  private closed;
32
+ private workersBusy;
30
33
  constructor(options: BlsMultiThreadWorkerPoolOptions, modules: BlsMultiThreadWorkerPoolModules);
31
34
  canAcceptWork(): boolean;
32
35
  verifySignatureSets(sets: ISignatureSet[], opts?: VerifySignatureOpts): Promise<boolean>;
@@ -38,6 +41,7 @@ export declare class BlsMultiThreadWorkerPool implements IBlsVerifier {
38
41
  signature: Uint8Array;
39
42
  }[], message: Uint8Array, opts?: Omit<VerifySignatureOpts, "verifyOnMainThread">): Promise<boolean[]>;
40
43
  close(): Promise<void>;
44
+ private createWorkers;
41
45
  /**
42
46
  * Register BLS work to be done eventually in a worker
43
47
  */
@@ -55,5 +59,7 @@ export declare class BlsMultiThreadWorkerPool implements IBlsVerifier {
55
59
  */
56
60
  private runBufferedJobs;
57
61
  private retryJobItemSameMessage;
62
+ /** For testing */
63
+ private waitTillInitialized;
58
64
  }
59
- //# sourceMappingURL=multiThread.d.ts.map
65
+ //# sourceMappingURL=index.d.ts.map
@@ -1,13 +1,27 @@
1
- import os from "node:os";
2
- import { QueueError, QueueErrorCode } from "../../util/queue/index.js";
3
- import { LinkedList } from "../../util/array.js";
4
- import { callInNextEventLoop } from "../../util/eventLoop.js";
5
- import { getAggregatedPubkey, getAggregatedPubkeysCount, getJobResultError } from "./utils.js";
6
- import { verifySets } from "./verifySets.js";
1
+ /* eslint-disable @typescript-eslint/strict-boolean-expressions */
2
+ import path from "node:path";
3
+ import { spawn, Worker } from "@chainsafe/threads";
4
+ // `threads` library creates self global variable which breaks `timeout-abort-controller` https://github.com/jacobheun/timeout-abort-controller/issues/9
5
+ // Don't add an eslint disable here as a reminder that this has to be fixed eventually
6
+ // eslint-disable-next-line
7
+ // @ts-ignore
8
+ // eslint-disable-next-line
9
+ self = undefined;
10
+ import bls from "@chainsafe/bls";
11
+ import { PointFormat } from "@chainsafe/bls/types";
12
+ import { QueueError, QueueErrorCode } from "../../../util/queue/index.js";
13
+ import { getAggregatedPubkey, getAggregatedPubkeysCount } from "../utils.js";
14
+ import { verifySignatureSetsMaybeBatch } from "../maybeBatch.js";
15
+ import { LinkedList } from "../../../util/array.js";
16
+ import { callInNextEventLoop } from "../../../util/eventLoop.js";
7
17
  import { WorkResultCode } from "./types.js";
8
18
  import { chunkifyMaximizeChunkSize } from "./utils.js";
9
- import { runBlsWorkReq } from "./runBlsWorkReq.js";
19
+ import { defaultPoolSize } from "./poolSize.js";
10
20
  import { JobQueueItemType, jobItemSameMessageToMultiSet, jobItemSigSets, jobItemWorkReq, } from "./jobItem.js";
21
+ // Worker constructor consider the path relative to the current working directory
22
+ const workerDir = process.env.NODE_ENV === "test" ? "../../../../lib/chain/bls/multithread" : "./";
23
+ // 1 worker for the main thread
24
+ const blsPoolSize = Math.max(defaultPoolSize - 1, 1);
11
25
  /**
12
26
  * Split big signature sets into smaller sets so they can be sent to multiple workers.
13
27
  *
@@ -38,6 +52,14 @@ const MAX_BUFFER_WAIT_MS = 100;
38
52
  * Max concurrent jobs on `canAcceptWork` status
39
53
  */
40
54
  const MAX_JOBS_CAN_ACCEPT_WORK = 512;
55
+ var WorkerStatusCode;
56
+ (function (WorkerStatusCode) {
57
+ WorkerStatusCode[WorkerStatusCode["notInitialized"] = 0] = "notInitialized";
58
+ WorkerStatusCode[WorkerStatusCode["initializing"] = 1] = "initializing";
59
+ WorkerStatusCode[WorkerStatusCode["initializationError"] = 2] = "initializationError";
60
+ WorkerStatusCode[WorkerStatusCode["idle"] = 3] = "idle";
61
+ WorkerStatusCode[WorkerStatusCode["running"] = 4] = "running";
62
+ })(WorkerStatusCode || (WorkerStatusCode = {}));
41
63
  /**
42
64
  * Wraps "threads" library thread pool queue system with the goals:
43
65
  * - Complete total outstanding jobs in total minimum time possible.
@@ -48,10 +70,10 @@ const MAX_JOBS_CAN_ACCEPT_WORK = 512;
48
70
  */
49
71
  export class BlsMultiThreadWorkerPool {
50
72
  constructor(options, modules) {
51
- this.workersBusy = 0;
52
73
  this.jobs = new LinkedList();
53
74
  this.bufferedJobs = null;
54
75
  this.closed = false;
76
+ this.workersBusy = 0;
55
77
  /**
56
78
  * Potentially submit jobs to an idle worker, only if there's a worker and jobs
57
79
  */
@@ -59,11 +81,21 @@ export class BlsMultiThreadWorkerPool {
59
81
  if (this.closed) {
60
82
  return;
61
83
  }
84
+ // Find idle worker
85
+ const worker = this.workers.find((worker) => worker.status.code === WorkerStatusCode.idle);
86
+ if (!worker || worker.status.code !== WorkerStatusCode.idle) {
87
+ return;
88
+ }
62
89
  // Prepare work package
63
90
  const jobsInput = this.prepareWork();
64
91
  if (jobsInput.length === 0) {
65
92
  return;
66
93
  }
94
+ // TODO: After sending the work to the worker the main thread can drop the job arguments
95
+ // and free-up memory, only needs to keep the job's Promise handlers.
96
+ // Maybe it's not useful since all data referenced in jobs is likely referenced by others
97
+ const workerApi = worker.status.workerApi;
98
+ worker.status = { code: WorkerStatusCode.running, workerApi };
67
99
  this.workersBusy++;
68
100
  try {
69
101
  let startedJobsDefault = 0;
@@ -78,7 +110,7 @@ export class BlsMultiThreadWorkerPool {
78
110
  try {
79
111
  // Note: This can throw, must be handled per-job.
80
112
  // Pubkey and signature aggregation is defered here
81
- workReq = jobItemWorkReq(job, this.metrics);
113
+ workReq = jobItemWorkReq(job, this.format, this.metrics);
82
114
  }
83
115
  catch (e) {
84
116
  this.metrics?.blsThreadPool.errorAggregateSignatureSetsCount.inc({ type: job.type });
@@ -115,9 +147,9 @@ export class BlsMultiThreadWorkerPool {
115
147
  // If the job, metrics or any code below throws: the job will reject never going stale.
116
148
  // Only downside is the job promise may be resolved twice, but that's not an issue
117
149
  const [jobStartSec, jobStartNs] = process.hrtime();
118
- const workResult = await runBlsWorkReq(workReqs);
150
+ const workResult = await workerApi.verifyManySignatureSets(workReqs);
119
151
  const [jobEndSec, jobEndNs] = process.hrtime();
120
- const { batchRetries, batchSigsSuccess, workerStartTime, workerEndTime, results } = workResult;
152
+ const { workerId, batchRetries, batchSigsSuccess, workerStartTime, workerEndTime, results } = workResult;
121
153
  const [workerStartSec, workerStartNs] = workerStartTime;
122
154
  const [workerEndSec, workerEndNs] = workerEndTime;
123
155
  let successCount = 0;
@@ -130,7 +162,7 @@ export class BlsMultiThreadWorkerPool {
130
162
  // TODO: enable exhaustive switch case checks lint rule
131
163
  switch (job.type) {
132
164
  case JobQueueItemType.default:
133
- if (jobResult.code !== WorkResultCode.success) {
165
+ if (!jobResult || jobResult.code !== WorkResultCode.success) {
134
166
  job.reject(getJobResultError(jobResult, i));
135
167
  errorCount += sigSetCount;
136
168
  }
@@ -141,7 +173,7 @@ export class BlsMultiThreadWorkerPool {
141
173
  break;
142
174
  // handle result of the verification of aggregated signature against aggregated pubkeys
143
175
  case JobQueueItemType.sameMessage:
144
- if (jobResult.code !== WorkResultCode.success) {
176
+ if (!jobResult || jobResult.code !== WorkResultCode.success) {
145
177
  job.reject(getJobResultError(jobResult, i));
146
178
  errorCount += 1;
147
179
  }
@@ -159,12 +191,11 @@ export class BlsMultiThreadWorkerPool {
159
191
  break;
160
192
  }
161
193
  }
162
- // TODO: (@matthewkeil) all of these metrics need to be revisited
163
194
  const workerJobTimeSec = workerEndSec - workerStartSec + (workerEndNs - workerStartNs) / 1e9;
164
195
  const latencyToWorkerSec = workerStartSec - jobStartSec + (workerStartNs - jobStartNs) / 1e9;
165
196
  const latencyFromWorkerSec = jobEndSec - workerEndSec + Number(jobEndNs - workerEndNs) / 1e9;
166
197
  this.metrics?.blsThreadPool.timePerSigSet.observe(workerJobTimeSec / startedSigSets);
167
- this.metrics?.blsThreadPool.jobsWorkerTime.inc({ workerId: 0 }, workerJobTimeSec);
198
+ this.metrics?.blsThreadPool.jobsWorkerTime.inc({ workerId }, workerJobTimeSec);
168
199
  this.metrics?.blsThreadPool.latencyToWorker.observe(latencyToWorkerSec);
169
200
  this.metrics?.blsThreadPool.latencyFromWorker.observe(latencyFromWorkerSec);
170
201
  this.metrics?.blsThreadPool.successJobsSignatureSetsCount.inc(successCount);
@@ -182,6 +213,7 @@ export class BlsMultiThreadWorkerPool {
182
213
  job.reject(e);
183
214
  }
184
215
  }
216
+ worker.status = { code: WorkerStatusCode.idle, workerApi };
185
217
  this.workersBusy--;
186
218
  // Potentially run a new job
187
219
  callInNextEventLoop(this.runJob);
@@ -201,31 +233,26 @@ export class BlsMultiThreadWorkerPool {
201
233
  callInNextEventLoop(this.runJob);
202
234
  }
203
235
  };
204
- this.logger = modules.logger;
205
- this.blsVerifyAllMultiThread = options.blsVerifyAllMultiThread ?? false;
206
- this.blsPoolSize = Number(process.env.UV_THREADPOOL_SIZE);
207
- const defaultThreadpoolSize = os.availableParallelism();
208
- this.logger.info(`BLS libuv pool size: ${this.blsPoolSize}`);
209
- /**
210
- * Help users ensure that thread pool is large enough for optimal performance
211
- *
212
- * Node reports available CPUs. There is enough idle time on the main and
213
- * network threads that setting UV_THREADPOOL_SIZE to $(nproc) provides the
214
- * best performance. Recommend this value to consumers
215
- */
216
- if (this.blsPoolSize < defaultThreadpoolSize) {
217
- this.logger.warn(`UV_THREADPOOL_SIZE=${this.blsPoolSize} which is less than available CPUs: ${defaultThreadpoolSize}. This will cause performance degradation.`);
218
- }
219
- const { metrics } = modules;
236
+ const { logger, metrics } = modules;
237
+ this.logger = logger;
220
238
  this.metrics = metrics;
239
+ this.blsVerifyAllMultiThread = options.blsVerifyAllMultiThread ?? false;
240
+ // TODO: Allow to customize implementation
241
+ const implementation = bls.implementation;
242
+ // Use compressed for herumi for now.
243
+ // THe worker is not able to deserialize from uncompressed
244
+ // `Error: err _wrapDeserialize`
245
+ this.format = implementation === "blst-native" ? PointFormat.uncompressed : PointFormat.compressed;
246
+ this.workers = this.createWorkers(implementation, blsPoolSize);
221
247
  if (metrics) {
222
248
  metrics.blsThreadPool.queueLength.addCollect(() => {
223
249
  metrics.blsThreadPool.queueLength.set(this.jobs.length);
250
+ metrics.blsThreadPool.workersBusy.set(this.workersBusy);
224
251
  });
225
252
  }
226
253
  }
227
254
  canAcceptWork() {
228
- return (this.workersBusy < this.blsPoolSize &&
255
+ return (this.workersBusy < blsPoolSize &&
229
256
  // TODO: Should also bound the jobs queue?
230
257
  this.jobs.length < MAX_JOBS_CAN_ACCEPT_WORK);
231
258
  }
@@ -241,13 +268,17 @@ export class BlsMultiThreadWorkerPool {
241
268
  }
242
269
  if (opts.verifyOnMainThread && !this.blsVerifyAllMultiThread) {
243
270
  const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer();
244
- const isValid = verifySets(sets.map((set) => ({
245
- publicKey: getAggregatedPubkey(set),
246
- message: set.signingRoot.valueOf(),
247
- signature: set.signature,
248
- })));
249
- timer?.();
250
- return isValid;
271
+ try {
272
+ return verifySignatureSetsMaybeBatch(sets.map((set) => ({
273
+ publicKey: getAggregatedPubkey(set),
274
+ message: set.signingRoot.valueOf(),
275
+ signature: set.signature,
276
+ })));
277
+ }
278
+ finally {
279
+ if (timer)
280
+ timer();
281
+ }
251
282
  }
252
283
  // Split large array of sets into smaller.
253
284
  // Very helpful when syncing finalized, sync may submit +1000 sets so chunkify allows to distribute to many workers
@@ -294,6 +325,44 @@ export class BlsMultiThreadWorkerPool {
294
325
  job.reject(new QueueError({ code: QueueErrorCode.QUEUE_ABORTED }));
295
326
  }
296
327
  this.jobs.clear();
328
+ // Terminate all workers. await to ensure no workers are left hanging
329
+ await Promise.all(Array.from(this.workers.entries()).map(([id, worker]) =>
330
+ // NOTE: 'threads' has not yet updated types, and NodeJS complains with
331
+ // [DEP0132] DeprecationWarning: Passing a callback to worker.terminate() is deprecated. It returns a Promise instead.
332
+ worker.worker.terminate().catch((e) => {
333
+ this.logger.error("Error terminating worker", { id }, e);
334
+ })));
335
+ }
336
+ createWorkers(implementation, poolSize) {
337
+ const workers = [];
338
+ for (let i = 0; i < poolSize; i++) {
339
+ const workerData = { implementation, workerId: i };
340
+ const worker = new Worker(path.join(workerDir, "worker.js"), {
341
+ workerData,
342
+ });
343
+ const workerDescriptor = {
344
+ worker,
345
+ status: { code: WorkerStatusCode.notInitialized },
346
+ };
347
+ workers.push(workerDescriptor);
348
+ // TODO: Consider initializing only when necessary
349
+ const initPromise = spawn(worker, {
350
+ // A Lodestar Node may do very expensive task at start blocking the event loop and causing
351
+ // the initialization to timeout. The number below is big enough to almost disable the timeout
352
+ timeout: 5 * 60 * 1000,
353
+ });
354
+ workerDescriptor.status = { code: WorkerStatusCode.initializing, initPromise };
355
+ initPromise
356
+ .then((workerApi) => {
357
+ workerDescriptor.status = { code: WorkerStatusCode.idle, workerApi };
358
+ // Potentially run jobs that were queued before initialization of the first worker
359
+ setTimeout(this.runJob, 0);
360
+ })
361
+ .catch((error) => {
362
+ workerDescriptor.status = { code: WorkerStatusCode.initializationError, error };
363
+ });
364
+ }
365
+ return workers;
297
366
  }
298
367
  /**
299
368
  * Register BLS work to be done eventually in a worker
@@ -302,6 +371,14 @@ export class BlsMultiThreadWorkerPool {
302
371
  if (this.closed) {
303
372
  throw new QueueError({ code: QueueErrorCode.QUEUE_ABORTED });
304
373
  }
374
+ // TODO: Consider if limiting queue size is necessary here.
375
+ // It would be bad to reject signatures because the node is slow.
376
+ // However, if the worker communication broke jobs won't ever finish
377
+ if (this.workers.length > 0 &&
378
+ this.workers[0].status.code === WorkerStatusCode.initializationError &&
379
+ this.workers.every((worker) => worker.status.code === WorkerStatusCode.initializationError)) {
380
+ return job.reject(this.workers[0].status.error);
381
+ }
305
382
  // Append batchable sets to `bufferedJobs`, starting a timeout to push them into `jobs`.
306
383
  // Do not call `runJob()`, it is called from `runBufferedJobs()`
307
384
  if (job.opts.batchable) {
@@ -364,5 +441,19 @@ export class BlsMultiThreadWorkerPool {
364
441
  this.metrics?.blsThreadPool.sameMessageRetryJobs.inc(1);
365
442
  this.metrics?.blsThreadPool.sameMessageRetrySets.inc(job.sets.length);
366
443
  }
444
+ /** For testing */
445
+ async waitTillInitialized() {
446
+ await Promise.all(this.workers.map(async (worker) => {
447
+ if (worker.status.code === WorkerStatusCode.initializing) {
448
+ await worker.status.initPromise;
449
+ }
450
+ }));
451
+ }
452
+ }
453
+ function getJobResultError(jobResult, i) {
454
+ const workerError = jobResult ? Error(jobResult.error.message) : Error(`No jobResult for index ${i}`);
455
+ if (jobResult?.error?.stack)
456
+ workerError.stack = jobResult.error.stack;
457
+ return workerError;
367
458
  }
368
- //# sourceMappingURL=multiThread.js.map
459
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { PublicKey } from "@chainsafe/blst";
1
+ import { PointFormat, PublicKey } from "@chainsafe/bls/types";
2
2
  import { ISignatureSet } from "@lodestar/state-transition";
3
- import { LinkedList } from "../../util/array.js";
4
- import { Metrics } from "../../metrics/metrics.js";
5
- import { VerifySignatureOpts } from "./interface.js";
3
+ import { VerifySignatureOpts } from "../interface.js";
4
+ import { LinkedList } from "../../../util/array.js";
5
+ import { Metrics } from "../../../metrics/metrics.js";
6
6
  import { BlsWorkReq } from "./types.js";
7
7
  export type JobQueueItem = JobQueueItemDefault | JobQueueItemSameMessage;
8
8
  export type JobQueueItemDefault = {
@@ -37,7 +37,7 @@ export declare function jobItemSigSets(job: JobQueueItem): number;
37
37
  * Prepare BlsWorkReq from JobQueueItem
38
38
  * WARNING: May throw with untrusted user input
39
39
  */
40
- export declare function jobItemWorkReq(job: JobQueueItem, metrics: Metrics | null): BlsWorkReq;
40
+ export declare function jobItemWorkReq(job: JobQueueItem, format: PointFormat, metrics: Metrics | null): BlsWorkReq;
41
41
  /**
42
42
  * Convert a JobQueueItemSameMessage into multiple JobQueueItemDefault linked to the original promise
43
43
  */
@@ -1,8 +1,8 @@
1
- import { aggregatePublicKeys, aggregateSignatures, randomBytesNonZero } from "@chainsafe/blst";
2
- import { signatureFromBytes } from "@lodestar/utils";
1
+ import bls from "@chainsafe/bls";
2
+ import { CoordType } from "@chainsafe/bls/types";
3
3
  import { SignatureSetType } from "@lodestar/state-transition";
4
- import { LinkedList } from "../../util/array.js";
5
- import { getAggregatedPubkey } from "./utils.js";
4
+ import { getAggregatedPubkey } from "../utils.js";
5
+ import { LinkedList } from "../../../util/array.js";
6
6
  export var JobQueueItemType;
7
7
  (function (JobQueueItemType) {
8
8
  JobQueueItemType["default"] = "default";
@@ -23,14 +23,14 @@ export function jobItemSigSets(job) {
23
23
  * Prepare BlsWorkReq from JobQueueItem
24
24
  * WARNING: May throw with untrusted user input
25
25
  */
26
- export function jobItemWorkReq(job, metrics) {
26
+ export function jobItemWorkReq(job, format, metrics) {
27
27
  switch (job.type) {
28
28
  case JobQueueItemType.default:
29
29
  return {
30
30
  opts: job.opts,
31
31
  sets: job.sets.map((set) => ({
32
32
  // this can throw, handled in the consumer code
33
- publicKey: getAggregatedPubkey(set, metrics),
33
+ publicKey: getAggregatedPubkey(set, metrics).toBytes(format),
34
34
  signature: set.signature,
35
35
  message: set.signingRoot,
36
36
  })),
@@ -44,19 +44,15 @@ export function jobItemWorkReq(job, metrics) {
44
44
  // and not a problem in the near future
45
45
  // this is monitored on v1.11.0 https://github.com/ChainSafe/lodestar/pull/5912#issuecomment-1700320307
46
46
  const timer = metrics?.blsThreadPool.signatureDeserializationMainThreadDuration.startTimer();
47
- const signatures = job.sets.map((set) => signatureFromBytes(set.signature));
47
+ const signatures = job.sets.map((set) => bls.Signature.fromBytes(set.signature, CoordType.affine, true));
48
48
  timer?.();
49
- const randomness = [];
50
- for (let i = 0; i < job.sets.length; i++) {
51
- randomness.push(randomBytesNonZero(8));
52
- }
53
49
  return {
54
50
  opts: job.opts,
55
51
  sets: [
56
52
  {
53
+ publicKey: bls.PublicKey.aggregate(job.sets.map((set) => set.publicKey)).toBytes(format),
54
+ signature: bls.Signature.aggregate(signatures).toBytes(format),
57
55
  message: job.message,
58
- publicKey: aggregatePublicKeys(job.sets.map((set, i) => set.publicKey.multiplyBy(randomness[i]))),
59
- signature: aggregateSignatures(signatures.map((sig, i) => sig.multiplyBy(randomness[i]))),
60
56
  },
61
57
  ],
62
58
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobItem.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/jobItem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ declare let defaultPoolSize: number;
2
+ /**
3
+ * Cross-platform aprox number of logical cores
4
+ */
5
+ export { defaultPoolSize };
6
+ //# sourceMappingURL=poolSize.d.ts.map
@@ -0,0 +1,17 @@
1
+ let defaultPoolSize;
2
+ try {
3
+ if (typeof navigator !== "undefined") {
4
+ defaultPoolSize = navigator.hardwareConcurrency ?? 4;
5
+ }
6
+ else {
7
+ defaultPoolSize = (await import("node:os")).availableParallelism();
8
+ }
9
+ }
10
+ catch (e) {
11
+ defaultPoolSize = 8;
12
+ }
13
+ /**
14
+ * Cross-platform aprox number of logical cores
15
+ */
16
+ export { defaultPoolSize };
17
+ //# sourceMappingURL=poolSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poolSize.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/poolSize.ts"],"names":[],"mappings":"AAAA,IAAI,eAAuB,CAAC;AAE5B,IAAI,CAAC;IACH,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACrC,eAAe,GAAG,SAAS,CAAC,mBAAmB,IAAI,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,eAAe,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACrE,CAAC;AACH,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,eAAe,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,OAAO,EAAC,eAAe,EAAC,CAAC"}