arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/plonky2_verifier/fri_test.go
plonky2_verifier/fri_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 TestFibonacciFriCircuit struct{}
 13
 14func (circuit *TestFibonacciFriCircuit) Define(api frontend.API) error {
 15	proofWithPis := DeserializeProofWithPublicInputs("./data/fibonacci/proof_with_public_inputs.json")
 16	commonCircuitData := DeserializeCommonCircuitData("./data/fibonacci/common_circuit_data.json")
 17	verifierOnlyCircuitData := DeserializeVerifierOnlyCircuitData("./data/fibonacci/verifier_only_circuit_data.json")
 18
 19	field := NewFieldAPI(api)
 20	qe := NewQuadraticExtensionAPI(field, commonCircuitData.DegreeBits)
 21	poseidonChip := poseidon.NewPoseidonChip(api, field)
 22	friChip := NewFriChip(api, field, qe, poseidonChip, &commonCircuitData.FriParams)
 23
 24	zeta := QuadraticExtension{
 25		NewFieldElementFromString("14887793628029982930"),
 26		NewFieldElementFromString("1136137158284059037"),
 27	}
 28	friChallenges := FriChallenges{
 29		FriAlpha: QuadraticExtension{
 30			NewFieldElementFromString("14641715242626918707"),
 31			NewFieldElementFromString("10574243340537902930"),
 32		},
 33		FriBetas:       []QuadraticExtension{},
 34		FriPowResponse: NewFieldElement(82451580476419),
 35		FriQueryIndicies: []F{
 36			NewFieldElement(6790812084677375942),
 37			NewFieldElement(12394212020331474798),
 38			NewFieldElement(16457600747000998582),
 39			NewFieldElement(1543271328932331916),
 40			NewFieldElement(12115726870906958644),
 41			NewFieldElement(6775897107605342797),
 42			NewFieldElement(15989401564746021030),
 43			NewFieldElement(10691676456016926845),
 44			NewFieldElement(1632499470630032007),
 45			NewFieldElement(1317292355445098328),
 46			NewFieldElement(18391440812534384252),
 47			NewFieldElement(17321705613231354333),
 48			NewFieldElement(6176487551308859603),
 49			NewFieldElement(7119835651572002873),
 50			NewFieldElement(3903019169623116693),
 51			NewFieldElement(4886491111111487546),
 52			NewFieldElement(4087641893164620518),
 53			NewFieldElement(13801643080324181364),
 54			NewFieldElement(16993775312274189321),
 55			NewFieldElement(9268202926222765679),
 56			NewFieldElement(10683001302406181735),
 57			NewFieldElement(13359465725531647963),
 58			NewFieldElement(4523327590105620849),
 59			NewFieldElement(4883588003760409588),
 60			NewFieldElement(187699146998097671),
 61			NewFieldElement(14489263557623716717),
 62			NewFieldElement(11748359318238148146),
 63			NewFieldElement(13636347200053048758),
 64		},
 65	}
 66
 67	initialMerkleCaps := []MerkleCap{
 68		verifierOnlyCircuitData.ConstantSigmasCap,
 69		proofWithPis.Proof.WiresCap,
 70		proofWithPis.Proof.PlonkZsPartialProductsCap,
 71		proofWithPis.Proof.QuotientPolysCap,
 72	}
 73
 74	friChip.VerifyFriProof(
 75		commonCircuitData.GetFriInstance(qe, zeta, commonCircuitData.DegreeBits),
 76		proofWithPis.Proof.Openings.ToFriOpenings(),
 77		&friChallenges,
 78		initialMerkleCaps,
 79		&proofWithPis.Proof.OpeningProof,
 80	)
 81
 82	return nil
 83}
 84
 85func TestFibonacciFriProof(t *testing.T) {
 86	assert := test.NewAssert(t)
 87
 88	testCase := func() {
 89		circuit := TestFibonacciFriCircuit{}
 90		witness := TestFibonacciFriCircuit{}
 91		err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
 92		assert.NoError(err)
 93	}
 94
 95	testCase()
 96}
 97
 98type TestLargeDummyFriCircuit struct{}
 99
