@solarity/zkit 0.2.3 → 0.2.5
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/core/templates/verifier_groth16.sol.ejs +4 -4
- 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/core/templates/verifier_groth16.sol.ejs +4 -4
- 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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"}
|
|
@@ -39,7 +39,7 @@ contract <%=verifier_id%> {
|
|
|
39
39
|
uint256 public constant DELTA_Y2 =
|
|
40
40
|
<%=vk_delta_2[1][0] -%>;
|
|
41
41
|
|
|
42
|
-
<% for (let i=0; i<IC.length; i++) { %>uint256 public constant IC<%=i%>_X =
|
|
42
|
+
<% for (let i = 0; i < IC.length; i++) { %>uint256 public constant IC<%=i%>_X =
|
|
43
43
|
<%=IC[i][0]%>;
|
|
44
44
|
uint256 public constant IC<%=i%>_Y =
|
|
45
45
|
<%=IC[i][1]%>;
|
|
@@ -53,7 +53,7 @@ contract <%=verifier_id%> {
|
|
|
53
53
|
uint256[2] memory pointA_,
|
|
54
54
|
uint256[2][2] memory pointB_,
|
|
55
55
|
uint256[2] memory pointC_,
|
|
56
|
-
uint256[<%=IC.length-1%>] memory publicSignals_
|
|
56
|
+
uint256[<%=IC.length - 1%>] memory publicSignals_
|
|
57
57
|
) public view returns (bool verified_) {
|
|
58
58
|
assembly {
|
|
59
59
|
function checkField(signal_) -> res_ {
|
|
@@ -88,7 +88,7 @@ contract <%=verifier_id%> {
|
|
|
88
88
|
mstore(add(pointer_, 32), IC0_Y)
|
|
89
89
|
|
|
90
90
|
/// @dev compute the linear combination of public signals
|
|
91
|
-
<% for (let i = 1; i <= nPublic; i++) { %>if iszero(g1MulAdd(pointer_, IC<%=i%>_X, IC<%=i%>_Y, mload(add(pubSignals_, <%=(i-1)*32%>)))) {
|
|
91
|
+
<% for (let i = 1; i <= nPublic; i++) { %>if iszero(g1MulAdd(pointer_, IC<%=i%>_X, IC<%=i%>_Y, mload(add(pubSignals_, <%=(i - 1) * 32%>)))) {
|
|
92
92
|
leave
|
|
93
93
|
}
|
|
94
94
|
<% } -%>
|
|
@@ -145,7 +145,7 @@ contract <%=verifier_id%> {
|
|
|
145
145
|
|
|
146
146
|
/// @dev check that all public signals are in F
|
|
147
147
|
verified_ := 1
|
|
148
|
-
<% for (let i = 0; i <
|
|
148
|
+
<% for (let i = 0; i < nPublic; i++) { %>verified_ := and(verified_, checkField(mload(add(publicSignals_, <%=i * 32%>))))
|
|
149
149
|
<% } -%>
|
|
150
150
|
|
|
151
151
|
/// @dev check pairings
|
|
@@ -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
|
|
|
@@ -39,7 +39,7 @@ contract <%=verifier_id%> {
|
|
|
39
39
|
uint256 public constant DELTA_Y2 =
|
|
40
40
|
<%=vk_delta_2[1][0] -%>;
|
|
41
41
|
|
|
42
|
-
<% for (let i=0; i<IC.length; i++) { %>uint256 public constant IC<%=i%>_X =
|
|
42
|
+
<% for (let i = 0; i < IC.length; i++) { %>uint256 public constant IC<%=i%>_X =
|
|
43
43
|
<%=IC[i][0]%>;
|
|
44
44
|
uint256 public constant IC<%=i%>_Y =
|
|
45
45
|
<%=IC[i][1]%>;
|
|
@@ -53,7 +53,7 @@ contract <%=verifier_id%> {
|
|
|
53
53
|
uint256[2] memory pointA_,
|
|
54
54
|
uint256[2][2] memory pointB_,
|
|
55
55
|
uint256[2] memory pointC_,
|
|
56
|
-
uint256[<%=IC.length-1%>] memory publicSignals_
|
|
56
|
+
uint256[<%=IC.length - 1%>] memory publicSignals_
|
|
57
57
|
) public view returns (bool verified_) {
|
|
58
58
|
assembly {
|
|
59
59
|
function checkField(signal_) -> res_ {
|
|
@@ -88,7 +88,7 @@ contract <%=verifier_id%> {
|
|
|
88
88
|
mstore(add(pointer_, 32), IC0_Y)
|
|
89
89
|
|
|
90
90
|
/// @dev compute the linear combination of public signals
|
|
91
|
-
<% for (let i = 1; i <= nPublic; i++) { %>if iszero(g1MulAdd(pointer_, IC<%=i%>_X, IC<%=i%>_Y, mload(add(pubSignals_, <%=(i-1)*32%>)))) {
|
|
91
|
+
<% for (let i = 1; i <= nPublic; i++) { %>if iszero(g1MulAdd(pointer_, IC<%=i%>_X, IC<%=i%>_Y, mload(add(pubSignals_, <%=(i - 1) * 32%>)))) {
|
|
92
92
|
leave
|
|
93
93
|
}
|
|
94
94
|
<% } -%>
|
|
@@ -145,7 +145,7 @@ contract <%=verifier_id%> {
|
|
|
145
145
|
|
|
146
146
|
/// @dev check that all public signals are in F
|
|
147
147
|
verified_ := 1
|
|
148
|
-
<% for (let i = 0; i <
|
|
148
|
+
<% for (let i = 0; i < nPublic; i++) { %>verified_ := and(verified_, checkField(mload(add(publicSignals_, <%=i * 32%>))))
|
|
149
149
|
<% } -%>
|
|
150
150
|
|
|
151
151
|
/// @dev check pairings
|
|
@@ -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";
|