@solarity/zkit 0.2.5 → 0.2.6

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 CHANGED
@@ -6,7 +6,7 @@
6
6
  **A zero knowledge kit that helps you interact with Circom circuits.**
7
7
 
8
8
  - Generate and verify ZK proofs with a single line of code.
9
- - Render optimized Solidity verifiers.
9
+ - Render optimized Solidity | Vyper verifiers.
10
10
  - Build and work with ZK witnesses.
11
11
 
12
12
  ## Installation
@@ -33,7 +33,7 @@ CircuitZKitConfig = {
33
33
  circuitName: string;
34
34
  circuitArtifactsPath: string;
35
35
  verifierDirPath: string;
36
- templateType?: VerifierTemplateType;
36
+ provingSystem?: VerifierProvingSystem;
37
37
  };
38
38
  ```
39
39
 
@@ -41,23 +41,23 @@ This config contains all the information required to work with the circuit, name
41
41
 
42
42
  - `circuitName` - Name of the circuit file without extension
43
43
  - `circuitArtifactsPath` - Full path to compilation artifacts for the desired circuit
44
- - `verifierDirPath` - Full path to the directory where Solidity verifier file will be generated
45
- - `templateType` - The type of template that will be used to generate the Solidity verifier contract. Right now only `groth16` is supported
44
+ - `verifierDirPath` - Full path to the directory where Solidity | Vyper verifier file will be generated
45
+ - `provingSystem` - The proving system that will be used to generate the verifier contract. Right now only `groth16` is supported
46
46
 
47
47
  #### getTemplate()
48
48
 
49
49
  Static `CircuitZKit` function that returns the contents of a template file by the passed type.
50
50
 
51
51
  ```typescript
52
- const templateContent = CircuitZKit.getTemplate("groth16");
52
+ const templateContent = CircuitZKit.getTemplate("groth16", "sol");
53
53
  ```
54
54
 
55
55
  #### createVerifier()
56
56
 
57
- Creates a Solidity verifier contract on `verifierDirPath` path, which was specified in the config.
57
+ Creates a Solidity | Vyper verifier contract on `verifierDirPath` path, which was specified in the config.
58
58
 
59
59
  ```typescript
60
- await multiplier.createVerifier();
60
+ await multiplier.createVerifier("sol");
61
61
  ```
62
62
 
63
63
  #### calculateWitness()
@@ -89,7 +89,7 @@ const isValidProof = await multiplier.verifyProof(proof);
89
89
 
90
90
  #### generateCalldata()
91
91
 
92
- Generates calldata by proof for the Solidity verifier's `verifyProof()` method.
92
+ Generates calldata by proof for the Solidity | Vyper verifier's `verifyProof()` method.
93
93
 
94
94
  ```typescript
95
95
  /// You can use this calldata to call the verifier contract
@@ -1,4 +1,4 @@
1
- import { ArtifactsFileType, Calldata, CircuitZKitConfig, Signals, ProofStruct, VerifierTemplateType } from "../types/circuit-zkit";
1
+ import { ArtifactsFileType, Calldata, CircuitZKitConfig, Signals, ProofStruct, VerifierProvingSystem, VerifierLanguageType } 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
  */
