Skip to content

Commit ac8aeef

Browse files
authored
refactor: simplify commitment trait (#55)
# Rationale for this change The `Commitment` trait has a `fold_commitments` which is only used internally to the `CommitmentEvaluationProof`, and as a result, is somewhat superfluous, making adding new commitment schemes more complex. # What changes are included in this PR? * `Commitment::fold_commitments` is removed. * `CommitmentEvaluationProof::verify_batched_proof` is no longer a provided method. Instead, `CommitmentEvaluationProof::verify_proof` is a provided method, and implementers must implement `verify_batched_proof` instead. # Are these changes tested? By existing tests.
1 parent bc404ae commit ac8aeef

File tree

4 files changed

+31
-63
lines changed

4 files changed

+31
-63
lines changed

crates/proof-of-sql/src/base/commitment/commitment_evaluation_proof.rs

+25-15
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,18 @@ pub trait CommitmentEvaluationProof {
5252
generators_offset: u64,
5353
table_length: usize,
5454
setup: &Self::VerifierPublicSetup<'_>,
55-
) -> Result<(), Self::Error>;
55+
) -> Result<(), Self::Error> {
56+
self.verify_batched_proof(
57+
transcript,
58+
core::slice::from_ref(a_commit),
59+
&[Self::Scalar::ONE],
60+
product,
61+
b_point,
62+
generators_offset,
63+
table_length,
64+
setup,
65+
)
66+
}
5667
/// Verify a batch proof. This can be more efficient than verifying individual proofs for some schemes.
5768
#[allow(clippy::too_many_arguments)]
5869
fn verify_batched_proof(
@@ -65,17 +76,7 @@ pub trait CommitmentEvaluationProof {
6576
generators_offset: u64,
6677
table_length: usize,
6778
setup: &Self::VerifierPublicSetup<'_>,
68-
) -> Result<(), Self::Error> {
69-
self.verify_proof(
70-
transcript,
71-
&Self::Commitment::fold_commitments(commit_batch, batching_factors),
72-
product,
73-
b_point,
74-
generators_offset,
75-
table_length,
76-
setup,
77-
)
78-
}
79+
) -> Result<(), Self::Error>;
7980
}
8081

8182
#[cfg(feature = "blitzar")]
@@ -107,10 +108,12 @@ impl CommitmentEvaluationProof for InnerProductProof {
107108
generators_offset,
108109
)
109110
}
110-
fn verify_proof(
111+
112+
fn verify_batched_proof(
111113
&self,
112114
transcript: &mut Transcript,
113-
a_commit: &Self::Commitment,
115+
commit_batch: &[Self::Commitment],
116+
batching_factors: &[Self::Scalar],
114117
product: &Self::Scalar,
115118
b_point: &[Self::Scalar],
116119
generators_offset: u64,
@@ -127,7 +130,14 @@ impl CommitmentEvaluationProof for InnerProductProof {
127130
}
128131
self.verify(
129132
transcript,
130-
a_commit,
133+
&commit_batch
134+
.iter()
135+
.zip(batching_factors.iter())
136+
.map(|(c, m)| *m * c)
137+
.fold(Default::default(), |mut a, c| {
138+
a += c;
139+
a
140+
}),
131141
&product.into(),
132142
&slice_ops::slice_cast(b),
133143
generators_offset,

crates/proof-of-sql/src/base/commitment/mod.rs

-14
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,6 @@ pub trait Commitment:
7272
offset: usize,
7373
setup: &Self::PublicSetup<'_>,
7474
);
75-
76-
/// Compute a linear combination of the given commitments: `sum commitment[i] * multiplier[i]`.
77-
fn fold_commitments(commitments: &[Self], multipliers: &[Self::Scalar]) -> Self;
7875
}
7976

8077
impl Commitment for RistrettoPoint {
@@ -112,17 +109,6 @@ impl Commitment for RistrettoPoint {
112109
) {
113110
unimplemented!()
114111
}
115-
116-
fn fold_commitments(commitments: &[Self], multipliers: &[Self::Scalar]) -> Self {
117-
commitments
118-
.iter()
119-
.zip(multipliers.iter())
120-
.map(|(c, m)| *m * c)
121-
.fold(Default::default(), |mut a, c| {
122-
a += c;
123-
a
124-
})
125-
}
126112
}
127113

128114
mod commitment_evaluation_proof;

crates/proof-of-sql/src/proof_primitive/dory/dory_commitment.rs

+1-11
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@ use crate::base::{
2828
impl_serde_for_ark_serde_checked,
2929
scalar::{scalar_conversion_to_int, MontScalar, Scalar, ScalarConversionError},
3030
};
31-
use ark_ec::{pairing::PairingOutput, VariableBaseMSM};
31+
use ark_ec::pairing::PairingOutput;
3232
use ark_serialize::{CanonicalDeserialize, CanonicalSerialize};
33-
use bytemuck::TransparentWrapper;
3433
use core::ops::Mul;
3534
use derive_more::{AddAssign, Neg, Sub, SubAssign};
3635
use num_traits::One;
@@ -60,10 +59,8 @@ impl Scalar for DoryScalar {
6059
SubAssign,
6160
CanonicalSerialize,
6261
CanonicalDeserialize,
63-
TransparentWrapper,
6462
)]
6563
/// The Dory commitment type.
66-
#[repr(transparent)]
6764
pub struct DoryCommitment(pub(super) GT);
6865

6966
/// The default for GT is the the additive identity, but should be the multiplicative identity.
@@ -101,13 +98,6 @@ impl Commitment for DoryCommitment {
10198
let c = super::compute_dory_commitments(committable_columns, offset, setup);
10299
commitments.copy_from_slice(&c);
103100
}
104-
105-
fn fold_commitments(commitments: &[Self], multipliers: &[Self::Scalar]) -> Self {
106-
Self(VariableBaseMSM::msm_unchecked(
107-
TransparentWrapper::peel_slice(commitments),
108-
TransparentWrapper::peel_slice(multipliers),
109-
))
110-
}
111101
}
112102

113103
#[cfg(test)]

crates/proof-of-sql/src/proof_primitive/dory/dory_commitment_evaluation_proof.rs

+5-23
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use super::{
66
};
77
use crate::base::commitment::CommitmentEvaluationProof;
88
use merlin::Transcript;
9-
use num_traits::One;
109
use thiserror::Error;
1110

1211
/// The `CommitmentEvaluationProof` for the Dory PCS.
@@ -63,28 +62,11 @@ impl CommitmentEvaluationProof for DoryEvaluationProof {
6362
messages
6463
}
6564

66-
#[tracing::instrument(name = "DoryEvaluationProof::verify_proof", level = "debug", skip_all)]
67-
fn verify_proof(
68-
&self,
69-
transcript: &mut Transcript,
70-
a_commit: &Self::Commitment,
71-
product: &Self::Scalar,
72-
b_point: &[Self::Scalar],
73-
generators_offset: u64,
74-
_table_length: usize,
75-
setup: &Self::VerifierPublicSetup<'_>,
76-
) -> Result<(), Self::Error> {
77-
self.verify_batched_proof(
78-
transcript,
79-
&[*a_commit],
80-
&[DoryScalar::one()],
81-
product,
82-
b_point,
83-
generators_offset,
84-
_table_length,
85-
setup,
86-
)
87-
}
65+
#[tracing::instrument(
66+
name = "DoryEvaluationProof::verify_batched_proof",
67+
level = "debug",
68+
skip_all
69+
)]
8870
fn verify_batched_proof(
8971
&self,
9072
transcript: &mut Transcript,

0 commit comments

Comments
 (0)