arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/verifier/verifier_test.go
verifier/verifier_test.goRaw
  1package verifier_test
  2
  3import (
  4	"testing"
  5
  6	"github.com/consensys/gnark-crypto/ecc"
  7	"github.com/consensys/gnark/backend"
  8	"github.com/consensys/gnark/frontend"
  9	"github.com/consensys/gnark/std/math/emulated"
 10	"github.com/consensys/gnark/test"
 11	"github.com/succinctlabs/gnark-plonky2-verifier/field"
 12	"github.com/succinctlabs/gnark-plonky2-verifier/verifier"
 13	"github.com/succinctlabs/gnark-plonky2-verifier/verifier/common"
 14	"github.com/succinctlabs/gnark-plonky2-verifier/verifier/utils"
 15)
 16
 17type TestVerifierCircuit struct {
 18	Proof        common.Proof
 19	PublicInputs []field.F `gnark:",public"`
 20
 21	verifierChip       *verifier.VerifierChip `gnark:"-"`
 22	plonky2CircuitName string                 `gnark:"-"`
 23}
 24
 25func (c *TestVerifierCircuit) Define(api frontend.API) error {
 26	circuitDirname := "./data/" + c.plonky2CircuitName + "/"
 27	commonCircuitData := utils.DeserializeCommonCircuitData(circuitDirname + "common_circuit_data.json")
 28	verifierOnlyCircuitData := utils.DeserializeVerifierOnlyCircuitData(circuitDirname + "verifier_only_circuit_data.json")
 29
 30	c.verifierChip = verifier.NewVerifierChip(api, commonCircuitData)
 31
 32	c.verifierChip.Verify(c.Proof, c.PublicInputs, verifierOnlyCircuitData, commonCircuitData)
 33
 34	return nil
 35}
 36
 37func TestStepVerifier(t *testing.T) {
 38	assert := test.NewAssert(t)
 39
 40	testCase := func() {
 41		plonky2Circuit := "step"
 42		proofWithPis := utils.DeserializeProofWithPublicInputs("./data/" + plonky2Circuit + "/proof_with_public_inputs.json")
 43		circuit := TestVerifierCircuit{
 44			plonky2CircuitName: plonky2Circuit,
 45			Proof:              proofWithPis.Proof,
 46			PublicInputs:       proofWithPis.PublicInputs,
 47		}
 48
 49		proofWithPis2 := utils.DeserializeProofWithPublicInputs("./data/" + plonky2Circuit + "/proof_with_public_inputs.json")
 50		witness := TestVerifierCircuit{
 51			plonky2CircuitName: plonky2Circuit,
 52			Proof:              proofWithPis2.Proof,
 53			PublicInputs:       proofWithPis2.PublicInputs,
 54		}
 55
 56		err := test.IsSolved(&circuit, &witness, field.TEST_CURVE.ScalarField())
 57		assert.NoError(err)
 58	}
 59	testCase()
 60}
 61
 62func TestStepVerifier2(t *testing.T) {
 63	assert := test.NewAssert(t)
 64
 65	plonky2Circuit := "step"
 66	proofWithPis := utils.DeserializeProofWithPublicInputs("./data/" + plonky2Circuit + "/proof_with_public_inputs.json")
 67	circuit := TestVerifierCircuit{
 68		plonky2CircuitName: plonky2Circuit,
 69		Proof:              proofWithPis.Proof,
 70		PublicInputs:       proofWithPis.PublicInputs,
 71	}
 72
 73	proofWithPis2 := utils.DeserializeProofWithPublicInputs("./data/" + plonky2Circuit + "/proof_with_public_inputs.json")
 74	witness := TestVerifierCircuit{
 75		plonky2CircuitName: plonky2Circuit,
 76		Proof:              proofWithPis2.Proof,
 77		PublicInputs:       proofWithPis2.PublicInputs,
 78	}
 79
 80	assert.ProverSucceeded(
 81		&circuit,
 82		&witness,
 83		test.WithBackends(backend.GROTH16),
 84		test.WithCurves(ecc.BN254),
 85		test.NoFuzzing(),
 86		test.NoSerialization(),
 87	)
 88}
 89
 90type testCircuit struct {
 91	Arr      [2]emulated.Element[emulated.Secp256k1Fp]
 92	Expected emulated.Element[emulated.Secp256k1Fp]
 93}
 94
 95func (circuit *testCircuit) Define(api frontend.API) error {
 96	field, _ := emulated.NewField[emulated.Secp256k1Fp](api)
 97
 98	mulRes := field.Mul(&circuit.Arr[0], &circuit.Arr[1])
 99	field.AssertIsEqual(mulRes, &circuit.Expected)
100
101	return nil
102}
103
104func TestMain(t *testing.T) {
105	assert := test.NewAssert(t)
106
107	var circuit testCircuit
108
109	assert.ProverSucceeded(
110		&circuit,
111		&testCircuit{
112			Arr: [2]emulated.Element[emulated.Secp256k1Fp]{
113				emulated.ValueOf[emulated.Secp256k1Fp](42),
114				emulated.ValueOf[emulated.Secp256k1Fp](24),
115			},
116			Expected: emulated.ValueOf[emulated.Secp256k1Fp](1008),
117		},
118		test.WithBackends(backend.GROTH16),
119		test.WithCurves(ecc.BN254),
120		test.NoFuzzing(),
121		test.NoSerialization(),
122	)
123}