arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/verifier/internal/plonk/plonk_test.go
verifier/internal/plonk/plonk_test.goRaw
 1package plonk_test
 2
 3import (
 4	"testing"
 5
 6	"github.com/consensys/gnark/frontend"
 7	"github.com/consensys/gnark/test"
 8	"github.com/succinctlabs/gnark-plonky2-verifier/field"
 9	"github.com/succinctlabs/gnark-plonky2-verifier/verifier"
10	"github.com/succinctlabs/gnark-plonky2-verifier/verifier/internal/plonk"
11	"github.com/succinctlabs/gnark-plonky2-verifier/verifier/utils"
12)
13
14type TestPlonkCircuit struct {
15	proofWithPIsFilename            string `gnark:"-"`
16	commonCircuitDataFilename       string `gnark:"-"`
17	verifierOnlyCircuitDataFilename string `gnark:"-"`
18}
19
20func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
21	proofWithPis := utils.DeserializeProofWithPublicInputs(circuit.proofWithPIsFilename)
22	commonCircuitData := utils.DeserializeCommonCircuitData(circuit.commonCircuitDataFilename)
23	verifierOnlyCircuitData := utils.DeserializeVerifierOnlyCircuitData(circuit.verifierOnlyCircuitDataFilename)
24
25	verifierChip := verifier.NewVerifierChip(api, commonCircuitData)
26	publicInputsHash := verifierChip.GetPublicInputsHash(proofWithPis.PublicInputs)
27	proofChallenges := verifierChip.GetChallenges(proofWithPis.Proof, publicInputsHash, commonCircuitData, verifierOnlyCircuitData)
28
29	fieldAPI := field.NewFieldAPI(api)
30	qeAPI := field.NewQuadraticExtensionAPI(api, fieldAPI)
31	plonkChip := plonk.NewPlonkChip(
32		api,
33		qeAPI,
34		commonCircuitData,
35	)
36
37	plonkChip.Verify(proofChallenges, proofWithPis.Proof.Openings, publicInputsHash)
38	return nil
39}
40
41func TestPlonkDecodeBlock(t *testing.T) {
42	assert := test.NewAssert(t)
43
44	testCase := func() {
45		circuit := TestPlonkCircuit{
46			proofWithPIsFilename:            "../../data/decode_block/proof_with_public_inputs.json",
47			commonCircuitDataFilename:       "../../data/decode_block/common_circuit_data.json",
48			verifierOnlyCircuitDataFilename: "../../data/decode_block/verifier_only_circuit_data.json",
49		}
50		witness := TestPlonkCircuit{}
51		err := test.IsSolved(&circuit, &witness, field.TEST_CURVE.ScalarField())
52		assert.NoError(err)
53	}
54
55	testCase()
56}