gnark-plonky2-verifier/plonky2_verifier/verifier.go
plonky2_verifier/verifier.goRaw
1package plonky2_verifier
2
3import (
4 . "gnark-ed25519/field"
5 "gnark-ed25519/poseidon"
6
7 "github.com/consensys/gnark/frontend"
8)
9
10type VerifierChip struct {
11 api frontend.API
12 field frontend.API
13 poseidonChip poseidon.PoseidonChip
14}
15
16func (c *VerifierChip) GetPublicInputsHash(publicInputs []F) Hash {
17 return c.poseidonChip.HashNoPad(publicInputs)
18}
19
20func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicInputsHash Hash, commonData CommonCircuitData) ProofChallenges {
21 config := commonData.Config
22 numChallenges := config.NumChallenges
23 challenger := NewChallengerChip(c.api, c.field, c.poseidonChip)
24
25 challenger.ObserveHash(commonData.CircuitDigest)
26 challenger.ObserveHash(publicInputsHash)
27 challenger.ObserveCap(proofWithPis.Proof.WiresCap)
28 plonkBetas := challenger.GetNChallenges(numChallenges)
29 plonkGammas := challenger.GetNChallenges(numChallenges)
30
31 challenger.ObserveCap(proofWithPis.Proof.PlonkZsPartialProductsCap)
32 plonkAlphas := challenger.GetNChallenges(numChallenges)
33
34 challenger.ObserveCap(proofWithPis.Proof.QuotientPolysCap)
35 plonkZeta := challenger.GetExtensionChallenge()
36
37 _, _, _, _ = plonkAlphas, plonkBetas, plonkGammas, plonkZeta
38
39 challenger.ObserveOpenings(proofWithPis.Proof.Openings.ToFriOpenings())
40
41 return ProofChallenges{
42 PlonkBetas: plonkBetas,
43 PlonkGammas: plonkGammas,
44 PlonkAlphas: plonkAlphas,
45 PlonkZeta: plonkZeta,
46 FriChallenges: challenger.GetFriChallenges(
47 proofWithPis.Proof.OpeningProof.CommitPhaseMerkleCaps,
48 proofWithPis.Proof.OpeningProof.FinalPoly,
49 proofWithPis.Proof.OpeningProof.PowWitness,
50 commonData.DegreeBits, config.FriConfig,
51 ),
52 }
53}
54
55func (c *VerifierChip) Verify(proofWithPis ProofWithPublicInputs, verifierData VerifierOnlyCircuitData, commonData CommonCircuitData) {
56 publicInputsHash := c.GetPublicInputsHash(proofWithPis.PublicInputs)
57 _ = c.GetChallenges(proofWithPis, publicInputsHash, commonData)
58}