Skip to content

Commit

Permalink
Release 0.24.0 (lurk-lang#230)
Browse files Browse the repository at this point in the history
* rename TrivialTestCircuit to TrivialCircuit

* address clippy warnings
  • Loading branch information
srinathsetty authored Sep 26, 2023
1 parent 284c985 commit fb83e30
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 90 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "nova-snark"
version = "0.23.0"
version = "0.24.0"
authors = ["Srinath Setty <[email protected]>"]
edition = "2021"
description = "Recursive zkSNARKs without trusted setup"
Expand Down
20 changes: 10 additions & 10 deletions benches/compressed-snark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use criterion::*;
use ff::PrimeField;
use nova_snark::{
traits::{
circuit::{StepCircuit, TrivialTestCircuit},
circuit::{StepCircuit, TrivialCircuit},
Group,
},
CompressedSNARK, PublicParams, RecursiveSNARK,
Expand All @@ -23,8 +23,8 @@ type S2 = nova_snark::spartan::snark::RelaxedR1CSSNARK<G2, EE2>;
// SNARKs with computational commitments
type SS1 = nova_snark::spartan::ppsnark::RelaxedR1CSSNARK<G1, EE1>;
type SS2 = nova_snark::spartan::ppsnark::RelaxedR1CSSNARK<G2, EE2>;
type C1 = NonTrivialTestCircuit<<G1 as Group>::Scalar>;
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
type C1 = NonTrivialCircuit<<G1 as Group>::Scalar>;
type C2 = TrivialCircuit<<G2 as Group>::Scalar>;

// To run these benchmarks, first download `criterion` with `cargo install cargo install cargo-criterion`.
// Then `cargo criterion --bench compressed-snark`. The results are located in `target/criterion/data/<name-of-benchmark>`.
Expand Down Expand Up @@ -61,8 +61,8 @@ fn bench_compressed_snark(c: &mut Criterion) {
let mut group = c.benchmark_group(format!("CompressedSNARK-StepCircuitSize-{num_cons}"));
group.sample_size(num_samples);

let c_primary = NonTrivialTestCircuit::new(num_cons);
let c_secondary = TrivialTestCircuit::default();
let c_primary = NonTrivialCircuit::new(num_cons);
let c_secondary = TrivialCircuit::default();

// Produce public parameters
let pp = PublicParams::<G1, G2, C1, C2>::setup(&c_primary, &c_secondary);
Expand Down Expand Up @@ -148,8 +148,8 @@ fn bench_compressed_snark_with_computational_commitments(c: &mut Criterion) {
.sampling_mode(SamplingMode::Flat)
.sample_size(num_samples);

let c_primary = NonTrivialTestCircuit::new(num_cons);
let c_secondary = TrivialTestCircuit::default();
let c_primary = NonTrivialCircuit::new(num_cons);
let c_secondary = TrivialCircuit::default();

// Produce public parameters
let pp = PublicParams::<G1, G2, C1, C2>::setup(&c_primary, &c_secondary);
Expand Down Expand Up @@ -221,12 +221,12 @@ fn bench_compressed_snark_with_computational_commitments(c: &mut Criterion) {
}

#[derive(Clone, Debug, Default)]
struct NonTrivialTestCircuit<F: PrimeField> {
struct NonTrivialCircuit<F: PrimeField> {
num_cons: usize,
_p: PhantomData<F>,
}

impl<F> NonTrivialTestCircuit<F>
impl<F> NonTrivialCircuit<F>
where
F: PrimeField,
{
Expand All @@ -237,7 +237,7 @@ where
}
}
}
impl<F> StepCircuit<F> for NonTrivialTestCircuit<F>
impl<F> StepCircuit<F> for NonTrivialCircuit<F>
where
F: PrimeField,
{
Expand Down
12 changes: 6 additions & 6 deletions benches/compute-digest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion};
use ff::PrimeField;
use nova_snark::{
traits::{
circuit::{StepCircuit, TrivialTestCircuit},
circuit::{StepCircuit, TrivialCircuit},
Group,
},
PublicParams,
};

type G1 = pasta_curves::pallas::Point;
type G2 = pasta_curves::vesta::Point;
type C1 = NonTrivialTestCircuit<<G1 as Group>::Scalar>;
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
type C1 = NonTrivialCircuit<<G1 as Group>::Scalar>;
type C2 = TrivialCircuit<<G2 as Group>::Scalar>;

criterion_group! {
name = compute_digest;
Expand All @@ -33,12 +33,12 @@ fn bench_compute_digest(c: &mut Criterion) {
}

#[derive(Clone, Debug, Default)]
struct NonTrivialTestCircuit<F: PrimeField> {
struct NonTrivialCircuit<F: PrimeField> {
num_cons: usize,
_p: PhantomData<F>,
}

impl<F> NonTrivialTestCircuit<F>
impl<F> NonTrivialCircuit<F>
where
F: PrimeField,
{
Expand All @@ -49,7 +49,7 @@ where
}
}
}
impl<F> StepCircuit<F> for NonTrivialTestCircuit<F>
impl<F> StepCircuit<F> for NonTrivialCircuit<F>
where
F: PrimeField,
{
Expand Down
16 changes: 8 additions & 8 deletions benches/recursive-snark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use criterion::*;
use ff::PrimeField;
use nova_snark::{
traits::{
circuit::{StepCircuit, TrivialTestCircuit},
circuit::{StepCircuit, TrivialCircuit},
Group,
},
PublicParams, RecursiveSNARK,
Expand All @@ -15,8 +15,8 @@ use std::time::Duration;

type G1 = pasta_curves::pallas::Point;
type G2 = pasta_curves::vesta::Point;
type C1 = NonTrivialTestCircuit<<G1 as Group>::Scalar>;
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
type C1 = NonTrivialCircuit<<G1 as Group>::Scalar>;
type C2 = TrivialCircuit<<G2 as Group>::Scalar>;

// To run these benchmarks, first download `criterion` with `cargo install cargo install cargo-criterion`.
// Then `cargo criterion --bench recursive-snark`. The results are located in `target/criterion/data/<name-of-benchmark>`.
Expand Down Expand Up @@ -52,8 +52,8 @@ fn bench_recursive_snark(c: &mut Criterion) {
let mut group = c.benchmark_group(format!("RecursiveSNARK-StepCircuitSize-{num_cons}"));
group.sample_size(10);

let c_primary = NonTrivialTestCircuit::new(num_cons);
let c_secondary = TrivialTestCircuit::default();
let c_primary = NonTrivialCircuit::new(num_cons);
let c_secondary = TrivialCircuit::default();

// Produce public parameters
let pp = PublicParams::<G1, G2, C1, C2>::setup(&c_primary, &c_secondary);
Expand Down Expand Up @@ -124,12 +124,12 @@ fn bench_recursive_snark(c: &mut Criterion) {
}

#[derive(Clone, Debug, Default)]
struct NonTrivialTestCircuit<F: PrimeField> {
struct NonTrivialCircuit<F: PrimeField> {
num_cons: usize,
_p: PhantomData<F>,
}

impl<F> NonTrivialTestCircuit<F>
impl<F> NonTrivialCircuit<F>
where
F: PrimeField,
{
Expand All @@ -140,7 +140,7 @@ where
}
}
}
impl<F> StepCircuit<F> for NonTrivialTestCircuit<F>
impl<F> StepCircuit<F> for NonTrivialCircuit<F>
where
F: PrimeField,
{
Expand Down
8 changes: 4 additions & 4 deletions benches/sha256.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use criterion::*;
use ff::{PrimeField, PrimeFieldBits};
use nova_snark::{
traits::{
circuit::{StepCircuit, TrivialTestCircuit},
circuit::{StepCircuit, TrivialCircuit},
Group,
},
PublicParams, RecursiveSNARK,
Expand Down Expand Up @@ -120,7 +120,7 @@ impl<Scalar: PrimeField + PrimeFieldBits> StepCircuit<Scalar> for Sha256Circuit<
}

type C1 = Sha256Circuit<<G1 as Group>::Scalar>;
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
type C2 = TrivialCircuit<<G2 as Group>::Scalar>;

criterion_group! {
name = recursive_snark;
Expand Down Expand Up @@ -154,10 +154,10 @@ fn bench_recursive_snark(c: &mut Criterion) {
group.sample_size(10);

// Produce public parameters
let ttc = TrivialTestCircuit::default();
let ttc = TrivialCircuit::default();
let pp = PublicParams::<G1, G2, C1, C2>::setup(&circuit_primary, &ttc);

let circuit_secondary = TrivialTestCircuit::default();
let circuit_secondary = TrivialCircuit::default();
let z0_primary = vec![<G1 as Group>::Scalar::from(2u64)];
let z0_secondary = vec![<G2 as Group>::Scalar::from(2u64)];

Expand Down
8 changes: 4 additions & 4 deletions examples/minroot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use ff::PrimeField;
use flate2::{write::ZlibEncoder, Compression};
use nova_snark::{
traits::{
circuit::{StepCircuit, TrivialTestCircuit},
circuit::{StepCircuit, TrivialCircuit},
Group,
},
CompressedSNARK, PublicParams, RecursiveSNARK,
Expand Down Expand Up @@ -148,7 +148,7 @@ fn main() {
],
};

let circuit_secondary = TrivialTestCircuit::default();
let circuit_secondary = TrivialCircuit::default();

println!("Proving {num_iters_per_step} iterations of MinRoot per step");

Expand All @@ -159,7 +159,7 @@ fn main() {
G1,
G2,
MinRootCircuit<<G1 as Group>::Scalar>,
TrivialTestCircuit<<G2 as Group>::Scalar>,
TrivialCircuit<<G2 as Group>::Scalar>,
>::setup(&circuit_primary, &circuit_secondary);
println!("PublicParams::setup, took {:?} ", start.elapsed());

Expand Down Expand Up @@ -203,7 +203,7 @@ fn main() {
let z0_secondary = vec![<G2 as Group>::Scalar::zero()];

type C1 = MinRootCircuit<<G1 as Group>::Scalar>;
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
type C2 = TrivialCircuit<<G2 as Group>::Scalar>;
// produce a recursive SNARK
println!("Generating a RecursiveSNARK...");
let mut recursive_snark: RecursiveSNARK<G1, G2, C1, C2> = RecursiveSNARK::<G1, G2, C1, C2>::new(
Expand Down
32 changes: 15 additions & 17 deletions src/circuit.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
//! There are two Verification Circuits. The primary and the secondary.
//! Each of them is over a Pasta curve but
//! only the primary executes the next step of the computation.
//! Each of them is over a curve in a 2-cycle of curves.
//! We have two running instances. Each circuit takes as input 2 hashes: one for each
//! of the running instances. Each of these hashes is
//! H(params = H(shape, ck), i, z0, zi, U). Each circuit folds the last invocation of
//! the other into the running instance
//! of the running instances. Each of these hashes is H(params = H(shape, ck), i, z0, zi, U).
//! Each circuit folds the last invocation of the other into the running instance
use crate::{
constants::{NUM_FE_WITHOUT_IO_FOR_CRHF, NUM_HASH_BITS},
Expand Down Expand Up @@ -50,7 +48,7 @@ impl NovaAugmentedCircuitParams {
#[derive(Debug, Serialize, Deserialize)]
#[serde(bound = "")]
pub struct NovaAugmentedCircuitInputs<G: Group> {
params: G::Scalar, // Hash(Shape of u2, Gens for u2). Needed for computing the challenge.
params: G::Scalar,
i: G::Base,
z0: Vec<G::Base>,
zi: Option<Vec<G::Base>>,
Expand Down Expand Up @@ -378,7 +376,7 @@ mod tests {
bellpepper::r1cs::{NovaShape, NovaWitness},
gadgets::utils::scalar_as_base,
provider::poseidon::PoseidonConstantsCircuit,
traits::circuit::TrivialTestCircuit,
traits::circuit::TrivialCircuit,
};

// In the following we use 1 to refer to the primary, and 2 to refer to the secondary circuit
Expand All @@ -393,19 +391,19 @@ mod tests {
G1: Group<Base = <G2 as Group>::Scalar>,
G2: Group<Base = <G1 as Group>::Scalar>,
{
let ttc1 = TrivialTestCircuit::default();
let tc1 = TrivialCircuit::default();
// Initialize the shape and ck for the primary
let circuit1: NovaAugmentedCircuit<'_, G2, TrivialTestCircuit<<G2 as Group>::Base>> =
NovaAugmentedCircuit::new(primary_params, None, &ttc1, ro_consts1.clone());
let circuit1: NovaAugmentedCircuit<'_, G2, TrivialCircuit<<G2 as Group>::Base>> =
NovaAugmentedCircuit::new(primary_params, None, &tc1, ro_consts1.clone());
let mut cs: TestShapeCS<G1> = TestShapeCS::new();
let _ = circuit1.synthesize(&mut cs);
let (shape1, ck1) = cs.r1cs_shape();
assert_eq!(cs.num_constraints(), num_constraints_primary);

let ttc2 = TrivialTestCircuit::default();
let tc2 = TrivialCircuit::default();
// Initialize the shape and ck for the secondary
let circuit2: NovaAugmentedCircuit<'_, G1, TrivialTestCircuit<<G1 as Group>::Base>> =
NovaAugmentedCircuit::new(secondary_params, None, &ttc2, ro_consts2.clone());
let circuit2: NovaAugmentedCircuit<'_, G1, TrivialCircuit<<G1 as Group>::Base>> =
NovaAugmentedCircuit::new(secondary_params, None, &tc2, ro_consts2.clone());
let mut cs: TestShapeCS<G2> = TestShapeCS::new();
let _ = circuit2.synthesize(&mut cs);
let (shape2, ck2) = cs.r1cs_shape();
Expand All @@ -423,8 +421,8 @@ mod tests {
None,
None,
);
let circuit1: NovaAugmentedCircuit<'_, G2, TrivialTestCircuit<<G2 as Group>::Base>> =
NovaAugmentedCircuit::new(primary_params, Some(inputs1), &ttc1, ro_consts1);
let circuit1: NovaAugmentedCircuit<'_, G2, TrivialCircuit<<G2 as Group>::Base>> =
NovaAugmentedCircuit::new(primary_params, Some(inputs1), &tc1, ro_consts1);
let _ = circuit1.synthesize(&mut cs1);
let (inst1, witness1) = cs1.r1cs_instance_and_witness(&shape1, &ck1).unwrap();
// Make sure that this is satisfiable
Expand All @@ -442,8 +440,8 @@ mod tests {
Some(inst1),
None,
);
let circuit2: NovaAugmentedCircuit<'_, G1, TrivialTestCircuit<<G1 as Group>::Base>> =
NovaAugmentedCircuit::new(secondary_params, Some(inputs2), &ttc2, ro_consts2);
let circuit2: NovaAugmentedCircuit<'_, G1, TrivialCircuit<<G1 as Group>::Base>> =
NovaAugmentedCircuit::new(secondary_params, Some(inputs2), &tc2, ro_consts2);
let _ = circuit2.synthesize(&mut cs2);
let (inst2, witness2) = cs2.r1cs_instance_and_witness(&shape2, &ck2).unwrap();
// Make sure that it is satisfiable
Expand Down
6 changes: 3 additions & 3 deletions src/digest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ impl<'a, F: PrimeField, T: Digestible> DigestComputer<'a, F, T> {
Sha3_256::new()
}

fn map_to_field(digest: &mut [u8]) -> F {
fn map_to_field(digest: &[u8]) -> F {
let bv = (0..NUM_HASH_BITS).map(|i| {
let (byte_pos, bit_pos) = (i / 8, i % 8);
let bit = (digest[byte_pos] >> bit_pos) & 1;
Expand Down Expand Up @@ -73,8 +73,8 @@ impl<'a, F: PrimeField, T: Digestible> DigestComputer<'a, F, T> {
.inner
.write_bytes(&mut hasher)
.expect("Serialization error");
let mut bytes: [u8; 32] = hasher.finalize().into();
Ok(Self::map_to_field(&mut bytes))
let bytes: [u8; 32] = hasher.finalize().into();
Ok(Self::map_to_field(&bytes))
}
}

Expand Down
Loading

0 comments on commit fb83e30

Please sign in to comment.