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}