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