@lodestar/beacon-node 1.19.0-dev.c9ff6e30b9 → 1.19.0-dev.cbb894688c
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.
- package/README.md +1 -1
- package/lib/api/rest/base.js +6 -3
- package/lib/api/rest/base.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +7 -6
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +3 -0
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +3 -3
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -2
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
- package/lib/chain/bls/index.d.ts +2 -3
- package/lib/chain/bls/index.js +1 -1
- package/lib/chain/bls/index.js.map +1 -1
- package/lib/chain/bls/maybeBatch.d.ts +12 -0
- package/lib/chain/bls/maybeBatch.js +36 -0
- package/lib/chain/bls/maybeBatch.js.map +1 -0
- package/lib/chain/bls/{multiThread.d.ts → multithread/index.d.ts} +10 -5
- package/lib/chain/bls/{multiThread.js → multithread/index.js} +131 -45
- package/lib/chain/bls/multithread/index.js.map +1 -0
- package/lib/chain/bls/{jobItem.d.ts → multithread/jobItem.d.ts} +3 -3
- package/lib/chain/bls/{jobItem.js → multithread/jobItem.js} +5 -12
- package/lib/chain/bls/multithread/jobItem.js.map +1 -0
- package/lib/chain/bls/multithread/poolSize.d.ts +6 -0
- package/lib/chain/bls/multithread/poolSize.js +17 -0
- package/lib/chain/bls/multithread/poolSize.js.map +1 -0
- package/lib/chain/bls/{types.d.ts → multithread/types.d.ts} +10 -11
- package/lib/chain/bls/multithread/types.js.map +1 -0
- package/lib/chain/bls/multithread/utils.d.ts +5 -0
- package/lib/chain/bls/multithread/utils.js +17 -0
- package/lib/chain/bls/multithread/utils.js.map +1 -0
- package/lib/chain/bls/multithread/worker.d.ts +2 -0
- package/lib/chain/bls/{runBlsWorkReq.js → multithread/worker.js} +32 -9
- package/lib/chain/bls/multithread/worker.js.map +1 -0
- package/lib/chain/bls/singleThread.js +3 -3
- package/lib/chain/bls/singleThread.js.map +1 -1
- package/lib/chain/bls/utils.d.ts +1 -12
- package/lib/chain/bls/utils.js +0 -35
- package/lib/chain/bls/utils.js.map +1 -1
- package/lib/chain/regen/regen.js +3 -3
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/monitoring/clientStats.js +1 -1
- package/lib/monitoring/clientStats.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/discv5/index.js.map +1 -1
- package/lib/network/gossip/encoding.d.ts +1 -1
- package/lib/network/gossip/encoding.js +1 -1
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts +1 -0
- package/lib/network/gossip/gossipsub.js +9 -5
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/options.js +2 -0
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/client.d.ts +1 -0
- package/lib/network/peers/client.js +3 -0
- package/lib/network/peers/client.js.map +1 -1
- package/lib/network/processor/index.js +5 -4
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +2 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/util/eventLoop.d.ts +12 -0
- package/lib/util/eventLoop.js +21 -0
- package/lib/util/eventLoop.js.map +1 -0
- package/lib/util/queue/itemQueue.js +3 -3
- package/lib/util/queue/itemQueue.js.map +1 -1
- package/lib/util/sszBytes.js +5 -2
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +30 -32
- package/lib/chain/bls/jobItem.js.map +0 -1
- package/lib/chain/bls/multiThread.js.map +0 -1
- package/lib/chain/bls/runBlsWorkReq.d.ts +0 -3
- package/lib/chain/bls/runBlsWorkReq.js.map +0 -1
- package/lib/chain/bls/types.js.map +0 -1
- package/lib/chain/bls/verifySets.d.ts +0 -8
- package/lib/chain/bls/verifySets.js +0 -46
- package/lib/chain/bls/verifySets.js.map +0 -1
- /package/lib/chain/bls/{types.js → multithread/types.js} +0 -0
|
@@ -1,14 +1,27 @@
|
|
|
1
|
-
|
|
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;
|
|
2
10
|
import bls from "@chainsafe/bls";
|
|
3
11
|
import { PointFormat } from "@chainsafe/bls/types";
|
|
4
|
-
import { QueueError, QueueErrorCode } from "
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
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";
|
|
8
17
|
import { WorkResultCode } from "./types.js";
|
|
9
18
|
import { chunkifyMaximizeChunkSize } from "./utils.js";
|
|
10
|
-
import {
|
|
19
|
+
import { defaultPoolSize } from "./poolSize.js";
|
|
11
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);
|
|
12
25
|
/**
|
|
13
26
|
* Split big signature sets into smaller sets so they can be sent to multiple workers.
|
|
14
27
|
*
|
|
@@ -39,6 +52,14 @@ const MAX_BUFFER_WAIT_MS = 100;
|
|
|
39
52
|
* Max concurrent jobs on `canAcceptWork` status
|
|
40
53
|
*/
|
|
41
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 = {}));
|
|
42
63
|
/**
|
|
43
64
|
* Wraps "threads" library thread pool queue system with the goals:
|
|
44
65
|
* - Complete total outstanding jobs in total minimum time possible.
|
|
@@ -49,11 +70,10 @@ const MAX_JOBS_CAN_ACCEPT_WORK = 512;
|
|
|
49
70
|
*/
|
|
50
71
|
export class BlsMultiThreadWorkerPool {
|
|
51
72
|
constructor(options, modules) {
|
|
52
|
-
this.format = PointFormat.uncompressed;
|
|
53
|
-
this.workersBusy = 0;
|
|
54
73
|
this.jobs = new LinkedList();
|
|
55
74
|
this.bufferedJobs = null;
|
|
56
75
|
this.closed = false;
|
|
76
|
+
this.workersBusy = 0;
|
|
57
77
|
/**
|
|
58
78
|
* Potentially submit jobs to an idle worker, only if there's a worker and jobs
|
|
59
79
|
*/
|
|
@@ -61,11 +81,21 @@ export class BlsMultiThreadWorkerPool {
|
|
|
61
81
|
if (this.closed) {
|
|
62
82
|
return;
|
|
63
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
|
+
}
|
|
64
89
|
// Prepare work package
|
|
65
90
|
const jobsInput = this.prepareWork();
|
|
66
91
|
if (jobsInput.length === 0) {
|
|
67
92
|
return;
|
|
68
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 };
|
|
69
99
|
this.workersBusy++;
|
|
70
100
|
try {
|
|
71
101
|
let startedJobsDefault = 0;
|
|
@@ -117,9 +147,9 @@ export class BlsMultiThreadWorkerPool {
|
|
|
117
147
|
// If the job, metrics or any code below throws: the job will reject never going stale.
|
|
118
148
|
// Only downside is the job promise may be resolved twice, but that's not an issue
|
|
119
149
|
const [jobStartSec, jobStartNs] = process.hrtime();
|
|
120
|
-
const workResult = await
|
|
150
|
+
const workResult = await workerApi.verifyManySignatureSets(workReqs);
|
|
121
151
|
const [jobEndSec, jobEndNs] = process.hrtime();
|
|
122
|
-
const { batchRetries, batchSigsSuccess, workerStartTime, workerEndTime, results } = workResult;
|
|
152
|
+
const { workerId, batchRetries, batchSigsSuccess, workerStartTime, workerEndTime, results } = workResult;
|
|
123
153
|
const [workerStartSec, workerStartNs] = workerStartTime;
|
|
124
154
|
const [workerEndSec, workerEndNs] = workerEndTime;
|
|
125
155
|
let successCount = 0;
|
|
@@ -132,7 +162,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
132
162
|
// TODO: enable exhaustive switch case checks lint rule
|
|
133
163
|
switch (job.type) {
|
|
134
164
|
case JobQueueItemType.default:
|
|
135
|
-
if (jobResult.code !== WorkResultCode.success) {
|
|
165
|
+
if (!jobResult || jobResult.code !== WorkResultCode.success) {
|
|
136
166
|
job.reject(getJobResultError(jobResult, i));
|
|
137
167
|
errorCount += sigSetCount;
|
|
138
168
|
}
|
|
@@ -143,7 +173,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
143
173
|
break;
|
|
144
174
|
// handle result of the verification of aggregated signature against aggregated pubkeys
|
|
145
175
|
case JobQueueItemType.sameMessage:
|
|
146
|
-
if (jobResult.code !== WorkResultCode.success) {
|
|
176
|
+
if (!jobResult || jobResult.code !== WorkResultCode.success) {
|
|
147
177
|
job.reject(getJobResultError(jobResult, i));
|
|
148
178
|
errorCount += 1;
|
|
149
179
|
}
|
|
@@ -161,12 +191,11 @@ export class BlsMultiThreadWorkerPool {
|
|
|
161
191
|
break;
|
|
162
192
|
}
|
|
163
193
|
}
|
|
164
|
-
// TODO: (@matthewkeil) all of these metrics need to be revisited
|
|
165
194
|
const workerJobTimeSec = workerEndSec - workerStartSec + (workerEndNs - workerStartNs) / 1e9;
|
|
166
195
|
const latencyToWorkerSec = workerStartSec - jobStartSec + (workerStartNs - jobStartNs) / 1e9;
|
|
167
196
|
const latencyFromWorkerSec = jobEndSec - workerEndSec + Number(jobEndNs - workerEndNs) / 1e9;
|
|
168
197
|
this.metrics?.blsThreadPool.timePerSigSet.observe(workerJobTimeSec / startedSigSets);
|
|
169
|
-
this.metrics?.blsThreadPool.jobsWorkerTime.inc({ workerId
|
|
198
|
+
this.metrics?.blsThreadPool.jobsWorkerTime.inc({ workerId }, workerJobTimeSec);
|
|
170
199
|
this.metrics?.blsThreadPool.latencyToWorker.observe(latencyToWorkerSec);
|
|
171
200
|
this.metrics?.blsThreadPool.latencyFromWorker.observe(latencyFromWorkerSec);
|
|
172
201
|
this.metrics?.blsThreadPool.successJobsSignatureSetsCount.inc(successCount);
|
|
@@ -184,9 +213,10 @@ export class BlsMultiThreadWorkerPool {
|
|
|
184
213
|
job.reject(e);
|
|
185
214
|
}
|
|
186
215
|
}
|
|
216
|
+
worker.status = { code: WorkerStatusCode.idle, workerApi };
|
|
187
217
|
this.workersBusy--;
|
|
188
218
|
// Potentially run a new job
|
|
189
|
-
|
|
219
|
+
callInNextEventLoop(this.runJob);
|
|
190
220
|
};
|
|
191
221
|
/**
|
|
192
222
|
* Add all buffered jobs to the job queue and potentially run them immediately
|
|
@@ -200,37 +230,29 @@ export class BlsMultiThreadWorkerPool {
|
|
|
200
230
|
this.jobs.unshift(job);
|
|
201
231
|
}
|
|
202
232
|
this.bufferedJobs = null;
|
|
203
|
-
|
|
233
|
+
callInNextEventLoop(this.runJob);
|
|
204
234
|
}
|
|
205
235
|
};
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
this.logger = modules.logger;
|
|
210
|
-
this.blsVerifyAllMultiThread = options.blsVerifyAllMultiThread ?? false;
|
|
211
|
-
this.blsPoolSize = Number(process.env.UV_THREADPOOL_SIZE);
|
|
212
|
-
const defaultThreadpoolSize = os.availableParallelism();
|
|
213
|
-
this.logger.info(`BLS libuv pool size: ${this.blsPoolSize}`);
|
|
214
|
-
/**
|
|
215
|
-
* Help users ensure that thread pool is large enough for optimal performance
|
|
216
|
-
*
|
|
217
|
-
* Node reports available CPUs. There is enough idle time on the main and
|
|
218
|
-
* network threads that setting UV_THREADPOOL_SIZE to $(nproc) provides the
|
|
219
|
-
* best performance. Recommend this value to consumers
|
|
220
|
-
*/
|
|
221
|
-
if (this.blsPoolSize < defaultThreadpoolSize) {
|
|
222
|
-
this.logger.warn(`UV_THREADPOOL_SIZE=${this.blsPoolSize} which is less than available CPUs: ${defaultThreadpoolSize}. This will cause performance degradation.`);
|
|
223
|
-
}
|
|
224
|
-
const { metrics } = modules;
|
|
236
|
+
const { logger, metrics } = modules;
|
|
237
|
+
this.logger = logger;
|
|
225
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);
|
|
226
247
|
if (metrics) {
|
|
227
248
|
metrics.blsThreadPool.queueLength.addCollect(() => {
|
|
228
249
|
metrics.blsThreadPool.queueLength.set(this.jobs.length);
|
|
250
|
+
metrics.blsThreadPool.workersBusy.set(this.workersBusy);
|
|
229
251
|
});
|
|
230
252
|
}
|
|
231
253
|
}
|
|
232
254
|
canAcceptWork() {
|
|
233
|
-
return (this.workersBusy <
|
|
255
|
+
return (this.workersBusy < blsPoolSize &&
|
|
234
256
|
// TODO: Should also bound the jobs queue?
|
|
235
257
|
this.jobs.length < MAX_JOBS_CAN_ACCEPT_WORK);
|
|
236
258
|
}
|
|
@@ -246,13 +268,17 @@ export class BlsMultiThreadWorkerPool {
|
|
|
246
268
|
}
|
|
247
269
|
if (opts.verifyOnMainThread && !this.blsVerifyAllMultiThread) {
|
|
248
270
|
const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer();
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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
|
+
}
|
|
256
282
|
}
|
|
257
283
|
// Split large array of sets into smaller.
|
|
258
284
|
// Very helpful when syncing finalized, sync may submit +1000 sets so chunkify allows to distribute to many workers
|
|
@@ -299,6 +325,44 @@ export class BlsMultiThreadWorkerPool {
|
|
|
299
325
|
job.reject(new QueueError({ code: QueueErrorCode.QUEUE_ABORTED }));
|
|
300
326
|
}
|
|
301
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;
|
|
302
366
|
}
|
|
303
367
|
/**
|
|
304
368
|
* Register BLS work to be done eventually in a worker
|
|
@@ -307,6 +371,14 @@ export class BlsMultiThreadWorkerPool {
|
|
|
307
371
|
if (this.closed) {
|
|
308
372
|
throw new QueueError({ code: QueueErrorCode.QUEUE_ABORTED });
|
|
309
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
|
+
}
|
|
310
382
|
// Append batchable sets to `bufferedJobs`, starting a timeout to push them into `jobs`.
|
|
311
383
|
// Do not call `runJob()`, it is called from `runBufferedJobs()`
|
|
312
384
|
if (job.opts.batchable) {
|
|
@@ -337,7 +409,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
337
409
|
else {
|
|
338
410
|
this.jobs.push(job);
|
|
339
411
|
}
|
|
340
|
-
|
|
412
|
+
callInNextEventLoop(this.runJob);
|
|
341
413
|
}
|
|
342
414
|
}
|
|
343
415
|
/**
|
|
@@ -369,5 +441,19 @@ export class BlsMultiThreadWorkerPool {
|
|
|
369
441
|
this.metrics?.blsThreadPool.sameMessageRetryJobs.inc(1);
|
|
370
442
|
this.metrics?.blsThreadPool.sameMessageRetrySets.inc(job.sets.length);
|
|
371
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;
|
|
372
458
|
}
|
|
373
|
-
//# sourceMappingURL=
|
|
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
1
|
import { PointFormat, PublicKey } from "@chainsafe/bls/types";
|
|
2
2
|
import { ISignatureSet } from "@lodestar/state-transition";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
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 = {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import bls from "@chainsafe/bls";
|
|
2
2
|
import { CoordType } from "@chainsafe/bls/types";
|
|
3
3
|
import { SignatureSetType } from "@lodestar/state-transition";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { randomBytesNonZero } from "./utils.js";
|
|
4
|
+
import { getAggregatedPubkey } from "../utils.js";
|
|
5
|
+
import { LinkedList } from "../../../util/array.js";
|
|
7
6
|
export var JobQueueItemType;
|
|
8
7
|
(function (JobQueueItemType) {
|
|
9
8
|
JobQueueItemType["default"] = "default";
|
|
@@ -31,7 +30,7 @@ export function jobItemWorkReq(job, format, metrics) {
|
|
|
31
30
|
opts: job.opts,
|
|
32
31
|
sets: job.sets.map((set) => ({
|
|
33
32
|
// this can throw, handled in the consumer code
|
|
34
|
-
publicKey: getAggregatedPubkey(set, metrics),
|
|
33
|
+
publicKey: getAggregatedPubkey(set, metrics).toBytes(format),
|
|
35
34
|
signature: set.signature,
|
|
36
35
|
message: set.signingRoot,
|
|
37
36
|
})),
|
|
@@ -47,19 +46,13 @@ export function jobItemWorkReq(job, format, metrics) {
|
|
|
47
46
|
const timer = metrics?.blsThreadPool.signatureDeserializationMainThreadDuration.startTimer();
|
|
48
47
|
const signatures = job.sets.map((set) => bls.Signature.fromBytes(set.signature, CoordType.affine, true));
|
|
49
48
|
timer?.();
|
|
50
|
-
// adding verification randomness is napi specific. must not attempt with herumi until
|
|
51
|
-
// @chainsafe/bls is updated to support it with herumi
|
|
52
|
-
const randomness = [];
|
|
53
|
-
for (let i = 0; i < job.sets.length; i++) {
|
|
54
|
-
randomness.push(randomBytesNonZero(8));
|
|
55
|
-
}
|
|
56
49
|
return {
|
|
57
50
|
opts: job.opts,
|
|
58
51
|
sets: [
|
|
59
52
|
{
|
|
53
|
+
publicKey: bls.PublicKey.aggregate(job.sets.map((set) => set.publicKey)).toBytes(format),
|
|
54
|
+
signature: bls.Signature.aggregate(signatures).toBytes(format),
|
|
60
55
|
message: job.message,
|
|
61
|
-
publicKey: bls.PublicKey.aggregate(job.sets.map((set, i) => set.publicKey.multiplyBy(randomness[i]))),
|
|
62
|
-
signature: bls.Signature.aggregate(signatures.map((sig, i) => sig.multiplyBy(randomness[i]))),
|
|
63
56
|
},
|
|
64
57
|
],
|
|
65
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,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"}
|
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
message: Uint8Array;
|
|
6
|
-
signature: Uint8Array;
|
|
1
|
+
import { VerifySignatureOpts } from "../interface.js";
|
|
2
|
+
export type WorkerData = {
|
|
3
|
+
implementation: "herumi" | "blst-native";
|
|
4
|
+
workerId: number;
|
|
7
5
|
};
|
|
8
|
-
export type
|
|
9
|
-
publicKey:
|
|
6
|
+
export type SerializedSet = {
|
|
7
|
+
publicKey: Uint8Array;
|
|
10
8
|
message: Uint8Array;
|
|
11
|
-
signature:
|
|
9
|
+
signature: Uint8Array;
|
|
12
10
|
};
|
|
13
|
-
export type WorkRequestSet = DeserializedKeySet | DeserializedSet;
|
|
14
11
|
export type BlsWorkReq = {
|
|
15
12
|
opts: VerifySignatureOpts;
|
|
16
|
-
sets:
|
|
13
|
+
sets: SerializedSet[];
|
|
17
14
|
};
|
|
18
15
|
export declare enum WorkResultCode {
|
|
19
16
|
success = "success",
|
|
@@ -28,6 +25,8 @@ export type WorkResult<R> = {
|
|
|
28
25
|
result: R;
|
|
29
26
|
} | WorkResultError;
|
|
30
27
|
export type BlsWorkResult = {
|
|
28
|
+
/** Ascending integer identifying the worker for metrics */
|
|
29
|
+
workerId: number;
|
|
31
30
|
/** Total num of batches that had to be retried */
|
|
32
31
|
batchRetries: number;
|
|
33
32
|
/** Total num of sigs that have been successfully verified with batching */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/types.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,iCAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Splits an array into an array of arrays maximizing the size of the smallest chunk.
|
|
3
|
+
*/
|
|
4
|
+
export function chunkifyMaximizeChunkSize(arr, minPerChunk) {
|
|
5
|
+
const chunkCount = Math.floor(arr.length / minPerChunk);
|
|
6
|
+
if (chunkCount <= 1) {
|
|
7
|
+
return [arr];
|
|
8
|
+
}
|
|
9
|
+
// Prefer less chunks of bigger size
|
|
10
|
+
const perChunk = Math.ceil(arr.length / chunkCount);
|
|
11
|
+
const arrArr = [];
|
|
12
|
+
for (let i = 0; i < arr.length; i += perChunk) {
|
|
13
|
+
arrArr.push(arr.slice(i, i + perChunk));
|
|
14
|
+
}
|
|
15
|
+
return arrArr;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAI,GAAQ,EAAE,WAAmB;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACxD,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,oCAAoC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAU,EAAE,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
1
|
+
/* eslint-disable @typescript-eslint/strict-boolean-expressions */
|
|
2
|
+
import worker from "node:worker_threads";
|
|
3
|
+
import { expose } from "@chainsafe/threads/worker";
|
|
4
|
+
import bls from "@chainsafe/bls";
|
|
5
|
+
import { CoordType } from "@chainsafe/bls/types";
|
|
6
|
+
import { verifySignatureSetsMaybeBatch } from "../maybeBatch.js";
|
|
3
7
|
import { WorkResultCode } from "./types.js";
|
|
8
|
+
import { chunkifyMaximizeChunkSize } from "./utils.js";
|
|
4
9
|
/**
|
|
5
10
|
* Split batchable sets in chunks of minimum size 16.
|
|
6
11
|
* Batch verify 16 has an aprox cost of 16+1. For 32 it's 32+1. After ~16 the additional savings are not significant.
|
|
@@ -9,7 +14,17 @@ import { WorkResultCode } from "./types.js";
|
|
|
9
14
|
* After observing metrics this number can be reviewed
|
|
10
15
|
*/
|
|
11
16
|
const BATCHABLE_MIN_PER_CHUNK = 16;
|
|
12
|
-
|
|
17
|
+
// Cloned data from instatiation
|
|
18
|
+
const workerData = worker.workerData;
|
|
19
|
+
if (!workerData)
|
|
20
|
+
throw Error("workerData must be defined");
|
|
21
|
+
const { workerId } = workerData || {};
|
|
22
|
+
expose({
|
|
23
|
+
async verifyManySignatureSets(workReqArr) {
|
|
24
|
+
return verifyManySignatureSets(workReqArr);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
function verifyManySignatureSets(workReqArr) {
|
|
13
28
|
const [startSec, startNs] = process.hrtime();
|
|
14
29
|
const results = [];
|
|
15
30
|
let batchRetries = 0;
|
|
@@ -20,11 +35,12 @@ export async function runBlsWorkReq(workReqArr) {
|
|
|
20
35
|
// Split sets between batchable and non-batchable preserving their original index in the req array
|
|
21
36
|
for (let i = 0; i < workReqArr.length; i++) {
|
|
22
37
|
const workReq = workReqArr[i];
|
|
38
|
+
const sets = workReq.sets.map(deserializeSet);
|
|
23
39
|
if (workReq.opts.batchable) {
|
|
24
|
-
batchableSets.push({ idx: i, sets
|
|
40
|
+
batchableSets.push({ idx: i, sets });
|
|
25
41
|
}
|
|
26
42
|
else {
|
|
27
|
-
nonBatchableSets.push({ idx: i, sets
|
|
43
|
+
nonBatchableSets.push({ idx: i, sets });
|
|
28
44
|
}
|
|
29
45
|
}
|
|
30
46
|
if (batchableSets.length > 0) {
|
|
@@ -39,7 +55,7 @@ export async function runBlsWorkReq(workReqArr) {
|
|
|
39
55
|
}
|
|
40
56
|
try {
|
|
41
57
|
// Attempt to verify multiple sets at once
|
|
42
|
-
const isValid =
|
|
58
|
+
const isValid = verifySignatureSetsMaybeBatch(allSets);
|
|
43
59
|
if (isValid) {
|
|
44
60
|
// The entire batch is valid, return success to all
|
|
45
61
|
for (const { idx, sets } of batchableChunk) {
|
|
@@ -64,7 +80,7 @@ export async function runBlsWorkReq(workReqArr) {
|
|
|
64
80
|
}
|
|
65
81
|
for (const { idx, sets } of nonBatchableSets) {
|
|
66
82
|
try {
|
|
67
|
-
const isValid =
|
|
83
|
+
const isValid = verifySignatureSetsMaybeBatch(sets);
|
|
68
84
|
results[idx] = { code: WorkResultCode.success, result: isValid };
|
|
69
85
|
}
|
|
70
86
|
catch (e) {
|
|
@@ -72,8 +88,8 @@ export async function runBlsWorkReq(workReqArr) {
|
|
|
72
88
|
}
|
|
73
89
|
}
|
|
74
90
|
const [workerEndSec, workerEndNs] = process.hrtime();
|
|
75
|
-
// TODO: (@matthewkeil) all of these metrics need to be revisited
|
|
76
91
|
return {
|
|
92
|
+
workerId,
|
|
77
93
|
batchRetries,
|
|
78
94
|
batchSigsSuccess,
|
|
79
95
|
workerStartTime: [startSec, startNs],
|
|
@@ -81,4 +97,11 @@ export async function runBlsWorkReq(workReqArr) {
|
|
|
81
97
|
results,
|
|
82
98
|
};
|
|
83
99
|
}
|
|
84
|
-
|
|
100
|
+
function deserializeSet(set) {
|
|
101
|
+
return {
|
|
102
|
+
publicKey: bls.PublicKey.fromBytes(set.publicKey, CoordType.affine),
|
|
103
|
+
message: set.message,
|
|
104
|
+
signature: set.signature,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import bls from "@chainsafe/bls";
|
|
2
|
-
import { CoordType } from "@chainsafe/
|
|
3
|
-
import {
|
|
2
|
+
import { CoordType } from "@chainsafe/blst";
|
|
3
|
+
import { verifySignatureSetsMaybeBatch } from "./maybeBatch.js";
|
|
4
4
|
import { getAggregatedPubkey, getAggregatedPubkeysCount } from "./utils.js";
|
|
5
5
|
export class BlsSingleThreadVerifier {
|
|
6
6
|
constructor({ metrics = null }) {
|
|
@@ -15,7 +15,7 @@ export class BlsSingleThreadVerifier {
|
|
|
15
15
|
}));
|
|
16
16
|
// Count time after aggregating
|
|
17
17
|
const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer();
|
|
18
|
-
const isValid =
|
|
18
|
+
const isValid = verifySignatureSetsMaybeBatch(setsAggregated);
|
|
19
19
|
// Don't use a try/catch, only count run without exceptions
|
|
20
20
|
if (timer) {
|
|
21
21
|
timer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleThread.js","sourceRoot":"","sources":["../../../src/chain/bls/singleThread.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"singleThread.js","sourceRoot":"","sources":["../../../src/chain/bls/singleThread.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAI1C,OAAO,EAAC,6BAA6B,EAAC,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAAC,MAAM,YAAY,CAAC;AAE1E,MAAM,OAAO,uBAAuB;IAGlC,YAAY,EAAC,OAAO,GAAG,IAAI,EAA4B;QACrD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAqB;QAC7C,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxC,SAAS,EAAE,mBAAmB,CAAC,GAAG,CAAC;YACnC,OAAO,EAAE,GAAG,CAAC,WAAW;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC,CAAC;QAEJ,+BAA+B;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,8BAA8B,CAAC,UAAU,EAAE,CAAC;QACtF,MAAM,OAAO,GAAG,6BAA6B,CAAC,cAAc,CAAC,CAAC;QAE9D,2DAA2D;QAC3D,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,8BAA8B,CAClC,IAAqD,EACrD,OAAmB;QAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,8BAA8B,CAAC,UAAU,EAAE,CAAC;QACtF,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACzE,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,OAAO,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,2CAA2C;gBAC3C,UAAU,GAAG,KAAK,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,UAAyB,CAAC,CAAC;YACrE,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,MAAiB,CAAC;QACtB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACjB,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;QACV,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,gBAAgB;IAClB,CAAC;IAED,aAAa;QACX,qFAAqF;QACrF,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|