@lodestar/beacon-node 1.47.0-dev.9087110398 → 1.47.0-dev.931ecbec99
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/api/impl/beacon/state/utils.d.ts +2 -1
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/events/index.d.ts +1 -1
- package/lib/api/impl/events/index.d.ts.map +1 -1
- package/lib/api/impl/events/index.js +10 -3
- package/lib/api/impl/events/index.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +2 -7
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +1 -1
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +2 -2
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +2 -2
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
- package/lib/chain/bls/index.d.ts +1 -1
- package/lib/chain/bls/index.d.ts.map +1 -1
- package/lib/chain/bls/interface.d.ts +5 -5
- package/lib/chain/bls/interface.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.d.ts +5 -11
- package/lib/chain/bls/multithread/index.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.js +116 -101
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/bls/multithread/jobItem.d.ts +5 -19
- package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
- package/lib/chain/bls/multithread/jobItem.js +10 -65
- package/lib/chain/bls/multithread/jobItem.js.map +1 -1
- package/lib/chain/bls/multithread/types.d.ts +29 -8
- package/lib/chain/bls/multithread/types.d.ts.map +1 -1
- package/lib/chain/bls/multithread/types.js +12 -0
- package/lib/chain/bls/multithread/types.js.map +1 -1
- package/lib/chain/bls/multithread/utils.d.ts +4 -0
- package/lib/chain/bls/multithread/utils.d.ts.map +1 -1
- package/lib/chain/bls/multithread/utils.js +10 -0
- package/lib/chain/bls/multithread/utils.js.map +1 -1
- package/lib/chain/bls/multithread/worker.js +49 -23
- package/lib/chain/bls/multithread/worker.js.map +1 -1
- package/lib/chain/bls/singleThread.d.ts +4 -10
- package/lib/chain/bls/singleThread.d.ts.map +1 -1
- package/lib/chain/bls/singleThread.js +8 -45
- package/lib/chain/bls/singleThread.js.map +1 -1
- package/lib/chain/bls/utils.d.ts +4 -4
- package/lib/chain/bls/utils.d.ts.map +1 -1
- package/lib/chain/bls/utils.js +18 -19
- package/lib/chain/bls/utils.js.map +1 -1
- package/lib/chain/chain.d.ts +2 -1
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +6 -4
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/proposerPreferences.d.ts +6 -0
- package/lib/chain/errors/proposerPreferences.d.ts.map +1 -1
- package/lib/chain/errors/proposerPreferences.js +1 -0
- package/lib/chain/errors/proposerPreferences.js.map +1 -1
- package/lib/chain/interface.d.ts +2 -1
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +1 -1
- package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/attestationPool.js +1 -1
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.js +3 -3
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +1 -1
- package/lib/chain/opPools/utils.d.ts.map +1 -1
- package/lib/chain/opPools/utils.js +1 -1
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/seenCache/seenAttesters.d.ts +9 -5
- package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
- package/lib/chain/seenCache/seenAttesters.js +25 -4
- package/lib/chain/seenCache/seenAttesters.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts.map +1 -1
- package/lib/chain/validation/attestation.js +1 -4
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +1 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +1 -2
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +5 -14
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
- package/lib/chain/validation/proposerPreferences.d.ts +1 -1
- package/lib/chain/validation/proposerPreferences.d.ts.map +1 -1
- package/lib/chain/validation/proposerPreferences.js +13 -4
- package/lib/chain/validation/proposerPreferences.js.map +1 -1
- package/lib/chain/validation/proposerSlashing.js +1 -1
- package/lib/chain/validation/proposerSlashing.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +38 -18
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +80 -50
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/libp2p/index.d.ts.map +1 -1
- package/lib/network/libp2p/index.js +10 -2
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/reqresp/score.d.ts.map +1 -1
- package/lib/network/reqresp/score.js +5 -11
- package/lib/network/reqresp/score.js.map +1 -1
- package/lib/node/nodejs.d.ts +2 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/types.d.ts.map +1 -1
- package/lib/sync/types.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +9 -0
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +93 -9
- package/lib/sync/unknownBlock.js.map +1 -1
- package/package.json +15 -15
- package/src/api/impl/beacon/state/utils.ts +2 -1
- package/src/api/impl/events/index.ts +10 -4
- package/src/chain/blocks/importBlock.ts +1 -6
- package/src/chain/blocks/importExecutionPayload.ts +0 -1
- package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +1 -9
- package/src/chain/bls/index.ts +1 -1
- package/src/chain/bls/interface.ts +7 -3
- package/src/chain/bls/multithread/index.ts +148 -120
- package/src/chain/bls/multithread/jobItem.ts +12 -82
- package/src/chain/bls/multithread/types.ts +33 -8
- package/src/chain/bls/multithread/utils.ts +11 -0
- package/src/chain/bls/multithread/worker.ts +85 -27
- package/src/chain/bls/singleThread.ts +11 -55
- package/src/chain/bls/utils.ts +23 -24
- package/src/chain/chain.ts +7 -5
- package/src/chain/errors/proposerPreferences.ts +7 -0
- package/src/chain/interface.ts +2 -1
- package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
- package/src/chain/opPools/attestationPool.ts +1 -1
- package/src/chain/opPools/payloadAttestationPool.ts +3 -3
- package/src/chain/opPools/syncCommitteeMessagePool.ts +1 -1
- package/src/chain/opPools/syncContributionAndProofPool.ts +1 -1
- package/src/chain/opPools/utils.ts +1 -1
- package/src/chain/seenCache/seenAttesters.ts +31 -5
- package/src/chain/validation/attestation.ts +1 -7
- package/src/chain/validation/attesterSlashing.ts +1 -8
- package/src/chain/validation/executionPayloadBid.ts +1 -2
- package/src/chain/validation/executionPayloadEnvelope.ts +0 -1
- package/src/chain/validation/payloadAttestationMessage.ts +6 -17
- package/src/chain/validation/proposerPreferences.ts +15 -5
- package/src/chain/validation/proposerSlashing.ts +1 -1
- package/src/metrics/metrics/lodestar.ts +85 -51
- package/src/network/libp2p/index.ts +11 -2
- package/src/network/reqresp/score.ts +5 -11
- package/src/node/nodejs.ts +2 -1
- package/src/sync/types.ts +3 -1
- package/src/sync/unknownBlock.ts +108 -12
- package/lib/chain/bls/maybeBatch.d.ts +0 -12
- package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
- package/lib/chain/bls/maybeBatch.js +0 -35
- package/lib/chain/bls/maybeBatch.js.map +0 -1
- package/src/chain/bls/maybeBatch.ts +0 -45
|
@@ -7,12 +7,11 @@ self = undefined;
|
|
|
7
7
|
import { LinkedList } from "../../../util/array.js";
|
|
8
8
|
import { callInNextEventLoop } from "../../../util/eventLoop.js";
|
|
9
9
|
import { QueueError, QueueErrorCode } from "../../../util/queue/index.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { JobQueueItemType, jobItemSameMessageToMultiSet, jobItemSigSets, jobItemWorkReq, } from "./jobItem.js";
|
|
10
|
+
import { chunkSameMessageSignatureSets, getAggregatedPubkeysCount, verifySignatureSetsInBatches } from "../utils.js";
|
|
11
|
+
import { jobItemSigSets, jobItemWorkReq } from "./jobItem.js";
|
|
13
12
|
import { defaultPoolSize } from "./poolSize.js";
|
|
14
|
-
import { WorkResultCode } from "./types.js";
|
|
15
|
-
import {
|
|
13
|
+
import { JobQueueItemType, WorkResultCode, } from "./types.js";
|
|
14
|
+
import { chunkifyMaxChunkSize } from "./utils.js";
|
|
16
15
|
// Worker constructor consider the path relative to the current working directory
|
|
17
16
|
const workerDir = process.env.NODE_ENV === "test" ? "../../../../lib/chain/bls/multithread" : "./";
|
|
18
17
|
// 1 worker for the main thread
|
|
@@ -23,7 +22,7 @@ const blsPoolSize = Math.max(defaultPoolSize - 1, 1);
|
|
|
23
22
|
* The biggest sets happen during sync, on mainnet batches of 64 blocks have around ~8000 signatures.
|
|
24
23
|
* The latency cost of sending the job to and from the worker is approx a single sig verification.
|
|
25
24
|
* If you split a big signature into 2, the extra time cost is `(2+2N)/(1+2N)`.
|
|
26
|
-
*
|
|
25
|
+
* Keep the scheduler quantum below Lodestar-Z's 256-set verifier bound to limit per-dispatch latency.
|
|
27
26
|
*/
|
|
28
27
|
const MAX_SIGNATURE_SETS_PER_JOB = 128;
|
|
29
28
|
/**
|
|
@@ -39,8 +38,8 @@ const MAX_BUFFERED_SIGS = 32;
|
|
|
39
38
|
* efficiency, at the cost of delaying validation. Unless running in production shows otherwise, it's not critical
|
|
40
39
|
* to hold attestations and aggregates for 100ms. Lodestar existing queues may hold those objects for much more anyway.
|
|
41
40
|
*
|
|
42
|
-
* There's no exact reasoning for the `100` milliseconds number.
|
|
43
|
-
*
|
|
41
|
+
* There's no exact reasoning for the `100` milliseconds number. Buffer flush size and reason metrics show whether the
|
|
42
|
+
* wait produces useful batches, while job-duration metrics expose its latency cost.
|
|
44
43
|
*/
|
|
45
44
|
const MAX_BUFFER_WAIT_MS = 100;
|
|
46
45
|
/**
|
|
@@ -66,7 +65,6 @@ var WorkerStatusCode;
|
|
|
66
65
|
export class BlsMultiThreadWorkerPool {
|
|
67
66
|
logger;
|
|
68
67
|
metrics;
|
|
69
|
-
pubkeyCache;
|
|
70
68
|
workers;
|
|
71
69
|
jobs = new LinkedList();
|
|
72
70
|
bufferedJobs = null;
|
|
@@ -74,18 +72,16 @@ export class BlsMultiThreadWorkerPool {
|
|
|
74
72
|
closed = false;
|
|
75
73
|
workersBusy = 0;
|
|
76
74
|
constructor(options, modules) {
|
|
77
|
-
const { logger, metrics
|
|
75
|
+
const { logger, metrics } = modules;
|
|
78
76
|
this.logger = logger;
|
|
79
77
|
this.metrics = metrics;
|
|
80
|
-
this.pubkeyCache = pubkeyCache;
|
|
81
78
|
this.blsVerifyAllMultiThread = options.blsVerifyAllMultiThread ?? false;
|
|
82
|
-
// Use compressed for herumi for now.
|
|
83
|
-
// THe worker is not able to deserialize from uncompressed
|
|
84
|
-
// `Error: err _wrapDeserialize`
|
|
85
79
|
this.workers = this.createWorkers(blsPoolSize);
|
|
86
80
|
if (metrics) {
|
|
87
81
|
metrics.blsThreadPool.queueLength.addCollect(() => {
|
|
82
|
+
const bufferedJobs = (this.bufferedJobs?.jobs.length ?? 0) + (this.bufferedJobs?.prioritizedJobs.length ?? 0);
|
|
88
83
|
metrics.blsThreadPool.queueLength.set(this.jobs.length);
|
|
84
|
+
metrics.blsThreadPool.bufferedQueueLength.set(bufferedJobs);
|
|
89
85
|
metrics.blsThreadPool.workersBusy.set(this.workersBusy);
|
|
90
86
|
});
|
|
91
87
|
}
|
|
@@ -96,7 +92,6 @@ export class BlsMultiThreadWorkerPool {
|
|
|
96
92
|
this.jobs.length < MAX_JOBS_CAN_ACCEPT_WORK);
|
|
97
93
|
}
|
|
98
94
|
async verifySignatureSets(sets, opts = {}) {
|
|
99
|
-
// Pubkeys are aggregated in the main thread regardless if verified in workers or in main thread
|
|
100
95
|
this.metrics?.bls.aggregatedPubkeys.inc(getAggregatedPubkeysCount(sets));
|
|
101
96
|
this.metrics?.blsThreadPool.totalSigSets.inc(sets.length);
|
|
102
97
|
if (opts.priority) {
|
|
@@ -108,11 +103,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
108
103
|
if (opts.verifyOnMainThread && !this.blsVerifyAllMultiThread) {
|
|
109
104
|
const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer();
|
|
110
105
|
try {
|
|
111
|
-
return
|
|
112
|
-
publicKey: getAggregatedPubkey(set, this.pubkeyCache),
|
|
113
|
-
message: set.signingRoot.valueOf(),
|
|
114
|
-
signature: set.signature,
|
|
115
|
-
})));
|
|
106
|
+
return verifySignatureSetsInBatches(sets);
|
|
116
107
|
}
|
|
117
108
|
finally {
|
|
118
109
|
if (timer)
|
|
@@ -121,7 +112,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
121
112
|
}
|
|
122
113
|
// Split large array of sets into smaller.
|
|
123
114
|
// Very helpful when syncing finalized, sync may submit +1000 sets so chunkify allows to distribute to many workers
|
|
124
|
-
const results = await Promise.all(
|
|
115
|
+
const results = await Promise.all(chunkifyMaxChunkSize(sets, MAX_SIGNATURE_SETS_PER_JOB).map((setsChunk) => new Promise((resolve, reject) => {
|
|
125
116
|
return this.queueBlsWork({
|
|
126
117
|
type: JobQueueItemType.default,
|
|
127
118
|
resolve,
|
|
@@ -141,18 +132,21 @@ export class BlsMultiThreadWorkerPool {
|
|
|
141
132
|
* Verify signature sets of the same message, only supports worker verification.
|
|
142
133
|
*/
|
|
143
134
|
async verifySignatureSetsSameMessage(sets, message, opts = {}) {
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
135
|
+
const promises = [];
|
|
136
|
+
for (const setsChunk of chunkSameMessageSignatureSets(sets)) {
|
|
137
|
+
promises.push(new Promise((resolve, reject) => {
|
|
138
|
+
this.queueBlsWork({
|
|
139
|
+
type: JobQueueItemType.sameMessage,
|
|
140
|
+
resolve,
|
|
141
|
+
reject,
|
|
142
|
+
addedTimeMs: Date.now(),
|
|
143
|
+
opts,
|
|
144
|
+
sets: setsChunk,
|
|
145
|
+
message,
|
|
146
|
+
});
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
const results = await Promise.all(promises);
|
|
156
150
|
return results.flat();
|
|
157
151
|
}
|
|
158
152
|
async close() {
|
|
@@ -176,6 +170,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
176
170
|
const workers = [];
|
|
177
171
|
for (let i = 0; i < poolSize; i++) {
|
|
178
172
|
const workerData = { workerId: i };
|
|
173
|
+
this.metrics?.blsThreadPool.jobsWorkerTime.inc({ workerId: i }, 0);
|
|
179
174
|
const worker = new Worker(path.join(workerDir, "worker.js"), {
|
|
180
175
|
workerData,
|
|
181
176
|
});
|
|
@@ -228,7 +223,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
228
223
|
prioritizedJobs: new LinkedList(),
|
|
229
224
|
sigCount: 0,
|
|
230
225
|
firstPush: Date.now(),
|
|
231
|
-
timeout: setTimeout(this.runBufferedJobs, MAX_BUFFER_WAIT_MS),
|
|
226
|
+
timeout: setTimeout(() => this.runBufferedJobs("timeout"), MAX_BUFFER_WAIT_MS),
|
|
232
227
|
};
|
|
233
228
|
}
|
|
234
229
|
const jobs = job.opts.priority ? this.bufferedJobs.prioritizedJobs : this.bufferedJobs.jobs;
|
|
@@ -236,7 +231,7 @@ export class BlsMultiThreadWorkerPool {
|
|
|
236
231
|
this.bufferedJobs.sigCount += jobItemSigSets(job);
|
|
237
232
|
if (this.bufferedJobs.sigCount > MAX_BUFFERED_SIGS) {
|
|
238
233
|
clearTimeout(this.bufferedJobs.timeout);
|
|
239
|
-
this.runBufferedJobs();
|
|
234
|
+
this.runBufferedJobs("size");
|
|
240
235
|
}
|
|
241
236
|
}
|
|
242
237
|
// Push job and schedule to call `runJob` in the next macro event loop cycle.
|
|
@@ -275,32 +270,30 @@ export class BlsMultiThreadWorkerPool {
|
|
|
275
270
|
const workerApi = worker.status.workerApi;
|
|
276
271
|
worker.status = { code: WorkerStatusCode.running, workerApi };
|
|
277
272
|
this.workersBusy++;
|
|
273
|
+
const jobsStarted = [];
|
|
274
|
+
let completedJobsCount = 0;
|
|
275
|
+
if (this.jobs.length > 0) {
|
|
276
|
+
callInNextEventLoop(this.runJob);
|
|
277
|
+
}
|
|
278
278
|
try {
|
|
279
279
|
let startedJobsDefault = 0;
|
|
280
280
|
let startedJobsSameMessage = 0;
|
|
281
281
|
let startedSetsDefault = 0;
|
|
282
282
|
let startedSetsSameMessage = 0;
|
|
283
283
|
const workReqs = [];
|
|
284
|
-
const jobsStarted = [];
|
|
285
284
|
for (const job of jobsInput) {
|
|
286
|
-
this.metrics?.blsThreadPool.jobWaitTime.observe((Date.now() - job.addedTimeMs) / 1000);
|
|
285
|
+
this.metrics?.blsThreadPool.jobWaitTime.observe(jobMetricLabels(job), (Date.now() - job.addedTimeMs) / 1000);
|
|
286
|
+
}
|
|
287
|
+
const preparationStartTime = process.hrtime();
|
|
288
|
+
for (const job of jobsInput) {
|
|
287
289
|
let workReq;
|
|
288
290
|
try {
|
|
289
|
-
|
|
290
|
-
// Pubkey and signature aggregation is defered here
|
|
291
|
-
workReq = await jobItemWorkReq(job, this.pubkeyCache, this.metrics);
|
|
291
|
+
workReq = jobItemWorkReq(job);
|
|
292
292
|
}
|
|
293
293
|
catch (e) {
|
|
294
|
-
this.metrics?.blsThreadPool.
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
job.reject(e);
|
|
298
|
-
break;
|
|
299
|
-
case JobQueueItemType.sameMessage:
|
|
300
|
-
// there could be an invalid pubkey/signature, retry each individually
|
|
301
|
-
this.retryJobItemSameMessage(job);
|
|
302
|
-
break;
|
|
303
|
-
}
|
|
294
|
+
this.metrics?.blsThreadPool.errorJobsSignatureSetsCount.inc(jobItemSigSets(job));
|
|
295
|
+
this.observeJobCompletion(job, "prepError");
|
|
296
|
+
job.reject(e);
|
|
304
297
|
continue;
|
|
305
298
|
}
|
|
306
299
|
// Re-push all jobs with matching workReq for easier accounting of results
|
|
@@ -315,19 +308,26 @@ export class BlsMultiThreadWorkerPool {
|
|
|
315
308
|
startedSetsDefault += job.sets.length;
|
|
316
309
|
}
|
|
317
310
|
}
|
|
311
|
+
const [preparationSeconds, preparationNanoseconds] = process.hrtime(preparationStartTime);
|
|
312
|
+
this.metrics?.blsThreadPool.workRequestPreparationDuration.observe(preparationSeconds + preparationNanoseconds / 1e9);
|
|
318
313
|
const startedSigSets = startedSetsDefault + startedSetsSameMessage;
|
|
314
|
+
if (workReqs.length === 0) {
|
|
315
|
+
worker.status = { code: WorkerStatusCode.idle, workerApi };
|
|
316
|
+
this.workersBusy--;
|
|
317
|
+
callInNextEventLoop(this.runJob);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
319
320
|
this.metrics?.blsThreadPool.totalJobsGroupsStarted.inc(1);
|
|
320
321
|
this.metrics?.blsThreadPool.totalJobsStarted.inc({ type: JobQueueItemType.default }, startedJobsDefault);
|
|
321
322
|
this.metrics?.blsThreadPool.totalJobsStarted.inc({ type: JobQueueItemType.sameMessage }, startedJobsSameMessage);
|
|
322
323
|
this.metrics?.blsThreadPool.totalSigSetsStarted.inc({ type: JobQueueItemType.default }, startedSetsDefault);
|
|
323
324
|
this.metrics?.blsThreadPool.totalSigSetsStarted.inc({ type: JobQueueItemType.sameMessage }, startedSetsSameMessage);
|
|
324
325
|
// Send work package to the worker
|
|
325
|
-
// If
|
|
326
|
-
// Only downside is the job promise may be resolved twice, but that's not an issue
|
|
326
|
+
// If worker communication or result processing throws, all unresolved jobs are rejected.
|
|
327
327
|
const [jobStartSec, jobStartNs] = process.hrtime();
|
|
328
328
|
const workResult = await workerApi.verifyManySignatureSets(workReqs);
|
|
329
329
|
const [jobEndSec, jobEndNs] = process.hrtime();
|
|
330
|
-
const { workerId, batchRetries, batchSigsSuccess, workerStartTime, workerEndTime, results } = workResult;
|
|
330
|
+
const { workerId, batchRetries, batchSigsSuccess, verificationCalls, workerStartTime, workerEndTime, results } = workResult;
|
|
331
331
|
const [workerStartSec, workerStartNs] = workerStartTime;
|
|
332
332
|
const [workerEndSec, workerEndNs] = workerEndTime;
|
|
333
333
|
let successCount = 0;
|
|
@@ -336,37 +336,15 @@ export class BlsMultiThreadWorkerPool {
|
|
|
336
336
|
for (let i = 0; i < jobsStarted.length; i++) {
|
|
337
337
|
const job = jobsStarted[i];
|
|
338
338
|
const jobResult = results[i];
|
|
339
|
-
const
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
job.resolve(jobResult.result);
|
|
349
|
-
successCount += sigSetCount;
|
|
350
|
-
}
|
|
351
|
-
break;
|
|
352
|
-
// handle result of the verification of aggregated signature against aggregated pubkeys
|
|
353
|
-
case JobQueueItemType.sameMessage:
|
|
354
|
-
if (!jobResult || jobResult.code !== WorkResultCode.success) {
|
|
355
|
-
job.reject(getJobResultError(jobResult, i));
|
|
356
|
-
errorCount += 1;
|
|
357
|
-
}
|
|
358
|
-
else {
|
|
359
|
-
if (jobResult.result) {
|
|
360
|
-
// All are valid, most of the time it goes here
|
|
361
|
-
job.resolve(job.sets.map(() => true));
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
// Retry each individually
|
|
365
|
-
this.retryJobItemSameMessage(job);
|
|
366
|
-
}
|
|
367
|
-
successCount += 1;
|
|
368
|
-
}
|
|
369
|
-
break;
|
|
339
|
+
const signatureSets = jobItemSigSets(job);
|
|
340
|
+
const outcome = completeJob(job, jobResult, i, signatureSets);
|
|
341
|
+
completedJobsCount = i + 1;
|
|
342
|
+
this.observeJobCompletion(job, outcome);
|
|
343
|
+
if (outcome === "prepError" || outcome === "verifyError" || outcome === "workerError") {
|
|
344
|
+
errorCount += signatureSets;
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
successCount += signatureSets;
|
|
370
348
|
}
|
|
371
349
|
}
|
|
372
350
|
const workerJobTimeSec = workerEndSec - workerStartSec + (workerEndNs - workerStartNs) / 1e9;
|
|
@@ -380,16 +358,25 @@ export class BlsMultiThreadWorkerPool {
|
|
|
380
358
|
this.metrics?.blsThreadPool.errorJobsSignatureSetsCount.inc(errorCount);
|
|
381
359
|
this.metrics?.blsThreadPool.batchRetries.inc(batchRetries);
|
|
382
360
|
this.metrics?.blsThreadPool.batchSigsSuccess.inc(batchSigsSuccess);
|
|
361
|
+
for (const { operation, duration, signatureSets } of verificationCalls) {
|
|
362
|
+
this.metrics?.blsThreadPool.verificationCallDuration.observe({ operation }, duration);
|
|
363
|
+
this.metrics?.blsThreadPool.verificationCallSignatureSets.inc({ operation }, signatureSets);
|
|
364
|
+
}
|
|
383
365
|
}
|
|
384
366
|
catch (e) {
|
|
385
367
|
// Worker communications should never reject
|
|
386
368
|
if (!this.closed) {
|
|
387
369
|
this.logger.error("BlsMultiThreadWorkerPool error", {}, e);
|
|
388
370
|
}
|
|
389
|
-
// Reject
|
|
390
|
-
|
|
371
|
+
// Reject jobs that were not already completed
|
|
372
|
+
let errorSignatureSets = 0;
|
|
373
|
+
for (let i = completedJobsCount; i < jobsStarted.length; i++) {
|
|
374
|
+
const job = jobsStarted[i];
|
|
375
|
+
this.observeJobCompletion(job, "workerError");
|
|
376
|
+
errorSignatureSets += jobItemSigSets(job);
|
|
391
377
|
job.reject(e);
|
|
392
378
|
}
|
|
379
|
+
this.metrics?.blsThreadPool.errorJobsSignatureSetsCount.inc(errorSignatureSets);
|
|
393
380
|
}
|
|
394
381
|
worker.status = { code: WorkerStatusCode.idle, workerApi };
|
|
395
382
|
this.workersBusy--;
|
|
@@ -403,20 +390,27 @@ export class BlsMultiThreadWorkerPool {
|
|
|
403
390
|
const jobs = [];
|
|
404
391
|
let totalSigs = 0;
|
|
405
392
|
while (totalSigs < MAX_SIGNATURE_SETS_PER_JOB) {
|
|
406
|
-
const job = this.jobs.
|
|
393
|
+
const job = this.jobs.first();
|
|
407
394
|
if (!job) {
|
|
408
395
|
break;
|
|
409
396
|
}
|
|
397
|
+
const jobSigSets = jobItemSigSets(job);
|
|
398
|
+
if (jobs.length > 0 && totalSigs + jobSigSets > MAX_SIGNATURE_SETS_PER_JOB) {
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
this.jobs.shift();
|
|
410
402
|
jobs.push(job);
|
|
411
|
-
totalSigs +=
|
|
403
|
+
totalSigs += jobSigSets;
|
|
412
404
|
}
|
|
413
405
|
return jobs;
|
|
414
406
|
}
|
|
415
407
|
/**
|
|
416
408
|
* Add all buffered jobs to the job queue and potentially run them immediately
|
|
417
409
|
*/
|
|
418
|
-
runBufferedJobs = () => {
|
|
410
|
+
runBufferedJobs = (reason) => {
|
|
419
411
|
if (this.bufferedJobs) {
|
|
412
|
+
this.metrics?.blsThreadPool.bufferFlushes.inc({ reason });
|
|
413
|
+
this.metrics?.blsThreadPool.bufferedSignatureSets.observe(this.bufferedJobs.sigCount);
|
|
420
414
|
for (const job of this.bufferedJobs.jobs) {
|
|
421
415
|
this.jobs.push(job);
|
|
422
416
|
}
|
|
@@ -427,18 +421,9 @@ export class BlsMultiThreadWorkerPool {
|
|
|
427
421
|
callInNextEventLoop(this.runJob);
|
|
428
422
|
}
|
|
429
423
|
};
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
if (j.opts.priority) {
|
|
434
|
-
this.jobs.unshift(j);
|
|
435
|
-
}
|
|
436
|
-
else {
|
|
437
|
-
this.jobs.push(j);
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
this.metrics?.blsThreadPool.sameMessageRetryJobs.inc(1);
|
|
441
|
-
this.metrics?.blsThreadPool.sameMessageRetrySets.inc(job.sets.length);
|
|
424
|
+
observeJobCompletion(job, outcome) {
|
|
425
|
+
this.metrics?.blsThreadPool.jobDuration.observe(jobMetricLabels(job), (Date.now() - job.addedTimeMs) / 1000);
|
|
426
|
+
this.metrics?.blsThreadPool.jobResults.inc({ type: job.type, outcome });
|
|
442
427
|
}
|
|
443
428
|
/** For testing */
|
|
444
429
|
async waitTillInitialized() {
|
|
@@ -449,10 +434,40 @@ export class BlsMultiThreadWorkerPool {
|
|
|
449
434
|
}));
|
|
450
435
|
}
|
|
451
436
|
}
|
|
437
|
+
function completeJob(job, jobResult, index, signatureSets) {
|
|
438
|
+
if (!jobResult || jobResult.code !== WorkResultCode.success) {
|
|
439
|
+
job.reject(getJobResultError(jobResult ?? null, index));
|
|
440
|
+
return "verifyError";
|
|
441
|
+
}
|
|
442
|
+
switch (job.type) {
|
|
443
|
+
case JobQueueItemType.default: {
|
|
444
|
+
const [result] = jobResult.result;
|
|
445
|
+
if (jobResult.result.length !== 1 || result === undefined) {
|
|
446
|
+
job.reject(getInvalidResultLengthError(index, 1, jobResult.result.length));
|
|
447
|
+
return "workerError";
|
|
448
|
+
}
|
|
449
|
+
job.resolve(result);
|
|
450
|
+
return result ? "valid" : "invalid";
|
|
451
|
+
}
|
|
452
|
+
case JobQueueItemType.sameMessage:
|
|
453
|
+
if (jobResult.result.length !== signatureSets) {
|
|
454
|
+
job.reject(getInvalidResultLengthError(index, signatureSets, jobResult.result.length));
|
|
455
|
+
return "workerError";
|
|
456
|
+
}
|
|
457
|
+
job.resolve(jobResult.result);
|
|
458
|
+
return jobResult.result.every(Boolean) ? "valid" : "invalid";
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
function jobMetricLabels(job) {
|
|
462
|
+
return { type: job.type };
|
|
463
|
+
}
|
|
452
464
|
function getJobResultError(jobResult, i) {
|
|
453
465
|
const workerError = jobResult ? Error(jobResult.error.message) : Error(`No jobResult for index ${i}`);
|
|
454
466
|
if (jobResult?.error?.stack)
|
|
455
467
|
workerError.stack = jobResult.error.stack;
|
|
456
468
|
return workerError;
|
|
457
469
|
}
|
|
470
|
+
function getInvalidResultLengthError(index, expected, actual) {
|
|
471
|
+
return Error(`Invalid BLS worker result length for index ${index}: expected ${expected}, got ${actual}`);
|
|
472
|
+
}
|
|
458
473
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { LinkedList } from "../../../util/array.js";
|
|
5
|
-
import { VerifySignatureOpts } from "../interface.js";
|
|
6
|
-
import { BlsWorkReq } from "./types.js";
|
|
1
|
+
import { ISignatureSet } from "@lodestar/state-transition";
|
|
2
|
+
import { SameMessageSignatureSet, VerifySignatureOpts } from "../interface.js";
|
|
3
|
+
import { BlsWorkReq, JobQueueItemType } from "./types.js";
|
|
7
4
|
export type JobQueueItem = JobQueueItemDefault | JobQueueItemSameMessage;
|
|
8
5
|
export type JobQueueItemDefault = {
|
|
9
6
|
type: JobQueueItemType.default;
|
|
@@ -19,16 +16,9 @@ export type JobQueueItemSameMessage = {
|
|
|
19
16
|
reject: (error?: Error) => void;
|
|
20
17
|
addedTimeMs: number;
|
|
21
18
|
opts: VerifySignatureOpts;
|
|
22
|
-
sets:
|
|
23
|
-
publicKey: PublicKey;
|
|
24
|
-
signature: Uint8Array;
|
|
25
|
-
}[];
|
|
19
|
+
sets: SameMessageSignatureSet[];
|
|
26
20
|
message: Uint8Array;
|
|
27
21
|
};
|
|
28
|
-
export declare enum JobQueueItemType {
|
|
29
|
-
default = "default",
|
|
30
|
-
sameMessage = "same_message"
|
|
31
|
-
}
|
|
32
22
|
/**
|
|
33
23
|
* Return count of signature sets from a JobQueueItem
|
|
34
24
|
*/
|
|
@@ -37,9 +27,5 @@ export declare function jobItemSigSets(job: JobQueueItem): number;
|
|
|
37
27
|
* Prepare BlsWorkReq from JobQueueItem
|
|
38
28
|
* WARNING: May throw with untrusted user input
|
|
39
29
|
*/
|
|
40
|
-
export declare function jobItemWorkReq(job: JobQueueItem
|
|
41
|
-
/**
|
|
42
|
-
* Convert a JobQueueItemSameMessage into multiple JobQueueItemDefault linked to the original promise
|
|
43
|
-
*/
|
|
44
|
-
export declare function jobItemSameMessageToMultiSet(job: JobQueueItemSameMessage): LinkedList<JobQueueItemDefault>;
|
|
30
|
+
export declare function jobItemWorkReq(job: JobQueueItem): BlsWorkReq;
|
|
45
31
|
//# sourceMappingURL=jobItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobItem.d.ts","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/jobItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"jobItem.d.ts","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/jobItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAoB,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAC,uBAAuB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAC,UAAU,EAAE,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,uBAAuB,CAAC;AAEzE,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,gBAAgB,CAAC,WAAW,CAAC;IACnC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,uBAAuB,EAAE,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,UAAU,CAgB5D"}
|
|
@@ -1,85 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { LinkedList } from "../../../util/array.js";
|
|
4
|
-
import { getAggregatedPubkey } from "../utils.js";
|
|
5
|
-
export var JobQueueItemType;
|
|
6
|
-
(function (JobQueueItemType) {
|
|
7
|
-
JobQueueItemType["default"] = "default";
|
|
8
|
-
JobQueueItemType["sameMessage"] = "same_message";
|
|
9
|
-
})(JobQueueItemType || (JobQueueItemType = {}));
|
|
1
|
+
import { toBlsSignatureSet } from "@lodestar/state-transition";
|
|
2
|
+
import { JobQueueItemType } from "./types.js";
|
|
10
3
|
/**
|
|
11
4
|
* Return count of signature sets from a JobQueueItem
|
|
12
5
|
*/
|
|
13
6
|
export function jobItemSigSets(job) {
|
|
14
|
-
|
|
15
|
-
case JobQueueItemType.default:
|
|
16
|
-
return job.sets.length;
|
|
17
|
-
case JobQueueItemType.sameMessage:
|
|
18
|
-
return 1;
|
|
19
|
-
}
|
|
7
|
+
return job.sets.length;
|
|
20
8
|
}
|
|
21
9
|
/**
|
|
22
10
|
* Prepare BlsWorkReq from JobQueueItem
|
|
23
11
|
* WARNING: May throw with untrusted user input
|
|
24
12
|
*/
|
|
25
|
-
export
|
|
13
|
+
export function jobItemWorkReq(job) {
|
|
26
14
|
switch (job.type) {
|
|
27
15
|
case JobQueueItemType.default:
|
|
28
16
|
return {
|
|
17
|
+
type: JobQueueItemType.default,
|
|
29
18
|
opts: job.opts,
|
|
30
|
-
sets: job.sets.map(
|
|
31
|
-
// this can throw, handled in the consumer code
|
|
32
|
-
publicKey: getAggregatedPubkey(set, pubkeyCache, metrics).toBytes(),
|
|
33
|
-
signature: set.signature,
|
|
34
|
-
message: set.signingRoot,
|
|
35
|
-
})),
|
|
19
|
+
sets: job.sets.map(toBlsSignatureSet),
|
|
36
20
|
};
|
|
37
|
-
case JobQueueItemType.sameMessage:
|
|
38
|
-
const timer = metrics?.blsThreadPool.aggregateWithRandomnessAsyncDuration.startTimer();
|
|
39
|
-
const { pk, sig } = await asyncAggregateWithRandomness(job.sets.map((set) => ({ pk: set.publicKey, sig: set.signature })));
|
|
40
|
-
timer?.();
|
|
21
|
+
case JobQueueItemType.sameMessage:
|
|
41
22
|
return {
|
|
23
|
+
type: JobQueueItemType.sameMessage,
|
|
42
24
|
opts: job.opts,
|
|
43
|
-
sets:
|
|
44
|
-
|
|
45
|
-
publicKey: pk.toBytes(),
|
|
46
|
-
signature: sig.toBytes(),
|
|
47
|
-
message: job.message,
|
|
48
|
-
},
|
|
49
|
-
],
|
|
25
|
+
sets: job.sets,
|
|
26
|
+
message: job.message,
|
|
50
27
|
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Convert a JobQueueItemSameMessage into multiple JobQueueItemDefault linked to the original promise
|
|
56
|
-
*/
|
|
57
|
-
export function jobItemSameMessageToMultiSet(job) {
|
|
58
|
-
// Retry each individually
|
|
59
|
-
// Create new jobs for each pubkey set, and Promise.all all the results
|
|
60
|
-
const promises = [];
|
|
61
|
-
const jobs = new LinkedList();
|
|
62
|
-
for (const set of job.sets) {
|
|
63
|
-
promises.push(new Promise((resolve, reject) => {
|
|
64
|
-
jobs.push({
|
|
65
|
-
type: JobQueueItemType.default,
|
|
66
|
-
resolve,
|
|
67
|
-
reject,
|
|
68
|
-
addedTimeMs: job.addedTimeMs,
|
|
69
|
-
opts: { batchable: false, priority: job.opts.priority },
|
|
70
|
-
sets: [
|
|
71
|
-
{
|
|
72
|
-
type: SignatureSetType.single,
|
|
73
|
-
pubkey: set.publicKey,
|
|
74
|
-
signature: set.signature,
|
|
75
|
-
signingRoot: job.message,
|
|
76
|
-
},
|
|
77
|
-
],
|
|
78
|
-
});
|
|
79
|
-
}));
|
|
80
28
|
}
|
|
81
|
-
// Connect jobs to main job
|
|
82
|
-
Promise.all(promises).then(job.resolve, job.reject);
|
|
83
|
-
return jobs;
|
|
84
29
|
}
|
|
85
30
|
//# sourceMappingURL=jobItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobItem.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/jobItem.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"jobItem.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/jobItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAa,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAuBxD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAiB;IAC9C,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAiB;IAC9C,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO;gBACL,IAAI,EAAE,gBAAgB,CAAC,OAAO;gBAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;aACtC,CAAC;QACJ,KAAK,gBAAgB,CAAC,WAAW;YAC/B,OAAO;gBACL,IAAI,EAAE,gBAAgB,CAAC,WAAW;gBAClC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC;IACN,CAAC;AACH,CAAC"}
|