diff --git a/saffron/src/blob.rs b/saffron/src/blob.rs index 9f31b1a4b9..d9a20828ab 100644 --- a/saffron/src/blob.rs +++ b/saffron/src/blob.rs @@ -42,7 +42,7 @@ impl FieldBlob { #[instrument(skip_all, level = "debug")] pub fn encode< D: EvaluationDomain, - EFqSponge: Clone + FqSponge, + EFqSponge: FqSponge, >( srs: &SRS, domain: D, @@ -151,9 +151,9 @@ mod tests { #[test] fn test_user_and_storage_provider_commitments_equal(UserData(xs) in UserData::arbitrary()) { let elems = encode_for_domain(&*DOMAIN, &xs); - let user_commitments = commit_to_field_elems(&*SRS, *DOMAIN, elems); + let user_commitments = commit_to_field_elems::<_, VestaFqSponge>(&*SRS, *DOMAIN, elems); let blob = FieldBlob::::encode::<_, VestaFqSponge>(&*SRS, *DOMAIN, &xs); - prop_assert_eq!(user_commitments, blob.commitment.chunks); + prop_assert_eq!(user_commitments, blob.commitment); } } } diff --git a/saffron/src/commitment.rs b/saffron/src/commitment.rs index 772ffde908..5b9aada956 100644 --- a/saffron/src/commitment.rs +++ b/saffron/src/commitment.rs @@ -39,22 +39,27 @@ impl Commitment { } #[instrument(skip_all, level = "debug")] -pub fn commit_to_field_elems( +pub fn commit_to_field_elems( srs: &SRS, domain: D, field_elems: Vec>, -) -> Vec> { - field_elems +) -> Commitment +where + EFqSponge: Clone + FqSponge, +{ + let commitments = field_elems .par_iter() .map(|chunk| { let evals = Evaluations::from_vec_and_domain(chunk.to_vec(), domain); srs.commit_evaluations_non_hiding(domain, &evals) }) - .collect() + .collect(); + let mut sponge = EFqSponge::new(G::other_curve_sponge_params()); + Commitment::from_chunks(commitments, &mut sponge) } #[instrument(skip_all, level = "debug")] -pub fn fold_commitments>( +fn fold_commitments>( sponge: &mut EFqSponge, commitments: &[PolyComm], ) -> (PolyComm, G::ScalarField) { @@ -75,16 +80,3 @@ pub fn fold_commitments>( - srs: &SRS, - domain: D, - field_elems: Vec>, -) -> PolyComm { - let commitments = commit_to_field_elems(srs, domain, field_elems); - let (commitment, _) = { - let mut sponge = EFqSponge::new(G::other_curve_sponge_params()); - fold_commitments(&mut sponge, &commitments) - }; - commitment -} diff --git a/saffron/src/main.rs b/saffron/src/main.rs index 23ca073ca2..1a0f4528c5 100644 --- a/saffron/src/main.rs +++ b/saffron/src/main.rs @@ -9,7 +9,7 @@ use rand::rngs::OsRng; use saffron::{ blob::FieldBlob, cli::{self, HexString}, - commitment::user_commitment, + commitment::commit_to_field_elems, env, proof::{self, StorageProof}, utils, @@ -102,7 +102,7 @@ pub fn compute_commitment(args: cli::ComputeCommitmentArgs) -> Result let mut buf = Vec::new(); file.read_to_end(&mut buf)?; let field_elems = utils::encode_for_domain(&domain_fp, &buf); - let commitment = user_commitment::<_, VestaFqSponge>(&srs, domain_fp, field_elems); + let commitment = commit_to_field_elems::<_, VestaFqSponge>(&srs, domain_fp, field_elems); let res = rmp_serde::to_vec(&commitment)?; Ok(HexString(res)) } diff --git a/saffron/src/proof.rs b/saffron/src/proof.rs index 9b53949cd0..4a485fdb49 100644 --- a/saffron/src/proof.rs +++ b/saffron/src/proof.rs @@ -119,7 +119,7 @@ where mod tests { use super::*; use crate::{ - commitment::{commit_to_field_elems, fold_commitments}, + commitment::commit_to_field_elems, env, utils::{encode_for_domain, test_utils::UserData}, }; @@ -153,13 +153,9 @@ mod tests { #[test] fn test_storage_prove_verify(UserData(data) in UserData::arbitrary()) { let mut rng = OsRng; - let (commitment,_) = { + let commitment = { let field_elems = encode_for_domain(&*DOMAIN, &data); - let user_commitments = commit_to_field_elems(&*SRS, *DOMAIN, field_elems); - let mut fq_sponge = VestaFqSponge::new( - mina_poseidon::pasta::fq_kimchi::static_params(), - ); - fold_commitments(&mut fq_sponge, &user_commitments) + commit_to_field_elems::<_, VestaFqSponge>(&*SRS, *DOMAIN, field_elems) }; let blob = FieldBlob::::encode::<_, VestaFqSponge>(&*SRS, *DOMAIN, &data); let evaluation_point = Fp::rand(&mut rng); @@ -170,7 +166,7 @@ mod tests { let res = verify_storage_proof::( &*SRS, &*GROUP_MAP, - commitment, + commitment.folded, evaluation_point, &proof, &mut rng,