arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/plonky2_verifier/verifier_test.go
plonky2_verifier/verifier_test.goRaw
  1package plonky2_verifier
  2
  3import (
  4	. "gnark-ed25519/field"
  5	. "gnark-ed25519/poseidon"
  6	"testing"
  7
  8	"github.com/consensys/gnark/frontend"
  9	"github.com/consensys/gnark/test"
 10)
 11
 12type TestVerifierCircuit struct{}
 13
 14func (c *VerifierChip) GetChallengesSanityCheck(proofWithPis ProofWithPublicInputs, verifierData VerifierOnlyCircuitData, commonData CommonCircuitDataRaw) {
 15	publicInputsHash := c.GetPublicInputsHash(proofWithPis.PublicInputs)
 16	proofChallenges := c.GetChallenges(proofWithPis, publicInputsHash, commonData)
 17
 18	expectedPublicInputsHash := [4]F{
 19		NewFieldElementFromString("8416658900775745054"),
 20		NewFieldElementFromString("12574228347150446423"),
 21		NewFieldElementFromString("9629056739760131473"),
 22		NewFieldElementFromString("3119289788404190010"),
 23	}
 24
 25	for i := 0; i < 4; i++ {
 26		c.field.AssertIsEqual(publicInputsHash[i], expectedPublicInputsHash[i])
 27	}
 28
 29	expectedPlonkBetas := [2]F{
 30		NewFieldElementFromString("4678728155650926271"),
 31		NewFieldElementFromString("13611962404289024887"),
 32	}
 33
 34	for i := 0; i < 2; i++ {
 35		c.field.AssertIsEqual(proofChallenges.PlonkBetas[i], expectedPlonkBetas[i])
 36	}
 37
 38	expectedPlonkGammas := [2]F{
 39		NewFieldElementFromString("13237663823305715949"),
 40		NewFieldElementFromString("15389314098328235145"),
 41	}
 42
 43	for i := 0; i < 2; i++ {
 44		c.field.AssertIsEqual(proofChallenges.PlonkGammas[i], expectedPlonkGammas[i])
 45	}
 46
 47	expectedPlonkAlphas := [2]F{
 48		NewFieldElementFromString("14505919539124304197"),
 49		NewFieldElementFromString("1695455639263736117"),
 50	}
 51
 52	for i := 0; i < 2; i++ {
 53		c.field.AssertIsEqual(proofChallenges.PlonkAlphas[i], expectedPlonkAlphas[i])
 54	}
 55
 56	expectedPlonkZetas := [2]F{
 57		NewFieldElementFromString("14887793628029982930"),
 58		NewFieldElementFromString("1136137158284059037"),
 59	}
 60
 61	for i := 0; i < 2; i++ {
 62		c.field.AssertIsEqual(proofChallenges.PlonkZeta[i], expectedPlonkZetas[i])
 63	}
 64
 65	expectedFriAlpha := [2]F{
 66		NewFieldElementFromString("14641715242626918707"),
 67		NewFieldElementFromString("10574243340537902930"),
 68	}
 69
 70	for i := 0; i < 2; i++ {
 71		c.field.AssertIsEqual(proofChallenges.FriChallenges.FriAlpha[i], expectedFriAlpha[i])
 72	}
 73
 74	// This test is commented out because pow_witness is randomized between runs of the prover.
 75	// expectedPowResponse := NewFieldElementFromString("92909863298412")
 76	// c.field.AssertIsEqual(proofChallenges.FriChallenges.FriPowResponse, expectedPowResponse)
 77}
 78
 79func (circuit *TestVerifierCircuit) Define(api frontend.API) error {
 80	field := NewFieldAPI(api)
 81	poseidonChip := NewPoseidonChip(api, field)
 82	verifierChip := VerifierChip{api: api, field: field, poseidonChip: *poseidonChip}
 83	proofWithPis := DeserializeProofWithPublicInputs("./data/fibonacci/proof_with_public_inputs.json")
 84	commonCircuitData := DeserializeCommonCircuitData("./data/fibonacci/common_circuit_data.json")
 85	verfierOnlyCircuitData := DeserializeVerifierOnlyCircuitData("./data/fibonacci/verifier_only_circuit_data.json")
 86	verifierChip.GetChallengesSanityCheck(proofWithPis, verfierOnlyCircuitData, commonCircuitData)
 87	return nil
 88}
 89
 90func TestVerifierWitness(t *testing.T) {
 91	assert := test.NewAssert(t)
 92
 93	testCase := func() {
 94		circuit := TestVerifierCircuit{}
 95		witness := TestVerifierCircuit{}
 96		err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
 97		assert.NoError(err)
 98	}
 99
100	testCase()
101}