refactor: rename circuit -> circom

This commit is contained in:
Georgios Konstantopoulos 2021-07-26 17:53:45 +03:00
parent 29a7555c08
commit 72c533ac62
10 changed files with 27 additions and 30 deletions

View File

@ -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]

View File

@ -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(),

View File

@ -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",
) )

View File

@ -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)>;

View File

@ -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> {

View File

@ -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;

View File

@ -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",
) )

View File

@ -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",
)?; )?;

View File

@ -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>>(