arnaucube
arnaucube/NovaPublic Self-hosted repository
refactor: streamline some traits and bounds (#207)

* refactor: Remove redundant PrimeField bound in various modules

* refactor: Refactor main Group trait to use group::Group

- the main Group trait now uses ::zkcrypto::group::Group
- Refactored the usage of generic type associated 'Scalar' across multiple files and functions from 'G::Scalar' to fully qualified '<G as Group>::Scalar'.
- No new features were added, functionality remained the same, changes were mostly aimed at improving type inference and handling.

* Revert "refactor: Refactor main Group trait to use group::Group"

This reverts commit 5ee05905886c74d32449ac7940839a9f8a4d1685.
François Garillot 4142+huitseeker@users.noreply.github.com
Tue, 25 Jul 2023 15:07:37 -0400
commit

cdab40357aa0b573752cf67602fa7953192236b3

parent

a62bccf2063da5f8843352f5d1acb242252ac775

4 files changed, 11 insertions(+), 39 deletions(-)

jump to
M src/bellperson/r1cs.rs → src/bellperson/r1cs.rs

@@ -28,10 +28,7 @@ /// Return an appropriate `R1CSShape` and `CommitmentKey` structs.

fn r1cs_shape(&self) -> (R1CSShape<G>, CommitmentKey<G>); } -impl<G: Group> NovaWitness<G> for SatisfyingAssignment<G> -where - G::Scalar: PrimeField, -{ +impl<G: Group> NovaWitness<G> for SatisfyingAssignment<G> { fn r1cs_instance_and_witness( &self, shape: &R1CSShape<G>,

@@ -48,10 +45,7 @@ Ok((instance, W))

} } -impl<G: Group> NovaShape<G> for ShapeCS<G> -where - G::Scalar: PrimeField, -{ +impl<G: Group> NovaShape<G> for ShapeCS<G> { fn r1cs_shape(&self) -> (R1CSShape<G>, CommitmentKey<G>) { let mut A: Vec<(usize, usize, G::Scalar)> = Vec::new(); let mut B: Vec<(usize, usize, G::Scalar)> = Vec::new();
M src/bellperson/shape_cs.rs → src/bellperson/shape_cs.rs

@@ -48,10 +48,7 @@ }

#[allow(clippy::upper_case_acronyms)] /// `ShapeCS` is a `ConstraintSystem` for creating `R1CSShape`s for a circuit. -pub struct ShapeCS<G: Group> -where - G::Scalar: PrimeField + Field, -{ +pub struct ShapeCS<G: Group> { named_objects: HashMap<String, NamedObject>, current_namespace: Vec<String>, #[allow(clippy::type_complexity)]

@@ -92,10 +89,7 @@

map } -impl<G: Group> ShapeCS<G> -where - G::Scalar: PrimeField, -{ +impl<G: Group> ShapeCS<G> { /// Create a new, default `ShapeCS`, pub fn new() -> Self { ShapeCS::default()

@@ -216,10 +210,7 @@ self.named_objects.insert(path, to);

} } -impl<G: Group> Default for ShapeCS<G> -where - G::Scalar: PrimeField, -{ +impl<G: Group> Default for ShapeCS<G> { fn default() -> Self { let mut map = HashMap::new(); map.insert("ONE".into(), NamedObject::Var(ShapeCS::<G>::one()));

@@ -233,10 +224,7 @@ }

} } -impl<G: Group> ConstraintSystem<G::Scalar> for ShapeCS<G> -where - G::Scalar: PrimeField, -{ +impl<G: Group> ConstraintSystem<G::Scalar> for ShapeCS<G> { type Root = Self; fn alloc<F, A, AR>(&mut self, annotation: A, _f: F) -> Result<Variable, SynthesisError>
M src/bellperson/solver.rs → src/bellperson/solver.rs

@@ -1,7 +1,7 @@

//! Support for generating R1CS witness using bellperson. use crate::traits::Group; -use ff::{Field, PrimeField}; +use ff::Field; use bellperson::{ multiexp::DensityTracker, ConstraintSystem, Index, LinearCombination, SynthesisError, Variable,

@@ -9,10 +9,7 @@ };

/// A `ConstraintSystem` which calculates witness values for a concrete instance of an R1CS circuit. #[derive(PartialEq)] -pub struct SatisfyingAssignment<G: Group> -where - G::Scalar: PrimeField, -{ +pub struct SatisfyingAssignment<G: Group> { // Density of queries a_aux_density: DensityTracker, b_input_density: DensityTracker,

@@ -29,10 +26,7 @@ pub(crate) aux_assignment: Vec<G::Scalar>,

} use std::fmt; -impl<G: Group> fmt::Debug for SatisfyingAssignment<G> -where - G::Scalar: PrimeField, -{ +impl<G: Group> fmt::Debug for SatisfyingAssignment<G> { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { fmt .debug_struct("SatisfyingAssignment")

@@ -69,10 +63,7 @@ .finish()

} } -impl<G: Group> ConstraintSystem<G::Scalar> for SatisfyingAssignment<G> -where - G::Scalar: PrimeField, -{ +impl<G: Group> ConstraintSystem<G::Scalar> for SatisfyingAssignment<G> { type Root = Self; fn new() -> Self {
M src/traits/mod.rs → src/traits/mod.rs

@@ -41,8 +41,7 @@ + Serialize

+ for<'de> Deserialize<'de>; /// A type representing an element of the scalar field of the group - type Scalar: PrimeField - + PrimeFieldBits + type Scalar: PrimeFieldBits + PrimeFieldExt + Send + Sync