@solarity/zkit 0.2.1 → 0.2.3

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.
@@ -16,14 +16,6 @@ export declare class CircuitZKit {
16
16
  * Creates a Solidity verifier contract.
17
17
  */
18
18
  createVerifier(): Promise<void>;
19
- /**
20
- * Creates a witness for the given inputs.
21
- *
22
- * @dev The `inputs` should be in the same order as the circuit expects them.
23
- *
24
- * @param {Inputs} inputs - The inputs for the circuit.
25
- */
26
- createWitness(inputs: Inputs): Promise<void>;
27
19
  /**
28
20
  * Generates a proof for the given inputs.
29
21
  *
@@ -1 +1 @@
1
- {"version":3,"file":"CircuitZKit.d.ts","sourceRoot":"","sources":["../../src/core/CircuitZKit.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,MAAM,EACN,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;;;;;;OAMG;IACU,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD;;;;;;;;OAQG;IACU,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOhE;;;;;;;;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;CAmCjE"}
1
+ {"version":3,"file":"CircuitZKit.d.ts","sourceRoot":"","sources":["../../src/core/CircuitZKit.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,MAAM,EACN,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;;;;;;;;OAQG;IACU,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOhE;;;;;;;;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"}
@@ -68,18 +68,6 @@ class CircuitZKit {
68
68
  const verifierCode = ejs_1.default.render(verifierTemplate, templateParams);
69
69
  fs_1.default.writeFileSync(verifierFilePath, verifierCode, "utf-8");
70
70
  }
71
- /**
72
- * Creates a witness for the given inputs.
73
- *
74
- * @dev The `inputs` should be in the same order as the circuit expects them.
75
- *
76
- * @param {Inputs} inputs - The inputs for the circuit.
77
- */
78
- async createWitness(inputs) {
79
- const wasmFile = this.mustGetArtifactsFilePath("wasm");
80
- const wtnsFile = this.getArtifactsFilePath("wtns");
81
- await snarkjs.wtns.calculate(inputs, wasmFile, wtnsFile);
82
- }
83
71
  /**
84
72
  * Generates a proof for the given inputs.
85
73
  *
@@ -182,9 +170,6 @@ class CircuitZKit {
182
170
  case "json":
183
171
  fileName = `${circuitName}_constraints.json`;
184
172
  break;
185
- case "wtns":
186
- fileName = `${circuitName}.wtns`;
187
- break;
188
173
  case "wasm":
189
174
  fileName = `${circuitName}.wasm`;
190
175
  fileDir = path_1.default.join(fileDir, `${circuitName}_js`);
@@ -1 +1 @@
1
- {"version":3,"file":"CircuitZKit.js","sourceRoot":"","sources":["../../src/core/CircuitZKit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CircuitZKit.js","sourceRoot":"","sources":["../../src/core/CircuitZKit.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,15 @@
1
1
  // SPDX-License-Identifier: MIT
2
+
3
+ /* AUTOGENERATED FILE BY HARDHAT-ZKIT. DO NOT EDIT. */
4
+
2
5
  pragma solidity >=0.7.0 <0.9.0;
3
6
 
4
7
  contract <%=verifier_id%> {
5
- /// @dev Base field size
8
+ /// @dev base field size
6
9
  uint256 public constant BASE_FIELD_SIZE =
7
10
  21888242871839275222246405745257275088696311157297823662689037894645226208583;
8
11
 
9
- /// @dev Verification Key data
12
+ /// @dev verification key data
10
13
  uint256 public constant ALPHA_X =
11
14
  <%=vk_alpha_1[0]%>;
12
15
  uint256 public constant ALPHA_Y =
@@ -42,75 +45,66 @@ contract <%=verifier_id%> {
42
45
  <%=IC[i][1]%>;
43
46
  <% } -%>
44
47
 
45
- /// @dev Memory data
46
- uint16 public constant P_VK = 0;
47
- uint16 public constant P_PAIRING = 128;
48
- uint16 public constant P_LAST_MEM = 896;
48
+ /// @dev memory pointer sizes
49
+ uint16 public constant P_PUBLIC_SIGNALS_ACCUMULATOR_SIZE = 128;
50
+ uint16 public constant P_TOTAL_SIZE = 896;
49
51
 
50
52
  function verifyProof(
51
- uint256[2] calldata pA_,
52
- uint256[2][2] calldata pB_,
53
- uint256[2] calldata pC_,
54
- uint256[<%=IC.length-1%>] calldata pubSignals_
55
- ) public view returns (bool) {
53
+ uint256[2] memory pointA_,
54
+ uint256[2][2] memory pointB_,
55
+ uint256[2] memory pointC_,
56
+ uint256[<%=IC.length-1%>] memory publicSignals_
57
+ ) public view returns (bool verified_) {
56
58
  assembly {
57
- function checkField(v) {
58
- if iszero(lt(v, BASE_FIELD_SIZE)) {
59
- mstore(0, 0)
60
- return(0, 0x20)
61
- }
59
+ function checkField(signal_) -> res_ {
60
+ res_ := lt(signal_, BASE_FIELD_SIZE)
62
61
  }
63
62
 
64
- /// @dev G1 function to multiply a G1 value(x,y) to value in an address
65
- function g1MulAccC(pR, x, y, s) {
66
- let success
67
- let mIn := mload(0x40)
63
+ function g1MulAdd(pR_, x_, y_, s_) -> res_ {
64
+ let pointer_ := mload(64) // free pointer
68
65
 
69
- mstore(mIn, x)
70
- mstore(add(mIn, 32), y)
71
- mstore(add(mIn, 64), s)
66
+ mstore(pointer_, x_)
67
+ mstore(add(pointer_, 32), y_)
68
+ mstore(add(pointer_, 64), s_)
72
69
 
73
- success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)
70
+ res_ := staticcall(sub(gas(), 2000), 7, pointer_, 96, pointer_, 64) // ecMul
71
+ res_ := and(res_, gt(returndatasize(), 0)) // check that multiplication succeeded
74
72
 
75
- if iszero(success) {
76
- mstore(0, 0)
77
- return(0, 0x20)
73
+ if iszero(res_) {
74
+ leave
78
75
  }
79
76
 
80
- mstore(add(mIn, 64), mload(pR))
81
- mstore(add(mIn, 96), mload(add(pR, 32)))
77
+ mstore(add(pointer_, 64), mload(pR_))
78
+ mstore(add(pointer_, 96), mload(add(pR_, 32)))
82
79
 
83
- success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)
84
-
85
- if iszero(success) {
86
- mstore(0, 0)
87
- return(0, 0x20)
88
- }
80
+ res_ := staticcall(sub(gas(), 2000), 6, pointer_, 128, pR_, 64) // ecAdd
81
+ res_ := and(res_, gt(returndatasize(), 0)) // check that addition succeeded
89
82
  }
90
83
 
91
- function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {
92
- let pPairing_ := add(pMem, P_PAIRING)
93
- let pVk_ := add(pMem, P_VK)
84
+ function checkPairing(pA_, pB_, pC_, pubSignals_, pointer_) -> res_ {
85
+ let pPairing_ := add(pointer_, P_PUBLIC_SIGNALS_ACCUMULATOR_SIZE)
94
86
 
95
- mstore(pVk_, IC0_X)
96
- mstore(add(pVk_, 32), IC0_Y)
87
+ mstore(pointer_, IC0_X)
88
+ mstore(add(pointer_, 32), IC0_Y)
97
89
 
98
- /// @dev Compute the linear combination vk_x
99
- <% for (let i = 1; i <= nPublic; i++) { %>g1MulAccC(pVk_, IC<%=i%>_X, IC<%=i%>_Y, calldataload(add(pubSignals, <%=(i-1)*32%>)))
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%>)))) {
92
+ leave
93
+ }
100
94
  <% } -%>
101
95
 
102
96
  /// @dev -A
103
- mstore(pPairing_, calldataload(pA))
97
+ mstore(pPairing_, mload(pA_))
104
98
  mstore(
105
99
  add(pPairing_, 32),
106
- mod(sub(BASE_FIELD_SIZE, calldataload(add(pA, 32))), BASE_FIELD_SIZE)
100
+ mod(sub(BASE_FIELD_SIZE, mload(add(pA_, 32))), BASE_FIELD_SIZE)
107
101
  )
108
102
 
109
103
  /// @dev B
110
- mstore(add(pPairing_, 64), calldataload(pB))
111
- mstore(add(pPairing_, 96), calldataload(add(pB, 32)))
112
- mstore(add(pPairing_, 128), calldataload(add(pB, 64)))
113
- mstore(add(pPairing_, 160), calldataload(add(pB, 96)))
104
+ mstore(add(pPairing_, 64), mload(mload(pB_)))
105
+ mstore(add(pPairing_, 96), mload(add(mload(pB_), 32)))
106
+ mstore(add(pPairing_, 128), mload(mload(add(pB_, 32))))
107
+ mstore(add(pPairing_, 160), mload(add(mload(add(pB_, 32)), 32)))
114
108
 
115
109
  /// @dev alpha1
116
110
  mstore(add(pPairing_, 192), ALPHA_X)
@@ -122,9 +116,9 @@ contract <%=verifier_id%> {
122
116
  mstore(add(pPairing_, 320), BETA_Y1)
123
117
  mstore(add(pPairing_, 352), BETA_Y2)
124
118
 
125
- /// @dev vk_x
126
- mstore(add(pPairing_, 384), mload(add(pMem, P_VK)))
127
- mstore(add(pPairing_, 416), mload(add(pMem, add(P_VK, 32))))
119
+ /// @dev public signals
120
+ mstore(add(pPairing_, 384), mload(pointer_))
121
+ mstore(add(pPairing_, 416), mload(add(pointer_, 32)))
128
122
 
129
123
  /// @dev gamma2
130
124
  mstore(add(pPairing_, 448), GAMMA_X1)
@@ -133,8 +127,8 @@ contract <%=verifier_id%> {
133
127
  mstore(add(pPairing_, 544), GAMMA_Y2)
134
128
 
135
129
  /// @dev C
136
- mstore(add(pPairing_, 576), calldataload(pC))
137
- mstore(add(pPairing_, 608), calldataload(add(pC, 32)))
130
+ mstore(add(pPairing_, 576), mload(pC_))
131
+ mstore(add(pPairing_, 608), mload(add(pC_, 32)))
138
132
 
139
133
  /// @dev delta2
140
134
  mstore(add(pPairing_, 640), DELTA_X1)
@@ -142,23 +136,22 @@ contract <%=verifier_id%> {
142
136
  mstore(add(pPairing_, 704), DELTA_Y1)
143
137
  mstore(add(pPairing_, 736), DELTA_Y2)
144
138
 
145
- let success_ := staticcall(sub(gas(), 2000), 8, pPairing_, 768, pPairing_, 0x20)
146
-
147
- isOk := and(success_, mload(pPairing_))
139
+ res_ := staticcall(sub(gas(), 2000), 8, pPairing_, 768, pPairing_, 32) // ecPairing
140
+ res_ := and(res_, mload(pPairing_)) // check that pairing succeeded
148
141
  }
149
142
 
150
- let pMem_ := mload(0x40)
151
- mstore(0x40, add(pMem_, P_LAST_MEM))
143
+ let pointer_ := mload(64) // free pointer
144
+ mstore(64, add(pointer_, P_TOTAL_SIZE))
152
145
 
153
- /// @dev Validate that all evaluations F
154
- <% for (let i = 0; i < IC.length; i++) { %>checkField(calldataload(add(pubSignals_, <%=i*32%>)))
146
+ /// @dev check that all public signals are in F
147
+ verified_ := 1
148
+ <% for (let i = 0; i < IC.length; i++) { %>verified_ := and(verified_, checkField(mload(add(publicSignals_, <%=i*32%>))))
155
149
  <% } -%>
156
150
 
157
- /// @dev Validate all evaluations
158
- let isValid := checkPairing(pA_, pB_, pC_, pubSignals_, pMem_)
159
-
160
- mstore(0, isValid)
161
- return(0, 0x20)
151
+ /// @dev check pairings
152
+ if not(iszero(verified_)) {
153
+ verified_ := checkPairing(pointA_, pointB_, pointC_, publicSignals_, pointer_)
154
+ }
162
155
  }
163
156
  }
164
157
  }
@@ -20,9 +20,7 @@ export type Calldata = [
20
20
  NumericString,
21
21
  NumericString
22
22
  ],
23
- [
24
- NumericString
25
- ]
23
+ PublicSignals
26
24
  ];
27
25
  export type ProofStruct = {
28
26
  proof: Groth16Proof;
@@ -32,7 +30,7 @@ export type NumberLike = number | bigint | string;
32
30
  export type ArrayLike = NumberLike[] | ArrayLike[];
33
31
  export type InputLike = NumberLike | ArrayLike;
34
32
  export type Inputs = Record<string, InputLike>;
35
- export type ArtifactsFileType = "r1cs" | "zkey" | "vkey" | "sym" | "json" | "wasm" | "wtns";
33
+ export type ArtifactsFileType = "r1cs" | "zkey" | "vkey" | "sym" | "json" | "wasm";
36
34
  export type VerifierTemplateType = "groth16";
37
35
  export type CircuitZKitConfig = {
38
36
  circuitName: string;
@@ -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;QAAC,aAAa;KAAC;CAChB,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;AAClD,MAAM,MAAM,SAAS,GAAG,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAC5F,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"}
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;AAClD,MAAM,MAAM,SAAS,GAAG,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE/C,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solarity/zkit",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "license": "MIT",
5
5
  "author": "Distributed Lab",
6
6
  "readme": "README.md",
@@ -54,20 +54,6 @@ export class CircuitZKit {
54
54
  fs.writeFileSync(verifierFilePath, verifierCode, "utf-8");
55
55
  }
56
56
 
57
- /**
58
- * Creates a witness for the given inputs.
59
- *
60
- * @dev The `inputs` should be in the same order as the circuit expects them.
61
- *
62
- * @param {Inputs} inputs - The inputs for the circuit.
63
- */
64
- public async createWitness(inputs: Inputs): Promise<void> {
65
- const wasmFile = this.mustGetArtifactsFilePath("wasm");
66
- const wtnsFile = this.getArtifactsFilePath("wtns");
67
-
68
- await snarkjs.wtns.calculate(inputs, wasmFile, wtnsFile);
69
- }
70
-
71
57
  /**
72
58
  * Generates a proof for the given inputs.
73
59
  *
@@ -185,9 +171,6 @@ export class CircuitZKit {
185
171
  case "json":
186
172
  fileName = `${circuitName}_constraints.json`;
187
173
  break;
188
- case "wtns":
189
- fileName = `${circuitName}.wtns`;
190
- break;
191
174
  case "wasm":
192
175
  fileName = `${circuitName}.wasm`;
193
176
  fileDir = path.join(fileDir, `${circuitName}_js`);
@@ -1,12 +1,15 @@
1
1
  // SPDX-License-Identifier: MIT
2
+
3
+ /* AUTOGENERATED FILE BY HARDHAT-ZKIT. DO NOT EDIT. */
4
+
2
5
  pragma solidity >=0.7.0 <0.9.0;
3
6
 
4
7
  contract <%=verifier_id%> {
5
- /// @dev Base field size
8
+ /// @dev base field size
6
9
  uint256 public constant BASE_FIELD_SIZE =
7
10
  21888242871839275222246405745257275088696311157297823662689037894645226208583;
8
11
 
9
- /// @dev Verification Key data
12
+ /// @dev verification key data
10
13
  uint256 public constant ALPHA_X =
11
14
  <%=vk_alpha_1[0]%>;
12
15
  uint256 public constant ALPHA_Y =
@@ -42,75 +45,66 @@ contract <%=verifier_id%> {
42
45
  <%=IC[i][1]%>;
43
46
  <% } -%>
44
47
 
45
- /// @dev Memory data
46
- uint16 public constant P_VK = 0;
47
- uint16 public constant P_PAIRING = 128;
48
- uint16 public constant P_LAST_MEM = 896;
48
+ /// @dev memory pointer sizes
49
+ uint16 public constant P_PUBLIC_SIGNALS_ACCUMULATOR_SIZE = 128;
50
+ uint16 public constant P_TOTAL_SIZE = 896;
49
51
 
50
52
  function verifyProof(
51
- uint256[2] calldata pA_,
52
- uint256[2][2] calldata pB_,
53
- uint256[2] calldata pC_,
54
- uint256[<%=IC.length-1%>] calldata pubSignals_
55
- ) public view returns (bool) {
53
+ uint256[2] memory pointA_,
54
+ uint256[2][2] memory pointB_,
55
+ uint256[2] memory pointC_,
56
+ uint256[<%=IC.length-1%>] memory publicSignals_
57
+ ) public view returns (bool verified_) {
56
58
  assembly {
57
- function checkField(v) {
58
- if iszero(lt(v, BASE_FIELD_SIZE)) {
59
- mstore(0, 0)
60
- return(0, 0x20)
61
- }
59
+ function checkField(signal_) -> res_ {
60
+ res_ := lt(signal_, BASE_FIELD_SIZE)
62
61
  }
63
62
 
64
- /// @dev G1 function to multiply a G1 value(x,y) to value in an address
65
- function g1MulAccC(pR, x, y, s) {
66
- let success
67
- let mIn := mload(0x40)
63
+ function g1MulAdd(pR_, x_, y_, s_) -> res_ {
64
+ let pointer_ := mload(64) // free pointer
68
65
 
69
- mstore(mIn, x)
70
- mstore(add(mIn, 32), y)
71
- mstore(add(mIn, 64), s)
66
+ mstore(pointer_, x_)
67
+ mstore(add(pointer_, 32), y_)
68
+ mstore(add(pointer_, 64), s_)
72
69
 
73
- success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)
70
+ res_ := staticcall(sub(gas(), 2000), 7, pointer_, 96, pointer_, 64) // ecMul
71
+ res_ := and(res_, gt(returndatasize(), 0)) // check that multiplication succeeded
74
72
 
75
- if iszero(success) {
76
- mstore(0, 0)
77
- return(0, 0x20)
73
+ if iszero(res_) {
74
+ leave
78
75
  }
79
76
 
80
- mstore(add(mIn, 64), mload(pR))
81
- mstore(add(mIn, 96), mload(add(pR, 32)))
77
+ mstore(add(pointer_, 64), mload(pR_))
78
+ mstore(add(pointer_, 96), mload(add(pR_, 32)))
82
79
 
83
- success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)
84
-
85
- if iszero(success) {
86
- mstore(0, 0)
87
- return(0, 0x20)
88
- }
80
+ res_ := staticcall(sub(gas(), 2000), 6, pointer_, 128, pR_, 64) // ecAdd
81
+ res_ := and(res_, gt(returndatasize(), 0)) // check that addition succeeded
89
82
  }
90
83
 
91
- function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {
92
- let pPairing_ := add(pMem, P_PAIRING)
93
- let pVk_ := add(pMem, P_VK)
84
+ function checkPairing(pA_, pB_, pC_, pubSignals_, pointer_) -> res_ {
85
+ let pPairing_ := add(pointer_, P_PUBLIC_SIGNALS_ACCUMULATOR_SIZE)
94
86
 
95
- mstore(pVk_, IC0_X)
96
- mstore(add(pVk_, 32), IC0_Y)
87
+ mstore(pointer_, IC0_X)
88
+ mstore(add(pointer_, 32), IC0_Y)
97
89
 
98
- /// @dev Compute the linear combination vk_x
99
- <% for (let i = 1; i <= nPublic; i++) { %>g1MulAccC(pVk_, IC<%=i%>_X, IC<%=i%>_Y, calldataload(add(pubSignals, <%=(i-1)*32%>)))
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%>)))) {
92
+ leave
93
+ }
100
94
  <% } -%>
101
95
 
102
96
  /// @dev -A
103
- mstore(pPairing_, calldataload(pA))
97
+ mstore(pPairing_, mload(pA_))
104
98
  mstore(
105
99
  add(pPairing_, 32),
106
- mod(sub(BASE_FIELD_SIZE, calldataload(add(pA, 32))), BASE_FIELD_SIZE)
100
+ mod(sub(BASE_FIELD_SIZE, mload(add(pA_, 32))), BASE_FIELD_SIZE)
107
101
  )
108
102
 
109
103
  /// @dev B
110
- mstore(add(pPairing_, 64), calldataload(pB))
111
- mstore(add(pPairing_, 96), calldataload(add(pB, 32)))
112
- mstore(add(pPairing_, 128), calldataload(add(pB, 64)))
113
- mstore(add(pPairing_, 160), calldataload(add(pB, 96)))
104
+ mstore(add(pPairing_, 64), mload(mload(pB_)))
105
+ mstore(add(pPairing_, 96), mload(add(mload(pB_), 32)))
106
+ mstore(add(pPairing_, 128), mload(mload(add(pB_, 32))))
107
+ mstore(add(pPairing_, 160), mload(add(mload(add(pB_, 32)), 32)))
114
108
 
115
109
  /// @dev alpha1
116
110
  mstore(add(pPairing_, 192), ALPHA_X)
@@ -122,9 +116,9 @@ contract <%=verifier_id%> {
122
116
  mstore(add(pPairing_, 320), BETA_Y1)
123
117
  mstore(add(pPairing_, 352), BETA_Y2)
124
118
 
125
- /// @dev vk_x
126
- mstore(add(pPairing_, 384), mload(add(pMem, P_VK)))
127
- mstore(add(pPairing_, 416), mload(add(pMem, add(P_VK, 32))))
119
+ /// @dev public signals
120
+ mstore(add(pPairing_, 384), mload(pointer_))
121
+ mstore(add(pPairing_, 416), mload(add(pointer_, 32)))
128
122
 
129
123
  /// @dev gamma2
130
124
  mstore(add(pPairing_, 448), GAMMA_X1)
@@ -133,8 +127,8 @@ contract <%=verifier_id%> {
133
127
  mstore(add(pPairing_, 544), GAMMA_Y2)
134
128
 
135
129
  /// @dev C
136
- mstore(add(pPairing_, 576), calldataload(pC))
137
- mstore(add(pPairing_, 608), calldataload(add(pC, 32)))
130
+ mstore(add(pPairing_, 576), mload(pC_))
131
+ mstore(add(pPairing_, 608), mload(add(pC_, 32)))
138
132
 
139
133
  /// @dev delta2
140
134
  mstore(add(pPairing_, 640), DELTA_X1)
@@ -142,23 +136,22 @@ contract <%=verifier_id%> {
142
136
  mstore(add(pPairing_, 704), DELTA_Y1)
143
137
  mstore(add(pPairing_, 736), DELTA_Y2)
144
138
 
145
- let success_ := staticcall(sub(gas(), 2000), 8, pPairing_, 768, pPairing_, 0x20)
146
-
147
- isOk := and(success_, mload(pPairing_))
139
+ res_ := staticcall(sub(gas(), 2000), 8, pPairing_, 768, pPairing_, 32) // ecPairing
140
+ res_ := and(res_, mload(pPairing_)) // check that pairing succeeded
148
141
  }
149
142
 
150
- let pMem_ := mload(0x40)
151
- mstore(0x40, add(pMem_, P_LAST_MEM))
143
+ let pointer_ := mload(64) // free pointer
144
+ mstore(64, add(pointer_, P_TOTAL_SIZE))
152
145
 
153
- /// @dev Validate that all evaluations F
154
- <% for (let i = 0; i < IC.length; i++) { %>checkField(calldataload(add(pubSignals_, <%=i*32%>)))
146
+ /// @dev check that all public signals are in F
147
+ verified_ := 1
148
+ <% for (let i = 0; i < IC.length; i++) { %>verified_ := and(verified_, checkField(mload(add(publicSignals_, <%=i*32%>))))
155
149
  <% } -%>
156
150
 
157
- /// @dev Validate all evaluations
158
- let isValid := checkPairing(pA_, pB_, pC_, pubSignals_, pMem_)
159
-
160
- mstore(0, isValid)
161
- return(0, 0x20)
151
+ /// @dev check pairings
152
+ if not(iszero(verified_)) {
153
+ verified_ := checkPairing(pointA_, pointB_, pointC_, publicSignals_, pointer_)
154
+ }
162
155
  }
163
156
  }
164
157
  }
@@ -14,7 +14,7 @@ export type Calldata = [
14
14
  [NumericString, NumericString],
15
15
  [[NumericString, NumericString], [NumericString, NumericString]],
16
16
  [NumericString, NumericString],
17
- [NumericString],
17
+ PublicSignals,
18
18
  ];
19
19
 
20
20
  export type ProofStruct = {
@@ -28,7 +28,7 @@ export type InputLike = NumberLike | ArrayLike;
28
28
 
29
29
  export type Inputs = Record<string, InputLike>;
30
30
 
31
- export type ArtifactsFileType = "r1cs" | "zkey" | "vkey" | "sym" | "json" | "wasm" | "wtns";
31
+ export type ArtifactsFileType = "r1cs" | "zkey" | "vkey" | "sym" | "json" | "wasm";
32
32
  export type VerifierTemplateType = "groth16";
33
33
 
34
34
  export type CircuitZKitConfig = {