arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/plonky2_verifier/plonk_test.go
plonky2_verifier/plonk_test.goRaw
  1package plonky2_verifier
  2
  3import (
  4	. "gnark-ed25519/field"
  5	"testing"
  6
  7	"github.com/consensys/gnark/frontend"
  8	"github.com/consensys/gnark/test"
  9)
 10
 11type TestPlonkCircuit struct {
 12	proofWithPIsFilename      string `gnark:"-"`
 13	commonCircuitDataFilename string `gnark:"-"`
 14
 15	plonkBetas  []F
 16	plonkGammas []F
 17	plonkAlphas []F
 18	plonkZeta   QuadraticExtension
 19}
 20
 21func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
 22	proofWithPis := DeserializeProofWithPublicInputs(circuit.proofWithPIsFilename)
 23	commonCircuitData := DeserializeCommonCircuitData(circuit.commonCircuitDataFilename)
 24
 25	field := NewFieldAPI(api)
 26	qe := NewQuadraticExtensionAPI(field, commonCircuitData.DegreeBits)
 27
 28	proofChallenges := ProofChallenges{
 29		PlonkBetas:  circuit.plonkBetas,
 30		PlonkGammas: circuit.plonkGammas,
 31		PlonkAlphas: circuit.plonkAlphas,
 32		PlonkZeta:   circuit.plonkZeta,
 33	}
 34
 35	plonkChip := NewPlonkChip(api, qe, commonCircuitData)
 36
 37	plonkChip.Verify(proofChallenges, proofWithPis.Proof.Openings)
 38	return nil
 39}
 40
 41func TestPlonkFibonacci(t *testing.T) {
 42	assert := test.NewAssert(t)
 43
 44	testCase := func() {
 45		circuit := TestPlonkCircuit{
 46			proofWithPIsFilename:      "./data/fibonacci/proof_with_public_inputs.json",
 47			commonCircuitDataFilename: "./data/fibonacci/common_circuit_data.json",
 48
 49			plonkBetas: []F{
 50				NewFieldElementFromString("4678728155650926271"),
 51				NewFieldElementFromString("13611962404289024887"),
 52			},
 53			plonkGammas: []F{
 54				NewFieldElementFromString("13237663823305715949"),
 55				NewFieldElementFromString("15389314098328235145"),
 56			},
 57			plonkAlphas: []F{
 58				NewFieldElementFromString("14505919539124304197"),
 59				NewFieldElementFromString("1695455639263736117"),
 60			},
 61			plonkZeta: QuadraticExtension{
 62				NewFieldElementFromString("14887793628029982930"),
 63				NewFieldElementFromString("1136137158284059037"),
 64			},
 65		}
 66		witness := TestPlonkCircuit{}
 67		err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
 68		assert.NoError(err)
 69	}
 70
 71	testCase()
 72}
 73
 74func TestPlonkDummy(t *testing.T) {
 75	assert := test.NewAssert(t)
 76
 77	testCase := func() {
 78		circuit := TestPlonkCircuit{
 79			proofWithPIsFilename:      "./data/dummy_2^14_gates/proof_with_public_inputs.json",
 80			commonCircuitDataFilename: "./data/dummy_2^14_gates/common_circuit_data.json",
 81
 82			plonkBetas: []F{
 83				NewFieldElementFromString("11216469004148781751"),
 84				NewFieldElementFromString("6201977337075152249"),
 85			},
 86			plonkGammas: []F{
 87				NewFieldElementFromString("8369751006669847974"),
 88				NewFieldElementFromString("3610024170884289835"),
 89			},
 90			plonkAlphas: []F{
 91				NewFieldElementFromString("970160439138448145"),
 92				NewFieldElementFromString("2402201283787401921"),
 93			},
 94			plonkZeta: QuadraticExtension{
 95				NewFieldElementFromString("17377750363769967882"),
 96				NewFieldElementFromString("11921191651424768462"),
 97			},
 98		}
 99		witness := TestPlonkCircuit{}
100		err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
101		assert.NoError(err)
102	}
103
104	testCase()
105}