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
4 files changed,
11 insertions(+),
39 deletions(-)
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