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}