100func (circuit *TestLargeDummyFriCircuit) Define(api frontend.API) error {
101	proofWithPis := DeserializeProofWithPublicInputs("./data/dummy_2^14_gates/proof_with_public_inputs.json")
102	commonCircuitData := DeserializeCommonCircuitData("./data/dummy_2^14_gates/common_circuit_data.json")
103	verifierOnlyCircuitData := DeserializeVerifierOnlyCircuitData("./data/dummy_2^14_gates/verifier_only_circuit_data.json")
104
105	field := NewFieldAPI(api)
106	qe := NewQuadraticExtensionAPI(field, commonCircuitData.DegreeBits)
107	poseidonChip := poseidon.NewPoseidonChip(api, field)
108	friChip := NewFriChip(api, field, qe, poseidonChip, &commonCircuitData.FriParams)
109
110	zeta := QuadraticExtension{
111		NewFieldElementFromString("17377750363769967882"),
112		NewFieldElementFromString("11921191651424768462"),
113	}
114	friChallenges := FriChallenges{
115		FriAlpha: QuadraticExtension{
116			NewFieldElementFromString("16721004555774385479"),
117			NewFieldElementFromString("10688151135543754663"),
118		},
119		FriBetas: []QuadraticExtension{
120			{
121				NewFieldElementFromString("3312441922957827805"),
122				NewFieldElementFromString("15128092514958289671"),
123			},
124			{
125				NewFieldElementFromString("13630530769060141802"),
126				NewFieldElementFromString("14559883974933163008"),
127			},
128			{
129				NewFieldElementFromString("16146508250083930687"),
130				NewFieldElementFromString("5176346568444408396"),
131			},
132		},
133		FriPowResponse: NewFieldElement(4389),
134		FriQueryIndicies: []F{
135			NewFieldElementFromString("16334967868590615051"),
136			NewFieldElementFromString("2911473540496037915"),
137			NewFieldElementFromString("14887216056886344225"),
138			NewFieldElementFromString("7808811227805914295"),
139			NewFieldElementFromString("2018594961417375749"),
140			NewFieldElementFromString("3733368398777208435"),
141			NewFieldElementFromString("2623035669037055104"),
142			NewFieldElementFromString("299243030573481514"),
143			NewFieldElementFromString("7189789717962704433"),
144			NewFieldElementFromString("14566344026886816268"),
145			NewFieldElementFromString("12555390069003437453"),
146			NewFieldElementFromString("17225508403199418233"),
147			NewFieldElementFromString("5088797913879903292"),
148			NewFieldElementFromString("9715691392773433023"),
149			NewFieldElementFromString("7565836764713256165"),
150			NewFieldElementFromString("1500143546029322929"),
151			NewFieldElementFromString("1245802417104422080"),
152			NewFieldElementFromString("6831959786661245110"),
153			NewFieldElementFromString("17271054758535453780"),
154			NewFieldElementFromString("6225460404576395409"),
155			NewFieldElementFromString("15932661092896277351"),
156			NewFieldElementFromString("12452534049198240575"),
157			NewFieldElementFromString("4225199666055520177"),
158			NewFieldElementFromString("13235091290587791090"),
159			NewFieldElementFromString("2562357622728700774"),
160			NewFieldElementFromString("17676678042980201498"),
161			NewFieldElementFromString("5837067135702409874"),
162			NewFieldElementFromString("11238419549114325157"),
163		},
164	}
165
166	initialMerkleCaps := []MerkleCap{
167		verifierOnlyCircuitData.ConstantSigmasCap,
168		proofWithPis.Proof.WiresCap,
169		proofWithPis.Proof.PlonkZsPartialProductsCap,
170		proofWithPis.Proof.QuotientPolysCap,
171	}
172
173	friChip.VerifyFriProof(
174		commonCircuitData.GetFriInstance(qe, zeta, commonCircuitData.DegreeBits),
175		proofWithPis.Proof.Openings.ToFriOpenings(),
176		&friChallenges,
177		initialMerkleCaps,
178		&proofWithPis.Proof.OpeningProof,
179	)
180
181	return nil
182}
183
184func TestLargeDummyFriProof(t *testing.T) {
185	assert := test.NewAssert(t)
186
187	testCase := func() {
188		circuit := TestLargeDummyFriCircuit{}
189		witness := TestLargeDummyFriCircuit{}
190		err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
191		assert.NoError(err)
192	}
193
194	testCase()
195}