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-plonky2-verifier/field"
  5	"gnark-plonky2-verifier/poseidon"
  6	"testing"
  7
  8	"github.com/consensys/gnark/frontend"
  9	"github.com/consensys/gnark/test"
 10)
 11
 12type TestPlonkCircuit struct {
 13	proofWithPIsFilename      string `gnark:"-"`
 14	commonCircuitDataFilename string `gnark:"-"`
 15
 16	plonkBetas  []F
 17	plonkGammas []F
 18	plonkAlphas []F
 19	plonkZeta   QuadraticExtension
 20}
 21
 22func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
 23	proofWithPis := DeserializeProofWithPublicInputs(circuit.proofWithPIsFilename)
 24	commonCircuitData := DeserializeCommonCircuitData(circuit.commonCircuitDataFilename)
 25
 26	fieldAPI := NewFieldAPI(api)
 27	qeAPI := NewQuadraticExtensionAPI(fieldAPI, commonCircuitData.DegreeBits)
 28
 29	proofChallenges := ProofChallenges{
 30		PlonkBetas:  circuit.plonkBetas,
 31		PlonkGammas: circuit.plonkGammas,
 32		PlonkAlphas: circuit.plonkAlphas,
 33		PlonkZeta:   circuit.plonkZeta,
 34	}
 35
 36	plonkChip := NewPlonkChip(api, qeAPI, commonCircuitData)
 37
 38	poseidonChip := poseidon.NewPoseidonChip(api, fieldAPI, qeAPI)
 39	publicInputsHash := poseidonChip.HashNoPad(proofWithPis.PublicInputs)
 40
 41	plonkChip.Verify(proofChallenges, proofWithPis.Proof.Openings, publicInputsHash)
 42	return nil
 43}
 44
 45func TestPlonkFibonacci(t *testing.T) {
 46	assert := test.NewAssert(t)
 47
 48	testCase := func() {
 49		circuit := TestPlonkCircuit{
 50			proofWithPIsFilename:      "./data/fibonacci/proof_with_public_inputs.json",
 51			commonCircuitDataFilename: "./data/fibonacci/common_circuit_data.json",
 52
 53			plonkBetas: []F{
 54				NewFieldElementFromString("12973916988745913043"),
 55				NewFieldElementFromString("10729509799707823061"),
 56			},
 57			plonkGammas: []F{
 58				NewFieldElementFromString("13357786390712427342"),
 59				NewFieldElementFromString("13733012568509939467"),
 60			},
 61			plonkAlphas: []F{
 62				NewFieldElementFromString("4421334860622890213"),
 63				NewFieldElementFromString("11104346062293008527"),
 64			},
 65			plonkZeta: QuadraticExtension{
 66				NewFieldElementFromString("18168831211174576204"),
 67				NewFieldElementFromString("14207073590853934065"),
 68			},
 69		}
 70		witness := TestPlonkCircuit{}
 71		err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
 72		assert.NoError(err)
 73	}
 74
 75	testCase()
 76}
 77
 78func TestPlonkDummy(t *testing.T) {
 79	assert := test.NewAssert(t)
 80
 81	testCase := func() {
 82		circuit := TestPlonkCircuit{
 83			proofWithPIsFilename:      "./data/dummy_2^14_gates/proof_with_public_inputs.json",
 84			commonCircuitDataFilename: "./data/dummy_2^14_gates/common_circuit_data.json",
 85
 86			plonkBetas: []F{
 87				NewFieldElementFromString("11216469004148781751"),
 88				NewFieldElementFromString("6201977337075152249"),
 89			},
 90			plonkGammas: []F{
 91				NewFieldElementFromString("8369751006669847974"),
 92				NewFieldElementFromString("3610024170884289835"),
 93			},
 94			plonkAlphas: []F{
 95				NewFieldElementFromString("970160439138448145"),
 96				NewFieldElementFromString("2402201283787401921"),
 97			},
 98			plonkZeta: QuadraticExtension{
 99				NewFieldElementFromString("17377750363769967882"),
100				NewFieldElementFromString("11921191651424768462"),
101			},
102		}
103		witness := TestPlonkCircuit{}
104		err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
105		assert.NoError(err)
106	}
107
108	testCase()
109}