diff --git a/apps/circuit-compiler/src/app/components/configurations.tsx b/apps/circuit-compiler/src/app/components/configurations.tsx index 34b5075b69..c42a86cc35 100644 --- a/apps/circuit-compiler/src/app/components/configurations.tsx +++ b/apps/circuit-compiler/src/app/components/configurations.tsx @@ -14,7 +14,7 @@ export function Configurations ({primeValue, setPrimeValue}: ConfigurationsProps placement={"auto"} tooltipId="circuitPrimeLabelTooltip" tooltipClasses="text-nowrap" - tooltipText={{'To choose the prime number to use to generate the circuit. Receives the name of the curve (bn128, bls12381, goldilocks) [default: bn128]'}} + tooltipText={{'To choose the prime number to use to generate the circuit. Receives the name of the curve (bn128, bls12381, goldilocks, grumpkin, pallas, vesta)'}} >
diff --git a/apps/circuit-compiler/src/app/services/circomPluginClient.ts b/apps/circuit-compiler/src/app/services/circomPluginClient.ts index 0eccddb281..86f5bc3e19 100644 --- a/apps/circuit-compiler/src/app/services/circomPluginClient.ts +++ b/apps/circuit-compiler/src/app/services/circomPluginClient.ts @@ -2,14 +2,16 @@ import { PluginClient } from '@remixproject/plugin' import { createClient } from '@remixproject/plugin-webview' import EventManager from 'events' import pathModule from 'path' -import { parse, compile, generate_witness, generate_r1cs, compiler_list } from 'circom_wasm' +import { compiler_list } from 'circom_wasm' +import compilerV216 from 'circom_wasm/v2.1.6' +import compilerV215 from 'circom_wasm/v2.1.5' import { extractNameFromKey, extractParentFromKey } from '@remix-ui/helper' import { CompilationConfig, CompilerReport, ResolverOutput } from '../types' export class CircomPluginClient extends PluginClient { public internalEvents: EventManager private _compilationConfig: CompilationConfig = { - version: "2.1.5", + version: "2.1.6", prime: "bn128" } private lastCompiledCircuitPath: string = '' @@ -38,7 +40,8 @@ export class CircomPluginClient extends PluginClient { fileContent = await this.call('fileManager', 'readFile', path) } this.lastParsedFiles = await this.resolveDependencies(path, fileContent, { [path]: { content: fileContent, parent: null } }) - const parsedOutput = parse(path, this.lastParsedFiles) + const compiler = this._compilationConfig.version === '2.1.5' ? compilerV215 : compilerV216 + const parsedOutput = compiler.parse(path, this.lastParsedFiles) try { const result: CompilerReport[] = JSON.parse(parsedOutput.report()) @@ -122,12 +125,13 @@ export class CircomPluginClient extends PluginClient { if (compilationConfig) { const { prime, version } = compilationConfig - if ((prime !== "bn128") && (prime !== "bls12381") && (prime !== "goldilocks")) throw new Error('Invalid prime value') + if ((prime !== "bn128") && (prime !== "bls12381") && (prime !== "goldilocks") && (prime !== "grumpkin") && (prime !== "pallas") && (prime !== "vesta")) throw new Error('Invalid prime value') if (!compiler_list.versions.includes(version)) throw new Error("Unsupported compiler version") this._compilationConfig.prime = prime this._compilationConfig.version = version } - const circuitApi = compile(path, this.lastParsedFiles, { prime: this._compilationConfig.prime }) + const compiler = this._compilationConfig.version === '2.1.5' ? compilerV215 : compilerV216 + const circuitApi = compiler.compile(path, this.lastParsedFiles, { prime: this._compilationConfig.prime }) const circuitProgram = circuitApi.program() if (circuitProgram.length < 1) { @@ -172,12 +176,13 @@ export class CircomPluginClient extends PluginClient { if (compilationConfig) { const { prime, version } = compilationConfig - if ((prime !== "bn128") && (prime !== "bls12381") && (prime !== "goldilocks")) throw new Error('Invalid prime value') + if ((prime !== "bn128") && (prime !== "bls12381") && (prime !== "goldilocks") && (prime !== "grumpkin") && (prime !== "pallas") && (prime !== "vesta")) throw new Error('Invalid prime value') if (!compiler_list.versions.includes(version)) throw new Error("Unsupported compiler version") this._compilationConfig.prime = prime this._compilationConfig.version = version } - const r1csApi = generate_r1cs(path, this.lastParsedFiles, { prime: this._compilationConfig.prime }) + const compiler = this._compilationConfig.version === '2.1.5' ? compilerV215 : compilerV216 + const r1csApi = compiler.generate_r1cs(path, this.lastParsedFiles, { prime: this._compilationConfig.prime }) const r1csProgram = r1csApi.program() if (r1csProgram.length < 1) { @@ -202,7 +207,8 @@ export class CircomPluginClient extends PluginClient { // @ts-ignore const buffer: any = await this.call('fileManager', 'readFile', wasmPath, { encoding: null }) const dataRead = new Uint8Array(buffer) - const witness = await generate_witness(dataRead, input) + const compiler = this._compilationConfig.version === '2.1.5' ? compilerV215 : compilerV216 + const witness = await compiler.generate_witness(dataRead, input) // @ts-ignore await this.call('fileManager', 'writeFile', wasmPath.replace('.wasm', '.wtn'), witness, true) this.internalEvents.emit('circuit_computing_witness_done') diff --git a/apps/circuit-compiler/src/app/types/index.ts b/apps/circuit-compiler/src/app/types/index.ts index 71e1dbfced..41ca140ae0 100644 --- a/apps/circuit-compiler/src/app/types/index.ts +++ b/apps/circuit-compiler/src/app/types/index.ts @@ -45,7 +45,7 @@ export type CompilationConfig = { version: string } -export type PrimeValue = "bn128" | "bls12381" | "goldilocks" +export type PrimeValue = "bn128" | "bls12381" | "goldilocks" | "grumpkin" | "pallas" | "vesta" export type CompilerFeedbackProps = { feedback: string | CompilerReport[], diff --git a/package.json b/package.json index 3ad91b7184..e1b2053021 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,7 @@ "brace": "^0.8.0", "change-case": "^4.1.1", "chokidar": "^2.1.8", - "circom_wasm": "^0.1.0", + "circom_wasm": "0.2.2-alpha", "color-support": "^1.1.3", "commander": "^9.4.1", "core-js": "^3.6.5", diff --git a/yarn.lock b/yarn.lock index e75886fbe1..0f008633f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10062,10 +10062,10 @@ circom_runtime@0.1.22: dependencies: ffjavascript "0.2.57" -circom_wasm@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/circom_wasm/-/circom_wasm-0.1.0.tgz#dda76c7ae9046ea6f1e1cd3754c017ad753bd5c1" - integrity sha512-F7ihfVGjfSz+01yFXLHjKocQFm8j9KBageqMw5+olFWB6+7CXHLjnUaFuU6u+7T0FsL7+JuP18jdcAVQEXoQgw== +circom_wasm@0.2.2-alpha: + version "0.2.2-alpha" + resolved "https://registry.yarnpkg.com/circom_wasm/-/circom_wasm-0.2.2-alpha.tgz#ab21d63105e46ed9d6a91173208c4b0d06da5124" + integrity sha512-TMmypDJUEZ+VX3TS6CpooK6uVdA/scgv1yQ6UlDr9Asmbhd/If3OUcQbE3bAU0Ao4mKFL9AhExJIyZAEeF+kTQ== circular-json@^0.3.0: version "0.3.3"