@obolnetwork/obol-sdk 2.11.12 → 2.12.0
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/dist/browser/src/index.js +446 -134
- package/dist/browser/src/index.js.map +1 -1
- package/dist/cjs/src/blsUtils.js +3826 -0
- package/dist/cjs/src/blsUtils.js.map +1 -0
- package/dist/cjs/src/index.js +530 -222
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/verification/lockWorker.js +3828 -0
- package/dist/cjs/src/verification/lockWorker.js.map +1 -0
- package/dist/cjs/src/verification/parallelPool.js +3992 -0
- package/dist/cjs/src/verification/parallelPool.js.map +1 -0
- package/dist/esm/src/blsUtils.js +17 -0
- package/dist/esm/src/blsUtils.js.map +1 -0
- package/dist/esm/src/chunk-267HIPEB.js +4355 -0
- package/dist/esm/src/chunk-267HIPEB.js.map +1 -0
- package/dist/esm/src/chunk-OYZHSNKR.js +186 -0
- package/dist/esm/src/chunk-OYZHSNKR.js.map +1 -0
- package/dist/esm/src/index.js +835 -5000
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/verification/lockWorker.js +50 -0
- package/dist/esm/src/verification/lockWorker.js.map +1 -0
- package/dist/esm/src/verification/parallelPool.js +10 -0
- package/dist/esm/src/verification/parallelPool.js.map +1 -0
- package/dist/types/src/blsUtils.d.ts +2 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/verification/common.d.ts +9 -0
- package/dist/types/src/verification/lockWorker.d.ts +13 -0
- package/dist/types/src/verification/parallelPool.d.ts +2 -0
- package/dist/types/test/verification/parallelPool.spec.d.ts +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
blsRecoverDistributedPubkeyFromShares,
|
|
3
|
+
blsVerifyExtraShares,
|
|
4
|
+
blsVerifyMultiple
|
|
5
|
+
} from "../chunk-267HIPEB.js";
|
|
6
|
+
|
|
7
|
+
// src/verification/lockWorker.ts
|
|
8
|
+
import { parentPort, workerData } from "worker_threads";
|
|
9
|
+
import { fromHexString } from "@chainsafe/ssz";
|
|
10
|
+
function verifyShareBindingChunk(input) {
|
|
11
|
+
const { shares, distributedKeys, threshold } = input;
|
|
12
|
+
if (shares.length !== distributedKeys.length) return false;
|
|
13
|
+
for (let i = 0; i < shares.length; i++) {
|
|
14
|
+
const sharesBytes = shares[i].map((s) => fromHexString(s));
|
|
15
|
+
const dkBytes = fromHexString(distributedKeys[i]);
|
|
16
|
+
const recovered = blsRecoverDistributedPubkeyFromShares(
|
|
17
|
+
sharesBytes,
|
|
18
|
+
threshold
|
|
19
|
+
);
|
|
20
|
+
if (!recovered) return false;
|
|
21
|
+
if (recovered.length !== dkBytes.length) return false;
|
|
22
|
+
for (let j = 0; j < recovered.length; j++) {
|
|
23
|
+
if (recovered[j] !== dkBytes[j]) return false;
|
|
24
|
+
}
|
|
25
|
+
if (!blsVerifyExtraShares(sharesBytes, threshold, dkBytes)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
function verifyBatchChunk(input) {
|
|
32
|
+
return blsVerifyMultiple(
|
|
33
|
+
input.pubkeys,
|
|
34
|
+
input.messages,
|
|
35
|
+
input.aggregateSignature
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
function dispatch(input) {
|
|
39
|
+
if (input.mode === "shareBinding") return verifyShareBindingChunk(input);
|
|
40
|
+
if (input.mode === "verifyBatch") return verifyBatchChunk(input);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
if (parentPort) {
|
|
44
|
+
try {
|
|
45
|
+
parentPort.postMessage(dispatch(workerData));
|
|
46
|
+
} catch (e) {
|
|
47
|
+
parentPort.postMessage(false);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=lockWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/verification/lockWorker.ts"],"sourcesContent":["// Worker entry point loaded by parallelPool via Node's worker_threads.\n//\n// Two modes (dispatched on workerData.mode):\n// 'shareBinding' — Lagrange + extra-share verification for a validator chunk.\n// 'verifyBatch' — blsVerifyMultiple on a (pubkeys, messages, aggregateSig)\n// chunk of the deposit+builder batch.\n//\n// Both modes return a simple boolean; main thread combines results.\n\nimport { parentPort, workerData } from 'node:worker_threads';\nimport { fromHexString } from '@chainsafe/ssz';\nimport {\n blsRecoverDistributedPubkeyFromShares,\n blsVerifyExtraShares,\n blsVerifyMultiple,\n} from '../blsUtils.js';\n\nexport interface ShareBindingInput {\n mode: 'shareBinding';\n shares: string[][];\n distributedKeys: string[];\n threshold: number;\n}\n\nexport interface VerifyBatchInput {\n mode: 'verifyBatch';\n pubkeys: Uint8Array[];\n messages: Uint8Array[];\n aggregateSignature: Uint8Array;\n}\n\nexport type WorkerInput = ShareBindingInput | VerifyBatchInput;\n\nfunction verifyShareBindingChunk(input: ShareBindingInput): boolean {\n const { shares, distributedKeys, threshold } = input;\n if (shares.length !== distributedKeys.length) return false;\n\n for (let i = 0; i < shares.length; i++) {\n const sharesBytes = shares[i].map(s => fromHexString(s));\n const dkBytes = fromHexString(distributedKeys[i]);\n\n const recovered = blsRecoverDistributedPubkeyFromShares(\n sharesBytes,\n threshold,\n );\n if (!recovered) return false;\n if (recovered.length !== dkBytes.length) return false;\n for (let j = 0; j < recovered.length; j++) {\n if (recovered[j] !== dkBytes[j]) return false;\n }\n if (!blsVerifyExtraShares(sharesBytes, threshold, dkBytes)) {\n return false;\n }\n }\n return true;\n}\n\nfunction verifyBatchChunk(input: VerifyBatchInput): boolean {\n return blsVerifyMultiple(\n input.pubkeys,\n input.messages,\n input.aggregateSignature,\n );\n}\n\nfunction dispatch(input: WorkerInput): boolean {\n if (input.mode === 'shareBinding') return verifyShareBindingChunk(input);\n if (input.mode === 'verifyBatch') return verifyBatchChunk(input);\n return false;\n}\n\nif (parentPort) {\n try {\n parentPort.postMessage(dispatch(workerData as WorkerInput));\n } catch {\n parentPort.postMessage(false);\n }\n}\n"],"mappings":";;;;;;;AASA,SAAS,YAAY,kBAAkB;AACvC,SAAS,qBAAqB;AAuB9B,SAAS,wBAAwB,OAAmC;AAClE,QAAM,EAAE,QAAQ,iBAAiB,UAAU,IAAI;AAC/C,MAAI,OAAO,WAAW,gBAAgB,OAAQ,QAAO;AAErD,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,cAAc,OAAO,CAAC,EAAE,IAAI,OAAK,cAAc,CAAC,CAAC;AACvD,UAAM,UAAU,cAAc,gBAAgB,CAAC,CAAC;AAEhD,UAAM,YAAY;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AACA,QAAI,CAAC,UAAW,QAAO;AACvB,QAAI,UAAU,WAAW,QAAQ,OAAQ,QAAO;AAChD,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,EAAG,QAAO;AAAA,IAC1C;AACA,QAAI,CAAC,qBAAqB,aAAa,WAAW,OAAO,GAAG;AAC1D,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAkC;AAC1D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAEA,SAAS,SAAS,OAA6B;AAC7C,MAAI,MAAM,SAAS,eAAgB,QAAO,wBAAwB,KAAK;AACvE,MAAI,MAAM,SAAS,cAAe,QAAO,iBAAiB,KAAK;AAC/D,SAAO;AACT;AAEA,IAAI,YAAY;AACd,MAAI;AACF,eAAW,YAAY,SAAS,UAAyB,CAAC;AAAA,EAC5D,SAAQ;AACN,eAAW,YAAY,KAAK;AAAA,EAC9B;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -2,3 +2,5 @@ export declare function blsVerify(pubkey: Uint8Array, message: Uint8Array, signa
|
|
|
2
2
|
export declare function blsVerifyAggregate(pubkeys: Uint8Array[], message: Uint8Array, signature: Uint8Array): boolean;
|
|
3
3
|
export declare function blsVerifyMultiple(pubkeys: Uint8Array[], messages: Uint8Array[], signature: Uint8Array): boolean;
|
|
4
4
|
export declare function blsAggregateSignatures(signatures: Uint8Array[]): Uint8Array;
|
|
5
|
+
export declare function blsRecoverDistributedPubkeyFromShares(pubshares: Uint8Array[], threshold: number): Uint8Array | null;
|
|
6
|
+
export declare function blsVerifyExtraShares(pubshares: Uint8Array[], threshold: number, distributedPubkey: Uint8Array): boolean;
|
|
@@ -15,6 +15,7 @@ export { Exit } from './exits/exit.js';
|
|
|
15
15
|
export { ObolSplits } from './splits/splits.js';
|
|
16
16
|
export { EOA } from './eoa/eoa.js';
|
|
17
17
|
export { blsVerify } from './blsUtils.js';
|
|
18
|
+
export { ENR } from '@chainsafe/enr';
|
|
18
19
|
/**
|
|
19
20
|
* Primary entrypoint for the Obol SDK. Use this class to create, manage,
|
|
20
21
|
* and activate Distributed Validators via the Obol API.
|
|
@@ -28,4 +28,13 @@ export declare const verifyBuilderRegistration: (validator: DistributedValidator
|
|
|
28
28
|
};
|
|
29
29
|
export declare const verifyNodeSignatures: (clusterLock: ClusterLock) => boolean;
|
|
30
30
|
export declare const signingRoot: (domain: Uint8Array, messageBuffer: Buffer) => Uint8Array;
|
|
31
|
+
/**
|
|
32
|
+
* Returns true iff every validator's distributed_public_key is unique across
|
|
33
|
+
* the lock. Normalizes hex case (charon emits lowercase today, but mixed-case
|
|
34
|
+
* copies shouldn't sneak through). Exported so it can be unit-tested
|
|
35
|
+
* independently of the rest of validateClusterLock — a tampered lock that
|
|
36
|
+
* trips a downstream check (signature_aggregate, node sigs) cannot isolate
|
|
37
|
+
* this branch.
|
|
38
|
+
*/
|
|
39
|
+
export declare const hasUniqueDistributedKeys: (clusterLock: ClusterLock) => boolean;
|
|
31
40
|
export declare const isValidClusterLock: (clusterLock: ClusterLock, safeRpcUrl?: SafeRpcUrl) => Promise<boolean>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ShareBindingInput {
|
|
2
|
+
mode: 'shareBinding';
|
|
3
|
+
shares: string[][];
|
|
4
|
+
distributedKeys: string[];
|
|
5
|
+
threshold: number;
|
|
6
|
+
}
|
|
7
|
+
export interface VerifyBatchInput {
|
|
8
|
+
mode: 'verifyBatch';
|
|
9
|
+
pubkeys: Uint8Array[];
|
|
10
|
+
messages: Uint8Array[];
|
|
11
|
+
aggregateSignature: Uint8Array;
|
|
12
|
+
}
|
|
13
|
+
export type WorkerInput = ShareBindingInput | VerifyBatchInput;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../tsup.config.ts","../../src/ajv.ts","../../src/base.ts","../../src/blsUtils.ts","../../src/bytecodes.ts","../../src/constants.ts","../../src/errors.ts","../../src/index.ts","../../src/schema.ts","../../src/services.ts","../../src/types.ts","../../src/utils.ts","../../src/abi/BatchDeposit.ts","../../src/abi/MerkleDistributorWithDeadline.ts","../../src/abi/Multicall3.ts","../../src/abi/OVM.ts","../../src/abi/OWR.ts","../../src/abi/SplitMain.ts","../../src/abi/splitV2FactoryAbi.ts","../../src/eoa/eoa.ts","../../src/eoa/eoaHelpers.ts","../../src/exits/ethUtils.ts","../../src/exits/exit.ts","../../src/exits/verificationHelpers.ts","../../src/incentives/incentiveHelpers.ts","../../src/incentives/incentives.ts","../../src/splits/splitHelpers.ts","../../src/splits/splits.ts","../../src/verification/common.ts","../../src/verification/signature-validator.ts","../../src/verification/sszTypes.ts","../../src/verification/v1.10.0.ts","../../src/verification/v1.6.0.ts","../../src/verification/v1.7.0.ts","../../src/verification/v1.8.0.ts","../../test/fixtures.ts","../../test/client/ajv.spec.ts","../../test/client/methods.spec.ts","../../test/eoa/eoa.spec.ts","../../test/exit/ethUtils.spec.ts","../../test/exit/exit.spec.ts","../../test/exit/verificationHelpers.spec.ts","../../test/incentives/incentives.spec.ts","../../test/splits/splits.spec.ts"],"version":"5.9.3"}
|
|
1
|
+
{"root":["../../tsup.config.ts","../../src/ajv.ts","../../src/base.ts","../../src/blsUtils.ts","../../src/bytecodes.ts","../../src/constants.ts","../../src/errors.ts","../../src/index.ts","../../src/schema.ts","../../src/services.ts","../../src/types.ts","../../src/utils.ts","../../src/abi/BatchDeposit.ts","../../src/abi/MerkleDistributorWithDeadline.ts","../../src/abi/Multicall3.ts","../../src/abi/OVM.ts","../../src/abi/OWR.ts","../../src/abi/SplitMain.ts","../../src/abi/splitV2FactoryAbi.ts","../../src/eoa/eoa.ts","../../src/eoa/eoaHelpers.ts","../../src/exits/ethUtils.ts","../../src/exits/exit.ts","../../src/exits/verificationHelpers.ts","../../src/incentives/incentiveHelpers.ts","../../src/incentives/incentives.ts","../../src/splits/splitHelpers.ts","../../src/splits/splits.ts","../../src/verification/common.ts","../../src/verification/lockWorker.ts","../../src/verification/parallelPool.ts","../../src/verification/signature-validator.ts","../../src/verification/sszTypes.ts","../../src/verification/v1.10.0.ts","../../src/verification/v1.6.0.ts","../../src/verification/v1.7.0.ts","../../src/verification/v1.8.0.ts","../../test/fixtures.ts","../../test/client/ajv.spec.ts","../../test/client/methods.spec.ts","../../test/eoa/eoa.spec.ts","../../test/exit/ethUtils.spec.ts","../../test/exit/exit.spec.ts","../../test/exit/verificationHelpers.spec.ts","../../test/incentives/incentives.spec.ts","../../test/splits/splits.spec.ts","../../test/verification/parallelPool.spec.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED