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