-
Notifications
You must be signed in to change notification settings - Fork 130
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: refactor the verify api #359
Changes from all commits
75126ac
4f68012
735f164
bce0beb
e5153c4
9fc59c1
02b8078
7e27637
c4bfe60
6061bf6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -120,16 +120,14 @@ where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
E::G1: CurveExt<AffineExt = E::G1Affine>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
E::G2Affine: SerdeCurveAffine, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type Output = Self; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn new(params: &'params ParamsVerifierKZG<E>) -> Self { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AccumulatorStrategy::new(params) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn process( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mut self, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
f: impl FnOnce(V::MSMAccumulator) -> Result<V::Guard, Error>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) -> Result<Self::Output, Error> { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) -> Result<Self, Error> { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.msm_accumulator.scale(E::Fr::random(OsRng)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Guard is updated with new msm contributions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -155,29 +153,26 @@ where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
E::G1: CurveExt<AffineExt = E::G1Affine>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
E::G2Affine: SerdeCurveAffine, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type Output = (); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I see that all the implementations of Also, I think we should discourage the usage of verification functions that return the Or is there any strong reason to keep the API that takes and returns a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like the proposal from @ed255 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @ed255
This is related to halo2/halo2_backend/src/plonk/verifier/batch.rs Lines 93 to 129 in 9fc59c1
The BatchVerifier delays the MSM check until it accumulates all the MSM from every batch items.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The current state of this PR looks good to me (removal of |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn new(params: &'params ParamsVerifierKZG<E>) -> Self { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Self::new(params) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn process( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
self, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
f: impl FnOnce(V::MSMAccumulator) -> Result<V::Guard, Error>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) -> Result<Self::Output, Error> { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) -> Result<Self, Error> { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Guard is updated with new msm contributions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let guard = f(self.msm)?; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let msm = guard.msm_accumulator; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Verification is (supposedly) cheap, hence we don't use an accelerator engine | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let default_engine = H2cEngine::new(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if msm.check(&default_engine, &self.params) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ok(()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Err(Error::ConstraintSystemFailure) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ok(Self { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
msm, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
params: self.params, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn finalize(self) -> bool { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
unreachable!(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Verification is (supposedly) cheap, hence we don't use an accelerator engine | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let default_engine = H2cEngine::new(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.msm.check(&default_engine, &self.params) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we file an issue for the TODO?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I think we should.
We can discuss if it is worthy or not, to apply
ZkAccel
on verification.