@lodestar/beacon-node 1.19.0-dev.2649a87aab → 1.19.0-dev.97d9aa8b0c
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/lib/chain/bls/index.d.ts +3 -2
- package/lib/chain/bls/index.js +1 -1
- package/lib/chain/bls/index.js.map +1 -1
- package/lib/chain/bls/{multithread/jobItem.d.ts → jobItem.d.ts} +3 -3
- package/lib/chain/bls/{multithread/jobItem.js → jobItem.js} +12 -5
- package/lib/chain/bls/jobItem.js.map +1 -0
- package/lib/chain/bls/{multithread/index.d.ts → multiThread.d.ts} +5 -10
- package/lib/chain/bls/{multithread/index.js → multiThread.js} +42 -127
- package/lib/chain/bls/multiThread.js.map +1 -0
- package/lib/chain/bls/runBlsWorkReq.d.ts +3 -0
- package/lib/chain/bls/{multithread/worker.js → runBlsWorkReq.js} +9 -32
- package/lib/chain/bls/runBlsWorkReq.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/{multithread/types.d.ts → types.d.ts} +11 -10
- package/lib/chain/bls/types.js.map +1 -0
- package/lib/chain/bls/utils.d.ts +12 -1
- package/lib/chain/bls/utils.js +35 -0
- package/lib/chain/bls/utils.js.map +1 -1
- package/lib/chain/bls/verifySets.d.ts +8 -0
- package/lib/chain/bls/verifySets.js +46 -0
- package/lib/chain/bls/verifySets.js.map +1 -0
- package/package.json +16 -16
- package/lib/chain/bls/maybeBatch.d.ts +0 -12
- package/lib/chain/bls/maybeBatch.js +0 -36
- package/lib/chain/bls/maybeBatch.js.map +0 -1
- package/lib/chain/bls/multithread/index.js.map +0 -1
- package/lib/chain/bls/multithread/jobItem.js.map +0 -1
- package/lib/chain/bls/multithread/poolSize.d.ts +0 -6
- package/lib/chain/bls/multithread/poolSize.js +0 -17
- package/lib/chain/bls/multithread/poolSize.js.map +0 -1
- package/lib/chain/bls/multithread/types.js.map +0 -1
- package/lib/chain/bls/multithread/utils.d.ts +0 -5
- package/lib/chain/bls/multithread/utils.js +0 -17
- package/lib/chain/bls/multithread/utils.js.map +0 -1
- package/lib/chain/bls/multithread/worker.d.ts +0 -2
- package/lib/chain/bls/multithread/worker.js.map +0 -1
- /package/lib/chain/bls/{multithread/types.js → types.js} +0 -0
package/lib/chain/bls/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export type { IBlsVerifier } from "./interface.js";
|
|
2
|
-
export type {
|
|
3
|
-
export {
|
|
2
|
+
export type { JobQueueItemType } from "./jobItem.js";
|
|
3
|
+
export type { BlsMultiThreadWorkerPoolModules } from "./multiThread.js";
|
|
4
|
+
export { BlsMultiThreadWorkerPool } from "./multiThread.js";
|
|
4
5
|
export { BlsSingleThreadVerifier } from "./singleThread.js";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/chain/bls/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/bls/index.ts"],"names":[],"mappings":"
|
|
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,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 { LinkedList } from "../../util/array.js";
|
|
4
|
+
import { Metrics } from "../../metrics/metrics.js";
|
|
5
|
+
import { VerifySignatureOpts } from "./interface.js";
|
|
6
6
|
import { BlsWorkReq } from "./types.js";
|
|
7
7
|
export type JobQueueItem = JobQueueItemDefault | JobQueueItemSameMessage;
|
|
8
8
|
export type JobQueueItemDefault = {
|
|
@@ -1,8 +1,9 @@
|
|
|
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 {
|
|
4
|
+
import { LinkedList } from "../../util/array.js";
|
|
5
|
+
import { getAggregatedPubkey } from "./utils.js";
|
|
6
|
+
import { randomBytesNonZero } from "./utils.js";
|
|
6
7
|
export var JobQueueItemType;
|
|
7
8
|
(function (JobQueueItemType) {
|
|
8
9
|
JobQueueItemType["default"] = "default";
|
|
@@ -30,7 +31,7 @@ export function jobItemWorkReq(job, format, metrics) {
|
|
|
30
31
|
opts: job.opts,
|
|
31
32
|
sets: job.sets.map((set) => ({
|
|
32
33
|
// this can throw, handled in the consumer code
|
|
33
|
-
publicKey: getAggregatedPubkey(set, metrics)
|
|
34
|
+
publicKey: getAggregatedPubkey(set, metrics),
|
|
34
35
|
signature: set.signature,
|
|
35
36
|
message: set.signingRoot,
|
|
36
37
|
})),
|
|
@@ -46,13 +47,19 @@ export function jobItemWorkReq(job, format, metrics) {
|
|
|
46
47
|
const timer = metrics?.blsThreadPool.signatureDeserializationMainThreadDuration.startTimer();
|
|
47
48
|
const signatures = job.sets.map((set) => bls.Signature.fromBytes(set.signature, CoordType.affine, true));
|
|
48
49
|
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
|
+
}
|
|
49
56
|
return {
|
|
50
57
|
opts: job.opts,
|
|
51
58
|
sets: [
|
|
52
59
|
{
|
|
53
|
-
publicKey: bls.PublicKey.aggregate(job.sets.map((set) => set.publicKey)).toBytes(format),
|
|
54
|
-
signature: bls.Signature.aggregate(signatures).toBytes(format),
|
|
55
60
|
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]))),
|
|
56
63
|
},
|
|
57
64
|
],
|
|
58
65
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobItem.js","sourceRoot":"","sources":["../../../src/chain/bls/jobItem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
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 "
|
|
5
|
-
import { IBlsVerifier, VerifySignatureOpts } from "
|
|
6
|
-
import { JobQueueItemType } from "./jobItem.js";
|
|
4
|
+
import { Metrics } from "../../metrics/index.js";
|
|
5
|
+
import { IBlsVerifier, VerifySignatureOpts } from "./interface.js";
|
|
7
6
|
export type BlsMultiThreadWorkerPoolModules = {
|
|
8
7
|
logger: Logger;
|
|
9
8
|
metrics: Metrics | null;
|
|
@@ -11,7 +10,6 @@ export type BlsMultiThreadWorkerPoolModules = {
|
|
|
11
10
|
export type BlsMultiThreadWorkerPoolOptions = {
|
|
12
11
|
blsVerifyAllMultiThread?: boolean;
|
|
13
12
|
};
|
|
14
|
-
export type { JobQueueItemType };
|
|
15
13
|
/**
|
|
16
14
|
* Wraps "threads" library thread pool queue system with the goals:
|
|
17
15
|
* - Complete total outstanding jobs in total minimum time possible.
|
|
@@ -24,12 +22,12 @@ export declare class BlsMultiThreadWorkerPool implements IBlsVerifier {
|
|
|
24
22
|
private readonly logger;
|
|
25
23
|
private readonly metrics;
|
|
26
24
|
private readonly format;
|
|
27
|
-
private
|
|
25
|
+
private blsPoolSize;
|
|
26
|
+
private workersBusy;
|
|
28
27
|
private readonly jobs;
|
|
29
28
|
private bufferedJobs;
|
|
30
29
|
private blsVerifyAllMultiThread;
|
|
31
30
|
private closed;
|
|
32
|
-
private workersBusy;
|
|
33
31
|
constructor(options: BlsMultiThreadWorkerPoolOptions, modules: BlsMultiThreadWorkerPoolModules);
|
|
34
32
|
canAcceptWork(): boolean;
|
|
35
33
|
verifySignatureSets(sets: ISignatureSet[], opts?: VerifySignatureOpts): Promise<boolean>;
|
|
@@ -41,7 +39,6 @@ export declare class BlsMultiThreadWorkerPool implements IBlsVerifier {
|
|
|
41
39
|
signature: Uint8Array;
|
|
42
40
|
}[], message: Uint8Array, opts?: Omit<VerifySignatureOpts, "verifyOnMainThread">): Promise<boolean[]>;
|
|
43
41
|
close(): Promise<void>;
|
|
44
|
-
private createWorkers;
|
|
45
42
|
/**
|
|
46
43
|
* Register BLS work to be done eventually in a worker
|
|
47
44
|
*/
|
|
@@ -59,7 +56,5 @@ export declare class BlsMultiThreadWorkerPool implements IBlsVerifier {
|
|
|
59
56
|
*/
|
|
60
57
|
private runBufferedJobs;
|
|
61
58
|
private retryJobItemSameMessage;
|
|
62
|
-
/** For testing */
|
|
63
|
-
private waitTillInitialized;
|
|
64
59
|
}
|
|
65
|
-
//# sourceMappingURL=
|
|
60
|
+
//# sourceMappingURL=multiThread.d.ts.map
|
|
@@ -1,26 +1,14 @@
|
|
|
1
|
-
|
|
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;
|
|
1
|
+
import os from "node:os";
|
|
10
2
|
import bls from "@chainsafe/bls";
|
|
11
3
|
import { PointFormat } from "@chainsafe/bls/types";
|
|
12
|
-
import { QueueError, QueueErrorCode } from "
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
4
|
+
import { QueueError, QueueErrorCode } from "../../util/queue/index.js";
|
|
5
|
+
import { LinkedList } from "../../util/array.js";
|
|
6
|
+
import { getAggregatedPubkey, getAggregatedPubkeysCount, getJobResultError } from "./utils.js";
|
|
7
|
+
import { verifySets } from "./verifySets.js";
|
|
16
8
|
import { WorkResultCode } from "./types.js";
|
|
17
9
|
import { chunkifyMaximizeChunkSize } from "./utils.js";
|
|
18
|
-
import {
|
|
10
|
+
import { runBlsWorkReq } from "./runBlsWorkReq.js";
|
|
19
11
|
import { JobQueueItemType, jobItemSameMessageToMultiSet, jobItemSigSets, jobItemWorkReq, } from "./jobItem.js";
|
|
20
|
-
// Worker constructor consider the path relative to the current working directory
|
|
21
|
-
const workerDir = process.env.NODE_ENV === "test" ? "../../../../lib/chain/bls/multithread" : "./";
|
|
22
|
-
// 1 worker for the main thread
|
|
23
|
-
const blsPoolSize = Math.max(defaultPoolSize - 1, 1);
|
|
24
12
|
/**
|
|
25
13
|
* Split big signature sets into smaller sets so they can be sent to multiple workers.
|
|
26
14
|
*
|
|
@@ -51,14 +39,6 @@ const MAX_BUFFER_WAIT_MS = 100;
|
|
|
51
39
|
* Max concurrent jobs on `canAcceptWork` status
|
|
52
40
|
*/
|
|
53
41
|
const MAX_JOBS_CAN_ACCEPT_WORK = 512;
|
|
54
|
-
var WorkerStatusCode;
|
|
55
|
-
(function (WorkerStatusCode) {
|
|
56
|
-
WorkerStatusCode[WorkerStatusCode["notInitialized"] = 0] = "notInitialized";
|
|
57
|
-
WorkerStatusCode[WorkerStatusCode["initializing"] = 1] = "initializing";
|
|
58
|
-
WorkerStatusCode[WorkerStatusCode["initializationError"] = 2] = "initializationError";
|
|
59
|
-
WorkerStatusCode[WorkerStatusCode["idle"] = 3] = "idle";
|
|
60
|
-
WorkerStatusCode[WorkerStatusCode["running"] = 4] = "running";
|
|
61
|
-
})(WorkerStatusCode || (WorkerStatusCode = {}));
|
|
62
42
|
/**
|
|
63
43
|
* Wraps "threads" library thread pool queue system with the goals:
|
|
64
44
|
* - Complete total outstanding jobs in total minimum time possible.
|
|
@@ -69,10 +49,11 @@ var WorkerStatusCode;
|
|
|
69
49
|
*/
|
|
70
50
|
export class BlsMultiThreadWorkerPool {
|
|
71
51
|
constructor(options, modules) {
|
|
52
|
+
this.format = PointFormat.uncompressed;
|
|
53
|
+
this.workersBusy = 0;
|
|
72
54
|
this.jobs = new LinkedList();
|
|
73
55
|
this.bufferedJobs = null;
|
|
74
56
|
this.closed = false;
|
|
75
|
-
this.workersBusy = 0;
|
|
76
57
|
/**
|
|
77
58
|
* Potentially submit jobs to an idle worker, only if there's a worker and jobs
|
|
78
59
|
*/
|
|
@@ -80,21 +61,11 @@ export class BlsMultiThreadWorkerPool {
|
|
|
80
61
|
if (this.closed) {
|
|
81
62
|
return;
|
|
82
63
|
}
|
|
83
|
-
// Find idle worker
|
|
84
|
-
const worker = this.workers.find((worker) => worker.status.code === WorkerStatusCode.idle);
|
|
85
|
-
if (!worker || worker.status.code !== WorkerStatusCode.idle) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
64
|
// Prepare work package
|
|
89
65
|
const jobsInput = this.prepareWork();
|
|
90
66
|
if (jobsInput.length === 0) {
|
|
91
67
|
return;
|
|
92
68
|
}
|
|
93
|
-
// TODO: After sending the work to the worker the main thread can drop the job arguments
|
|
94
|
-
// and free-up memory, only needs to keep the job's Promise handlers.
|
|
95
|
-
// Maybe it's not useful since all data referenced in jobs is likely referenced by others
|
|
96
|
-
const workerApi = worker.status.workerApi;
|
|
97
|
-
worker.status = { code: WorkerStatusCode.running, workerApi };
|
|
98
69
|
this.workersBusy++;
|
|
99
70
|
try {
|
|
100
71
|
let startedJobsDefault = 0;
|
|
@@ -146,9 +117,9 @@ export class BlsMultiThreadWorkerPool {
|
|
|
146
117
|
// If the job, metrics or any code below throws: the job will reject never going stale.
|
|
147
118
|
// Only downside is the job promise may be resolved twice, but that's not an issue
|
|
148
119
|
const [jobStartSec, jobStartNs] = process.hrtime();
|
|
149
|
-
const workResult = await
|
|
120
|
+
const workResult = await runBlsWorkReq(workReqs);
|
|
150
121
|
const [jobEndSec, jobEndNs] = process.hrtime();
|
|
151
|
-
const {
|
|
122
|
+
const { batchRetries, batchSigsSuccess, workerStartTime, workerEndTime, results } = workResult;
|
|
152
123
|
const [workerStartSec, workerStartNs] = workerStartTime;
|
|
153
124
|
const [workerEndSec, workerEndNs] = workerEndTime;
|
|
154
125
|
let successCount = 0;
|
|
@@ -161,7 +132,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
161
132
|
// TODO: enable exhaustive switch case checks lint rule
|
|
162
133
|
switch (job.type) {
|
|
163
134
|
case JobQueueItemType.default:
|
|
164
|
-
if (
|
|
135
|
+
if (jobResult.code !== WorkResultCode.success) {
|
|
165
136
|
job.reject(getJobResultError(jobResult, i));
|
|
166
137
|
errorCount += sigSetCount;
|
|
167
138
|
}
|
|
@@ -172,7 +143,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
172
143
|
break;
|
|
173
144
|
// handle result of the verification of aggregated signature against aggregated pubkeys
|
|
174
145
|
case JobQueueItemType.sameMessage:
|
|
175
|
-
if (
|
|
146
|
+
if (jobResult.code !== WorkResultCode.success) {
|
|
176
147
|
job.reject(getJobResultError(jobResult, i));
|
|
177
148
|
errorCount += 1;
|
|
178
149
|
}
|
|
@@ -190,11 +161,12 @@ export class BlsMultiThreadWorkerPool {
|
|
|
190
161
|
break;
|
|
191
162
|
}
|
|
192
163
|
}
|
|
164
|
+
// TODO: (@matthewkeil) all of these metrics need to be revisited
|
|
193
165
|
const workerJobTimeSec = workerEndSec - workerStartSec + (workerEndNs - workerStartNs) / 1e9;
|
|
194
166
|
const latencyToWorkerSec = workerStartSec - jobStartSec + (workerStartNs - jobStartNs) / 1e9;
|
|
195
167
|
const latencyFromWorkerSec = jobEndSec - workerEndSec + Number(jobEndNs - workerEndNs) / 1e9;
|
|
196
168
|
this.metrics?.blsThreadPool.timePerSigSet.observe(workerJobTimeSec / startedSigSets);
|
|
197
|
-
this.metrics?.blsThreadPool.jobsWorkerTime.inc({ workerId }, workerJobTimeSec);
|
|
169
|
+
this.metrics?.blsThreadPool.jobsWorkerTime.inc({ workerId: 0 }, workerJobTimeSec);
|
|
198
170
|
this.metrics?.blsThreadPool.latencyToWorker.observe(latencyToWorkerSec);
|
|
199
171
|
this.metrics?.blsThreadPool.latencyFromWorker.observe(latencyFromWorkerSec);
|
|
200
172
|
this.metrics?.blsThreadPool.successJobsSignatureSetsCount.inc(successCount);
|
|
@@ -212,7 +184,6 @@ export class BlsMultiThreadWorkerPool {
|
|
|
212
184
|
job.reject(e);
|
|
213
185
|
}
|
|
214
186
|
}
|
|
215
|
-
worker.status = { code: WorkerStatusCode.idle, workerApi };
|
|
216
187
|
this.workersBusy--;
|
|
217
188
|
// Potentially run a new job
|
|
218
189
|
setTimeout(this.runJob, 0);
|
|
@@ -232,26 +203,34 @@ export class BlsMultiThreadWorkerPool {
|
|
|
232
203
|
setTimeout(this.runJob, 0);
|
|
233
204
|
}
|
|
234
205
|
};
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
206
|
+
if (bls.implementation === "herumi") {
|
|
207
|
+
throw new Error("Herumi BLS implementation is not supported");
|
|
208
|
+
}
|
|
209
|
+
this.logger = modules.logger;
|
|
238
210
|
this.blsVerifyAllMultiThread = options.blsVerifyAllMultiThread ?? false;
|
|
239
|
-
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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;
|
|
225
|
+
this.metrics = metrics;
|
|
246
226
|
if (metrics) {
|
|
247
227
|
metrics.blsThreadPool.queueLength.addCollect(() => {
|
|
248
228
|
metrics.blsThreadPool.queueLength.set(this.jobs.length);
|
|
249
|
-
metrics.blsThreadPool.workersBusy.set(this.workersBusy);
|
|
250
229
|
});
|
|
251
230
|
}
|
|
252
231
|
}
|
|
253
232
|
canAcceptWork() {
|
|
254
|
-
return (this.workersBusy < blsPoolSize &&
|
|
233
|
+
return (this.workersBusy < this.blsPoolSize &&
|
|
255
234
|
// TODO: Should also bound the jobs queue?
|
|
256
235
|
this.jobs.length < MAX_JOBS_CAN_ACCEPT_WORK);
|
|
257
236
|
}
|
|
@@ -267,17 +246,13 @@ export class BlsMultiThreadWorkerPool {
|
|
|
267
246
|
}
|
|
268
247
|
if (opts.verifyOnMainThread && !this.blsVerifyAllMultiThread) {
|
|
269
248
|
const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer();
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
finally {
|
|
278
|
-
if (timer)
|
|
279
|
-
timer();
|
|
280
|
-
}
|
|
249
|
+
const isValid = verifySets(sets.map((set) => ({
|
|
250
|
+
publicKey: getAggregatedPubkey(set),
|
|
251
|
+
message: set.signingRoot.valueOf(),
|
|
252
|
+
signature: set.signature,
|
|
253
|
+
})));
|
|
254
|
+
timer?.();
|
|
255
|
+
return isValid;
|
|
281
256
|
}
|
|
282
257
|
// Split large array of sets into smaller.
|
|
283
258
|
// Very helpful when syncing finalized, sync may submit +1000 sets so chunkify allows to distribute to many workers
|
|
@@ -324,44 +299,6 @@ export class BlsMultiThreadWorkerPool {
|
|
|
324
299
|
job.reject(new QueueError({ code: QueueErrorCode.QUEUE_ABORTED }));
|
|
325
300
|
}
|
|
326
301
|
this.jobs.clear();
|
|
327
|
-
// Terminate all workers. await to ensure no workers are left hanging
|
|
328
|
-
await Promise.all(Array.from(this.workers.entries()).map(([id, worker]) =>
|
|
329
|
-
// NOTE: 'threads' has not yet updated types, and NodeJS complains with
|
|
330
|
-
// [DEP0132] DeprecationWarning: Passing a callback to worker.terminate() is deprecated. It returns a Promise instead.
|
|
331
|
-
worker.worker.terminate().catch((e) => {
|
|
332
|
-
this.logger.error("Error terminating worker", { id }, e);
|
|
333
|
-
})));
|
|
334
|
-
}
|
|
335
|
-
createWorkers(implementation, poolSize) {
|
|
336
|
-
const workers = [];
|
|
337
|
-
for (let i = 0; i < poolSize; i++) {
|
|
338
|
-
const workerData = { implementation, workerId: i };
|
|
339
|
-
const worker = new Worker(path.join(workerDir, "worker.js"), {
|
|
340
|
-
workerData,
|
|
341
|
-
});
|
|
342
|
-
const workerDescriptor = {
|
|
343
|
-
worker,
|
|
344
|
-
status: { code: WorkerStatusCode.notInitialized },
|
|
345
|
-
};
|
|
346
|
-
workers.push(workerDescriptor);
|
|
347
|
-
// TODO: Consider initializing only when necessary
|
|
348
|
-
const initPromise = spawn(worker, {
|
|
349
|
-
// A Lodestar Node may do very expensive task at start blocking the event loop and causing
|
|
350
|
-
// the initialization to timeout. The number below is big enough to almost disable the timeout
|
|
351
|
-
timeout: 5 * 60 * 1000,
|
|
352
|
-
});
|
|
353
|
-
workerDescriptor.status = { code: WorkerStatusCode.initializing, initPromise };
|
|
354
|
-
initPromise
|
|
355
|
-
.then((workerApi) => {
|
|
356
|
-
workerDescriptor.status = { code: WorkerStatusCode.idle, workerApi };
|
|
357
|
-
// Potentially run jobs that were queued before initialization of the first worker
|
|
358
|
-
setTimeout(this.runJob, 0);
|
|
359
|
-
})
|
|
360
|
-
.catch((error) => {
|
|
361
|
-
workerDescriptor.status = { code: WorkerStatusCode.initializationError, error };
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
return workers;
|
|
365
302
|
}
|
|
366
303
|
/**
|
|
367
304
|
* Register BLS work to be done eventually in a worker
|
|
@@ -370,14 +307,6 @@ export class BlsMultiThreadWorkerPool {
|
|
|
370
307
|
if (this.closed) {
|
|
371
308
|
throw new QueueError({ code: QueueErrorCode.QUEUE_ABORTED });
|
|
372
309
|
}
|
|
373
|
-
// TODO: Consider if limiting queue size is necessary here.
|
|
374
|
-
// It would be bad to reject signatures because the node is slow.
|
|
375
|
-
// However, if the worker communication broke jobs won't ever finish
|
|
376
|
-
if (this.workers.length > 0 &&
|
|
377
|
-
this.workers[0].status.code === WorkerStatusCode.initializationError &&
|
|
378
|
-
this.workers.every((worker) => worker.status.code === WorkerStatusCode.initializationError)) {
|
|
379
|
-
return job.reject(this.workers[0].status.error);
|
|
380
|
-
}
|
|
381
310
|
// Append batchable sets to `bufferedJobs`, starting a timeout to push them into `jobs`.
|
|
382
311
|
// Do not call `runJob()`, it is called from `runBufferedJobs()`
|
|
383
312
|
if (job.opts.batchable) {
|
|
@@ -440,19 +369,5 @@ export class BlsMultiThreadWorkerPool {
|
|
|
440
369
|
this.metrics?.blsThreadPool.sameMessageRetryJobs.inc(1);
|
|
441
370
|
this.metrics?.blsThreadPool.sameMessageRetrySets.inc(job.sets.length);
|
|
442
371
|
}
|
|
443
|
-
/** For testing */
|
|
444
|
-
async waitTillInitialized() {
|
|
445
|
-
await Promise.all(this.workers.map(async (worker) => {
|
|
446
|
-
if (worker.status.code === WorkerStatusCode.initializing) {
|
|
447
|
-
await worker.status.initPromise;
|
|
448
|
-
}
|
|
449
|
-
}));
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
function getJobResultError(jobResult, i) {
|
|
453
|
-
const workerError = jobResult ? Error(jobResult.error.message) : Error(`No jobResult for index ${i}`);
|
|
454
|
-
if (jobResult?.error?.stack)
|
|
455
|
-
workerError.stack = jobResult.error.stack;
|
|
456
|
-
return workerError;
|
|
457
372
|
}
|
|
458
|
-
//# sourceMappingURL=
|
|
373
|
+
//# sourceMappingURL=multiThread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiThread.js","sourceRoot":"","sources":["../../../src/chain/bls/multiThread.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
|
|
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";
|
|
7
|
-
import { WorkResultCode } from "./types.js";
|
|
1
|
+
import { asyncVerifySets } from "./verifySets.js";
|
|
8
2
|
import { chunkifyMaximizeChunkSize } from "./utils.js";
|
|
3
|
+
import { WorkResultCode } from "./types.js";
|
|
9
4
|
/**
|
|
10
5
|
* Split batchable sets in chunks of minimum size 16.
|
|
11
6
|
* Batch verify 16 has an aprox cost of 16+1. For 32 it's 32+1. After ~16 the additional savings are not significant.
|
|
@@ -14,17 +9,7 @@ import { chunkifyMaximizeChunkSize } from "./utils.js";
|
|
|
14
9
|
* After observing metrics this number can be reviewed
|
|
15
10
|
*/
|
|
16
11
|
const BATCHABLE_MIN_PER_CHUNK = 16;
|
|
17
|
-
|
|
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) {
|
|
12
|
+
export async function runBlsWorkReq(workReqArr) {
|
|
28
13
|
const [startSec, startNs] = process.hrtime();
|
|
29
14
|
const results = [];
|
|
30
15
|
let batchRetries = 0;
|
|
@@ -35,12 +20,11 @@ function verifyManySignatureSets(workReqArr) {
|
|
|
35
20
|
// Split sets between batchable and non-batchable preserving their original index in the req array
|
|
36
21
|
for (let i = 0; i < workReqArr.length; i++) {
|
|
37
22
|
const workReq = workReqArr[i];
|
|
38
|
-
const sets = workReq.sets.map(deserializeSet);
|
|
39
23
|
if (workReq.opts.batchable) {
|
|
40
|
-
batchableSets.push({ idx: i, sets });
|
|
24
|
+
batchableSets.push({ idx: i, sets: workReq.sets });
|
|
41
25
|
}
|
|
42
26
|
else {
|
|
43
|
-
nonBatchableSets.push({ idx: i, sets });
|
|
27
|
+
nonBatchableSets.push({ idx: i, sets: workReq.sets });
|
|
44
28
|
}
|
|
45
29
|
}
|
|
46
30
|
if (batchableSets.length > 0) {
|
|
@@ -55,7 +39,7 @@ function verifyManySignatureSets(workReqArr) {
|
|
|
55
39
|
}
|
|
56
40
|
try {
|
|
57
41
|
// Attempt to verify multiple sets at once
|
|
58
|
-
const isValid =
|
|
42
|
+
const isValid = await asyncVerifySets(allSets);
|
|
59
43
|
if (isValid) {
|
|
60
44
|
// The entire batch is valid, return success to all
|
|
61
45
|
for (const { idx, sets } of batchableChunk) {
|
|
@@ -80,7 +64,7 @@ function verifyManySignatureSets(workReqArr) {
|
|
|
80
64
|
}
|
|
81
65
|
for (const { idx, sets } of nonBatchableSets) {
|
|
82
66
|
try {
|
|
83
|
-
const isValid =
|
|
67
|
+
const isValid = await asyncVerifySets(sets);
|
|
84
68
|
results[idx] = { code: WorkResultCode.success, result: isValid };
|
|
85
69
|
}
|
|
86
70
|
catch (e) {
|
|
@@ -88,8 +72,8 @@ function verifyManySignatureSets(workReqArr) {
|
|
|
88
72
|
}
|
|
89
73
|
}
|
|
90
74
|
const [workerEndSec, workerEndNs] = process.hrtime();
|
|
75
|
+
// TODO: (@matthewkeil) all of these metrics need to be revisited
|
|
91
76
|
return {
|
|
92
|
-
workerId,
|
|
93
77
|
batchRetries,
|
|
94
78
|
batchSigsSuccess,
|
|
95
79
|
workerStartTime: [startSec, startNs],
|
|
@@ -97,11 +81,4 @@ function verifyManySignatureSets(workReqArr) {
|
|
|
97
81
|
results,
|
|
98
82
|
};
|
|
99
83
|
}
|
|
100
|
-
|
|
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
|
|
84
|
+
//# sourceMappingURL=runBlsWorkReq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runBlsWorkReq.js","sourceRoot":"","sources":["../../../src/chain/bls/runBlsWorkReq.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/bls/types";
|
|
3
|
+
import { verifySets } from "./verifySets.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 = verifySets(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":"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"}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
export type SerializedSet = {
|
|
7
|
-
publicKey: Uint8Array;
|
|
1
|
+
import { PublicKey, Signature } from "@chainsafe/bls/types";
|
|
2
|
+
import { VerifySignatureOpts } from "./interface.js";
|
|
3
|
+
export type DeserializedKeySet = {
|
|
4
|
+
publicKey: PublicKey;
|
|
8
5
|
message: Uint8Array;
|
|
9
6
|
signature: Uint8Array;
|
|
10
7
|
};
|
|
8
|
+
export type DeserializedSet = {
|
|
9
|
+
publicKey: PublicKey;
|
|
10
|
+
message: Uint8Array;
|
|
11
|
+
signature: Signature;
|
|
12
|
+
};
|
|
13
|
+
export type WorkRequestSet = DeserializedKeySet | DeserializedSet;
|
|
11
14
|
export type BlsWorkReq = {
|
|
12
15
|
opts: VerifySignatureOpts;
|
|
13
|
-
sets:
|
|
16
|
+
sets: WorkRequestSet[];
|
|
14
17
|
};
|
|
15
18
|
export declare enum WorkResultCode {
|
|
16
19
|
success = "success",
|
|
@@ -25,8 +28,6 @@ export type WorkResult<R> = {
|
|
|
25
28
|
result: R;
|
|
26
29
|
} | WorkResultError;
|
|
27
30
|
export type BlsWorkResult = {
|
|
28
|
-
/** Ascending integer identifying the worker for metrics */
|
|
29
|
-
workerId: number;
|
|
30
31
|
/** Total num of batches that had to be retried */
|
|
31
32
|
batchRetries: number;
|
|
32
33
|
/** 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/types.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,iCAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB"}
|
package/lib/chain/bls/utils.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PublicKey } from "@chainsafe/bls/types";
|
|
2
2
|
import { ISignatureSet } from "@lodestar/state-transition";
|
|
3
3
|
import { Metrics } from "../../metrics/metrics.js";
|
|
4
|
+
import { WorkResultError } from "./types.js";
|
|
4
5
|
export declare function getAggregatedPubkey(signatureSet: ISignatureSet, metrics?: Metrics | null): PublicKey;
|
|
5
6
|
export declare function getAggregatedPubkeysCount(signatureSets: ISignatureSet[]): number;
|
|
7
|
+
/**
|
|
8
|
+
* Splits an array into an array of arrays maximizing the size of the smallest chunk.
|
|
9
|
+
*/
|
|
10
|
+
export declare function chunkifyMaximizeChunkSize<T>(arr: T[], minPerChunk: number): T[][];
|
|
11
|
+
/**
|
|
12
|
+
* `rand` must not be exactly zero. Otherwise it would allow the verification of invalid signatures
|
|
13
|
+
* See https://github.com/ChainSafe/blst-ts/issues/45
|
|
14
|
+
*/
|
|
15
|
+
export declare function randomBytesNonZero(bytesCount: number): Uint8Array;
|
|
16
|
+
export declare function getJobResultError(jobResult: WorkResultError | null, i: number): Error;
|
|
6
17
|
//# sourceMappingURL=utils.d.ts.map
|
package/lib/chain/bls/utils.js
CHANGED
|
@@ -23,4 +23,39 @@ export function getAggregatedPubkeysCount(signatureSets) {
|
|
|
23
23
|
}
|
|
24
24
|
return pubkeysConut;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Splits an array into an array of arrays maximizing the size of the smallest chunk.
|
|
28
|
+
*/
|
|
29
|
+
export function chunkifyMaximizeChunkSize(arr, minPerChunk) {
|
|
30
|
+
const chunkCount = Math.floor(arr.length / minPerChunk);
|
|
31
|
+
if (chunkCount <= 1) {
|
|
32
|
+
return [arr];
|
|
33
|
+
}
|
|
34
|
+
// Prefer less chunks of bigger size
|
|
35
|
+
const perChunk = Math.ceil(arr.length / chunkCount);
|
|
36
|
+
const arrArr = [];
|
|
37
|
+
for (let i = 0; i < arr.length; i += perChunk) {
|
|
38
|
+
arrArr.push(arr.slice(i, i + perChunk));
|
|
39
|
+
}
|
|
40
|
+
return arrArr;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* `rand` must not be exactly zero. Otherwise it would allow the verification of invalid signatures
|
|
44
|
+
* See https://github.com/ChainSafe/blst-ts/issues/45
|
|
45
|
+
*/
|
|
46
|
+
export function randomBytesNonZero(bytesCount) {
|
|
47
|
+
const rand = crypto.getRandomValues(new Uint8Array(bytesCount));
|
|
48
|
+
for (let i = 0; i < bytesCount; i++) {
|
|
49
|
+
if (rand[i] !== 0)
|
|
50
|
+
return rand;
|
|
51
|
+
}
|
|
52
|
+
rand[0] = 1;
|
|
53
|
+
return rand;
|
|
54
|
+
}
|
|
55
|
+
export function getJobResultError(jobResult, i) {
|
|
56
|
+
const workerError = jobResult ? Error(jobResult.error.message) : Error(`No jobResult for index ${i}`);
|
|
57
|
+
if (jobResult?.error?.stack)
|
|
58
|
+
workerError.stack = jobResult.error.stack;
|
|
59
|
+
return workerError;
|
|
60
|
+
}
|
|
26
61
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/chain/bls/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/chain/bls/utils.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,gBAAgB,CAAC;AAEjC,OAAO,EAAgB,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAI3E,MAAM,UAAU,mBAAmB,CAAC,YAA2B,EAAE,UAA0B,IAAI;IAC7F,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1B,KAAK,gBAAgB,CAAC,MAAM;YAC1B,OAAO,YAAY,CAAC,MAAM,CAAC;QAE7B,KAAK,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,OAAO,EAAE,aAAa,CAAC,oCAAoC,CAAC,UAAU,EAAE,CAAC;YACvF,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC9D,KAAK,EAAE,EAAE,CAAC;YACV,OAAO,OAAO,CAAC;QACjB,CAAC;QAED;YACE,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,aAA8B;IACtE,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC5C,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;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;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiC,EAAE,CAAS;IAC5E,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IACtG,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK;QAAE,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;IACvE,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WorkRequestSet } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Verify signatures sets with batch verification or regular core verify depending on the set count.
|
|
4
|
+
* Abstracted in a separate file to be consumed by the threaded pool and the main thread implementation.
|
|
5
|
+
*/
|
|
6
|
+
export declare function verifySets(sets: WorkRequestSet[]): boolean;
|
|
7
|
+
export declare function asyncVerifySets(sets: WorkRequestSet[]): Promise<boolean>;
|
|
8
|
+
//# sourceMappingURL=verifySets.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import bls from "@chainsafe/bls";
|
|
2
|
+
const MIN_SET_COUNT_TO_BATCH = 2;
|
|
3
|
+
/**
|
|
4
|
+
* Verify signatures sets with batch verification or regular core verify depending on the set count.
|
|
5
|
+
* Abstracted in a separate file to be consumed by the threaded pool and the main thread implementation.
|
|
6
|
+
*/
|
|
7
|
+
export function verifySets(sets) {
|
|
8
|
+
try {
|
|
9
|
+
if (sets.length >= MIN_SET_COUNT_TO_BATCH) {
|
|
10
|
+
return bls.verifyMultipleSignatures(sets);
|
|
11
|
+
}
|
|
12
|
+
// .every on an empty array returns true
|
|
13
|
+
if (sets.length === 0) {
|
|
14
|
+
throw Error("Empty signature set");
|
|
15
|
+
}
|
|
16
|
+
// If too few signature sets verify them without batching
|
|
17
|
+
return sets.every(({ message, publicKey, signature }) => bls.verify(publicKey, message, signature));
|
|
18
|
+
}
|
|
19
|
+
catch (_) {
|
|
20
|
+
// A signature could be malformed, in that case fromBytes throws error
|
|
21
|
+
// blst-ts `verifyMultipleSignatures` is also a fallible operation if mul_n_aggregate fails
|
|
22
|
+
// see https://github.com/ChainSafe/blst-ts/blob/b1ba6333f664b08e5c50b2b0d18c4f079203962b/src/lib.ts#L291
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function asyncVerifySets(sets) {
|
|
27
|
+
try {
|
|
28
|
+
if (sets.length >= MIN_SET_COUNT_TO_BATCH) {
|
|
29
|
+
return await bls.asyncVerifyMultipleSignatures(sets);
|
|
30
|
+
}
|
|
31
|
+
// .every on an empty array returns true
|
|
32
|
+
if (sets.length === 0) {
|
|
33
|
+
throw Error("Empty signature sets");
|
|
34
|
+
}
|
|
35
|
+
const promises = await Promise.all(sets.map(({ message, publicKey, signature }) => bls.asyncVerify(publicKey, message, signature)));
|
|
36
|
+
// If too few signature sets verify them without batching
|
|
37
|
+
return promises.every((isValid) => isValid);
|
|
38
|
+
}
|
|
39
|
+
catch (_) {
|
|
40
|
+
// A signature could be malformed, in that case fromBytes throws error
|
|
41
|
+
// blst-ts `verifyMultipleSignatures` is also a fallible operation if mul_n_aggregate fails
|
|
42
|
+
// see https://github.com/ChainSafe/blst-ts/blob/b1ba6333f664b08e5c50b2b0d18c4f079203962b/src/lib.ts#L291
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=verifySets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifySets.js","sourceRoot":"","sources":["../../../src/chain/bls/verifySets.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,gBAAgB,CAAC;AAGjC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAsB;IAC/C,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;YAC1C,OAAO,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC5C,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,EAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IACpG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sEAAsE;QACtE,2FAA2F;QAC3F,yGAAyG;QACzG,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB;IAC1D,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;YAC1C,OAAO,MAAM,GAAG,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAC9F,CAAC;QACF,yDAAyD;QACzD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sEAAsE;QACtE,2FAA2F;QAC3F,yGAAyG;QACzG,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.19.0-dev.
|
|
14
|
+
"version": "1.19.0-dev.97d9aa8b0c",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -95,8 +95,8 @@
|
|
|
95
95
|
},
|
|
96
96
|
"dependencies": {
|
|
97
97
|
"@chainsafe/as-sha256": "^0.4.1",
|
|
98
|
-
"@chainsafe/bls": "
|
|
99
|
-
"@chainsafe/blst": "^0.
|
|
98
|
+
"@chainsafe/bls": "^8.1.0",
|
|
99
|
+
"@chainsafe/blst": "^1.0.0",
|
|
100
100
|
"@chainsafe/discv5": "^9.0.0",
|
|
101
101
|
"@chainsafe/enr": "^3.0.0",
|
|
102
102
|
"@chainsafe/libp2p-gossipsub": "^11.2.1",
|
|
@@ -120,18 +120,18 @@
|
|
|
120
120
|
"@libp2p/peer-id-factory": "^4.0.3",
|
|
121
121
|
"@libp2p/prometheus-metrics": "^3.0.10",
|
|
122
122
|
"@libp2p/tcp": "9.0.10",
|
|
123
|
-
"@lodestar/api": "1.19.0-dev.
|
|
124
|
-
"@lodestar/config": "1.19.0-dev.
|
|
125
|
-
"@lodestar/db": "1.19.0-dev.
|
|
126
|
-
"@lodestar/fork-choice": "1.19.0-dev.
|
|
127
|
-
"@lodestar/light-client": "1.19.0-dev.
|
|
128
|
-
"@lodestar/logger": "1.19.0-dev.
|
|
129
|
-
"@lodestar/params": "1.19.0-dev.
|
|
130
|
-
"@lodestar/reqresp": "1.19.0-dev.
|
|
131
|
-
"@lodestar/state-transition": "1.19.0-dev.
|
|
132
|
-
"@lodestar/types": "1.19.0-dev.
|
|
133
|
-
"@lodestar/utils": "1.19.0-dev.
|
|
134
|
-
"@lodestar/validator": "1.19.0-dev.
|
|
123
|
+
"@lodestar/api": "1.19.0-dev.97d9aa8b0c",
|
|
124
|
+
"@lodestar/config": "1.19.0-dev.97d9aa8b0c",
|
|
125
|
+
"@lodestar/db": "1.19.0-dev.97d9aa8b0c",
|
|
126
|
+
"@lodestar/fork-choice": "1.19.0-dev.97d9aa8b0c",
|
|
127
|
+
"@lodestar/light-client": "1.19.0-dev.97d9aa8b0c",
|
|
128
|
+
"@lodestar/logger": "1.19.0-dev.97d9aa8b0c",
|
|
129
|
+
"@lodestar/params": "1.19.0-dev.97d9aa8b0c",
|
|
130
|
+
"@lodestar/reqresp": "1.19.0-dev.97d9aa8b0c",
|
|
131
|
+
"@lodestar/state-transition": "1.19.0-dev.97d9aa8b0c",
|
|
132
|
+
"@lodestar/types": "1.19.0-dev.97d9aa8b0c",
|
|
133
|
+
"@lodestar/utils": "1.19.0-dev.97d9aa8b0c",
|
|
134
|
+
"@lodestar/validator": "1.19.0-dev.97d9aa8b0c",
|
|
135
135
|
"@multiformats/multiaddr": "^12.1.3",
|
|
136
136
|
"c-kzg": "^2.1.2",
|
|
137
137
|
"datastore-core": "^9.1.1",
|
|
@@ -170,5 +170,5 @@
|
|
|
170
170
|
"beacon",
|
|
171
171
|
"blockchain"
|
|
172
172
|
],
|
|
173
|
-
"gitHead": "
|
|
173
|
+
"gitHead": "1e4e5b28826e1e4fb3604c28a3ac6f5ea8554e0a"
|
|
174
174
|
}
|
|
@@ -1,12 +0,0 @@
|
|
|
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
|
|
@@ -1,36 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jobItem.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/jobItem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/worker.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AACjD,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAC,6BAA6B,EAA2B,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAqC,cAAc,EAA+B,MAAM,YAAY,CAAC;AAC5G,OAAO,EAAC,yBAAyB,EAAC,MAAM,YAAY,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,gCAAgC;AAChC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAwB,CAAC;AACnD,IAAI,CAAC,UAAU;IAAE,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC3D,MAAM,EAAC,QAAQ,EAAC,GAAG,UAAU,IAAI,EAAE,CAAC;AAEpC,MAAM,CAAC;IACL,KAAK,CAAC,uBAAuB,CAAC,UAAwB;QACpD,OAAO,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,UAAwB;IACvD,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC7C,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,4EAA4E;IAC5E,MAAM,aAAa,GAAsD,EAAE,CAAC;IAC5E,MAAM,gBAAgB,GAAsD,EAAE,CAAC;IAE/E,kGAAkG;IAClG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE9C,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,kFAAkF;QAClF,MAAM,eAAe,GAAG,yBAAyB,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAE1F,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;YAC7C,MAAM,OAAO,GAA+B,EAAE,CAAC;YAC/C,KAAK,MAAM,EAAC,IAAI,EAAC,IAAI,cAAc,EAAE,CAAC;gBACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,MAAM,OAAO,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;gBAEvD,IAAI,OAAO,EAAE,CAAC;oBACZ,mDAAmD;oBACnD,KAAK,MAAM,EAAC,GAAG,EAAE,IAAI,EAAC,IAAI,cAAc,EAAE,CAAC;wBACzC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC;wBAChC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAC,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,YAAY,EAAE,CAAC;oBACf,qBAAqB;oBACrB,gBAAgB,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,2GAA2G;gBAC3G,iFAAiF;gBACjF,YAAY,EAAE,CAAC;gBACf,qBAAqB;gBACrB,gBAAgB,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAC,GAAG,EAAE,IAAI,EAAC,IAAI,gBAAgB,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAC,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;QACjE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,EAAC,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,CAAU,EAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAErD,OAAO;QACL,QAAQ;QACR,YAAY;QACZ,gBAAgB;QAChB,eAAe,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QACpC,aAAa,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;QAC1C,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAkB;IACxC,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;QACnE,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC"}
|
|
File without changes
|