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
30 challenger.ObserveHash(circuitDigest)
31 challenger.ObserveHash(publicInputsHash)
32 challenger.ObserveCap(proofWithPis.Proof.WiresCap)
33 plonkBetas := challenger.GetNChallenges(numChallenges)
34 plonkGammas := challenger.GetNChallenges(numChallenges)
35
36 challenger.ObserveCap(proofWithPis.Proof.PlonkZsPartialProductsCap)
37 plonkAlphas := challenger.GetNChallenges(numChallenges)
38
39 challenger.ObserveCap(proofWithPis.Proof.QuotientPolysCap)
40 plonkZeta := challenger.GetExtensionChallenge()
41
42 challenger.ObserveOpenings(proofWithPis.Proof.Openings.ToFriOpenings())
43
44 return ProofChallenges{
45 PlonkBetas: plonkBetas,
46 PlonkGammas: plonkGammas,
47 PlonkAlphas: plonkAlphas,
48 PlonkZeta: plonkZeta,
49 FriChallenges: challenger.GetFriChallenges(
50 proofWithPis.Proof.OpeningProof.CommitPhaseMerkleCaps,
51 proofWithPis.Proof.OpeningProof.FinalPoly,
52 proofWithPis.Proof.OpeningProof.PowWitness,
53 commonData.DegreeBits,
54 config.FriConfig,
55 ),
56 }
57}
58
59func (c *VerifierChip) Verify(proofWithPis ProofWithPublicInputs, verifierData VerifierOnlyCircuitData, commonData CommonCircuitDataRaw) {
60 publicInputsHash := c.GetPublicInputsHash(proofWithPis.PublicInputs)
61 proofChallenges := c.GetChallenges(proofWithPis, publicInputsHash, commonData)
62 fmt.Printf("%+v\n", proofChallenges)
63}