arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/plonk/plonk_test.go
plonk/plonk_test.goRaw
 1package plonk_test
 2
 3import (
 4	"testing"
 5
 6	"github.com/consensys/gnark-crypto/ecc"
 7	"github.com/consensys/gnark/frontend"
 8	"github.com/consensys/gnark/test"
 9	"github.com/succinctlabs/gnark-plonky2-verifier/plonk"
10	"github.com/succinctlabs/gnark-plonky2-verifier/types"
11	"github.com/succinctlabs/gnark-plonky2-verifier/variables"
12	"github.com/succinctlabs/gnark-plonky2-verifier/verifier"
13)
14
15type TestPlonkCircuit struct {
16	ProofWithPis            variables.ProofWithPublicInputs   `gnark:",public"`
17	VerifierOnlyCircuitData variables.VerifierOnlyCircuitData `gnark:",public"`
18	CommonCircuitData       types.CommonCircuitData
19}
20
21func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
22	commonCircuitData := circuit.CommonCircuitData
23	verifierOnlyCircuitData := circuit.VerifierOnlyCircuitData
24	proofWithPis := circuit.ProofWithPis
25
26	verifierChip := verifier.NewVerifierChip(api, commonCircuitData)
27	publicInputsHash := verifierChip.GetPublicInputsHash(proofWithPis.PublicInputs)
28	proofChallenges := verifierChip.GetChallenges(proofWithPis.Proof, publicInputsHash, verifierOnlyCircuitData)
29
30	plonkChip := plonk.NewPlonkChip(
31		api,
32		commonCircuitData,
33	)
34
35	plonkChip.Verify(proofChallenges, proofWithPis.Proof.Openings, publicInputsHash)
36	return nil
37}
38
39func TestPlonkDecodeBlock(t *testing.T) {
40	assert := test.NewAssert(t)
41
42	proofWithPIsFilename := "../testdata/decode_block/proof_with_public_inputs.json"
43	commonCircuitDataFilename := "../testdata/decode_block/common_circuit_data.json"
44	verifierOnlyCircuitDataFilename := "../testdata/decode_block/verifier_only_circuit_data.json"
45
46	proofWithPis := variables.DeserializeProofWithPublicInputs(types.ReadProofWithPublicInputs(proofWithPIsFilename))
47	commonCircuitData := types.ReadCommonCircuitData(commonCircuitDataFilename)
48	verifierOnlyCircuitData := variables.DeserializeVerifierOnlyCircuitData(types.ReadVerifierOnlyCircuitData(verifierOnlyCircuitDataFilename))
49
50	testCase := func() {
51		circuit := TestPlonkCircuit{
52			proofWithPis,
53			verifierOnlyCircuitData,
54			commonCircuitData,
55		}
56		witness := TestPlonkCircuit{
57			proofWithPis,
58			verifierOnlyCircuitData,
59			commonCircuitData,
60		}
61		err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
62		assert.NoError(err)
63	}
64
65	testCase()
66}