mirror of
https://github.com/arnaucube/sonobe.git
synced 2026-01-19 04:11:34 +01:00
Feature/traits (#3)
* feat: draft traits `FoldingScheme` and `Decider` Co-authored-by: arnaucube <root@arnaucube.com> * Add Transcript trait, with PoseidonTranscript impl (#1) Add also the PoseidonTranscriptVar (gadget). * Update FoldingScheme trait to take C1 & C2 as params (#2) * Update FoldingScheme trait to take C1 & C2 as params Update FoldingScheme trait to take C1 & C2 as params which are used by the diverse folding schemes as a cycle of curves. * Add constraint to FoldingScheme C1,C2 fields swap. Co-authored-by: Han <tinghan0110@gmail.com> --------- Co-authored-by: Han <tinghan0110@gmail.com> * move transcript to it's own mod --------- Co-authored-by: han0110 <tinghan0110@gmail.com>
This commit is contained in:
85
src/lib.rs
Normal file
85
src/lib.rs
Normal file
@@ -0,0 +1,85 @@
|
||||
#![allow(non_snake_case)]
|
||||
#![allow(non_upper_case_globals)]
|
||||
|
||||
use ark_ec::CurveGroup;
|
||||
use ark_ff::PrimeField;
|
||||
use ark_std::{fmt::Debug, rand::RngCore};
|
||||
use thiserror::Error;
|
||||
|
||||
pub mod transcript;
|
||||
use transcript::Transcript;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum Error {
|
||||
#[error("Relation not satisfied")]
|
||||
NotSatisfied,
|
||||
}
|
||||
|
||||
/// FoldingScheme defines trait that is implemented by the diverse folding schemes. It is defined
|
||||
/// over a cycle of curves (C1, C2), where:
|
||||
/// - C1 is the main curve, which ScalarField we use as our F for al the field operations
|
||||
/// - C2 is the auxiliary curve, which we use for the commitments, whose BaseField (for point
|
||||
/// coordinates) are in the C1::ScalarField
|
||||
pub trait FoldingScheme<C1: CurveGroup, C2: CurveGroup>: Clone + Debug
|
||||
where
|
||||
C1: CurveGroup<BaseField = C2::ScalarField, ScalarField = C2::BaseField>,
|
||||
C2::BaseField: PrimeField,
|
||||
{
|
||||
// type PCS: PolynomialCommitmentScheme<C>; // maybe not needed, just PedersenCommitment
|
||||
type PreprocessorParam: Debug;
|
||||
type ProverParam: Debug;
|
||||
type VerifierParam: Debug;
|
||||
type FreshInstance: Debug;
|
||||
type PublicInput: Debug;
|
||||
type CommittedInstanceWithWitness: Debug;
|
||||
type CommittedInstance: Clone + Debug;
|
||||
|
||||
fn preprocess(
|
||||
// pcs_param: &<Self::CS as PolynomialCommitmentScheme<C>>::Param,
|
||||
prep_param: &Self::PreprocessorParam,
|
||||
) -> Result<(Self::ProverParam, Self::VerifierParam), Error>;
|
||||
|
||||
fn init_accumulator(
|
||||
pp: &Self::ProverParam,
|
||||
) -> Result<Self::CommittedInstanceWithWitness, Error>;
|
||||
|
||||
fn prove(
|
||||
pp: &Self::ProverParam,
|
||||
running_instance: &mut Self::CommittedInstanceWithWitness,
|
||||
incomming_instances: &[Self::FreshInstance],
|
||||
transcript: &mut impl Transcript<C1::ScalarField>,
|
||||
rng: impl RngCore,
|
||||
) -> Result<(), Error>;
|
||||
|
||||
fn verify(
|
||||
vp: &Self::VerifierParam,
|
||||
running_instance: &mut Self::CommittedInstance,
|
||||
incomming_instances: &[Self::PublicInput],
|
||||
transcript: &mut impl Transcript<C1::ScalarField>,
|
||||
rng: impl RngCore,
|
||||
) -> Result<(), Error>;
|
||||
}
|
||||
|
||||
pub trait Decider<C: CurveGroup>: Clone + Debug {
|
||||
type PreprocessorParam: Debug;
|
||||
type ProverParam: Debug;
|
||||
type VerifierParam: Debug;
|
||||
type FreshInstance: Debug;
|
||||
type PublicInput: Debug;
|
||||
type CommittedInstanceWithWitness: Debug;
|
||||
type CommittedInstance: Clone + Debug;
|
||||
|
||||
fn prove(
|
||||
pp: &Self::ProverParam,
|
||||
running_instance: &Self::CommittedInstanceWithWitness,
|
||||
transcript: &mut impl Transcript<C::ScalarField>,
|
||||
rng: impl RngCore,
|
||||
) -> Result<(), Error>;
|
||||
|
||||
fn verify(
|
||||
vp: &Self::VerifierParam,
|
||||
running_instance: &Self::CommittedInstance,
|
||||
transcript: &mut impl Transcript<C::ScalarField>,
|
||||
rng: impl RngCore,
|
||||
) -> Result<(), Error>;
|
||||
}
|
||||
Reference in New Issue
Block a user