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