Skip to content

Commit 97d9aa8

Browse files
matthewkeilnflaig
andauthored
feat: switch bls to napi rebuild (#6616)
* chore: update package.json deps and run yarn * feat: remove unused blst config from vitest.browser.*.config.ts * test: move G2@INF test to base blst repo. No longer exported. * fix: add Uint8Array.from for Buffer return value in unit test so type matches for toEqual * refactor: update imports of CoordType to use bls instead of blst * feat: add blsAddVerificationRandomness cli option * feat: add randomBytesNonZero to utils * feat: implement verification randomness for same message * feat: implement napi blst and switch to libuv worker pool * chore: lint * fix: update comments for availableParallelism * feat: set UV_THREADPOOL_SIZE for perf tests * feat: set UV_THREADPOOL_SIZE=$(nproc) in lodestar entrance script * feat: remove case for serialized PublicKey in deserializeSet * feat: add back workBusy count logic to canAcceptWork * feat: automatically set threadpool size in beaconHandler * refactor: rename flag to disableSameMessageVerificationRandomness * fix: remove UV_THREADPOOL_SIZE from ./lodestar * docs: add TODO about updating metrics * fix: make benchmark multi threading cross-compatible * chore: add bls@8.0.0 * feat: default to added randomness * feat: add warning for no same message randomness * fix: passing to updated bls functions * feat: add blst peerDep * fix: default to same message randomness * chore: update yarn.lock * chore: remove unused function to clear lint * feat: break out setThreadPoolSize * docs: update packages/cli/src/cmds/beacon/setThreadPoolSize.ts Co-authored-by: Nico Flaig <nflaig@protonmail.com> * chore: update location for blst dep * chore: run lint again * fix: remove peerDep from light-client * test: fix browser based tests * fix: bad relative imports * docs: add note to readme about switchable bls * docs: typo * chore: lint readme * fix: light-client unit tests * fix: light-client e2e test * feat: remove disableSameMessageVerificationRandomness * refactor: remove unused type * docs: update wordlist * fix: e2e tests * Lint package.json * Revert "fix: e2e tests" This reverts commit f71acd7. * Revert "fix: light-client e2e test" This reverts commit 23c11f0. * Revert "fix: light-client unit tests" This reverts commit fa7893e. * Revert "test: fix browser based tests" This reverts commit 98d04ab. * docs: update readme to remove switchable bls argument * fix: replace optimizeDeps in vitest.browser.config * chore: updated to bls 8.1.0 * feat: move setting threadpool size and warnings to applyPreset.ts * fix: remove setThreadpoolSize from beacon handler * feat: move libuv size logging into handler to use logger * refactor: rename applyPreset to preInitialization * refactor: logging about pool size * Update packages/cli/src/options/globalOptions.ts Co-authored-by: Nico Flaig <nflaig@protonmail.com> * refactor: rename prover applyPreset * docs: change comment in cli/index * fix: update logging for * fix: throw error for invalid uvThreadpoolSize * Update packages/cli/src/preInitialization.ts Co-authored-by: Nico Flaig <nflaig@protonmail.com> * Fix lint issues * Remove unused import * refactor: move bls pool logging back to multithread.ts * fix: log of threadcount --------- Co-authored-by: Nico Flaig <nflaig@protonmail.com>
1 parent 2649a87 commit 97d9aa8

34 files changed

+420
-515
lines changed

.wordlist.txt

+1
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ orchestrator
163163
osx
164164
overriden
165165
params
166+
peerDependency
166167
pid
167168
plaintext
168169
pre

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
"test-coverage:e2e": "c8 --config .c8rc.json --report-dir coverage/e2e/ --all npm run test:e2e",
3737
"test-coverage:e2e-sim": "c8 --config .c8rc.json --report-dir coverage/e2e-sim/ --all npm run test:e2e:sim",
3838
"test-coverage:spec": "c8 --config .c8rc.json --report-dir coverage/spec/ --all npm run test:spec",
39-
"benchmark": "yarn benchmark:files 'packages/*/test/perf/**/*.test.ts'",
40-
"benchmark:files": "NODE_OPTIONS='--max-old-space-size=4096 --loader=ts-node/esm' benchmark --config .benchrc.yaml --defaultBranch unstable",
39+
"benchmark": "UV_THREADPOOL_SIZE=$(node -e 'console.log(require(`os`).availableParallelism())') yarn benchmark:files 'packages/*/test/perf/**/*.test.ts'",
40+
"benchmark:files": "UV_THREADPOOL_SIZE=$(node -e 'console.log(require(`os`).availableParallelism())') NODE_OPTIONS='--max-old-space-size=4096 --loader=ts-node/esm' benchmark --config .benchrc.yaml --defaultBranch unstable",
4141
"release:create-rc": "node scripts/release/create_rc.mjs",
4242
"release:tag-rc": "node scripts/release/tag_rc.mjs",
4343
"release:tag-stable": "node scripts/release/tag_stable.mjs",

packages/beacon-node/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@
9595
},
9696
"dependencies": {
9797
"@chainsafe/as-sha256": "^0.4.1",
98-
"@chainsafe/bls": "7.1.3",
99-
"@chainsafe/blst": "^0.2.10",
98+
"@chainsafe/bls": "^8.1.0",
99+
"@chainsafe/blst": "^1.0.0",
100100
"@chainsafe/discv5": "^9.0.0",
101101
"@chainsafe/enr": "^3.0.0",
102102
"@chainsafe/libp2p-gossipsub": "^11.2.1",
+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export type {IBlsVerifier} from "./interface.js";
2-
export type {BlsMultiThreadWorkerPoolModules, JobQueueItemType} from "./multithread/index.js";
3-
export {BlsMultiThreadWorkerPool} from "./multithread/index.js";
2+
export type {JobQueueItemType} from "./jobItem.js";
3+
export type {BlsMultiThreadWorkerPoolModules} from "./multiThread.js";
4+
export {BlsMultiThreadWorkerPool} from "./multiThread.js";
45
export {BlsSingleThreadVerifier} from "./singleThread.js";

packages/beacon-node/src/chain/bls/multithread/jobItem.ts packages/beacon-node/src/chain/bls/jobItem.ts

+14-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import bls from "@chainsafe/bls";
22
import {CoordType, PointFormat, PublicKey} from "@chainsafe/bls/types";
33
import {ISignatureSet, SignatureSetType} from "@lodestar/state-transition";
4-
import {VerifySignatureOpts} from "../interface.js";
5-
import {getAggregatedPubkey} from "../utils.js";
6-
import {LinkedList} from "../../../util/array.js";
7-
import {Metrics} from "../../../metrics/metrics.js";
4+
import {LinkedList} from "../../util/array.js";
5+
import {Metrics} from "../../metrics/metrics.js";
6+
import {VerifySignatureOpts} from "./interface.js";
7+
import {getAggregatedPubkey} from "./utils.js";
88
import {BlsWorkReq} from "./types.js";
9+
import {randomBytesNonZero} from "./utils.js";
910

1011
export type JobQueueItem = JobQueueItemDefault | JobQueueItemSameMessage;
1112

@@ -56,7 +57,7 @@ export function jobItemWorkReq(job: JobQueueItem, format: PointFormat, metrics:
5657
opts: job.opts,
5758
sets: job.sets.map((set) => ({
5859
// this can throw, handled in the consumer code
59-
publicKey: getAggregatedPubkey(set, metrics).toBytes(format),
60+
publicKey: getAggregatedPubkey(set, metrics),
6061
signature: set.signature,
6162
message: set.signingRoot,
6263
})),
@@ -73,13 +74,19 @@ export function jobItemWorkReq(job: JobQueueItem, format: PointFormat, metrics:
7374
const signatures = job.sets.map((set) => bls.Signature.fromBytes(set.signature, CoordType.affine, true));
7475
timer?.();
7576

77+
// adding verification randomness is napi specific. must not attempt with herumi until
78+
// @chainsafe/bls is updated to support it with herumi
79+
const randomness: Uint8Array[] = [];
80+
for (let i = 0; i < job.sets.length; i++) {
81+
randomness.push(randomBytesNonZero(8));
82+
}
7683
return {
7784
opts: job.opts,
7885
sets: [
7986
{
80-
publicKey: bls.PublicKey.aggregate(job.sets.map((set) => set.publicKey)).toBytes(format),
81-
signature: bls.Signature.aggregate(signatures).toBytes(format),
8287
message: job.message,
88+
publicKey: bls.PublicKey.aggregate(job.sets.map((set, i) => set.publicKey.multiplyBy(randomness[i]))),
89+
signature: bls.Signature.aggregate(signatures.map((sig, i) => sig.multiplyBy(randomness[i]))),
8390
},
8491
],
8592
};

packages/beacon-node/src/chain/bls/maybeBatch.ts

-46
This file was deleted.

0 commit comments

Comments
 (0)