gnark-plonky2-verifier/plonky2_verifier/plonk_test.go
plonky2_verifier/plonk_test.goRaw
1package plonky2_verifier
2
3import (
4 . "gnark-plonky2-verifier/field"
5 "gnark-plonky2-verifier/poseidon"
6 "testing"
7
8 "github.com/consensys/gnark/frontend"
9 "github.com/consensys/gnark/test"
10)
11
12type TestPlonkCircuit struct {
13 proofWithPIsFilename string `gnark:"-"`
14 commonCircuitDataFilename string `gnark:"-"`
15
16 plonkBetas []F
17 plonkGammas []F
18 plonkAlphas []F
19 plonkZeta QuadraticExtension
20}
21
22func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
23 proofWithPis := DeserializeProofWithPublicInputs(circuit.proofWithPIsFilename)
24 commonCircuitData := DeserializeCommonCircuitData(circuit.commonCircuitDataFilename)
25
26 field := NewFieldAPI(api)
27 qe := NewQuadraticExtensionAPI(field, commonCircuitData.DegreeBits)
28
29 proofChallenges := ProofChallenges{
30 PlonkBetas: circuit.plonkBetas,
31 PlonkGammas: circuit.plonkGammas,
32 PlonkAlphas: circuit.plonkAlphas,
33 PlonkZeta: circuit.plonkZeta,
34 }
35
36 plonkChip := NewPlonkChip(api, qe, commonCircuitData)
37
38 poseidonChip := poseidon.NewPoseidonChip(api, field)
39 publicInputsHash := poseidonChip.HashNoPad(proofWithPis.PublicInputs)
40
41 plonkChip.Verify(proofChallenges, proofWithPis.Proof.Openings, publicInputsHash)
42 return nil
43}
44
45func TestPlonkFibonacci(t *testing.T) {
46 assert := test.NewAssert(t)
47
48 testCase := func() {
49 circuit := TestPlonkCircuit{
50 proofWithPIsFilename: "./data/fibonacci/proof_with_public_inputs.json",
51 commonCircuitDataFilename: "./data/fibonacci/common_circuit_data.json",
52
53 plonkBetas: []F{
54 NewFieldElementFromString("4678728155650926271"),
55 NewFieldElementFromString("13611962404289024887"),
56 },
57 plonkGammas: []F{
58 NewFieldElementFromString("13237663823305715949"),
59 NewFieldElementFromString("15389314098328235145"),
60 },
61 plonkAlphas: []F{
62 NewFieldElementFromString("14505919539124304197"),
63 NewFieldElementFromString("1695455639263736117"),
64 },
65 plonkZeta: QuadraticExtension{
66 NewFieldElementFromString("14887793628029982930"),
67 NewFieldElementFromString("1136137158284059037"),
68 },
69 }
70 witness := TestPlonkCircuit{}
71 err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
72 assert.NoError(err)
73 }
74
75 testCase()
76}
77
78func TestPlonkDummy(t *testing.T) {
79 assert := test.NewAssert(t)
80
81 testCase := func() {
82 circuit := TestPlonkCircuit{
83 proofWithPIsFilename: "./data/dummy_2^14_gates/proof_with_public_inputs.json",
84 commonCircuitDataFilename: "./data/dummy_2^14_gates/common_circuit_data.json",
85
86 plonkBetas: []F{
87 NewFieldElementFromString("11216469004148781751"),
88 NewFieldElementFromString("6201977337075152249"),
89 },
90 plonkGammas: []F{
91 NewFieldElementFromString("8369751006669847974"),
92 NewFieldElementFromString("3610024170884289835"),
93 },
94 plonkAlphas: []F{
95 NewFieldElementFromString("970160439138448145"),
96 NewFieldElementFromString("2402201283787401921"),
97 },
98 plonkZeta: QuadraticExtension{
99 NewFieldElementFromString("17377750363769967882"),
100 NewFieldElementFromString("11921191651424768462"),
101 },
102 }
103 witness := TestPlonkCircuit{}
104 err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
105 assert.NoError(err)
106 }
107
108 testCase()
109}