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