@solarity/zkit 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/core/CircuitZKit.d.ts +10 -3
- package/dist/core/CircuitZKit.d.ts.map +1 -1
- package/dist/core/CircuitZKit.js +18 -1
- package/dist/core/CircuitZKit.js.map +1 -1
- package/dist/types/circuit-zkit.d.ts +3 -3
- package/dist/types/circuit-zkit.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/CircuitZKit.ts +25 -3
- package/src/types/circuit-zkit.ts +3 -4
package/README.md
CHANGED
|
@@ -60,6 +60,15 @@ Creates a Solidity verifier contract on `verifierDirPath` path, which was specif
|
|
|
60
60
|
await multiplier.createVerifier();
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
#### calculateWitness()
|
|
64
|
+
|
|
65
|
+
Calculates a witness in the `tmp` directory and returns its json representation.
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
/// witness = [1n, 200n, 20n, 10n]
|
|
69
|
+
const witness = await multiplier.calculateWitness({ a: 10, b: 20 });
|
|
70
|
+
```
|
|
71
|
+
|
|
63
72
|
#### generateProof()
|
|
64
73
|
|
|
65
74
|
Generates a proof for the given inputs.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ArtifactsFileType, Calldata, CircuitZKitConfig,
|
|
1
|
+
import { ArtifactsFileType, Calldata, CircuitZKitConfig, Signals, ProofStruct, VerifierTemplateType } from "../types/circuit-zkit";
|
|
2
2
|
/**
|
|
3
3
|
* `CircuitZKit` represents a single circuit and provides a high-level API to work with it.
|
|
4
4
|
*/
|
|
@@ -16,16 +16,23 @@ export declare class CircuitZKit {
|
|
|
16
16
|
* Creates a Solidity verifier contract.
|
|
17
17
|
*/
|
|
18
18
|
createVerifier(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Calculates a witness for the given inputs.
|
|
21
|
+
*
|
|
22
|
+
* @param {Signals} inputs - The inputs for the circuit.
|
|
23
|
+
* @returns {Promise<bigint[]>} The generated witness.
|
|
24
|
+
*/
|
|
25
|
+
calculateWitness(inputs: Signals): Promise<bigint[]>;
|
|
19
26
|
/**
|
|
20
27
|
* Generates a proof for the given inputs.
|
|
21
28
|
*
|
|
22
29
|
* @dev The `inputs` should be in the same order as the circuit expects them.
|
|
23
30
|
*
|
|
24
|
-
* @param {
|
|
31
|
+
* @param {Signals} inputs - The inputs for the circuit.
|
|
25
32
|
* @returns {Promise<ProofStruct>} The generated proof.
|
|
26
33
|
* @todo Add support for other proving systems.
|
|
27
34
|
*/
|
|
28
|
-
generateProof(inputs:
|
|
35
|
+
generateProof(inputs: Signals): Promise<ProofStruct>;
|
|
29
36
|
/**
|
|
30
37
|
* Verifies the given proof.
|
|
31
38
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CircuitZKit.d.ts","sourceRoot":"","sources":["../../src/core/CircuitZKit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CircuitZKit.d.ts","sourceRoot":"","sources":["../../src/core/CircuitZKit.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAEvD;;;;;OAKG;WACW,WAAW,CAAC,YAAY,EAAE,oBAAoB,GAAG,MAAM;IASrE;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5C;;;;;OAKG;IACU,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAejE;;;;;;;;OAQG;IACU,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAOjE;;;;;;;;OAQG;IACU,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9D;;;;;;OAMG;IACU,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMpE;;;;OAIG;IACI,cAAc,IAAI,MAAM;IAI/B;;;;OAIG;IACI,eAAe,IAAI,MAAM;IAIhC;;;;OAIG;IACI,eAAe,IAAI,oBAAoB;IAI9C;;;;;OAKG;IACI,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM;IAUpE;;;;;OAKG;IACI,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM;CAgCjE"}
|
package/dist/core/CircuitZKit.js
CHANGED
|
@@ -29,6 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.CircuitZKit = void 0;
|
|
30
30
|
const ejs_1 = __importDefault(require("ejs"));
|
|
31
31
|
const fs_1 = __importDefault(require("fs"));
|
|
32
|
+
const os = __importStar(require("os"));
|
|
32
33
|
const path_1 = __importDefault(require("path"));
|
|
33
34
|
const snarkjs = __importStar(require("snarkjs"));
|
|
34
35
|
/**
|
|
@@ -68,12 +69,28 @@ class CircuitZKit {
|
|
|
68
69
|
const verifierCode = ejs_1.default.render(verifierTemplate, templateParams);
|
|
69
70
|
fs_1.default.writeFileSync(verifierFilePath, verifierCode, "utf-8");
|
|
70
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Calculates a witness for the given inputs.
|
|
74
|
+
*
|
|
75
|
+
* @param {Signals} inputs - The inputs for the circuit.
|
|
76
|
+
* @returns {Promise<bigint[]>} The generated witness.
|
|
77
|
+
*/
|
|
78
|
+
async calculateWitness(inputs) {
|
|
79
|
+
const tmpDir = path_1.default.join(os.tmpdir(), ".zkit");
|
|
80
|
+
if (!fs_1.default.existsSync(tmpDir)) {
|
|
81
|
+
fs_1.default.mkdirSync(tmpDir, { recursive: true });
|
|
82
|
+
}
|
|
83
|
+
const wtnsFile = path_1.default.join(tmpDir, `${this.getCircuitName()}.wtns`);
|
|
84
|
+
const wasmFile = this.mustGetArtifactsFilePath("wasm");
|
|
85
|
+
await snarkjs.wtns.calculate(inputs, wasmFile, wtnsFile);
|
|
86
|
+
return (await snarkjs.wtns.exportJson(wtnsFile));
|
|
87
|
+
}
|
|
71
88
|
/**
|
|
72
89
|
* Generates a proof for the given inputs.
|
|
73
90
|
*
|
|
74
91
|
* @dev The `inputs` should be in the same order as the circuit expects them.
|
|
75
92
|
*
|
|
76
|
-
* @param {
|
|
93
|
+
* @param {Signals} inputs - The inputs for the circuit.
|
|
77
94
|
* @returns {Promise<ProofStruct>} The generated proof.
|
|
78
95
|
* @todo Add support for other proving systems.
|
|
79
96
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CircuitZKit.js","sourceRoot":"","sources":["../../src/core/CircuitZKit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAsB;AACtB,4CAAoB;AACpB,gDAAwB;AACxB,iDAAmC;AAWnC;;GAEG;AACH,MAAa,WAAW;IACO;IAA7B,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAE3D;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,YAAkC;QAC1D,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,SAAS;gBACZ,OAAO,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,0BAA0B,CAAC,EAAE,MAAM,CAAC,CAAC;YAChG;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,GAAG,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,MAAM,YAAY,GAAW,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAElG,MAAM,gBAAgB,GAAW,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAEjF,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACjD,YAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1E,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvD,MAAM,YAAY,GAAG,aAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QAElE,YAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"CircuitZKit.js","sourceRoot":"","sources":["../../src/core/CircuitZKit.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,10 +26,10 @@ export type ProofStruct = {
|
|
|
26
26
|
proof: Groth16Proof;
|
|
27
27
|
publicSignals: PublicSignals;
|
|
28
28
|
};
|
|
29
|
-
export type NumberLike = number | bigint |
|
|
29
|
+
export type NumberLike = number | bigint | `${number}`;
|
|
30
30
|
export type ArrayLike = NumberLike[] | ArrayLike[];
|
|
31
|
-
export type
|
|
32
|
-
export type
|
|
31
|
+
export type Signal = NumberLike | ArrayLike;
|
|
32
|
+
export type Signals = Record<string, Signal>;
|
|
33
33
|
export type ArtifactsFileType = "r1cs" | "zkey" | "vkey" | "sym" | "json" | "wasm";
|
|
34
34
|
export type VerifierTemplateType = "groth16";
|
|
35
35
|
export type CircuitZKitConfig = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-zkit.d.ts","sourceRoot":"","sources":["../../src/types/circuit-zkit.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,aAAa,EAAE,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;IACvE,IAAI,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB;QAAC,aAAa;QAAE,aAAa;KAAC;IAC9B;QAAC,CAAC,aAAa,EAAE,aAAa,CAAC;QAAE,CAAC,aAAa,EAAE,aAAa,CAAC;KAAC;IAChE;QAAC,aAAa;QAAE,aAAa;KAAC;IAC9B,aAAa;CACd,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"circuit-zkit.d.ts","sourceRoot":"","sources":["../../src/types/circuit-zkit.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,aAAa,EAAE,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;IACvE,IAAI,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB;QAAC,aAAa;QAAE,aAAa;KAAC;IAC9B;QAAC,CAAC,aAAa,EAAE,aAAa,CAAC;QAAE,CAAC,aAAa,EAAE,aAAa,CAAC;KAAC;IAChE;QAAC,aAAa;QAAE,aAAa;KAAC;IAC9B,aAAa;CACd,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AACvD,MAAM,MAAM,SAAS,GAAG,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;AACnD,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAC5C,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AACnF,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC,CAAC"}
|
package/package.json
CHANGED
package/src/core/CircuitZKit.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import ejs from "ejs";
|
|
2
2
|
import fs from "fs";
|
|
3
|
+
import * as os from "os";
|
|
3
4
|
import path from "path";
|
|
4
5
|
import * as snarkjs from "snarkjs";
|
|
5
6
|
|
|
@@ -7,7 +8,7 @@ import {
|
|
|
7
8
|
ArtifactsFileType,
|
|
8
9
|
Calldata,
|
|
9
10
|
CircuitZKitConfig,
|
|
10
|
-
|
|
11
|
+
Signals,
|
|
11
12
|
ProofStruct,
|
|
12
13
|
VerifierTemplateType,
|
|
13
14
|
} from "../types/circuit-zkit";
|
|
@@ -54,16 +55,37 @@ export class CircuitZKit {
|
|
|
54
55
|
fs.writeFileSync(verifierFilePath, verifierCode, "utf-8");
|
|
55
56
|
}
|
|
56
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Calculates a witness for the given inputs.
|
|
60
|
+
*
|
|
61
|
+
* @param {Signals} inputs - The inputs for the circuit.
|
|
62
|
+
* @returns {Promise<bigint[]>} The generated witness.
|
|
63
|
+
*/
|
|
64
|
+
public async calculateWitness(inputs: Signals): Promise<bigint[]> {
|
|
65
|
+
const tmpDir = path.join(os.tmpdir(), ".zkit");
|
|
66
|
+
|
|
67
|
+
if (!fs.existsSync(tmpDir)) {
|
|
68
|
+
fs.mkdirSync(tmpDir, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const wtnsFile = path.join(tmpDir, `${this.getCircuitName()}.wtns`);
|
|
72
|
+
const wasmFile = this.mustGetArtifactsFilePath("wasm");
|
|
73
|
+
|
|
74
|
+
await snarkjs.wtns.calculate(inputs, wasmFile, wtnsFile);
|
|
75
|
+
|
|
76
|
+
return (await snarkjs.wtns.exportJson(wtnsFile)) as bigint[];
|
|
77
|
+
}
|
|
78
|
+
|
|
57
79
|
/**
|
|
58
80
|
* Generates a proof for the given inputs.
|
|
59
81
|
*
|
|
60
82
|
* @dev The `inputs` should be in the same order as the circuit expects them.
|
|
61
83
|
*
|
|
62
|
-
* @param {
|
|
84
|
+
* @param {Signals} inputs - The inputs for the circuit.
|
|
63
85
|
* @returns {Promise<ProofStruct>} The generated proof.
|
|
64
86
|
* @todo Add support for other proving systems.
|
|
65
87
|
*/
|
|
66
|
-
public async generateProof(inputs:
|
|
88
|
+
public async generateProof(inputs: Signals): Promise<ProofStruct> {
|
|
67
89
|
const zKeyFile = this.mustGetArtifactsFilePath("zkey");
|
|
68
90
|
const wasmFile = this.mustGetArtifactsFilePath("wasm");
|
|
69
91
|
|
|
@@ -22,11 +22,10 @@ export type ProofStruct = {
|
|
|
22
22
|
publicSignals: PublicSignals;
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
export type NumberLike = number | bigint |
|
|
25
|
+
export type NumberLike = number | bigint | `${number}`;
|
|
26
26
|
export type ArrayLike = NumberLike[] | ArrayLike[];
|
|
27
|
-
export type
|
|
28
|
-
|
|
29
|
-
export type Inputs = Record<string, InputLike>;
|
|
27
|
+
export type Signal = NumberLike | ArrayLike;
|
|
28
|
+
export type Signals = Record<string, Signal>;
|
|
30
29
|
|
|
31
30
|
export type ArtifactsFileType = "r1cs" | "zkey" | "vkey" | "sym" | "json" | "wasm";
|
|
32
31
|
export type VerifierTemplateType = "groth16";
|