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.DeserializeCommonCircuitData(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}