arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
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}