@@ -6,16 +6,17 @@ export declare class CircuitZKit {
6
6
  private readonly _config;
7
7
  constructor(_config: CircuitZKitConfig);
8
8
  /**
9
- * Returns the Solidity verifier template for the specified proving system.
9
+ * Returns the verifier template for the specified proving system and contract language.
10
10
  *
11
- * @param {VerifierTemplateType} templateType - The template type.
12
- * @returns {string} The Solidity verifier template.
11
+ * @param {VerifierProvingSystem} provingSystem - The template proving system.
12
+ * @param {VerifierLanguageType} fileExtension - The file extension.
13
+ * @returns {string} The verifier template.
13
14
  */
14
- static getTemplate(templateType: VerifierTemplateType): string;
15
+ static getTemplate(provingSystem: VerifierProvingSystem, fileExtension: VerifierLanguageType): string;
15
16
  /**
16
- * Creates a Solidity verifier contract.
17
+ * Creates a verifier contract for the specified contract language.
17
18
  */
18
- createVerifier(): Promise<void>;
19
+ createVerifier(languageExtension: VerifierLanguageType): Promise<void>;
19
20
  /**
20
21
  * Calculates a witness for the given inputs.
21
22
  *
@@ -64,11 +65,11 @@ export declare class CircuitZKit {
64
65
  */
65
66
  getVerifierName(): string;
66
67
  /**
67
- * Returns the type of verifier template that was stored in the config
68
+ * Returns the proving system of verifier template that was stored in the config
68
69
  *
69
- * @returns {VerifierTemplateType} The verifier template type.
70
+ * @returns {VerifierProvingSystem} The verifier proving system.
70
71
  */
71
- getTemplateType(): VerifierTemplateType;
72
+ getProvingSystem(): VerifierProvingSystem;
72
73
  /**
73
74
  * Returns the path to the file of the given type inside artifacts directory. Throws an error if the file doesn't exist.
74
75
  *
@@ -1 +1 @@
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"}
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,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAEvD;;;;;;OAMG;WACW,WAAW,CAAC,aAAa,EAAE,qBAAqB,EAAE,aAAa,EAAE,oBAAoB,GAAG,MAAM;IAS5G;;OAEG;IACU,cAAc,CAAC,iBAAiB,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBnF;;;;;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,gBAAgB,IAAI,qBAAqB;IAIhD;;;;;OAKG;IACI,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM;IAUpE;;;;;OAKG;IACI,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM;CAgCjE"}
@@ -41,26 +41,27 @@ class CircuitZKit {
41
41
  this._config = _config;
42
42
  }
43
43
  /**
44
- * Returns the Solidity verifier template for the specified proving system.
44
+ * Returns the verifier template for the specified proving system and contract language.
45
45
  *
46
- * @param {VerifierTemplateType} templateType - The template type.
47
- * @returns {string} The Solidity verifier template.
46
+ * @param {VerifierProvingSystem} provingSystem - The template proving system.
47
+ * @param {VerifierLanguageType} fileExtension - The file extension.
48
+ * @returns {string} The verifier template.
48
49
  */
49
- static getTemplate(templateType) {
50
- switch (templateType) {
50
+ static getTemplate(provingSystem, fileExtension) {
51
+ switch (provingSystem) {
51
52
  case "groth16":
52
- return fs_1.default.readFileSync(path_1.default.join(__dirname, "templates", "verifier_groth16.sol.ejs"), "utf8");
53
+ return fs_1.default.readFileSync(path_1.default.join(__dirname, "templates", `verifier_groth16.${fileExtension}.ejs`), "utf8");
53
54
  default:
54
- throw new Error(`Ambiguous template type: ${templateType}.`);
55
+ throw new Error(`Ambiguous proving system: ${provingSystem}.`);
55
56
  }
56
57
  }
57
58
  /**
58
- * Creates a Solidity verifier contract.
59
+ * Creates a verifier contract for the specified contract language.
59
60
  */
60
- async createVerifier() {
61
+ async createVerifier(languageExtension) {
61
62
  const vKeyFilePath = this.mustGetArtifactsFilePath("vkey");
62
- const verifierFilePath = path_1.default.join(this._config.verifierDirPath, `${this.getVerifierName()}.sol`);
63
- const verifierTemplate = CircuitZKit.getTemplate(this.getTemplateType());
63
+ const verifierFilePath = path_1.default.join(this._config.verifierDirPath, `${this.getVerifierName()}.${languageExtension}`);
64
+ const verifierTemplate = CircuitZKit.getTemplate(this.getProvingSystem(), languageExtension);
64
65
  if (!fs_1.default.existsSync(this._config.verifierDirPath)) {
65
66
  fs_1.default.mkdirSync(this._config.verifierDirPath, { recursive: true });
66
67
  }
@@ -141,12 +142,12 @@ class CircuitZKit {
141
142
  return `${this._config.circuitName}Verifier`;
142
143
  }
143
144
  /**
144
- * Returns the type of verifier template that was stored in the config
145
+ * Returns the proving system of verifier template that was stored in the config
145
146
  *
146
- * @returns {VerifierTemplateType} The verifier template type.
147
+ * @returns {VerifierProvingSystem} The verifier proving system.
147
148
  */
148
- getTemplateType() {
149
- return this._config.templateType ?? "groth16";
149
+ getProvingSystem() {
150
+ return this._config.provingSystem ?? "groth16";
150
151
  }
151
152
  /**
152
153
  * Returns the path to the file of the given type inside artifacts directory. Throws an error if the file doesn't exist.
@@ -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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"}
@@ -0,0 +1,118 @@
1
+ # pragma version ~=0.4.0
2
+
3
+ # AUTOGENERATED FILE BY HARDHAT-ZKIT. DO NOT EDIT.
4
+
5
+ # @dev base field size
6
+ BASE_FIELD_SIZE: constant(uint256) = 21888242871839275222246405745257275088696311157297823662689037894645226208583
7
+
8
+ # @dev verification key data
9
+ ALPHA_X: constant(uint256) = <%=vk_alpha_1[0]%>
10
+ ALPHA_Y: constant(uint256) = <%=vk_alpha_1[1]%>
11
+ BETA_X1: constant(uint256) = <%=vk_beta_2[0][1]%>
12
+ BETA_X2: constant(uint256) = <%=vk_beta_2[0][0]%>
13
+ BETA_Y1: constant(uint256) = <%=vk_beta_2[1][1]%>
14
+ BETA_Y2: constant(uint256) = <%=vk_beta_2[1][0]%>
15
+ GAMMA_X1: constant(uint256) = <%=vk_gamma_2[0][1]%>
16
+ GAMMA_X2: constant(uint256) = <%=vk_gamma_2[0][0]%>
17
+ GAMMA_Y1: constant(uint256) = <%=vk_gamma_2[1][1]%>
18
+ GAMMA_Y2: constant(uint256) = <%=vk_gamma_2[1][0]%>
19
+ DELTA_X1: constant(uint256) = <%=vk_delta_2[0][1]%>
20
+ DELTA_X2: constant(uint256) = <%=vk_delta_2[0][0]%>
21
+ DELTA_Y1: constant(uint256) = <%=vk_delta_2[1][1]%>
22
+ DELTA_Y2: constant(uint256) = <%=vk_delta_2[1][0] -%>
23
+
24
+
25
+ IC: constant(uint256[<%=IC.length%>][2]) = [
26
+ <% IC.forEach(function(innerArray, index) { %> [
27
+ <%= innerArray[0] %>,
28
+ <%= innerArray[1] %>
29
+ ]<%= index < IC.length - 1 ? ',' : '' %>
30
+ <% }); %>]
31
+
32
+ EC_ADD_PRECOMPILED_ADDRESS: constant(address) = 0x0000000000000000000000000000000000000006
33
+ EC_MUL_PRECOMPILED_ADDRESS: constant(address) = 0x0000000000000000000000000000000000000007
34
+ EC_PAIRING_PRECOMPILED_ADDRESS: constant(address) = 0x0000000000000000000000000000000000000008
35
+
36
+
37
+ @view
38
+ @external
39
+ def verifyProof(pointA: uint256[2], pointB: uint256[2][2], pointC: uint256[2], publicSignals: uint256[<%=IC.length-1%>]) -> bool:
40
+ # @dev check that all public signals are in F
41
+ for signal: uint256 in publicSignals:
42
+ if signal >= BASE_FIELD_SIZE:
43
+ return False
44
+
45
+ return self._checkPairing(pointA, pointB, pointC, publicSignals)
46
+
47
+
48
+ @view
49
+ @internal
50
+ def _g1MulAdd(pR: uint256[2], pP: uint256[2], s: uint256) -> (bool, uint256[2]):
51
+ success: bool = True
52
+ response: Bytes[64] = b""
53
+ success, response = raw_call(
54
+ EC_MUL_PRECOMPILED_ADDRESS,
55
+ abi_encode(pP, s),
56
+ max_outsize=64,
57
+ is_static_call=True,
58
+ revert_on_failure=False
59
+ )
60
+
61
+ if not success or len(response) != 64:
62
+ return (False, [0, 0])
63
+
64
+ x: uint256 = convert(slice(response, 0, 32), uint256)
65
+ y: uint256 = convert(slice(response, 32, 32), uint256)
66
+ pS: uint256[2] = [x, y]
67
+
68
+ success, response = raw_call(
69
+ EC_ADD_PRECOMPILED_ADDRESS,
70
+ abi_encode(pR, pS),
71
+ max_outsize=64,
72
+ is_static_call=True,
73
+ revert_on_failure=False
74
+ )
75
+
76
+ if not success or len(response) != 64:
77
+ return (False, [0, 0])
78
+
79
+ x = convert(slice(response, 0, 32), uint256)
80
+ y = convert(slice(response, 32, 32), uint256)
81
+
82
+ return (True, [x, y])
83
+
84
+
85
+ @view
86
+ @internal
87
+ def _checkPairing(pA: uint256[2], pB: uint256[2][2], pC: uint256[2], pubSignals: uint256[<%=IC.length-1%>]) -> bool:
88
+ success: bool = True
89
+ mulAddResult: uint256[2] = IC[0]
90
+
91
+ # @dev compute the linear combination of public signals
92
+ for i: uint256 in range(1, <%=IC.length%>):
93
+ success, mulAddResult = self._g1MulAdd(mulAddResult, IC[i], pubSignals[i - 1])
94
+ if not success:
95
+ return False
96
+
97
+ response: Bytes[32] = b""
98
+ success, response = raw_call(
99
+ EC_PAIRING_PRECOMPILED_ADDRESS,
100
+ abi_encode(
101
+ pA[0], (BASE_FIELD_SIZE - pA[1]) % BASE_FIELD_SIZE,
102
+ pB,
103
+ ALPHA_X, ALPHA_Y,
104
+ BETA_X1, BETA_X2, BETA_Y1, BETA_Y2,
105
+ mulAddResult,
106
+ GAMMA_X1, GAMMA_X2, GAMMA_Y1, GAMMA_Y2,
107
+ pC,
108
+ DELTA_X1, DELTA_X2, DELTA_Y1, DELTA_Y2
109
+ ),
110
+ max_outsize=32,
111
+ is_static_call=True,
112
+ revert_on_failure=False
113
+ )
114
+
115
+ if not success:
116
+ return False
117
+
118
+ return convert(response, bool)
@@ -31,11 +31,12 @@ export type ArrayLike = NumberLike[] | ArrayLike[];
31
31
  export type Signal = NumberLike | ArrayLike;
32
32
  export type Signals = Record<string, Signal>;
33
33
  export type ArtifactsFileType = "r1cs" | "zkey" | "vkey" | "sym" | "json" | "wasm";
34
- export type VerifierTemplateType = "groth16";
34
+ export type VerifierProvingSystem = "groth16";
35
+ export type VerifierLanguageType = "sol" | "vy";
35
36
  export type CircuitZKitConfig = {
36
37
  circuitName: string;
37
38
  circuitArtifactsPath: string;
38
39
  verifierDirPath: string;
39
- templateType?: VerifierTemplateType;
40
+ provingSystem?: VerifierProvingSystem;
40
41
  };
41
42
  //# sourceMappingURL=circuit-zkit.d.ts.map
@@ -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,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"}
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,qBAAqB,GAAG,SAAS,CAAC;AAC9C,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solarity/zkit",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "license": "MIT",
5
5
  "author": "Distributed Lab",
6
6
  "readme": "README.md",
@@ -43,18 +43,19 @@
43
43
  },
44
44
  "devDependencies": {
45
45
  "@nomicfoundation/hardhat-ethers": "3.0.5",
46
- "@types/ejs": "^3.1.5",
47
- "@types/snarkjs": "^0.7.8",
46
+ "@nomiclabs/hardhat-vyper": "^3.0.7",
48
47
  "@types/chai": "^4.3.12",
49
48
  "@types/chai-as-promised": "^7.1.8",
49
+ "@types/ejs": "^3.1.5",
50
50
  "@types/mocha": "^10.0.6",
51
+ "@types/snarkjs": "^0.7.8",
51
52
  "chai": "^4.4.1",
52
53
  "chai-as-promised": "^7.1.1",
53
- "mocha": "^10.3.0",
54
- "nyc": "^15.1.0",
55
54
  "ethers": "6.11.1",
56
- "hardhat": "2.20.1",
55
+ "hardhat": "2.22.7",
57
56
  "husky": "^9.0.11",
57
+ "mocha": "^10.3.0",
58
+ "nyc": "^15.1.0",
58
59
  "prettier": "^3.2.5",
59
60
  "ts-node": "^10.9.2",
60
61
  "typescript": "^5.4.5"
@@ -10,7 +10,8 @@ import {
10
10
  CircuitZKitConfig,
11
11
  Signals,
12
12
  ProofStruct,
13
- VerifierTemplateType,
13
+ VerifierProvingSystem,
14
+ VerifierLanguageType,
14
15
  } from "../types/circuit-zkit";
15
16
 
16
17
  /**
@@ -20,28 +21,29 @@ export class CircuitZKit {
20
21
  constructor(private readonly _config: CircuitZKitConfig) {}
21
22
 
22
23
  /**
23
- * Returns the Solidity verifier template for the specified proving system.
24
+ * Returns the verifier template for the specified proving system and contract language.
24
25
  *
25
- * @param {VerifierTemplateType} templateType - The template type.
26
- * @returns {string} The Solidity verifier template.
26
+ * @param {VerifierProvingSystem} provingSystem - The template proving system.
27
+ * @param {VerifierLanguageType} fileExtension - The file extension.
28
+ * @returns {string} The verifier template.
27
29
  */
28
- public static getTemplate(templateType: VerifierTemplateType): string {
29
- switch (templateType) {
30
+ public static getTemplate(provingSystem: VerifierProvingSystem, fileExtension: VerifierLanguageType): string {
31
+ switch (provingSystem) {
30
32
  case "groth16":
31
- return fs.readFileSync(path.join(__dirname, "templates", "verifier_groth16.sol.ejs"), "utf8");
33
+ return fs.readFileSync(path.join(__dirname, "templates", `verifier_groth16.${fileExtension}.ejs`), "utf8");
32
34
  default:
33
- throw new Error(`Ambiguous template type: ${templateType}.`);
35
+ throw new Error(`Ambiguous proving system: ${provingSystem}.`);
34
36
  }
35
37
  }
36
38
 
37
39
  /**
38
- * Creates a Solidity verifier contract.
40
+ * Creates a verifier contract for the specified contract language.
39
41
  */
40
- public async createVerifier(): Promise<void> {
42
+ public async createVerifier(languageExtension: VerifierLanguageType): Promise<void> {
41
43
  const vKeyFilePath: string = this.mustGetArtifactsFilePath("vkey");
42
- const verifierFilePath = path.join(this._config.verifierDirPath, `${this.getVerifierName()}.sol`);
44
+ const verifierFilePath = path.join(this._config.verifierDirPath, `${this.getVerifierName()}.${languageExtension}`);
43
45
 
44
- const verifierTemplate: string = CircuitZKit.getTemplate(this.getTemplateType());
46
+ const verifierTemplate: string = CircuitZKit.getTemplate(this.getProvingSystem(), languageExtension);
45
47
 
46
48
  if (!fs.existsSync(this._config.verifierDirPath)) {
47
49
  fs.mkdirSync(this._config.verifierDirPath, { recursive: true });
@@ -141,12 +143,12 @@ export class CircuitZKit {
141
143
  }
142
144
 
143
145
  /**
144
- * Returns the type of verifier template that was stored in the config
146
+ * Returns the proving system of verifier template that was stored in the config
145
147
  *
146
- * @returns {VerifierTemplateType} The verifier template type.
148
+ * @returns {VerifierProvingSystem} The verifier proving system.
147
149
  */
148
- public getTemplateType(): VerifierTemplateType {
149
- return this._config.templateType ?? "groth16";
150
+ public getProvingSystem(): VerifierProvingSystem {
151
+ return this._config.provingSystem ?? "groth16";
150
152
  }
151
153
 
152
154
  /**
@@ -0,0 +1,118 @@
1
+ # pragma version ~=0.4.0
2
+
3
+ # AUTOGENERATED FILE BY HARDHAT-ZKIT. DO NOT EDIT.
4
+
5
+ # @dev base field size
6
+ BASE_FIELD_SIZE: constant(uint256) = 21888242871839275222246405745257275088696311157297823662689037894645226208583
7
+
8
+ # @dev verification key data
9
+ ALPHA_X: constant(uint256) = <%=vk_alpha_1[0]%>
10
+ ALPHA_Y: constant(uint256) = <%=vk_alpha_1[1]%>
11
+ BETA_X1: constant(uint256) = <%=vk_beta_2[0][1]%>
12
+ BETA_X2: constant(uint256) = <%=vk_beta_2[0][0]%>
13
+ BETA_Y1: constant(uint256) = <%=vk_beta_2[1][1]%>
14
+ BETA_Y2: constant(uint256) = <%=vk_beta_2[1][0]%>
15
+ GAMMA_X1: constant(uint256) = <%=vk_gamma_2[0][1]%>
16
+ GAMMA_X2: constant(uint256) = <%=vk_gamma_2[0][0]%>
17
+ GAMMA_Y1: constant(uint256) = <%=vk_gamma_2[1][1]%>
18
+ GAMMA_Y2: constant(uint256) = <%=vk_gamma_2[1][0]%>
19
+ DELTA_X1: constant(uint256) = <%=vk_delta_2[0][1]%>
20
+ DELTA_X2: constant(uint256) = <%=vk_delta_2[0][0]%>
21
+ DELTA_Y1: constant(uint256) = <%=vk_delta_2[1][1]%>
22
+ DELTA_Y2: constant(uint256) = <%=vk_delta_2[1][0] -%>
23
+
24
+
25
+ IC: constant(uint256[<%=IC.length%>][2]) = [
26
+ <% IC.forEach(function(innerArray, index) { %> [
27
+ <%= innerArray[0] %>,
28
+ <%= innerArray[1] %>
29
+ ]<%= index < IC.length - 1 ? ',' : '' %>
30
+ <% }); %>]
31
+
32
+ EC_ADD_PRECOMPILED_ADDRESS: constant(address) = 0x0000000000000000000000000000000000000006
33
+ EC_MUL_PRECOMPILED_ADDRESS: constant(address) = 0x0000000000000000000000000000000000000007
34
+ EC_PAIRING_PRECOMPILED_ADDRESS: constant(address) = 0x0000000000000000000000000000000000000008
35
+
36
+
37
+ @view
38
+ @external
39
+ def verifyProof(pointA: uint256[2], pointB: uint256[2][2], pointC: uint256[2], publicSignals: uint256[<%=IC.length-1%>]) -> bool:
40
+ # @dev check that all public signals are in F
41
+ for signal: uint256 in publicSignals:
42
+ if signal >= BASE_FIELD_SIZE:
43
+ return False
44
+
45
+ return self._checkPairing(pointA, pointB, pointC, publicSignals)
46
+
47
+
48
+ @view
49
+ @internal
50
+ def _g1MulAdd(pR: uint256[2], pP: uint256[2], s: uint256) -> (bool, uint256[2]):
51
+ success: bool = True
52
+ response: Bytes[64] = b""
53
+ success, response = raw_call(
54
+ EC_MUL_PRECOMPILED_ADDRESS,
55
+ abi_encode(pP, s),
56
+ max_outsize=64,
57
+ is_static_call=True,
58
+ revert_on_failure=False
59
+ )
60
+
61
+ if not success or len(response) != 64:
62
+ return (False, [0, 0])
63
+
64
+ x: uint256 = convert(slice(response, 0, 32), uint256)
65
+ y: uint256 = convert(slice(response, 32, 32), uint256)
66
+ pS: uint256[2] = [x, y]
67
+
68
+ success, response = raw_call(
69
+ EC_ADD_PRECOMPILED_ADDRESS,
70
+ abi_encode(pR, pS),
71
+ max_outsize=64,
72
+ is_static_call=True,
73
+ revert_on_failure=False
74
+ )
75
+
76
+ if not success or len(response) != 64:
77
+ return (False, [0, 0])
78
+
79
+ x = convert(slice(response, 0, 32), uint256)
80
+ y = convert(slice(response, 32, 32), uint256)
81
+
82
+ return (True, [x, y])
83
+
84
+
85
+ @view
86
+ @internal
87
+ def _checkPairing(pA: uint256[2], pB: uint256[2][2], pC: uint256[2], pubSignals: uint256[<%=IC.length-1%>]) -> bool:
88
+ success: bool = True
89
+ mulAddResult: uint256[2] = IC[0]
90
+
91
+ # @dev compute the linear combination of public signals
92
+ for i: uint256 in range(1, <%=IC.length%>):
93
+ success, mulAddResult = self._g1MulAdd(mulAddResult, IC[i], pubSignals[i - 1])
94
+ if not success:
95
+ return False
96
+
97
+ response: Bytes[32] = b""
98
+ success, response = raw_call(
99
+ EC_PAIRING_PRECOMPILED_ADDRESS,
100
+ abi_encode(
101
+ pA[0], (BASE_FIELD_SIZE - pA[1]) % BASE_FIELD_SIZE,
102
+ pB,
103
+ ALPHA_X, ALPHA_Y,
104
+ BETA_X1, BETA_X2, BETA_Y1, BETA_Y2,
105
+ mulAddResult,
106
+ GAMMA_X1, GAMMA_X2, GAMMA_Y1, GAMMA_Y2,
107
+ pC,
108
+ DELTA_X1, DELTA_X2, DELTA_Y1, DELTA_Y2
109
+ ),
110
+ max_outsize=32,
111
+ is_static_call=True,
112
+ revert_on_failure=False
113
+ )
114
+
115
+ if not success:
116
+ return False
117
+
118
+ return convert(response, bool)
@@ -28,11 +28,12 @@ export type Signal = NumberLike | ArrayLike;
28
28
  export type Signals = Record<string, Signal>;
29
29
 
30
30
  export type ArtifactsFileType = "r1cs" | "zkey" | "vkey" | "sym" | "json" | "wasm";
31
- export type VerifierTemplateType = "groth16";
31
+ export type VerifierProvingSystem = "groth16";
32
+ export type VerifierLanguageType = "sol" | "vy";
32
33
 
33
34
  export type CircuitZKitConfig = {
34
35
  circuitName: string;
35
36
  circuitArtifactsPath: string;
36
37
  verifierDirPath: string;
37
- templateType?: VerifierTemplateType;
38
+ provingSystem?: VerifierProvingSystem;
38
39
  };