diff --git a/apps/circuit-compiler/src/app/components/configurations.tsx b/apps/circuit-compiler/src/app/components/configurations.tsx
index 34b5075b69..a9583c093a 100644
--- a/apps/circuit-compiler/src/app/components/configurations.tsx
+++ b/apps/circuit-compiler/src/app/components/configurations.tsx
@@ -1,8 +1,8 @@
-import { CustomTooltip } from "@remix-ui/helper"
+import { CustomTooltip, RenderIf } from "@remix-ui/helper"
import { FormattedMessage } from "react-intl"
import { ConfigurationsProps, PrimeValue } from "../types"
-export function Configurations ({primeValue, setPrimeValue}: ConfigurationsProps) {
+export function Configurations ({primeValue, setPrimeValue, versionValue}: ConfigurationsProps) {
return (
@@ -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/components/container.tsx b/apps/circuit-compiler/src/app/components/container.tsx
index d56036e44d..fa7467f69c 100644
--- a/apps/circuit-compiler/src/app/components/container.tsx
+++ b/apps/circuit-compiler/src/app/components/container.tsx
@@ -29,6 +29,7 @@ export function Container () {
}
const handleVersionSelect = (version: string) => {
+ circuitApp.plugin.compilerVersion = version
circuitApp.dispatch({ type: 'SET_COMPILER_VERSION', payload: version })
}
@@ -44,7 +45,8 @@ export function Container () {
}
}
- const handlePrimeChange = (value: string) => {
+ const handlePrimeChange = (value: PrimeValue) => {
+ circuitApp.plugin.compilerPrime = value
circuitApp.dispatch({ type: 'SET_PRIME_VALUE', payload: value as PrimeValue })
}
@@ -75,7 +77,7 @@ export function Container () {
-
+ 0}>
diff --git a/apps/circuit-compiler/src/app/services/circomPluginClient.ts b/apps/circuit-compiler/src/app/services/circomPluginClient.ts
index 0eccddb281..b4c3ecc9ad 100644
--- a/apps/circuit-compiler/src/app/services/circomPluginClient.ts
+++ b/apps/circuit-compiler/src/app/services/circomPluginClient.ts
@@ -2,19 +2,22 @@ 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 * as compilerV216 from 'circom_wasm/v2.1.6'
+import * as compilerV215 from 'circom_wasm/v2.1.5'
import { extractNameFromKey, extractParentFromKey } from '@remix-ui/helper'
-import { CompilationConfig, CompilerReport, ResolverOutput } from '../types'
+import { CompilationConfig, CompilerReport, PrimeValue, 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 = ''
private lastParsedFiles: Record = {}
private lastCompiledFile: string = ''
+ private compiler: typeof compilerV215 | typeof compilerV216 = compilerV216
constructor() {
super()
@@ -32,13 +35,26 @@ export class CircomPluginClient extends PluginClient {
this.internalEvents.emit('circom_activated')
}
+ set compilerVersion (version: string) {
+ if (!compiler_list.versions.includes(version)) throw new Error("Unsupported compiler version")
+ this._compilationConfig.version = version
+ if (version === '2.1.5') this.compiler = compilerV215
+ else if (version === '2.1.6') this.compiler = compilerV216
+ }
+
+ set compilerPrime (prime: PrimeValue) {
+ if ((prime !== "bn128") && (prime !== "bls12381") && (prime !== "goldilocks") && (this._compilationConfig.version === '2.1.5')) throw new Error('Invalid prime value')
+ if ((prime !== "bn128") && (prime !== "bls12381") && (prime !== "goldilocks") && (prime !== "grumpkin") && (prime !== "pallas") && (prime !== "vesta") && (this._compilationConfig.version === '2.1.6')) throw new Error('Invalid prime value')
+ this._compilationConfig.prime = prime
+ }
+
async parse(path: string, fileContent?: string): Promise<[CompilerReport[], Record]> {
if (!fileContent) {
// @ts-ignore
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 parsedOutput = this.compiler.parse(path, this.lastParsedFiles)
try {
const result: CompilerReport[] = JSON.parse(parsedOutput.report())
@@ -122,12 +138,10 @@ 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 (!compiler_list.versions.includes(version)) throw new Error("Unsupported compiler version")
- this._compilationConfig.prime = prime
- this._compilationConfig.version = version
+ this.compilerVersion = version
+ this.compilerPrime = prime
}
- const circuitApi = compile(path, this.lastParsedFiles, { prime: this._compilationConfig.prime })
+ const circuitApi = this.compiler.compile(path, this.lastParsedFiles, { prime: this._compilationConfig.prime })
const circuitProgram = circuitApi.program()
if (circuitProgram.length < 1) {
@@ -172,12 +186,10 @@ 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 (!compiler_list.versions.includes(version)) throw new Error("Unsupported compiler version")
- this._compilationConfig.prime = prime
- this._compilationConfig.version = version
+ this.compilerVersion = version
+ this.compilerPrime = prime
}
- const r1csApi = generate_r1cs(path, this.lastParsedFiles, { prime: this._compilationConfig.prime })
+ const r1csApi = this.compiler.generate_r1cs(path, this.lastParsedFiles, { prime: this._compilationConfig.prime })
const r1csProgram = r1csApi.program()
if (r1csProgram.length < 1) {
@@ -202,7 +214,7 @@ 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 witness = await this.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..3b6f7a57b4 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[],
@@ -76,7 +76,8 @@ export type FeedbackAlertProps = {
export type ConfigurationsProps = {
setPrimeValue: (prime: PrimeValue) => void,
- primeValue: PrimeValue
+ primeValue: PrimeValue,
+ versionValue: string
}
export type CompileOptionsProps = {
diff --git a/apps/remix-ide-e2e/src/tests/circom.test.ts b/apps/remix-ide-e2e/src/tests/circom.test.ts
index 0cad3052f3..6f57533b3e 100644
--- a/apps/remix-ide-e2e/src/tests/circom.test.ts
+++ b/apps/remix-ide-e2e/src/tests/circom.test.ts
@@ -107,7 +107,7 @@ module.exports = {
.waitForElementPresent('[data-id="circuit_feedback"]')
.waitForElementVisible('[data-id="circuit_feedback"]')
.assert.hasClass('[data-id="circuit_feedback"]', 'alert-warning')
- .waitForElementContainsText('[data-id="circuit_feedback"]', 'File circuits/simple.circom does not include pragma version. Assuming pragma version (2, 1, 5)')
+ .waitForElementContainsText('[data-id="circuit_feedback"]', 'File circuits/simple.circom does not include pragma version. Assuming pragma version (2, 1, 6)')
},
'Should hide/show warnings for compiled circuit #group4': function (browser: NightwatchBrowser) {
browser
@@ -115,7 +115,7 @@ module.exports = {
.waitForElementNotPresent('[data-id="circuit_feedback"]')
.click('[data-id="hide_circuit_warnings_checkbox_input"]')
.waitForElementVisible('[data-id="circuit_feedback"]')
- .waitForElementContainsText('[data-id="circuit_feedback"]', 'File circuits/simple.circom does not include pragma version. Assuming pragma version (2, 1, 5)')
+ .waitForElementContainsText('[data-id="circuit_feedback"]', 'File circuits/simple.circom does not include pragma version. Assuming pragma version (2, 1, 6)')
},
'Should display error for invalid circuit #group4': function (browser: NightwatchBrowser) {
browser
diff --git a/package.json b/package.json
index 3ad91b7184..060938addd 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.0",
"color-support": "^1.1.3",
"commander": "^9.4.1",
"core-js": "^3.6.5",
diff --git a/yarn.lock b/yarn.lock
index e75886fbe1..9272764444 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.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/circom_wasm/-/circom_wasm-0.2.0.tgz#c35537f0b1f5bfd3d88898306f46c3a3457e5589"
+ integrity sha512-eqDCbAXJQkKnrAg0Ow3bdaGciGTooRKL20941JGzX8IcqgHoGiZxaSLATkYy97dbmJFrxe8Wr+mOGnvdbqN9bw==
circular-json@^0.3.0:
version "0.3.3"