Adapt Frontend/Circom for FCircuit Trait (#71)

* initial

* improved z_i

* improved

* Redefined the .circom and the test code for CircomWrapper

* added test function for wrapper_circuit which has circom_fcircuit, but incompatibility error of Pairing and Pallas

* changed the path in the gitignore

* Remove circom generated path

* improved variable vector

* Pallas::Fr

* improved to the primefield

* mentioned the issues:1. extract z_i1(only public output) 2.constraintsSystem and its Ref

* modified

* public input in circom

* generalized; removed the hardcorded value

* Generalization using FpVar::<Fr>::new_input

* initial

* improved z_i

* improved

* Redefined the .circom and the test code for CircomWrapper

* added test function for wrapper_circuit which has circom_fcircuit, but incompatibility error of Pairing and Pallas

* Remove circom generated path

* improved variable vector

* Pallas::Fr

* improved to the primefield

* mentioned the issues:1. extract z_i1(only public output) 2.constraintsSystem and its Ref

* modified

* Small updates:

- update cubic_circuit.circom: remove extra constraint, remove public
  inputs
- remove allocations of inputs in arkworks
- add return of z_{i+1} at the end of CircomtoFCircuit::generate_step_constraints

With this tmp fix the `test_circom_step_constraints` passes, but needs to be iterated and polished.

* Update circom-compat to re-allocate inputs

* update after rebase to latest main: add usage of self.state_len() to circom frontend

* move circom frontend related structs into frontend/circom dir

* clippy lints

* extract_witness

* add comments

* clean

* fmt, lint, and spell

* CI Check trigger

* fmt

* applied the feedback

---------

Co-authored-by: Y5 <76672645+yugonsan@users.noreply.github.com>
Co-authored-by: arnaucube <root@arnaucube.com>
This commit is contained in:
yugocabrio
2024-04-15 01:58:50 +09:00
committed by GitHub
parent 4dcb981dd4
commit 03f66919a3
9 changed files with 328 additions and 222 deletions

View File

@@ -1,11 +1,11 @@
pub mod circom;
use crate::Error;
use ark_ff::PrimeField;
use ark_r1cs_std::fields::fp::FpVar;
use ark_relations::r1cs::{ConstraintSystemRef, SynthesisError};
use ark_std::fmt::Debug;
pub mod circom;
/// FCircuit defines the trait of the circuit of the F function, which is the one being folded (ie.
/// inside the agmented F' function).
/// The parameter z_i denotes the current state, and z_{i+1} denotes the next state after applying
@@ -44,7 +44,7 @@ pub trait FCircuit<F: PrimeField>: Clone + Debug {
#[cfg(test)]
pub mod tests {
use super::*;
use ark_pallas::Fr;
use ark_bn254::Fr;
use ark_r1cs_std::{alloc::AllocVar, eq::EqGadget};
use ark_relations::r1cs::{
ConstraintSynthesizer, ConstraintSystem, ConstraintSystemRef, SynthesisError,