-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlibapi_test.go
347 lines (256 loc) · 27.4 KB
/
libapi_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
package zklib
import (
"crypto/sha256"
"encoding/hex"
"encoding/json"
native_groth16 "github.com/consensys/gnark/backend/groth16"
"github.com/consensys/gnark/std/recursion/groth16"
"github.com/consensys/gnark/test"
txivc "github.com/twostack/zklib/twostack/groth16"
"os"
"testing"
)
func TestNormalCaseProof(t *testing.T) {
//assert := test.NewAssert(t)
//
//BootProofSystem()
//
//normalProofInfo := &txivc.NormalProofInfo{
// RawTx: "0200000001faf3013aab53ae122e6cfdef7720c7a785fed4ce7f8f3dd19379f31e62651c71000000006a47304402200ce76e906d995091f28ca40f4579c358bce832cd0d5c5535e4736e4444f6ba2602204fa80867c48e6016b3fa013633ad87203a18487786d8758ee3fe8a6ad5efdf06412103f368e789ce7c6152cc3a36f9c68e69b93934ce0b8596f9cd8032061d5feff4fffeffffff020065cd1d000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac1e64cd1d000000001976a914ce3e1e6345551bed999b48ab8b2ebb1ca880bcda88ac70000000",
// InputIndex: 0,
// IsParentBase: true,
// Proof: "{\"Ar\":{\"X\":\"23250124629382285329043156904204316213560508937793354062801908928466073175528908695244480726690\",\"Y\":\"30099908381134214988158316647719160798969769773385893320085419943451274048300091905585414377266\"},\"Krs\":{\"X\":\"21148487360211791746930256607345951513216807873838815976955942231045255909901461192044632193651\",\"Y\":\"1558591939640308912870638745065281904863729674462319893747272758757772666049068202637295659236\"},\"Bs\":{\"X\":{\"B0\":{\"A0\":\"33441242639621228325895347848263139378235477556171336826445900856689042301775447626695727686479\",\"A1\":\"10445589676826347812008002283895804152994021771701189311522802985085122935215887145717478923830\"},\"B1\":{\"A0\":\"32419728049336400139973478031984556343521556509304487650609004233784145500011815481407168487765\",\"A1\":\"15152474275109683203432471098925388071132643819938254833198053388611511341940854488268916415774\"}},\"Y\":{\"B0\":{\"A0\":\"3153039483792982872771942467033338685485882205294674989660338878777929455615910004612821303269\",\"A1\":\"25561496374069377301191901246944545165626830426435749785057503636577759258655132932835326329531\"},\"B1\":{\"A0\":\"29977054127323204336561755821619903402121873267856720930214113198765771809308685827350643542374\",\"A1\":\"3878374258645092948456870657115567151848772952126359113173000645667861140165589371096426194860\"}}},\"Commitments\":[{\"X\":\"22772566425763275324288249198299142349610635356954345898763567839413983122700519454219066407884\",\"Y\":\"22496838958158068918428294790408357072819966726037182732162265694350033585369165397368079826099\"}],\"CommitmentPok\":{\"X\":\"32514580108000270101689748849407949878294977608303953061397516916500935978217844825012346408874\",\"Y\":\"19696440796297422283571333489011186302628169823098040024205360269111471946928741635295605258238\"}}",
//}
//
//_, err := CreateNormalCaseProof(normalProofInfo)
//assert.NoError(err)
//err = test.IsSolved(outerCircuit, &outerAssignment, outerField)
//assert.NoError(err)
//normalCircuit := &txivc.Sha256Circuit[txivc.ScalarField, txivc.G1Affine, txivc.G2Affine, txivc.GTEl]{
//
//}
//publicWitness := &txivc.Sha256Circuit[]{}
//
//err = native_groth16.Verify(proof, verifyingKey, publicWitness, normalProof.verifierOptions)
//assert.NoError(err)
}
/* make readSetupParams private. Last run passed.
func TestBaseCaseViaFile(t *testing.T) {
assert := test.NewAssert(t)
innerField := ecc.BLS24_315.ScalarField()
outerField := ecc.BW6_633.ScalarField()
fullTxBytes, _ := hex.DecodeString("020000000190bc0a14e94cdd565265d79c4f9bed0f6404241f3fb69d6458b30b41611317f7000000004847304402204e643ff6ed0e3c3e1e83f3e2c74a9d0613849bb624c1d12351f1152cf91ebc1f02205deaa38e3f8f8e43d1979f999c03ffa65b9087c1a6545ecffa2b7898c042bcb241feffffff0200ca9a3b000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac40276bee000000001976a9142dbbeab87bd7a8fca8b2761e5d798dfd76d5af4988ac6f000000")
baseCcs, provingKey, verifyingKey, err := readSetupParams(len(fullTxBytes), innerField, 0)
assert.NoError(err)
firstHash := sha256.Sum256(fullTxBytes)
genesisTxId := sha256.Sum256(firstHash[:])
genesisWitness, err := txivc.CreateBaseCaseFullWitness(fullTxBytes, genesisTxId)
assert.NoError(err)
genesisProof, err := native_groth16.Prove(baseCcs, provingKey, genesisWitness, groth16.GetNativeProverOptions(outerField, innerField))
assert.NoError(err)
publicWitness, err := txivc.CreateBaseCaseLightWitness(genesisTxId[:], txivc.InnerCurve.ScalarField())
//publicWitness, err := genesisWitness.Public()
assert.NoError(err)
jsonProof, err := json.Marshal(genesisProof) //proof to bytes
assert.NoError(err)
jsonProofStr := string(jsonProof) //proof to string
deserProof := native_groth16.NewProof(txivc.InnerCurve)
err = json.Unmarshal([]byte(jsonProofStr), &deserProof) //proof from string, via byte[]
assert.NoError(err)
//verify the genesis proof
err = native_groth16.Verify(deserProof, verifyingKey, *publicWitness, groth16.GetNativeVerifierOptions(outerField, innerField))
assert.NoError(err)
//serialize proof to disk. Read back. and verify again.
}
*/
/* make readSetupParams private. Last run passed.
func TestBaseCaseViaProofStruct(t *testing.T) {
assert := test.NewAssert(t)
innerField := ecc.BLS24_315.ScalarField()
outerField := ecc.BW6_633.ScalarField()
fullTxBytes, _ := hex.DecodeString("020000000190bc0a14e94cdd565265d79c4f9bed0f6404241f3fb69d6458b30b41611317f7000000004847304402204e643ff6ed0e3c3e1e83f3e2c74a9d0613849bb624c1d12351f1152cf91ebc1f02205deaa38e3f8f8e43d1979f999c03ffa65b9087c1a6545ecffa2b7898c042bcb241feffffff0200ca9a3b000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac40276bee000000001976a9142dbbeab87bd7a8fca8b2761e5d798dfd76d5af4988ac6f000000")
baseCcs, provingKey, verifyingKey, err := readSetupParams(len(fullTxBytes), innerField, 0)
assert.NoError(err)
firstHash := sha256.Sum256(fullTxBytes)
genesisTxId := sha256.Sum256(firstHash[:])
genesisWitness, err := txivc.CreateBaseCaseFullWitness(fullTxBytes, genesisTxId)
assert.NoError(err)
genesisProof, err := native_groth16.Prove(baseCcs, provingKey, genesisWitness, groth16.GetNativeProverOptions(outerField, innerField))
assert.NoError(err)
publicWitness, err := txivc.CreateBaseCaseLightWitness(genesisTxId[:], txivc.InnerCurve.ScalarField())
//publicWitness, err := genesisWitness.Public()
assert.NoError(err)
jsonProof, err := json.Marshal(genesisProof) //proof to bytes
assert.NoError(err)
jsonProofStr := string(jsonProof) //proof to string
deserProof := native_groth16.NewProof(txivc.InnerCurve)
err = json.Unmarshal([]byte(jsonProofStr), &deserProof) //proof from string, via byte[]
assert.NoError(err)
//verify the genesis proof
err = native_groth16.Verify(deserProof, verifyingKey, *publicWitness, groth16.GetNativeVerifierOptions(outerField, innerField))
assert.NoError(err)
//serialize proof to disk. Read back. and verify again.
}
*/
func TestCanDeserBaseProofAndVerify(t *testing.T) {
assertLib := test.NewAssert(t)
//normal proof
// [{"Ar":{"X":"2098499943635611827667446842175821859396742070111144893530304790654830613544827159873298395164856249146023192021891299280287373344165005441953853427843026892482692497855707334279883102495403","Y":"11140931764602134524560029473761271164864343662502503424919709894072766377989897287456440636869765786831207568819881475526201373748420817841918770005675213529519107838616687028915492263925615"},"Krs":{"X":"17419056746449187875648332293640174848088445872213247067628492236802281401132205096153620170452861625525000092177246229102402204467219604935214201773084891831259661966591850962929275821733951","Y":"12141096958128279542297201040027079656459159534206048826979405619827075544622235053536751963443710853445746288017220326772757501153595452824123842111680371657799723855418557006493370280508355"},"Bs":{"X":"13873233890343896597208387153950299132129990329831890783006679346386683271856547329567621816643355738696345075724734792213465762475832781726215732354904293897511193581813610578559073455367043","Y":"7247415109058500811043885495075868889767108737551822921235620701084658510447998395320899945250439623851110428491031514987096058659863872502096677829734404035978422768149206518178777588791649"},"Commitments":[{"X":"15830274369116669856665710070792119554483848351950689282030275601899496363023199877396929713005148156791002878659782261203865863697779835204919655676894780312680353636079767874700623364166930","Y":"20305640833917431110177423225693759781132201220358595411147936427257755495136047433032567540989628336991659593452142077499055600725344902868070258059707069982277098390942048032289682226729866"}],"CommitmentPok":{"X":"233147384046729452082806548836556086984857730731533088918185221524791603627773609162832576521471955251818362109654722600241859033356313046838861523491204957127669118906696753441570035046239","Y":"19360278205122494843888060592906457690338750317683484206350056258924923157983807863259731527021742819326181854336907884285498279634597030723442561644094623909514510800824566040727732957401672"}}]
//base proof
//jsonStr := "{\"Ar\":{\"X\":\"23250124629382285329043156904204316213560508937793354062801908928466073175528908695244480726690\",\"Y\":\"30099908381134214988158316647719160798969769773385893320085419943451274048300091905585414377266\"},\"Krs\":{\"X\":\"21148487360211791746930256607345951513216807873838815976955942231045255909901461192044632193651\",\"Y\":\"1558591939640308912870638745065281904863729674462319893747272758757772666049068202637295659236\"},\"Bs\":{\"X\":{\"B0\":{\"A0\":\"33441242639621228325895347848263139378235477556171336826445900856689042301775447626695727686479\",\"A1\":\"10445589676826347812008002283895804152994021771701189311522802985085122935215887145717478923830\"},\"B1\":{\"A0\":\"32419728049336400139973478031984556343521556509304487650609004233784145500011815481407168487765\",\"A1\":\"15152474275109683203432471098925388071132643819938254833198053388611511341940854488268916415774\"}},\"Y\":{\"B0\":{\"A0\":\"3153039483792982872771942467033338685485882205294674989660338878777929455615910004612821303269\",\"A1\":\"25561496374069377301191901246944545165626830426435749785057503636577759258655132932835326329531\"},\"B1\":{\"A0\":\"29977054127323204336561755821619903402121873267856720930214113198765771809308685827350643542374\",\"A1\":\"3878374258645092948456870657115567151848772952126359113173000645667861140165589371096426194860\"}}},\"Commitments\":[{\"X\":\"22772566425763275324288249198299142349610635356954345898763567839413983122700519454219066407884\",\"Y\":\"22496838958158068918428294790408357072819966726037182732162265694350033585369165397368079826099\"}],\"CommitmentPok\":{\"X\":\"32514580108000270101689748849407949878294977608303953061397516916500935978217844825012346408874\",\"Y\":\"19696440796297422283571333489011186302628169823098040024205360269111471946928741635295605258238\"}}"
//Genesis Proof : [{"Ar":{"X":"2258773088192828163717538829556119055945379637245065569422914198571186400591806601507016234170","Y":"29531021131745847972683908382660797245380788916709617067460985285888487687975751276291294440819"},"Krs":{"X":"27650868814849716491296411587370257086897943432656110059314153859309978132087430975415825876373","Y":"31814269881916647554026815367785852123597366308788182301908922473506412965139859176351397891655"},"Bs":{"X":{"B0":{"A0":"6431910419276788853664973738342052211403523656966760487508534399556971806481934943749206947839","A1":"38899440879689428250551707391922293854542510451385043705106857902397909112080225023795612559445"},"B1":{"A0":"10484600223059488132611974355846467041485394698954782056649132578614409586593871401755735572335","A1":"13814525859748328032583882375889450066153802911153570242420280173108671672637868215044514516542"}},"Y":{"B0":{"A0":"1426687349383109256289596392083411709172533222381780895207572735286555655177399957287601517140","A1":"25636025107587940624946382394555891639063141954064797738024303741063281370166146077801691596571"},"B1":{"A0":"25119884244047393729900202412539613024305100618572775882982420689956456156628527908130552703395","A1":"12160110516010229474438357207752334557782735749703453985774000086948336319010979804254401509478"}}},"Commitments":[{"X":"5505342484211230345794249291447390204224107456498970699978722115016440790236190047502071010682","Y":"32702625472040761130639991808825406269800493645385497377444564886498748029803112600330923615600"}],"CommitmentPok":{"X":"22399024432381566254975921119124502554474076821241644555768415345940924781183091980619461529078","Y":"15390589694456304201794977437657649358143931207855855986508180924254094620229132650713175629354"}}]
jsonStr := "{\"Ar\":{\"X\":\"13167149168108849166239414123932061301165776912765834039862166346847737350113595216590491096113\",\"Y\":\"16665966917116707430064708400292144790881384837177832912562759555780896265741771526679376067937\"},\"Krs\":{\"X\":\"30718439440430371110897276797656523440718300678135331730545251583121849683738683367818922754037\",\"Y\":\"16078334376787998904349273845962344378427721716909356043172808324216953836111648402836577635103\"},\"Bs\":{\"X\":{\"B0\":{\"A0\":\"7129167024170697406512881253289538107734284237881458109669667162751599316732838760234245839972\",\"A1\":\"37153022488661602798033924040744907184206343219679127506818484619600925378413118036095255554714\"},\"B1\":{\"A0\":\"7319492437684785781538352298917369295383316662609567711212580593065357513492784674236962126023\",\"A1\":\"27542430536841858181680108325847954825807210896910871755544129186700193811911394689589103902281\"}},\"Y\":{\"B0\":{\"A0\":\"5478314747247645057131725099051544421875273437259316463192698990268311850512893809164077862560\",\"A1\":\"24991437244481193066537159107238022302938166093692584289443063082257961918150483953421277625146\"},\"B1\":{\"A0\":\"21134563757307938117972472049425582049321873852531064869525344390306183616386150632981727838444\",\"A1\":\"38643413033732121238531904282262107710871331015888261439956292073019306327932431371737392622547\"}}},\"Commitments\":[{\"X\":\"5505342484211230345794249291447390204224107456498970699978722115016440790236190047502071010682\",\"Y\":\"32702625472040761130639991808825406269800493645385497377444564886498748029803112600330923615600\"}],\"CommitmentPok\":{\"X\":\"22399024432381566254975921119124502554474076821241644555768415345940924781183091980619461529078\",\"Y\":\"15390589694456304201794977437657649358143931207855855986508180924254094620229132650713175629354\"}}"
rawTxBytes, err := hex.DecodeString("020000000190bc0a14e94cdd565265d79c4f9bed0f6404241f3fb69d6458b30b41611317f7000000004847304402204e643ff6ed0e3c3e1e83f3e2c74a9d0613849bb624c1d12351f1152cf91ebc1f02205deaa38e3f8f8e43d1979f999c03ffa65b9087c1a6545ecffa2b7898c042bcb241feffffff0200ca9a3b000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac40276bee000000001976a9142dbbeab87bd7a8fca8b2761e5d798dfd76d5af4988ac6f000000")
//normalInfo := &txivc.NormalProofInfo{
// RawTx: "0200000001faf3013aab53ae122e6cfdef7720c7a785fed4ce7f8f3dd19379f31e62651c71000000006a47304402200ce76e906d995091f28ca40f4579c358bce832cd0d5c5535e4736e4444f6ba2602204fa80867c48e6016b3fa013633ad87203a18487786d8758ee3fe8a6ad5efdf06412103f368e789ce7c6152cc3a36f9c68e69b93934ce0b8596f9cd8032061d5feff4fffeffffff020065cd1d000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac1e64cd1d000000001976a914ce3e1e6345551bed999b48ab8b2ebb1ca880bcda88ac70000000",
// InputIndex: 0,
// IsParentBase: true,
// Proof: "{\"Ar\":{\"X\":\"18834827440829432204413296213765959020191505555628385718537511767690898828963056679127881914537\",\"Y\":\"16470019328531873715582041905165250532825085247757090920641171599915613895312762753227347638338\"},\"Krs\":{\"X\":\"24410580171895596625826316249519071951193262229815601215261173291698707024270851788153404338785\",\"Y\":\"2079927713281624127136889331010614485485495355172136922368820923972023330996548753523921026577\"},\"Bs\":{\"X\":{\"B0\":{\"A0\":\"33457221294563843250210554157658009038809892131351418404184881177839853850086619342841545705074\",\"A1\":\"25987625957669401742048563685066012112884261330911018537032954804462098048769608330002236461212\"},\"B1\":{\"A0\":\"36988886813109287755864744818776007965036766909639695692207213298031043638474995064829294120088\",\"A1\":\"36294059204007249680123040532839798354349841318049637495949595077294713390946590342679430537988\"}},\"Y\":{\"B0\":{\"A0\":\"32123174592607746954617707402300211883694672856447406992386206007155032318322794754923020002064\",\"A1\":\"18081727395069982190266914456425452420297858742348760231691482837905594006538175413646837972150\"},\"B1\":{\"A0\":\"14408606258898926088572400546312990842145220169989455953979888840809302816143993484990767617727\",\"A1\":\"15166081576206605078004306921640547612017428630071466591432022144580226780935620581257182936235\"}}},\"Commitments\":[{\"X\":\"12964950994495450066568872298380045294026983819556662987460190111807515507099156249541375416509\",\"Y\":\"32287518133657023671906266120225940061133703918725663107842703786394829317777894304257102019920\"}],\"CommitmentPok\":{\"X\":\"3330808717954947554648654585678216446087156838329278450070362199433176200397093238558636846147\",\"Y\":\"20167191096935563730728006368478435501554936095591888447668625592711824351575074297347422651730\"}}",
//}
baseccsFile, err := os.OpenFile("baseccs.cbor", os.O_RDONLY, 0444)
baseCcs := native_groth16.NewCS(txivc.InnerCurve)
_, err = baseCcs.ReadFrom(baseccsFile)
baseccsFile.Close()
_, baseVk, _ := native_groth16.Setup(baseCcs)
//load the verifying key from file
innerVKFile, err := os.OpenFile("base_vk.cbor", os.O_RDONLY, 0444) //read-only
assertLib.NoError(err)
//prevTxVk := native_groth16.NewVerifyingKey(txivc.InnerCurve) //curve for inner circuit
//_, err = prevTxVk.ReadFrom(innerVKFile)
//assertLib.NoError(err)
err = innerVKFile.Close()
assertLib.NoError(err)
firstHash := sha256.Sum256(rawTxBytes)
genesisTxId := sha256.Sum256(firstHash[:])
//
prevTxProof := native_groth16.NewProof(txivc.InnerCurve)
//var innerProofBytes = []byte(normalInfo.Proof)
err = json.Unmarshal([]byte(jsonStr), &prevTxProof)
assertLib.NoError(err)
//genesisWitness, err := witness.New(txivc.InnerCurve.ScalarField())
//assertLib.NoError(err)
//genesisHex := "00000020000000000000002000000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000000f30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000ab000000000000000000000000000000000000000000000000000000000000005300000000000000000000000000000000000000000000000000000000000000ae0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000000fd00000000000000000000000000000000000000000000000000000000000000ef0000000000000000000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c700000000000000000000000000000000000000000000000000000000000000a7000000000000000000000000000000000000000000000000000000000000008500000000000000000000000000000000000000000000000000000000000000fe00000000000000000000000000000000000000000000000000000000000000d400000000000000000000000000000000000000000000000000000000000000ce000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000008f000000000000000000000000000000000000000000000000000000000000003d00000000000000000000000000000000000000000000000000000000000000d10000000000000000000000000000000000000000000000000000000000000093000000000000000000000000000000000000000000000000000000000000007900000000000000000000000000000000000000000000000000000000000000f3000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000065000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000071"
//genBytes, err := hex.DecodeString(genesisHex)
//assertLib.NoError(err)
//err = genesisWitness.UnmarshalBinary(genBytes)
//assertLib.NoError(err)
genesisWitness, err := txivc.CreateBaseCaseLightWitness(genesisTxId[:], txivc.InnerCurve.ScalarField())
verifierOptions := groth16.GetNativeVerifierOptions(txivc.OuterCurve.ScalarField(), txivc.InnerCurve.ScalarField())
err = native_groth16.Verify(prevTxProof, baseVk, *genesisWitness, verifierOptions)
assertLib.NoError(err)
}
/*
func TestNormalCase(t *testing.T) {
assertLib := test.NewAssert(t)
BootProofSystem()
//innerField := baseProof.InnerField
//outerField := baseProof.OuterField
innerField := ecc.BLS24_315.ScalarField()
outerField := ecc.BW6_633.ScalarField()
//proverOptions := baseProof.proverOptions
proverOptions := groth16.GetNativeProverOptions(outerField, innerField)
fullTxBytes, _ := hex.DecodeString("020000000190bc0a14e94cdd565265d79c4f9bed0f6404241f3fb69d6458b30b41611317f7000000004847304402204e643ff6ed0e3c3e1e83f3e2c74a9d0613849bb624c1d12351f1152cf91ebc1f02205deaa38e3f8f8e43d1979f999c03ffa65b9087c1a6545ecffa2b7898c042bcb241feffffff0200ca9a3b000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac40276bee000000001976a9142dbbeab87bd7a8fca8b2761e5d798dfd76d5af4988ac6f000000")
firstHash := sha256.Sum256(fullTxBytes)
genesisTxId := sha256.Sum256(firstHash[:])
baseCcs, basePk, baseVk, err := txivc.SetupBaseCase(len(fullTxBytes), innerField)
//baseCcs := baseProof.Ccs
//basePk := baseProof.ProvingKey
//baseVk := baseProof.VerifyingKey
//dump the r1cs for base case to buffer
//var buf bytes.Buffer
if _, err := os.Stat("baseccs.cbor"); errors.Is(err, os.ErrNotExist) {
baseccsFile, err := os.Create("baseccs.cbor")
_, err = baseCcs.WriteTo(baseccsFile)
assertLib.NoError(err)
baseccsFile.Close()
}
genesisWitness, err := txivc.CreateBaseCaseFullWitness(fullTxBytes, genesisTxId)
assertLib.NoError(err)
start := time.Now()
genesisProof, err := native_groth16.Prove(baseCcs, basePk, genesisWitness, proverOptions)
end := time.Since(start)
fmt.Printf("Base Case Proof took : %s\n", end)
jsonBytes, err := json.Marshal(genesisProof)
fmt.Printf("Genesis Proof : [%s]\n", string(jsonBytes))
//can create a lightweight witness here for verification
pubGenWitness, err := txivc.CreateBaseCaseLightWitness(genesisTxId[:], innerField)
assertLib.NoError(err)
err = native_groth16.Verify(genesisProof, baseVk, pubGenWitness, groth16.GetNativeVerifierOptions(outerField, innerField))
assertLib.NoError(err)
//spending tx info. Re-use vars from genesis
prefixBytes, _ := hex.DecodeString("0200000001")
prevTxnIdBytes, _ := hex.DecodeString("faf3013aab53ae122e6cfdef7720c7a785fed4ce7f8f3dd19379f31e62651c71")
postFixBytes, _ := hex.DecodeString("000000006a47304402200ce76e906d995091f28ca40f4579c358bce832cd0d5c5535e4736e4444f6ba2602204fa80867c48e6016b3fa013633ad87203a18487786d8758ee3fe8a6ad5efdf06412103f368e789ce7c6152cc3a36f9c68e69b93934ce0b8596f9cd8032061d5feff4fffeffffff020065cd1d000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac1e64cd1d000000001976a914ce3e1e6345551bed999b48ab8b2ebb1ca880bcda88ac70000000")
fullTxBytes, _ = hex.DecodeString("0200000001faf3013aab53ae122e6cfdef7720c7a785fed4ce7f8f3dd19379f31e62651c71000000006a47304402200ce76e906d995091f28ca40f4579c358bce832cd0d5c5535e4736e4444f6ba2602204fa80867c48e6016b3fa013633ad87203a18487786d8758ee3fe8a6ad5efdf06412103f368e789ce7c6152cc3a36f9c68e69b93934ce0b8596f9cd8032061d5feff4fffeffffff020065cd1d000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac1e64cd1d000000001976a914ce3e1e6345551bed999b48ab8b2ebb1ca880bcda88ac70000000")
//outerAssignment := txivc.CreateOuterAssignment(innerWitness, innerProof, innerVk, prefixBytes, prevTxnIdBytes, postFixBytes, fullTxBytes)
//outerWitness, err := frontend.NewWitness(&outerAssignment, outerField)
firstHash = sha256.Sum256(fullTxBytes)
spendingTxId := sha256.Sum256(firstHash[:])
outerWitness, err := txivc.CreateNormalFullWitness(genesisWitness, genesisProof, baseVk, prefixBytes, prevTxnIdBytes, postFixBytes, spendingTxId[:], normalProof.OuterField)
start = time.Now()
//outerCcs, outerProvingKey, outerVerifyingKey, err := txivc.SetupNormalCase(outerField, baseCcs, innerVk)
outerCcs := normalProof.Ccs
outerProvingKey := normalProof.ProvingKey
outerVerifyingKey := normalProof.VerifyingKey
end = time.Since(start)
fmt.Printf("Normal case setup took : %s\n", end)
assertLib.NoError(err)
start = time.Now()
outerProof, err := native_groth16.Prove(outerCcs, outerProvingKey, outerWitness, normalProof.proverOptions)
end = time.Since(start)
fmt.Printf("Normal case Proof took : %s\n", end)
jsonBytes, err = json.Marshal(outerProof)
fmt.Printf("Normal Proof : [%s]\n", string(jsonBytes))
//verify the normal proof
assertLib.NoError(err)
start = time.Now()
publicWitness, err := outerWitness.Public()
assertLib.NoError(err)
err = native_groth16.Verify(outerProof, outerVerifyingKey, publicWitness, groth16.GetNativeVerifierOptions(outerField, innerField))
assertLib.NoError(err)
end = time.Since(start)
fmt.Printf("Normal case verification took : %s\n", end)
//Let's do the first issuance , proof, vk
//gw, err := plonk.ValueOfWitness[sw_bls12377.ScalarField](genesisWitness)
//issuanceWitness, err := createFullWitness(gw, previousProof, vk, prefixBytes, postFixBytes, genesisPrevTxnIdBytes, genesisTxId, innerField)
//issuanceProof, err := native_plonk.Prove(innerCcs, provingKey, genesisWitness, plonk.GetNativeProverOptions(outerField, innerField))
}
func TestBaseCaseProofSerDeser(t *testing.T) {
assertLib := test.NewAssert(t)
bp, err := BootBaseProof()
fullTxBytes, _ := hex.DecodeString("020000000190bc0a14e94cdd565265d79c4f9bed0f6404241f3fb69d6458b30b41611317f7000000004847304402204e643ff6ed0e3c3e1e83f3e2c74a9d0613849bb624c1d12351f1152cf91ebc1f02205deaa38e3f8f8e43d1979f999c03ffa65b9087c1a6545ecffa2b7898c042bcb241feffffff0200ca9a3b000000001976a914662db6c1a68cdf035bfb9c6580550eb3520caa9d88ac40276bee000000001976a9142dbbeab87bd7a8fca8b2761e5d798dfd76d5af4988ac6f000000")
firstHash := sha256.Sum256(fullTxBytes)
genesisTxId := sha256.Sum256(firstHash[:])
//baseCcs, basePk, baseVk, err := txivc.SetupBaseCase(len(fullTxBytes), innerField)
baseCcs := baseProof.Ccs
basePk := baseProof.ProvingKey
baseVk := baseProof.VerifyingKey
//dump the r1cs for base case to buffer
//var buf bytes.Buffer
if _, err := os.Stat("baseccs.cbor"); errors.Is(err, os.ErrNotExist) {
baseccsFile, err := os.Create("baseccs.cbor")
_, err = (*bp.Ccs).WriteTo(baseccsFile)
assertLib.NoError(err)
baseccsFile.Close()
}
genesisWitness, err := txivc.CreateBaseCaseFullWitness(fullTxBytes, genesisTxId)
assertLib.NoError(err)
pubGenWitness, err := genesisWitness.Public()
assertLib.NoError(err)
pubGenWitnessBytes, err := pubGenWitness.MarshalBinary()
assertLib.NoError(err)
encodedWitness := hex.EncodeToString(pubGenWitnessBytes)
fmt.Printf("Base Case Public Witness: [%s]\n", encodedWitness)
start := time.Now()
genesisProof, err := native_groth16.Prove(*baseCcs, *basePk, genesisWitness, baseProof.proverOptions)
end := time.Since(start)
fmt.Printf("Base Case Proof took : %s\n", end)
jsonBytes, err := json.Marshal(genesisProof)
fmt.Printf("Genesis Proof : [%s]\n", string(jsonBytes))
lightWitness, err := txivc.CreateBaseCaseLightWitness(genesisTxId[:], txivc.InnerCurve.ScalarField())
assertLib.NoError(err)
//verifierOptions := groth16.GetNativeVerifierOptions(txivc.InnerCurve.ScalarField(), txivc.OuterCurve.ScalarField())
err = native_groth16.Verify(genesisProof, *baseVk, lightWitness, baseProof.verifierOptions)
assertLib.NoError(err)
}
*/