diff --git a/src/circuit.ts b/src/circuit.ts index c234d35..6af240e 100644 --- a/src/circuit.ts +++ b/src/circuit.ts @@ -2,6 +2,7 @@ import * as path from "path"; import log from "log" const {wasm: wasmTester} = require("./vendors/circom_tester") +const {c: cTester} = require("./vendors/circom_tester") import {CircuitConfig, Networks, Witness, ZK_PROOF} from "./types"; import {genGrothZKey, genPlonkZKey, genVerificationKey} from "./utils/zKey"; @@ -30,11 +31,19 @@ export class Circuit { fs.mkdirSync(this._circuitConfig.outputDir, {recursive:true}) } - this._wasmTester = await wasmTester(this._circuitConfig.inputFilePath, { - output: this._circuitConfig.outputDir, - ...this._circuitConfig.compileOptions - }) - + if(this._circuitConfig.compilationMode =='wasm'){ + this._wasmTester = await wasmTester(this._circuitConfig.inputFilePath, { + output: this._circuitConfig.outputDir, + ...this._circuitConfig.compileOptions + }) + } else if (this._circuitConfig.compilationMode =='c'){ + this._wasmTester = await cTester(this._circuitConfig.inputFilePath, { + output: this._circuitConfig.outputDir, + ...this._circuitConfig.compileOptions + }) + } + + } async compile() { diff --git a/src/configParser.ts b/src/configParser.ts index 37e7769..59ef8a4 100644 --- a/src/configParser.ts +++ b/src/configParser.ts @@ -144,6 +144,7 @@ export class ConfigParser { zKeyPath: path.join(cktOutputDir, "circuit_final.zkey"), // DO NOT change the names vKeyPath: path.join(cktOutputDir, "verification_key.json"), // DO NOT change the names r1csPath: path.join(cktOutputDir, `${cktName}.r1cs`), + compilationMode: c.compilationMode? c.compilationMode : "wasm", compileOptions: { include: [], snarkType: c.proofType ? c.proofType : "groth16", diff --git a/src/types.ts b/src/types.ts index 4993e13..f71f31d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -65,6 +65,7 @@ export type CircuitConfig = { zKeyPath: string; vKeyPath: string; compileOptions: CompileOptions; + compilationMode: CompilationMode; r1csPath:string } diff --git a/src/vendors/circom_tester/c/tester.js b/src/vendors/circom_tester/c/tester.js index 048f7cb..a1b421b 100644 --- a/src/vendors/circom_tester/c/tester.js +++ b/src/vendors/circom_tester/c/tester.js @@ -55,7 +55,7 @@ async function c_tester(circomInput, _options) { assert(false,"Cannot set recompile to false if the "+jsPath+" folder does not exist"); } } - return new CTester(options.output, baseName, run); + return new CTester(options.output, baseName); } async function compile (baseName, fileName, options) { @@ -76,9 +76,9 @@ async function compile (baseName, fileName, options) { if (options.O === 0) flags += "--O0 "; if (options.O === 1) flags += "--O1 "; if (options.verbose) flags += "--verbose "; - + let b; try { - let b = await exec("circom " + flags + fileName); + b = await exec("circom " + flags + fileName); if (options.verbose) { console.log(b.stdout); } @@ -95,10 +95,9 @@ async function compile (baseName, fileName, options) { class CTester { - constructor(dir, baseName, witnessCalculator) { + constructor(dir, baseName) { this.dir=dir; this.baseName = baseName; - this.witnessCalculator = witnessCalculator; } async release() { diff --git a/tests/circomJS.test.ts b/tests/circomJS.test.ts index 0cdb709..f4256a7 100644 --- a/tests/circomJS.test.ts +++ b/tests/circomJS.test.ts @@ -22,7 +22,7 @@ const jsonConfig = ` "cID": "circ1000constraints", "fileName": "circ1000constraints.circom", "proofType": "plonk", - "compilationMode": "wasm" + "compilationMode": "c" } ] } diff --git a/tests/circuit.test.ts b/tests/circuit.test.ts index ed3b3f2..fa7c10e 100644 --- a/tests/circuit.test.ts +++ b/tests/circuit.test.ts @@ -24,7 +24,7 @@ const jsonConfig = ` "cID": "circ1000constraints", "fileName": "circ1000constraints.circom", "proofType": "plonk", - "compilationMode": "wasm" + "compilationMode": "c" } ] } diff --git a/tests/configParser.test.ts b/tests/configParser.test.ts index b20f94e..ed9c2f1 100644 --- a/tests/configParser.test.ts +++ b/tests/configParser.test.ts @@ -26,7 +26,7 @@ describe("ConfigParser test", () => { "cID": "circ1000constraints", "fileName": "circ1000constraints.circom", "proofType": "groth16", - "compilationMode": "wasm" + "compilationMode": "c" } ] } diff --git a/tests/data/circuit.config.json b/tests/data/circuit.config.json index 6d258db..34e90c0 100644 --- a/tests/data/circuit.config.json +++ b/tests/data/circuit.config.json @@ -16,7 +16,7 @@ "cID": "circ1000constraints", "fileName": "circ1000constraints.circom", "proofType": "plonk", - "compilationMode": "wasm" + "compilationMode": "c" } ] },