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