refactor: rename circuit -> circom
This commit is contained in:
parent
29a7555c08
commit
72c533ac62
|
@ -30,7 +30,6 @@ ethers = { git = "https://github.com/gakonst/ethers-rs", features = ["abigen"] }
|
||||||
serde_json = "1.0.64"
|
serde_json = "1.0.64"
|
||||||
serde = "1.0.126"
|
serde = "1.0.126"
|
||||||
thiserror = "1.0.26"
|
thiserror = "1.0.26"
|
||||||
memmap = "0.7.0"
|
|
||||||
ark-serialize = "0.3.0"
|
ark-serialize = "0.3.0"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
@ -6,22 +6,22 @@ use super::{CircomCircuit, R1CS};
|
||||||
use num_bigint::BigInt;
|
use num_bigint::BigInt;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use crate::{circuit::R1CSFile, WitnessCalculator};
|
use crate::{circom::R1CSFile, witness::WitnessCalculator};
|
||||||
use color_eyre::Result;
|
use color_eyre::Result;
|
||||||
|
|
||||||
pub struct CircomBuilder<E: PairingEngine> {
|
pub struct CircomBuilder<E: PairingEngine> {
|
||||||
pub cfg: CircuitConfig<E>,
|
pub cfg: CircomConfig<E>,
|
||||||
pub inputs: HashMap<String, Vec<BigInt>>,
|
pub inputs: HashMap<String, Vec<BigInt>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add utils for creating this from files / directly from bytes
|
// Add utils for creating this from files / directly from bytes
|
||||||
pub struct CircuitConfig<E: PairingEngine> {
|
pub struct CircomConfig<E: PairingEngine> {
|
||||||
pub r1cs: R1CS<E>,
|
pub r1cs: R1CS<E>,
|
||||||
pub wtns: WitnessCalculator,
|
pub wtns: WitnessCalculator,
|
||||||
pub sanity_check: bool,
|
pub sanity_check: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E: PairingEngine> CircuitConfig<E> {
|
impl<E: PairingEngine> CircomConfig<E> {
|
||||||
pub fn new(wtns: impl AsRef<Path>, r1cs: impl AsRef<Path>) -> Result<Self> {
|
pub fn new(wtns: impl AsRef<Path>, r1cs: impl AsRef<Path>) -> Result<Self> {
|
||||||
let wtns = WitnessCalculator::new(wtns).unwrap();
|
let wtns = WitnessCalculator::new(wtns).unwrap();
|
||||||
let reader = File::open(r1cs)?;
|
let reader = File::open(r1cs)?;
|
||||||
|
@ -37,7 +37,7 @@ impl<E: PairingEngine> CircuitConfig<E> {
|
||||||
impl<E: PairingEngine> CircomBuilder<E> {
|
impl<E: PairingEngine> CircomBuilder<E> {
|
||||||
/// Instantiates a new builder using the provided WitnessGenerator and R1CS files
|
/// Instantiates a new builder using the provided WitnessGenerator and R1CS files
|
||||||
/// for your circuit
|
/// for your circuit
|
||||||
pub fn new(cfg: CircuitConfig<E>) -> Self {
|
pub fn new(cfg: CircomConfig<E>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
cfg,
|
cfg,
|
||||||
inputs: HashMap::new(),
|
inputs: HashMap::new(),
|
|
@ -3,7 +3,7 @@ use ark_relations::r1cs::{
|
||||||
ConstraintSynthesizer, ConstraintSystemRef, LinearCombination, SynthesisError, Variable,
|
ConstraintSynthesizer, ConstraintSystemRef, LinearCombination, SynthesisError, Variable,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::circuit::R1CS;
|
use super::R1CS;
|
||||||
|
|
||||||
use color_eyre::Result;
|
use color_eyre::Result;
|
||||||
|
|
||||||
|
@ -84,13 +84,13 @@ impl<E: PairingEngine> ConstraintSynthesizer<E::Fr> for CircomCircuit<E> {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{CircomBuilder, CircuitConfig};
|
use crate::{CircomBuilder, CircomConfig};
|
||||||
use ark_bn254::{Bn254, Fr};
|
use ark_bn254::{Bn254, Fr};
|
||||||
use ark_relations::r1cs::ConstraintSystem;
|
use ark_relations::r1cs::ConstraintSystem;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn satisfied() {
|
fn satisfied() {
|
||||||
let cfg = CircuitConfig::<Bn254>::new(
|
let cfg = CircomConfig::<Bn254>::new(
|
||||||
"./test-vectors/mycircuit.wasm",
|
"./test-vectors/mycircuit.wasm",
|
||||||
"./test-vectors/mycircuit.r1cs",
|
"./test-vectors/mycircuit.r1cs",
|
||||||
)
|
)
|
|
@ -3,11 +3,14 @@ use ark_ec::PairingEngine;
|
||||||
pub mod r1cs_reader;
|
pub mod r1cs_reader;
|
||||||
pub use r1cs_reader::{R1CSFile, R1CS};
|
pub use r1cs_reader::{R1CSFile, R1CS};
|
||||||
|
|
||||||
mod circom;
|
mod circuit;
|
||||||
pub use circom::CircomCircuit;
|
pub use circuit::CircomCircuit;
|
||||||
|
|
||||||
mod builder;
|
mod builder;
|
||||||
pub use builder::{CircomBuilder, CircuitConfig};
|
pub use builder::{CircomBuilder, CircomConfig};
|
||||||
|
|
||||||
|
mod qap;
|
||||||
|
pub use qap::R1CStoQAPCircom;
|
||||||
|
|
||||||
pub type Constraints<E> = (ConstraintVec<E>, ConstraintVec<E>, ConstraintVec<E>);
|
pub type Constraints<E> = (ConstraintVec<E>, ConstraintVec<E>, ConstraintVec<E>);
|
||||||
pub type ConstraintVec<E> = Vec<(usize, <E as PairingEngine>::Fr)>;
|
pub type ConstraintVec<E> = Vec<(usize, <E as PairingEngine>::Fr)>;
|
|
@ -7,7 +7,7 @@ use ark_ec::PairingEngine;
|
||||||
use ark_ff::FromBytes;
|
use ark_ff::FromBytes;
|
||||||
use ark_std::io::Read;
|
use ark_std::io::Read;
|
||||||
|
|
||||||
use crate::circuit::{ConstraintVec, Constraints};
|
use super::{ConstraintVec, Constraints};
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct R1CS<E: PairingEngine> {
|
pub struct R1CS<E: PairingEngine> {
|
12
src/lib.rs
12
src/lib.rs
|
@ -66,14 +66,12 @@
|
||||||
//! Groth16 Proof verification:
|
//! Groth16 Proof verification:
|
||||||
//! `snarkjs groth16 verify verification_key.json public.json proof.json`
|
//! `snarkjs groth16 verify verification_key.json public.json proof.json`
|
||||||
|
|
||||||
mod circom_wasm;
|
mod witness;
|
||||||
pub use circom_wasm::WitnessCalculator;
|
|
||||||
|
|
||||||
pub mod circuit;
|
pub mod circom;
|
||||||
pub use circuit::{CircomBuilder, CircomCircuit, CircuitConfig};
|
pub use circom::{CircomBuilder, CircomCircuit, CircomConfig, R1CStoQAPCircom};
|
||||||
|
|
||||||
pub mod ethereum;
|
pub mod ethereum;
|
||||||
|
|
||||||
pub mod zkey;
|
mod zkey;
|
||||||
|
pub use zkey::read_zkey;
|
||||||
pub mod circom_qap;
|
|
||||||
|
|
|
@ -299,7 +299,7 @@ mod tests {
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
|
||||||
use crate::{circom_qap::R1CStoQAPCircom, CircomBuilder, CircuitConfig};
|
use crate::{circom::R1CStoQAPCircom, CircomBuilder, CircomConfig};
|
||||||
use ark_groth16::{create_random_proof_with_qap as prove, prepare_verifying_key, verify_proof};
|
use ark_groth16::{create_random_proof_with_qap as prove, prepare_verifying_key, verify_proof};
|
||||||
use ark_std::rand::thread_rng;
|
use ark_std::rand::thread_rng;
|
||||||
use num_traits::{One, Zero};
|
use num_traits::{One, Zero};
|
||||||
|
@ -769,7 +769,7 @@ mod tests {
|
||||||
let mut file = File::open(path).unwrap();
|
let mut file = File::open(path).unwrap();
|
||||||
let params = read_zkey(&mut file).unwrap(); // binfile.proving_key().unwrap();
|
let params = read_zkey(&mut file).unwrap(); // binfile.proving_key().unwrap();
|
||||||
|
|
||||||
let cfg = CircuitConfig::<Bn254>::new(
|
let cfg = CircomConfig::<Bn254>::new(
|
||||||
"./test-vectors/mycircuit.wasm",
|
"./test-vectors/mycircuit.wasm",
|
||||||
"./test-vectors/mycircuit.r1cs",
|
"./test-vectors/mycircuit.r1cs",
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use ark_circom::{CircomBuilder, CircuitConfig};
|
use ark_circom::{CircomBuilder, CircomConfig};
|
||||||
use ark_std::rand::thread_rng;
|
use ark_std::rand::thread_rng;
|
||||||
use color_eyre::Result;
|
use color_eyre::Result;
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ use ark_groth16::{
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn groth16_proof() -> Result<()> {
|
fn groth16_proof() -> Result<()> {
|
||||||
let cfg = CircuitConfig::<Bn254>::new(
|
let cfg = CircomConfig::<Bn254>::new(
|
||||||
"./test-vectors/mycircuit.wasm",
|
"./test-vectors/mycircuit.wasm",
|
||||||
"./test-vectors/mycircuit.r1cs",
|
"./test-vectors/mycircuit.r1cs",
|
||||||
)?;
|
)?;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use ark_circom::{
|
use ark_circom::{
|
||||||
ethereum::{Inputs, Proof, VerifyingKey},
|
ethereum::{Inputs, Proof, VerifyingKey},
|
||||||
CircomBuilder, CircuitConfig,
|
CircomBuilder, CircomConfig,
|
||||||
};
|
};
|
||||||
use ark_std::rand::thread_rng;
|
use ark_std::rand::thread_rng;
|
||||||
use color_eyre::Result;
|
use color_eyre::Result;
|
||||||
|
@ -18,7 +18,7 @@ use std::{convert::TryFrom, sync::Arc};
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn solidity_verifier() -> Result<()> {
|
async fn solidity_verifier() -> Result<()> {
|
||||||
let cfg = CircuitConfig::<Bn254>::new(
|
let cfg = CircomConfig::<Bn254>::new(
|
||||||
"./test-vectors/mycircuit.wasm",
|
"./test-vectors/mycircuit.wasm",
|
||||||
"./test-vectors/mycircuit.r1cs",
|
"./test-vectors/mycircuit.r1cs",
|
||||||
)?;
|
)?;
|
||||||
|
@ -70,10 +70,7 @@ async fn solidity_verifier() -> Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
abigen!(
|
abigen!(Groth16Verifier, "./tests/verifier_abi.json");
|
||||||
Groth16Verifier,
|
|
||||||
"./tests/verifier_abi.json"
|
|
||||||
);
|
|
||||||
|
|
||||||
impl<M: Middleware> Groth16Verifier<M> {
|
impl<M: Middleware> Groth16Verifier<M> {
|
||||||
async fn check_proof<I: Into<Inputs>, P: Into<Proof>, VK: Into<VerifyingKey>>(
|
async fn check_proof<I: Into<Inputs>, P: Into<Proof>, VK: Into<VerifyingKey>>(
|
||||||
|
|
Loading…
Reference in New Issue