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 ProofChallengesFilename string `gnark:"-"`
16}
17
18func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
19 proofWithPis := DeserializeProofWithPublicInputs(circuit.proofWithPIsFilename)
20 commonCircuitData := DeserializeCommonCircuitData(circuit.commonCircuitDataFilename)
21 proofChallenges := DeserializeProofChallenges(circuit.ProofChallengesFilename)
22
23 fieldAPI := NewFieldAPI(api)
24 qeAPI := NewQuadraticExtensionAPI(fieldAPI, commonCircuitData.DegreeBits)
25
26 plonkChip := NewPlonkChip(api, qeAPI, commonCircuitData)
27
28 poseidonChip := poseidon.NewPoseidonChip(api, fieldAPI, qeAPI)
29 publicInputsHash := poseidonChip.HashNoPad(proofWithPis.PublicInputs)
30
31 plonkChip.Verify(proofChallenges, proofWithPis.Proof.Openings, publicInputsHash)
32 return nil
33}
34
35func TestPlonkFibonacci(t *testing.T) {
36 assert := test.NewAssert(t)
37
38 testCase := func() {
39 circuit := TestPlonkCircuit{
40 proofWithPIsFilename: "./data/fibonacci/proof_with_public_inputs.json",
41 commonCircuitDataFilename: "./data/fibonacci/common_circuit_data.json",
42 ProofChallengesFilename: "./data/fibonacci/proof_challenges.json",
43 }
44 witness := TestPlonkCircuit{}
45 err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
46 assert.NoError(err)
47 }
48
49 testCase()
50}
51
52func TestPlonkDummy(t *testing.T) {
53 assert := test.NewAssert(t)
54
55 testCase := func() {
56 circuit := TestPlonkCircuit{
57 proofWithPIsFilename: "./data/dummy_2^14_gates/proof_with_public_inputs.json",
58 commonCircuitDataFilename: "./data/dummy_2^14_gates/common_circuit_data.json",
59 ProofChallengesFilename: "./data/dummy_2^14_gates/proof_challenges.json",
60 }
61 witness := TestPlonkCircuit{}
62 err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
63 assert.NoError(err)
64 }
65
66 testCase()
67}