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