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	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}