Skip to content

Commit

Permalink
(wip) scalar <-> base confusion
Browse files Browse the repository at this point in the history
  • Loading branch information
mpenciak committed Jan 19, 2024
1 parent 5c5e3a9 commit e606d8b
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 43 deletions.
75 changes: 35 additions & 40 deletions src/cyclefold/nova_circuit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,20 @@ impl AugmentedCircuitParams {
}
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(bound = "")]
pub struct FoldingData<E: Engine> {
U: RelaxedR1CSInstance<E>,
u: R1CSInstance<E>,
T: Commitment<E>,
}

impl<E: Engine> FoldingData<E> {
pub fn new(U: RelaxedR1CSInstance<E>, u: R1CSInstance<E>, T: Commitment<E>) -> Self {
Self { U, u, T }
}
}

/// TODO: Docs
#[derive(Debug, Serialize, Deserialize)]
#[serde(bound = "")]
Expand All @@ -43,23 +57,16 @@ where
{
pp_digest: E1::Scalar,
i: E1::Base,
z0: Vec<E1::Base>,

zi: Option<Vec<E1::Base>>,
U_p: Option<RelaxedR1CSInstance<E2>>,
u_p: Option<R1CSInstance<E2>>,
T_p: Option<Commitment<E2>>,
z0: Vec<E1::Scalar>,

U_c: Option<RelaxedR1CSInstance<E1>>,
u_c_1: Option<R1CSInstance<E1>>,
T_c_1: Option<Commitment<E1>>,
zi: Option<Vec<E1::Scalar>>,
data_p: Option<FoldingData<E1>>,

U_c_1: Option<RelaxedR1CSInstance<E1>>,
u_c_2: Option<R1CSInstance<E1>>,
T_c_2: Option<Commitment<E1>>,
data_c_1: Option<FoldingData<E2>>,
data_c_2: Option<FoldingData<E2>>,

E_new: Option<Commitment<E2>>,
W_new: Option<Commitment<E2>>,
E_new: Option<Commitment<E1>>,
W_new: Option<Commitment<E1>>,
}

impl<E1, E2> AugmentedCircuitInputs<E1, E2>
Expand All @@ -70,34 +77,22 @@ where
pub fn new(
pp_digest: E1::Scalar,
i: E1::Base,
z0: Vec<E1::Base>,
zi: Option<Vec<E1::Base>>,
U_p: Option<RelaxedR1CSInstance<E2>>,
u_p: Option<R1CSInstance<E2>>,
T_p: Option<Commitment<E2>>,
U_c: Option<RelaxedR1CSInstance<E1>>,
u_c_1: Option<R1CSInstance<E1>>,
T_c_1: Option<Commitment<E1>>,
U_c_1: Option<RelaxedR1CSInstance<E1>>,
u_c_2: Option<R1CSInstance<E1>>,
T_c_2: Option<Commitment<E1>>,
E_new: Option<Commitment<E2>>,
W_new: Option<Commitment<E2>>,
z0: Vec<E1::Scalar>,
zi: Option<Vec<E1::Scalar>>,
data_p: Option<FoldingData<E1>>,
data_c_1: Option<FoldingData<E2>>,
data_c_2: Option<FoldingData<E2>>,
E_new: Option<Commitment<E1>>,
W_new: Option<Commitment<E1>>,
) -> Self {
Self {
pp_digest,
i,
z0,
zi,
U_p,
u_p,
T_p,
U_c,
u_c_1,
T_c_1,
U_c_1,
u_c_2,
T_c_2,
data_p,
data_c_1,
data_c_2,
E_new,
W_new,
}
Expand All @@ -108,7 +103,7 @@ pub struct AugmentedCircuit<'a, E1, E2, SC>
where
E1: Engine<Base = <E2 as Engine>::Scalar>,
E2: Engine<Base = <E1 as Engine>::Scalar>,
SC: StepCircuit<E1::Base>,
SC: StepCircuit<E1::Scalar>,
{
params: &'a AugmentedCircuitParams,
ro_consts: ROConstantsCircuit<E1>,
Expand All @@ -120,7 +115,7 @@ impl<'a, E1, E2, SC> AugmentedCircuit<'a, E1, E2, SC>
where
E1: Engine<Base = <E2 as Engine>::Scalar>,
E2: Engine<Base = <E1 as Engine>::Scalar>,
SC: StepCircuit<E1::Base>,
SC: StepCircuit<E1::Scalar>,
{
pub const fn new(
params: &'a AugmentedCircuitParams,
Expand Down Expand Up @@ -164,10 +159,10 @@ where
todo!()
}

fn synthesize<CS: ConstraintSystem<<E1 as Engine>::Base>>(
pub fn synthesize<CS: ConstraintSystem<<E1 as Engine>::Base>>(
self,
cs: &mut CS,
) -> Result<Vec<AllocatedNum<E1::Base>>, SynthesisError> {
) -> Result<Vec<AllocatedNum<E1::Scalar>>, SynthesisError> {
// TODO: It's written down here https://hackmd.io/@mpenciak/HybHrnNFT
todo!()
}
Expand Down
48 changes: 45 additions & 3 deletions src/cyclefold/snark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@ use crate::{
SimpleDigestible,
};

use super::nova_circuit::{AugmentedCircuit, AugmentedCircuitInputs, AugmentedCircuitParams};
use super::nova_circuit::{
AugmentedCircuit, AugmentedCircuitInputs, AugmentedCircuitParams, FoldingData,
};

use abomonation::Abomonation;
use abomonation_derive::Abomonation;
use bellpepper_core::SynthesisError;
use ff::{PrimeField, PrimeFieldBits};
use once_cell::sync::OnceCell;
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -249,9 +252,48 @@ where
pp.circuit_shape_primary.r1cs_shape.num_vars,
);

// TODO: Finish this method
let data_p = FoldingData::new(self.r_U_primary.clone(), self.l_u_primary.clone(), comm_T);
let data_c_E = FoldingData::new(r_U_cyclefold_E, l_u_cyclefold_E, comm_T_E);
let data_c_W = FoldingData::new(r_U_cyclefold_W, l_u_cyclefold_W, comm_T_W);

let inputs_primary = AugmentedCircuitInputs::new(
pp.digest(),
<E2 as Engine>::Scalar::from(self.i as u64),
self.z0_primary.clone(),
Some(self.zi_primary.clone()),
Some(data_p),
Some(data_c_E),
Some(data_c_W),
Some(E_new),
Some(W_new),
);

todo!()
let circuit_primary: AugmentedCircuit<'_, E2, E1, C1> = AugmentedCircuit::new(
&pp.augmented_circuit_params_primary,
pp.ro_consts_circuit_primary.clone(),
Some(inputs_primary),
c_primary,
);

let zi_primary = circuit_primary.synthesize(&mut cs_primary)?;

let (l_u_primary, l_w_primary) = cs_primary
.r1cs_instance_and_witness(&pp.circuit_shape_primary.r1cs_shape, &pp.ck_primary)
.map_err(|_| NovaError::UnSat)?;

self.zi_primary = zi_primary
.iter()
.map(|v| v.get_value().ok_or(SynthesisError::AssignmentMissing))
.collect::<Result<Vec<_>, _>>()?;

self.l_u_primary = l_u_primary;
self.l_w_primary = l_w_primary;
self.r_U_cyclefold = r_U_cyclefold_W;
self.r_W_cyclefold = r_W_cyclefold_W;

self.i += 1;

Ok(())
}

/// TODO: docs
Expand Down

0 comments on commit e606d8b

Please sign in to comment.