Browse Source

Add json marshalers for State transcripts, test with real state data from sequencer

main
arnaucube 1 year ago
parent
commit
9808319143
5 changed files with 494 additions and 83 deletions
  1. +2
    -0
      .gitignore
  2. +300
    -0
      current_state_10.json
  3. +156
    -31
      parsers.go
  4. +9
    -48
      parsers_test.go
  5. +27
    -4
      powersoftau_test.go

+ 2
- 0
.gitignore

@ -0,0 +1,2 @@
parsed_state.json
new_state.json

+ 300
- 0
current_state_10.json

@ -0,0 +1,300 @@
{
"transcripts": [
{
"numG1Powers": 10,
"numG2Powers": 10,
"powersOfTau": {
"G1Powers": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0x82768fcc77ecd32918075e829ea2135b583167c30f18a09afab3b69200df3d1b24285c56b1931dfc3c8b0287875441f4",
"0xa284c35fd310242b69140bc24c04857297e5c3b2d1f7e4fed49de5766855ee9de7ee8bf2372e560f429b6f8333f35ac3",
"0x8b9c3c5d7e1470a4e078c8f95d72586d991bc39bc21edb0808c3abb6960c9001e1fb3c44a44006b408bf7db1f631ff29",
"0xaba01f71db64af08bee494f7c42d096f8ebf6e38e46b60a1abe943b6ca7db4799d0c3aaa67776ca04914a7de99f184f0",
"0x90716c4245b359a2c930a55e5523664ae5f3a23835dac1daf6ac086deb5175bf8f65b594cbc530feaaaec4e05106f68a",
"0x87965bcde1f5a4225c978591bda377bf81c05a4395637ebe055cd41551534095e2206385000aa6c8bf2e3f20c775a636",
"0xa9de87f6f0128984809749a58ddc215805ed9a520e31234f6853f9bc1240ff3c80cf81ef42fce44733bc86d3ad0ce0e3",
"0xa8143d75d26459f7e6c6234f82be91542745e3bf49cc4a13d2392f4a71d00d152705273364e203abe21f3e2eb229e4c9",
"0xaec2192449098c2b1510c300e09674d0d3c41e18099e1f21b1224d19a25e76a4f919e978acc0c30e4900ae6225ac10c4"
],
"G2Powers": [
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0xb23fff3a57fe76237f456435a7fc6c13c0ceecb6859b575a9d538b7171e662696fc2f5d5f4a7c4b5f33fcfe4b5b01bb900f88b99356266d0cc041333b0e86e6f287ff073a77fe183a52193988bf2f2ba4e2537abca6262b6d4d34ac7f04f4b54",
"0x93db2d683ae79130891a9bf203c6ab578b5341f3e85d230ffd85d12e063f3699277128f9d514604d896798ab6b3b981a02659fb0633d507e4fb156f1496af6d8e0010ac0f2dacdbef1e1f7588af97f91327717d60667ddf850d45809edd00b81",
"0x86a79feb43430b17bad586e34166dc9f6b55c4410a83a7d8a471ace9985952649b71482bc10b8a745c97608155b5ee8c0c441a795009405d04183709027a7bf786e76e606bdca6d7e4b129a6f7f188a8b1958e69f25f40d3c81201a267439a8e",
"0x8098bb55e9a916877833cc49297265b56aee082c02df011bb44651dbca97759bd6b916a3292c34e38f158b0afe13a3cf0bae0ee067812c4ec1d15ef117fafb5312f578e1682863f992039b1364235d2b83cfd9b1e7a0c7ae139ca60f45a27a43",
"0xb29b4cf3a94c3ddf0df5acb9dffcd950761774839215f826a05ad5873fd292e75b88e2df145886221385f99895dd901e1617af6ecb920bd4faa58d9ecdbce2d90803fc8e326145da07b1217181387a0fcd0548557adb00e8d43215e04c89628e",
"0xa2a362a881e9377f76d1786e3a67eb010f8379a7503ded20f224c73ff8b169965c52ed46f3d898c279208576878810b901a444cb875fa540deff20c66a0813660e8a12da5e6e5982139c181813be47d53bdbae626011e98c058c8cf8a13b5ca1",
"0xa836fb33fcffdc25476179c24ac85c6434b29de23dfb8040e662390883d70f45f98bd54fffc72670250d6d871286e556079fafe3155e982c3bffbe46b612f7b7b3c8bdbb993499e3ca4c59a870c10570e54a4a44f35140a90d12199075f4a0ad",
"0x92aca8122ddf5b8f854d37f9513457445d8367b303d1225cfc21303c51ba66b28c85db09ffbe30d1df0d82095df9ed211317741c3316a4393e098223f955c24b413c85bbdd0608366b15583e6092e041b5196a2bba48bdc65392fb4a615f2667",
"0xb1fc0c7f7daf9ed9c05af5f2232752acefbe3419ea721e340b85ad7de71e915872e5df3dec1937f1954b575ad8046d68077c07cbad149058cdcf4ec2561d1955911897d2cbb67ca455cca8458506eac973affaec1f80c1a2953a27e299e291c0"
]
},
"witness": {
"runningProducts": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0x92421cc9dec0e52049a2ea2bbaa510954a1dcdb9f6279ceaa01be545ead78ccb2af6e3d0159a7652f0f91afba848c7c2",
"0x938d5d1eee15d0e69c08569f53a4f69028bbd53a1826b180a64e5545c1e8348e6fcd615714d9ce649a5adc373141b350",
"0x995dfe9148d536aeaa2b4f3473faba6b7c785f4aa808844dba20e08760b97fd5111074fe808ca99387adc90fc7b90477",
"0xb428a887e52b89612bd62e09d8b4e6a511227afb6b20fb7bdc192fc899f0347e520dcb56d0d20a8e5cd23b575aa8f5d6",
"0x9726eb7cb9dc7e7dd63bb390d99f6a45fa40b23f2602a4468a1b068860f51818138090d903ec9eb2a2a6e5cf8e6afc00",
"0x86af22084f0839b2ee00897e7eba5bc63839e6ee7b6cfbff0a55d40b915178a4b6816a8e26448c2da175831421670639",
"0xa4a3cadb2aecdeca32a2bf7402735cc8538e5f4a02561baa6fbde3ddf1e92621e8951c1415d0940baae940eca8bf9f40",
"0xb9ded5ccd14ac9b0f792df34d9789afb3f5695750d0916d3829dc9fa934c7540cdbf46710dbf1f959f49b8098193f302",
"0x96352f8112e2a82f1d408848157d5d351fd036633a712dc2039eacc6ecf6bd6a1b1e3a5d686af659584936429e10f9b7"
],
"potPubkeys": [
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0xa2373ed5e63966b80b1d28f7ebbf6ccb485e40754b5189654a3f43c6e9893636b022f6b6048be5253ad1da252aae5d73149d4c461ebb75d2b97cf8d4ecbd2c550ec94631a5af0c82f2a03d47f756879fd8b716fdb4c95689786692663ddd97e0",
"0x8234f5ceb0fdf5aaaa3d90cfb1dbc26793b51a1a58ece000b71e20bd1dd7c9b411b7d9ec7e5149d2160a90e63e7095c8089d5404975b2bc7be574c00fa9180b67f2d3ee6dbb0e06e09161dd1be28144b61cd576373b17c64ce480f1118bce01e",
"0x948f2b50169ea806fa7c7ab715a6247df63c9ee7f0619b1250f978f78b22353fc554976d9b01deb4397a8800c4cfe2140bdab483f44612c648f93cb327c04d1f224bb9517db402dc1534b8b82cf3e6c444f2a532802458cf32317eff68cda472",
"0xb2849013eaef065481613dc050482660104b7e3fa46e5c65494eb4fd31b99e4bd2711041567b301e9d436dd46f9406f800726fc35cd362fcaaa007f2f907bbcb79ccf5d5bddffa89c3f4af17fab0975a46ad0fd6cb79abe64e4b98eefec9a854",
"0xae640e0f17b84fb72de67cbbead12475719d134bea720604619bafd9ff921511ca7f0f590db98bef8605432807f3716506e7654447b720c991457e7287c9b32e28fdc82a70d5b69f67f9b947fa86c425cc541d6fc000add2391048aaa60c43cf",
"0xa74be0a9d0c55a3f609c5232cdbe8d90400cc9927db55b75006a3e7cf3a22e46a5b3d9b88c179329d441eea147e9c7c40f18cd9d09def06f1786de2b6f6629b40e5fd8786c03552c1a4c89375f59a244ef1c7c6824fd393acb1112c2de91b77a",
"0x8aebe314dc5dce81108a57403eff78ae165fde2c66c30a11d5e2376598c95a593a52eb0868b3f4af4cad2a99930f578f11b8bcd07883e26957e97a3eceb65e6e14327277b1ab2937c0f749b936fb0cbce9ed0738c3834e3cbfe5be57f270f779",
"0x991f20fbe64f55342cf4cb8150c467bb603228f63ab9ed4586172dd9aec978bbfd89ea64e0f016a45de7f2cf1cd2adcc1978786a7cf6a073131c222feec87ca9fd09f6e22cdfc6ecff47267fb6d367f07bdcb149ac32ad5a842cfb859cc70a4d",
"0x8936bb1c5290afc76b13b755a99f60642c3f33e0d3ce4927339518deec6a125bd304238007e261c4957c5ac76b33a01008d51eba7c2e505718e3e677e6195316686e23bfc0ce11ad6dc2e9f4d81bc04b3709094be37cd9077ed1131f72f56949"
],
"blsSignatures": [
"",
"",
"0x88767e0e0fa7b5fdae0163a3ab703a32b784dd77670261751a832f9972aca4a2d53e2085be8f5af327d1094af07df07c",
"",
"",
"0x92a317a49893e1097bb6775d95413fae227ac0a8c4491a14038b2c5e60eef1793914a007383e080417b36fd032a5b885",
"0x8ace8b9d0b59f3ad4a014141df7fd9ecb0cafbce30137f7d210e2dc4e4056c79f532f8f40c31cc10c414473b80a0879c",
"",
"0x953700bfa811ade9344e7f69baa00f5d608bcadedeb6131bfd2fe5d977591512c56241e6b5d79c5fdef6a6222f390839",
""
]
}
},
{
"numG1Powers": 10,
"numG2Powers": 10,
"powersOfTau": {
"G1Powers": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0xb26d3dafde52e291c736219ff4cdcacc3a08a684d4af2db1547d9b2e5aed7d3083c514169a67e59e351f55996e96fd35",
"0xa4d3ea05be2566cff70af9f4a55cdcfc189b48d255f117aa1ad0d0ea69d570febd8973fd994092f2d39a8e5f3df86f72",
"0x955cccfa4a2b3285ffaf085c379e50afb775a7f5b05c7ce59bf19dcdfa686fb97823485b3cf6b3360ab7777cf735df67",
"0x83957b1fd3bc5cfa90225294458c444ad2c9b8b1f5a31db2f8bfd737a7d82b916ada8851ddf1fac14d0cf68270e7c494",
"0xb84b537e896d22733a01df9532fd82b26e7dde3a3d1f5d4d75a5cc3a0ab1c4720c58026bc942eb15847ef266fc302fe0",
"0xaaed8c84fc389047cc9498e094cd2f9086ce07774e413297c08dfd608d9bd2061a254292d2ebead90c52bc58836a0188",
"0x83f4f3247d4984634f1c8a413db009f2bb4270f588e0e93e9d5c9e20478fa59884bb1f9e512bcdb2cb389565602ae5ec",
"0xa78a0cc12d740e6e19458639de95068fea37113b8a8ed711d5f846a232b5503804c615814ffd0b9d52baad70696c84f2",
"0xa2551b47e41c1e446bc53fb86c5e51d7675242b2453be0247a4e8e7218124514b8dc4d07b84bc3ca0af12d8a3e4522a5"
],
"G2Powers": [
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0x85320efb9967818c7c603214b2e9cc739d2fb92daf5481a3562e49c0c7af8beed956b7a09043bf2dbb8645a699fd7b4901984ce07d22e5f41fed448c21b32ee9a71148b4e79ca5fe73dd6a757f9edf9b670b85af64c6861f340684ffdfd3e8d2",
"0x818101730408efea37db7bfb959a3a80fa598952f62cd6aa21ca53ac7913bd40f8fa421a4641dce9875779c3ea3b33fe16d5abc6f6b67f4e5487e4e9fef9f029dc0349097f7ac304a65b5c916a646d73161f2c3e3c159640b2310079e6e0b907",
"0xa892ddc36a531dbb2d2a0f9ecc204436124eba9efac32477d27fb9cc9302dd38bbb4a7396c4726107fa7fd1a8f7ead3901e150368465614077ba7310287b2693abc14233e949837069aee06cd221e5dd3ec03a3bdc94c20ab8ff7ac2439054b1",
"0x844b7e9c312bed496c382ba2812623d327182eb7d85b2eb42d2036ef04392ffcc381d8f67afb5e39d91fc9ceaaeb82931878a6d4af487e66216711b81169448a9ecd0ac9e115767a0efa83142367eb0c66d0ba760409b52cbb619a81ad780362",
"0x997bcfe41fc39698918284ad91dec3e0aa5353c6f257a7a254adc9f26156548fa41617e5bc3b1fc393a9d30fb9dff2510799190c2cc5023bc6c7cb8d82ef08ca5f75a161a5c7e2a72229676aba8a52505580f4b653b57bd24c94b8c0eca0ffa0",
"0x9398e42f23b704d7b7a42e11e321458b1b61673c636e618432f8bb1da9c52b83b43c227cc079a87da405b3532b91e0bf00888ab5ffbc8e838302adfbb35c36a1d93c2b15166fbfe0349450144beacd733b91044dad26777c0fbe9df5748466e8",
"0xaffb27c577cc2f242031af4083aa2b31b4f4db4540ad78535928255c054afc6fd6c177fbff382d07f1f11ac417fd83031230e72e38a0c397bf9e0b2efb6652f67ca4ebae113127b8972d3e78191dad7998620493bd2db93891e7b3ae4a115379",
"0xb3d984aad07dba71e9776e64bf2408d19df48e039e8edd5cf7452d7992890f07b33909d377155edd0fdb70467b41c5f709011c6cd2171a34f867a0612eea9924d77aa173b99775796e6db22e710436b733d6731fd4fdd8f18a4d926f7c1feed5",
"0xa565746facc0718f7f7136717bfad627b374f0ceb21906e51ef42526763c1668d00f6a935b3199957921021115f0591d105cfdf1221ec1d16dd5d2ecd02a242c1c1fd341d44c3f41c0c4b35e10243154f1f28db648f2ad7a3e1f165b0df8bc28"
]
},
"witness": {
"runningProducts": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0xa6bd25d890ce66f3a295ef3f85759447defa14de5d7242f0b7e1b0002f9eb7928d9f88ca1ba496ddd7235ee4b9c11d56",
"0x970aaffabeef40bb2dad32f25aabc78a7a34103d1ada742c8dac42a20efbb5c572a562064a1ec7da5cc12cdb0170b1cc",
"0xa31fe11d7237b482578f891e513438be710c526f849c3b3290422c0dcf50a0edcd7fc59babd2c04178c06386df9a2eee",
"0xb3cdab2efcaef2ff68a960bd38c2c7436c1e0ed30930dbff5fd2d172b0e646aba7564e837f604dd5782daf32aa7c5b6c",
"0xa052ada8b3440d9b72ff0f49cdc48733c6e6bf1084f4e02d4e615393946d7ae23322186000aade2839c316fdcac9b7f2",
"0xb01b8a024f409f302256850abf7d34fcc3333136bc1423759bb84d33ce88e41a7aefe8e876f6359785d232ccc6b75d37",
"0xa4d5646b272d3e3420dd827a5c70c8161dfaded483d8d75dd158107b35c0d98d2a16e44ce358cf5b3b43285073ab5b29",
"0xb6bc4f74745cebab04fb43f364fd65fffe95e84ca44eab1500afdc9fd181fa3dcfc3e622c93dd5b6e7780ea3e4b0de7d",
"0x98a297edca7b4853eb6c5bd5d0b1bae95641b7c9fa252eed22cbeaaffabf34c69cd38e203a5438469d7071349877b8da"
],
"potPubkeys": [
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0xa2a90888fea694b0b07b341043e372e37b43342d41f9e44dc8b8c9d2295b7625c689c0017ddda1e98b0768bbd6d3ebb206389a1aaf3edd140e40b984d8e8cbb675571e8c235b71bb2e268e28eeb847b2967ebaac365d58c88b7e23c42459acd2",
"0x87c00361888f3f3ab94ed4352c9de796bd509f042493c6ee1d2401a44cf0f7561c60d03a20f89de48a81a0a3a17b4a8814d4086188c85b3961e7f76e31a3d7167d025484f48281c29255b656e2859653416dcdd24d6b6be29dd25a54fb41c090",
"0xb64a8ab8116916bd2da2b80562c650f2034da68b16de35a738698bbcc2327c7011ef713b986b2cc3adc88941b9638432101ae9a54bc9e3d3d3961c3a0faddae18763f19968500eea907e5ceefff5189531472642085c8c95beaec76ac10615eb",
"0xa79afd15c00862db11b2b73c588ce4bbb33b6b6b65bc000052775700120b5de1b2202bbc70bae866d7e2c8e52cef5acd0e42f2910a18a2ae8fef1b0daf9430ac78b36012037ffbf5563bd591143e16b275c121d893d7071f8a1c4d4984a26baf",
"0x93875e771c4a12bf100fe21009115ee4a5b38482ac117eaa43f34860ea89383a2fe6e0330307435912b13adb254fc61008e1ca7278bc9d0408aea35a3c29a51cd75cc13ff3425f42482829cebf97166b4be688dbd09b3e15617230dc3303161d",
"0x96dbe1da37b4de021b668af103614c1b45b73d5deb1fcaa7e5f12d32f980730d9c04dab19ba9fddf50860b26c4db16940eb3b3d9f109984a998b5e19ec0065add2d96e647bc2389dc8b05a68891c1519fee38737dfdec1fcdbd210b916f60104",
"0xa702a4e41e86c0d40301241396d3cca9e50b6595e40ff49baa45ff6f111b87a7b8f18ea3f42e6e98826bcc46b5a03f410abbb8b11e2034f2dbfeeab942bf8da71b490f035f2c6003b62339d958136f92505e592aee366a3ce22875320c0017e5",
"0xa084543c6cf66b2aff8bc8045bd6a52c7df4ef7532f8a0fc60809789014fc452e63ca69f5b6904c65206f95f136df1ea06beb8f7d9ff09029eae28e89947ff7159a39048059755c104e1c49fc537edadcd6303fad615cd27291294e05e50b5ed",
"0xa777c082a28e14dac0b8d770028bfc0db8a6ac2f8c415a9569f75a147e2d483e1cb7f09f68e7754c2c93765f8e501810033673350a9973ab4f6772d4e34dbf6207e68dfc9e672a363fe2d2d8eaac827cbfebe9cbc4be88a3eec1bed9560e89a0"
],
"blsSignatures": [
"",
"",
"0x9206922af6e414e8b6010e901a2bbc5f30c19aa22c7ea332ebea02b2ba5b0344709d677e215837089904d21fe5643f40",
"",
"",
"0xa81f4b4b58485928625a9fba1078d5bc4e56024cf61e2e5201463d9752357003e2356979d127fadbfb1386e2b80ada35",
"0x87f55b8220462bcbfb03d54ad595cbe034334f3c7a24a32b7cf5d75c9f9cb0c4b5aac8a9e9d10bd31204683f17a9a9a6",
"",
"0xabdc4ddfb16c90604b2414a17a233a8596fb89aaace6e31e5de218b815515ef61efb24f1a82ef1abd87c30533fc545a9",
""
]
}
},
{
"numG1Powers": 10,
"numG2Powers": 10,
"powersOfTau": {
"G1Powers": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0x989b0d31fc609ced2ce665e7b5bc8e4d5b1bb7cb43eef94d6c1c9d6af236db23ba853215d9d19777451e1acf8bfd633a",
"0x91633c488a65d8707e5e2eb2abb899773eab87d82d3e110f4bc1a7df906f62a54bd46f67156727c9ef59a6df1e8a2e55",
"0x879714d8fa383f1c30971e8981585e059374142148fce05d4b5058eac94f08a474764034ba60e2f775f801fa1c76d2b3",
"0xb40f4b133346948cb821bacfa406401d2aba5c4ee60e8e4c62975d694169d2e5d0f738e07693a160fa73198917058b50",
"0xadbe94ee93b69d40423068786b4fd95d6aecf2c14cb7cae7e16f5042738b604921ac152ea5980cba946dc5ea4bbb3e93",
"0xac85553f5f0742b697a5602bc7f9343aaee6a642acad1c2267ea898955fc4a24487768ae8db888da76142af70264f070",
"0x88b72b5bdd999b7e91d45b89b8822e4ea704cc784321f6d24a91283ca1bfff190abff8f2db38f720e369dbc0559712c2",
"0xa75fe00b6bdcece842040a3e38c47ae7a38e3ec9decc6b0ee2d8fbe11167f811717b7bb81b1dcb59f4aaca115f9e7b75",
"0xb5443c73c2dabe52ee2a5e36bc3c1fd8b822c9681d104d527c11fcc76341ef37b64194064311c4a14eaa518a9218c396"
],
"G2Powers": [
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0xb4e0cedc46aaf83442dc6be7a3497f29b745c58c441b7aaff7facfe4426770faa983dc284b6eac027741c0684305bf010a3bb7792572e394ea5bc92fa56e3d9424e434da1ddb0443f9fa0cf19976b9098091a6d454432f5dc5d57e3db07fe121",
"0x8637f85e460e49f0c4de675d740a836ff551d187b835804e2dd2b5b04353efa284ba4cc0dd4af7a535cb97def56000230b206236a50a59d36137c6e2546ff464d03767bb982540287094951389acd04df94dd078191cff7c624dd03769a40398",
"0xa2178803ab976bf1d0487dae5f9cf5b7f31df22a235aea24af43ce3ca0c967ad948b799802e07315d6658a17e533805806329ee930c5cd48bec67a405bfc41837d0d6a7f0f52066c75056d3809201ebd027d7d2e2bba1cfced5abfd7f3e8c3a8",
"0x98c38074e4a3acb01dbdd5d651d5285b78d8b78979d6d5d7835e4f9f5c29d3454eb9ee33d96a0fbdfa1d26a647f3cb941461a27b3517f0e6c6a92ca55e59105a889d40156430ffd808c37df704eb3adc3bb1b7b28d4e0e167f276b9af346783c",
"0xa60c81181154901817d74268cbabf478a332b6b2a6f8b20fce76633a485c4e4f0b5cec33ed483c6f118c96c6ea6c735811172364a436db238eca82dbc015f80929bbb04534195fc57bc36ac9c8a33572e6a54b2ec6ba9f6d0f6ed98d238d8c27",
"0xb400c71ca7ab39fd2d1c976ec489bae9f49c4d104bfb09bfe3ad978e75e1868c8c102dca4f7a8e9ef0f9c7b3b387311e0d3a8b883b653b449cc61bef4442145f2c746a769f9676a0490343eab9baf5d252503ce1ee9474d1058104043d31abdc",
"0x82e2a20b2c1f4b9cb3e9338c1dfca56c911b4e82b75fbca40e714ef601baab0670dde387fbbeca3a45266c15742d234914da6e78f98ec113d047039725a80723cff838cdfeeb5bf3af5cca9890e798a269f6eb877296869f059c3f0158acdfa4",
"0xb72ebb10563f49496f4c735ba27f31bbbc9b9308d89b8e08e8cfb5b719a1efbf6b7726d1c00f893849e1a7559a37cdff13042e91ce2715178ff7a11ae614093d021d5b51d545a0938ea15f85234a4a9082039313d577a9db6967996e4ba10832",
"0xb1bf407e72e907cb3cfdaa6644c6eca8db523b4a899fa249f0567e9bc2defeeddb51ac23457bf2ff2c61424006fac44b0f5a744ece54cf1bb7f40bd8b6282f075a699a2b816eeea91493057d68bb9631ed071c63c7e10ec634ab0be4c2f45a84"
]
},
"witness": {
"runningProducts": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0xb804a349552a87cdcd83760393a16f36905197497bb64508b17b1e7e7582682697b8b81faa8e6599d01a44a056324c3d",
"0xb503dcd8f61e26b69596b63ebe8def0a0bc40220a93b37fafb0b2ac4e3060b6a0049221c437b6a84330850754281e961",
"0x8aaa8caa1da4fdf1051777f762bb74cf41dde22dbf34fcfc230a350dbba99e65a65975de9ebfa15dfe5c68932079e563",
"0x84130ab7e3da1a02929958716d0009d107939ec3f816f7d5b2722ce93ef20c3f033e9d67cbd81429438c2d084d69eeec",
"0x8b644b99fbe26f6b30ad7b12547f055c2eeb8872a597ce19b25d1c4adf353fb5839ff369eedfa7c6e5f38871df6697d5",
"0x8e9e43e9f05cb2b916ce92740275a353ad5855c926c60cdd182faa686d72fed034de52b4237bfde7fad0c504c447f185",
"0x936a748086505c29724be5a82f45999ac0c093a6c7c99d878407c4585d9db51caf7bef2f8bdee9eddeb5ca7b61b75b63",
"0xb0fe60afd6595fd31889b8ea39ce7a622212d279721220303c39e476fa25ac31c08448b7882151f1538fb199061e7a84",
"0xb0dcc8af44882fe583e3fe43dc7768a18ed945c55f76ab9f92de1107f5c3dda2861641ac3b5fb0aad91785f8b90dfb04"
],
"potPubkeys": [
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0x836bb4282adaeb80bfce04cf708ab8110b050b86d6760e9f3fed6b289f97240eb2377705ef7e8e08f71bd357bf74abbf0e93068fcaf99362bd689e488392b23c27081c6e7a0aa05cacf7abae908eb9310a7e29590664b4649f7a33aeead02a01",
"0xb363321435f2889389153a64fffba2b447d4f0adc5215a65ed6e19db3770d346958653c4a23ceb6530f4317b1f92ddf3035a37cafcbd364cff77e3a7a7f59b57a9a1558b7665b7b8ac652ef8849b13c221919c537c41dc1a4e5c16d44f2c0dc6",
"0xae4578afb3e591ac6bd6dc496fd9d9218b097c283f2cfa33d621bb72d3a7a0d68ed3a03858e5319e89756185cfa8f1d8016cdcf8ef37d89631041fb7db4f6d9d72d5514403b538bd9d3ba6e09fce6ad40cb2902043dca69904c7e3f54d99dc80",
"0x8f93da55347a6ab3a0472fe34ea6a3c618ea7c7b75c8b1266a5d80ef4b381ed9917b7aa5864b60bb9c45ed4625c7b77b1753c99e106ac898dfcee9d719d8e8c03b4d11014c40ded2c9d3501c538cff9ceebcca23a29f818b981ccea7664b1865",
"0xaf5ba62400142aca6cdff10d20511071d438c10180fba3d669597d2001d63256ee7387dda965aed00ba7a7967933f6b2091336cbf8c99046817ec5697bf04b2bf77ea11aed970f73ce4978f807a9580289d77b3a7fd5351e8929a2ffcaa6dd9a",
"0xa493759909b7aaa0f2c9a9e63783d47bd04420541046016b57a157a138bb46975084d1109541113935dbee2ec7db670f15c9130228978c737f9885454eb3956da8b15887c6c49db46f42b8c820b78723c2f9093e57c695357cfb2122f1e8ba7c",
"0xaeac2264d588a175059b331af4aeb09319bfa981225c42ee8bd5528032cd3d9426e64f78148ad2572e8d69f832d687b018ec8736f6359704062bec81f02e7f8eca6989061ad89f86bea102cd5b04a77d18a7a119caeee4ae6f7861374653ef4d",
"0x9823f8f2ce5f8697ee7132e0582c2a0693878359f17ca4b74877d5d79a4e2876103cf83bdeacd5a273a01de217626673042e44f9be56dbafffc2a7efff9789baf54a7ac1464200800ed1d67fde36723e3802a136bfc4940e4fcf712f73dfacb7",
"0xa374bc9fbe6504a78c99233bb166982486d0791058a68415df286b056b20335b6196486b8aa4fd2d656997a63a9f84c7140c72d5adcacd32e948085749ac120fb963a65b5b0ad4ca00e582f50234418792090b0a3e47d0da53232fa3ff0c3609"
],
"blsSignatures": [
"",
"",
"0x833616387855deaeddbf8bda69307ffd09fd2ebaaec8b6554e3cd7b08f61ca538255c1cb14dc5b74e9f6e41f0bc5b4a6",
"",
"",
"0xb10448d73a4bb3d2a08eeeed81887a2d7f23b92115878f8e6be15020f1a15faad999a58229da9dc7c2ba79c56bc03c37",
"0x8ec66649fc34aedb565926262931a25cc61dd3b4d05f3b7a9019a619695a9566a7a3a0e4b77dbe6990ec48588fce7074",
"",
"0xb20b887ac604ff9fc288390ed7099952bb10a1218a44bd38e8092d14405b0c8eb90199966e7c01fe0909ffc9e55ddfda",
""
]
}
},
{
"numG1Powers": 10,
"numG2Powers": 10,
"powersOfTau": {
"G1Powers": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0x82842f110215568e94af3ced24491453f80282ad1fbc52968d8baa1ba7125bd298bb12fbb0cedf19fd2f26a969b5e894",
"0xa3aaa69fe8791a29a44b3e4704dff329483dc64b35595a8b39d9ae369b886829027764b81bf8feb86a077538e3f1dbc5",
"0x896c6270eb1a49b596aa65a718c8dca01deedf588d14a5f80dd6ec2dada4edc5a7a5a9dfb7c2a36258ab611e0a2f9ac9",
"0xb00e7c14df433a83f18a3632bb77d75d7b6c71993498ca3eec3d089a17d36b18d9960441dd88563fd3ff740226eb5bb4",
"0x830d53ea4e493b84361a00adf0b6900209ea77ef42482514e0e6ca0dbcf6e8485a60a3553a3343529278acca45ad4e43",
"0xab8a808cda5cf6071b83a65aaf73232c1f0fe8e08a182106c19c75449f47189744f6c4d060820abe386563eb5789e3b1",
"0x92cafdab0d3ae39b854a3b4fbd7570015db90e59f81d6c25219035371052fb66fde04eae9248cd912e9c2b9d2875b25a",
"0x8ee6c311b41b03fdd7f4795c9293a654ba38032ed4e58a9eb21aaf9eac3ac8302aa0f22734b3b5adf254a26606e8ff59",
"0xa7521927edb952e0ce882d2a0ee6dfae4aaee3afa7e5ecc14d7f4579072a281e7524b644d0293c7bab08553def141d25"
],
"G2Powers": [
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0x8ba528e230ba01e327fce99c6c8bf4dd5270a10c9812b1379440c7379d4303c5d59ef794f9bea4a8ea96776d044f253817f6315c1805b2e1b5d7a554f014f62563cb06fbf894a0fefb61e0e57d4fbf7b3d72441d3aaf96fb55c3b272f942a87b",
"0xb37375762cb230ca5fa6f0631b4508346b2f7c4806d2c374e61a32f4672065cca8552b35bbc72fb2f94777c2ee265c9405357e3da49613b47d2f2bc98dc6283f02766937d4ff3072560ab02c95f48ce683c908154a4b51007c6484bc47ee1054",
"0x88b27c26c85b8a916bc7ad5c2f42425b9f96a1ba976c3821d47e2969afe0578469a22ec8c90014c7e0a70a6dd24c958a0147175b378003524dc67075ad45bc36ee4378694929139eef4dc85d57b03d71f652cac18bbc4ef4d603734086cd6870",
"0x95f45a3af20d11e82c7536841ec368363b95ccaec65ad1d8f4b82abae07a032c3514c45206f77d95ef5ee9d1b9806af50c5fd37f03bc8624ca61b2d021046b5b65d6a9a0a52b67f6e32e6639f6b5e65868e2d180cb84926f527b0a26de43fe2f",
"0x91663efb6e7c296fb6114046fd5d69b09a3f2ab3bbcdf65f3f1bc55380bd486067663c3d222d5e036d7aed7d3da33798080d6da9019ca237f873acce050feef6b1b8d4f6c5355d7ace6bbcaf19ca8f3c90c9c6fd99a0af28adbeec7d64f3d71f",
"0x84fef915d5e0cd88b35371333677b1e5de59ef04ad474e234a24947f409403eb111b85b8edebeded74bd3f1051f3d66c01a525b9d866f4e16cc064d4683e78f1084636a9f1b956a4b02ac072a727c52e7e7e2391d6b3a01fcce9d6631cf0c37d",
"0xa950ae3ad5566d4bef8e9727d5ad051606245bcfb13c3706596622e58dea00a5108d9571cd4e5538190823eb9e2e623517d7fbbc19e1aca990cfe67f1335ab67ae788f9a60ad02523625cee76bd127ad338c1a7f60258acb779486a98e0371c8",
"0xa2cc745be13825b4784830bbee8f32a712d9856ae3ed4f7e8365ef9e375da5b828b91a41a0d73632ea82e093d5eb534c08b29ebd09824f2dfc3424dcd500731b969e7ea885af3d2ac56682dfb405791701a57879cc9f46281648bcc02a1045d7",
"0x8bb1c8a77538087526a5293b774afcb278f9f6f2f0e03cb2cf4e8da19b9e462dd42c91485d3792066068b8e6efc6e7b115c46ff3cfa7e453984b929c138392d65c3eaa323267e94d1ef5e7832de0cf39891d4ee9796932956d0a2189e766c88f"
]
},
"witness": {
"runningProducts": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0xb3dd4b32cc77f3217cbd98c939904555175173c80c4b707c15c5f23efc0eaa9cc279f091a2163588f000be8ee17b6162",
"0x94cc7cddd04ff96e54d4ba285ca09b4de4d7249074336b53a2acecf2d86fad977ea4680a0b6abedb5c57c3adeaee89fc",
"0x8e2eaf077679f4f4e14421983e9e1e758c8da3d6eaf1b36799860e2e8776d399bbb680e05a7aa81c696bc02ec93cf10f",
"0xa1460566e7807267f645c62953bf44d95a85ad295590c62698a3bec689cd5d43c0201e6975cf60c3c3144c459d1883b6",
"0x93c5607e5a12a863d4518b12738288ab66cb0688a522dc9ab254d52c5c8f3efb1446286012b1bb6324fdb0c3c641e5c4",
"0xac5300e4226262017b94acde713e71995e952bdb95216abce8b707ccec1125180e92d54799acbe009fac40868b776819",
"0xb5699fd4cc1bed65193e264a4802e42f46aea451b6cb40af9e1f436c33458906d0ec06883553b6e51cd162c006cf659d",
"0x9582ec6cfd78e4db0d602056a5dad4abbd50315e8f7bb3912d2ebb7bea888a7d97d77d56cc4781a4fb00395e89372698",
"0xa86d737d9be7452acdddd0986467e7f7dd99b6ae29ccb0a9a3dfac59df11743e8ada7b0a133cb1047c5771d34e1243e0"
],
"potPubkeys": [
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0x89b79182e5fd443b492995351cb28457de71aa10db0014326eb5741b0968ec9cd3cbd577d630cbc051f98827255044cf01e8c1e13b1c9e61e3af65a480be26b63395ea4fe4584df01a668d70fc36e386cc4c50a2946cef0368cab43f751cdec0",
"0xb3c50cb16434297261e16d482332d9f6c9281fe9e59bb2ff7f89890ff21fb2c9de2bcfcc7484391ccd88b472fd0637760050abaca729b28d80a9db1fda6c54bbddd1e44768184b19625776f9a9e399a6cfb08984a31276ffb19b5adcd1ec685a",
"0x90b04c7999128816515df5daf66004ee781d10b220b71b45286f9d98e9c931ec819ab15ddae02eb945ef277a54b75e1c168e435c8597f6880115281d8f818f4592ba0e0570671234ebe9ce7bba1d3f8aaefb5a5f1ef9d582d39d46bd24ca2f47",
"0xa94de0a0a949bd0de981f0b00ca2c3919f2c7d18fe5e7fa7fefe083cd9d8ea3007a249987251136d240a87d53db380110035ed881260d39f8160c5b5bfeb2dfb43a59acd61fe6ccf4d6b72b124da1f5d0d1478d3e676a747e398c727c82056d4",
"0xb8e6af5c63e1de31f11cbe6486e19e01ef1175ec123d1dceea1d1b0c9af0144339bc0e756a9be55e252dcfe8fc61aa1202e8852f77a416dbb431cdcfe859fda188cda776552d499c06dfc702452ca2ccfa4c0f0be0f747e2196b9d8633fefa05",
"0x8876a73dde25a06a0f787193a7f431d48af3ef32cbf9ea3c426cee345b74087cb46c0c678cd4af5e95f73a12bc1203e4122199ef208b3b66bd118e496c3455de76eb0b7551ca5cb2c38158770e4d9287cca7a399efffcce3c6f55037418ca60b",
"0x87c4a8f929ef4fdb14cb9c95a9afc62e5cea4281defa1d6d2aae7fcd1a472f84a3392a3e05af1558e5e910b753b809c5121172dd96c2a741b7945649deba04f5b3b299cff629c34f12d3c20ed2506bea02953b05996d1bfe8112a869eb6b622d",
"0x8cb33d36f844b7b8d873aa2a775f1e0be93a78b71d2d4185b7ac806a00ff4f1a5b2137c66e412ca9424c94dcb36c60c30339efa0025af18f33cd3cb28da1e1873f0b445e4b77a348391beebd55c5531e21bbc5cbae765e74dd018ae735761744",
"0xa2822dcd7ddbaaed39da1da33cd6fbee258cb2763be7b39c5ecc67148a4ea2e29aef62b41ba21b80c087b6e8ab0ab6350b60381174a9b487f91246b07fa60149c083451f35af534664fae92eb57caa3ea6b0b31c27b17650f282b02b5e8c98ce"
],
"blsSignatures": [
"",
"",
"0xb3a688a27f68f7385d11bd9b4f571bd16695c17f79496b80a8c9256b41b661c01779e9ee0a969d193b04c168017d5018",
"",
"",
"0x826397447f0581af1289b7ec0fde3e3055745236c3365f160a1710cd4a5fe8a8cf901778b931288541011ab38ff98cc2",
"0xb47cc30ae957b6514fc2f275e83a8d008e5b846ea58a09b501eb08fc1d04920af82a1bea47f1694023f41457d1120d27",
"",
"0xb380da9e3a8397003297a511183decb7c9847c59af545af0b163130718afe5d3fdb028693d9d9bd7001d792c43a14baf",
""
]
}
}
],
"participantIds": [
"",
"git|1214109|kustosz",
"eth|0xb68d6aa5fbf113025f99166a21eb068077060c36",
"git|14827647|StefanBratanov",
"git|14827647|StefanBratanov",
"eth|0x99daaf637e697c53afaa67d6ff27e336db925812",
"eth|0xd01159a043d1d6bc575dae358c6046f5cc08e7e6",
"git|4806269|guilhermedecampo",
"eth|0xe1e801e4891a88d01a028d8ef34352aa07f188dd",
"git|14827647|StefanBratanov"
],
"participantEcdsaSignatures": [
"",
"",
"0x0e29446228893fe2632f4dcea683398ba45d73545d8cc458cd9350303b5bb43c4bdc3bcc55615cc05ff8e880035022f7cb4d9e4e872e58d0c48eafe0698cf0231c",
"",
"",
"0xe2e37813fe8599d82442002606eeb87a0532a806677e9683bc9ccfd17145d1a3436ed15cd46ecf394460daf11e557bd0bf2ae9164e54bcd0c19e6cdea0db28b31c",
"0xe49a55ddfafcd5307a4f1dfa87fa31ecd9afabb4bcec328911d23f3d94cfde3025cad9959178be7ec803f185159dc0d6cd5876f91bd6f9fc8217882e8dc43f1b1c",
"",
"0xc94387cb6fe8bae72c8b5899662d77aa3a559fd21fd0e6c0f00f4757faa5b69c29313aeb7d54b9b55221d89ca970bbce92dc610268ec013ac9369085738f0d631c",
""
]
}

+ 156
- 31
parsers.go

@ -2,23 +2,157 @@ package kzgceremony
import (
"encoding/hex"
"encoding/json"
"fmt"
"strings"
bls12381 "github.com/kilic/bls12-381"
)
// WIP
func (s *State) UnmarshalJSON(b []byte) error {
var sStr stateStr
if err := json.Unmarshal(b, &sStr); err != nil {
return err
}
var err error
s.ParticipantIDs = sStr.ParticipantIDs
s.ParticipantECDSASignatures = sStr.ParticipantECDSASignatures
s.Transcripts = make([]Transcript, len(sStr.Transcripts))
for i := 0; i < len(sStr.Transcripts); i++ {
if sStr.Transcripts[i].NumG1Powers != uint64(len(sStr.Transcripts[i].PowersOfTau.G1Powers)) {
return fmt.Errorf("wrong NumG1Powers")
}
if sStr.Transcripts[i].NumG2Powers != uint64(len(sStr.Transcripts[i].PowersOfTau.G2Powers)) {
return fmt.Errorf("wrong NumG2Powers")
}
s.Transcripts[i].NumG1Powers = sStr.Transcripts[i].NumG1Powers
s.Transcripts[i].NumG2Powers = sStr.Transcripts[i].NumG2Powers
s.Transcripts[i].PowersOfTau = &SRS{}
s.Transcripts[i].PowersOfTau.G1Powers, err =
stringsToPointsG1(sStr.Transcripts[i].PowersOfTau.G1Powers)
if err != nil {
return err
}
s.Transcripts[i].PowersOfTau.G2Powers, err =
stringsToPointsG2(sStr.Transcripts[i].PowersOfTau.G2Powers)
if err != nil {
return err
}
s.Transcripts[i].Witness = &Witness{}
s.Transcripts[i].Witness.RunningProducts, err =
stringsToPointsG1(sStr.Transcripts[i].Witness.RunningProducts)
if err != nil {
return err
}
s.Transcripts[i].Witness.PotPubKeys, err =
stringsToPointsG2(sStr.Transcripts[i].Witness.PotPubKeys)
if err != nil {
return err
}
s.Transcripts[i].Witness.BLSSignatures, err =
stringsToPointsG1(sStr.Transcripts[i].Witness.BLSSignatures)
if err != nil {
return err
}
}
return err
}
func (s State) MarshalJSON() ([]byte, error) {
var sStr stateStr
sStr.ParticipantIDs = s.ParticipantIDs
sStr.ParticipantECDSASignatures = s.ParticipantECDSASignatures
sStr.Transcripts = make([]transcriptStr, len(s.Transcripts))
for i := 0; i < len(s.Transcripts); i++ {
if s.Transcripts[i].NumG1Powers != uint64(len(s.Transcripts[i].PowersOfTau.G1Powers)) {
return nil, fmt.Errorf("wrong NumG1Powers")
}
if s.Transcripts[i].NumG2Powers != uint64(len(s.Transcripts[i].PowersOfTau.G2Powers)) {
return nil, fmt.Errorf("wrong NumG2Powers")
}
sStr.Transcripts[i].NumG1Powers = s.Transcripts[i].NumG1Powers
sStr.Transcripts[i].NumG2Powers = s.Transcripts[i].NumG2Powers
sStr.Transcripts[i].PowersOfTau = powersOfTauStr{}
sStr.Transcripts[i].PowersOfTau.G1Powers =
g1PointsToStrings(s.Transcripts[i].PowersOfTau.G1Powers)
sStr.Transcripts[i].PowersOfTau.G2Powers =
g2PointsToStrings(s.Transcripts[i].PowersOfTau.G2Powers)
sStr.Transcripts[i].Witness = witnessStr{}
sStr.Transcripts[i].Witness.RunningProducts =
g1PointsToStrings(s.Transcripts[i].Witness.RunningProducts)
sStr.Transcripts[i].Witness.PotPubKeys =
g2PointsToStrings(s.Transcripts[i].Witness.PotPubKeys)
sStr.Transcripts[i].Witness.BLSSignatures =
g1PointsToStrings(s.Transcripts[i].Witness.BLSSignatures)
}
return json.Marshal(sStr)
}
type powersOfTauStr struct {
G1Powers []string `json:"G1Powers"`
G2Powers []string `json:"G2Powers"`
}
type witnessStr struct {
RunningProducts []string `json:"runningProducts"`
PotPubKeys []string `json:"potPubkeys"`
BLSSignatures []string `json:"blsSignatures"`
}
type transcriptStr struct {
NumG1Powers uint64 `json:"numG1Powers"`
NumG2Powers uint64 `json:"numG2Powers"`
PowersOfTau powersOfTauStr `json:"powersOfTau"`
Witness witnessStr `json:"witness"`
}
type stateStr struct {
Transcripts []transcriptStr `json:"transcripts"`
ParticipantIDs []string `json:"participantIds"`
ParticipantECDSASignatures []string `json:"participantEcdsaSignatures"`
}
// ParseEthJSON parses the eth-kzg-ceremony SRS json format
func ParseEthJSON(g1sStr, g2sStr []string) (*SRS, error) {
g1 := bls12381.NewG1()
func g1PointsToStrings(points []*bls12381.PointG1) []string {
g1 := bls12381.NewG1() // TODO unify g1 instantiation (& g2)
n := len(points)
g1s := make([]string, n)
for i := 0; i < n; i++ {
if points[i] == nil {
g1s[i] = ""
continue
}
g1s[i] = "0x" + hex.EncodeToString(g1.ToCompressed(points[i]))
}
return g1s
}
func g2PointsToStrings(points []*bls12381.PointG2) []string {
g2 := bls12381.NewG2()
nG1s := len(g1sStr)
nG2s := len(g2sStr)
g1s := make([]*bls12381.PointG1, nG1s)
g2s := make([]*bls12381.PointG2, nG2s)
for i := 0; i < nG1s; i++ {
g1sBytes, err := hex.DecodeString(strings.TrimPrefix(g1sStr[i], "0x"))
n := len(points)
g2s := make([]string, n)
for i := 0; i < n; i++ {
if points[i] == nil {
g2s[i] = ""
continue
}
g2s[i] = "0x" + hex.EncodeToString(g2.ToCompressed(points[i]))
}
return g2s
}
func stringsToPointsG1(s []string) ([]*bls12381.PointG1, error) {
g1 := bls12381.NewG1() // TODO unify g1 instantiation (& g2)
n := len(s)
g1s := make([]*bls12381.PointG1, n)
for i := 0; i < n; i++ {
if s[i] == "" {
continue
}
g1sBytes, err := hex.DecodeString(strings.TrimPrefix(s[i], "0x"))
if err != nil {
return nil, err
}
@ -28,8 +162,17 @@ func ParseEthJSON(g1sStr, g2sStr []string) (*SRS, error) {
}
g1s[i] = g1s_i
}
for i := 0; i < nG2s; i++ {
g2sBytes, err := hex.DecodeString(strings.TrimPrefix(g2sStr[i], "0x"))
return g1s, nil
}
func stringsToPointsG2(s []string) ([]*bls12381.PointG2, error) {
g2 := bls12381.NewG2()
n := len(s)
g2s := make([]*bls12381.PointG2, n)
for i := 0; i < n; i++ {
if s[i] == "" {
continue
}
g2sBytes, err := hex.DecodeString(strings.TrimPrefix(s[i], "0x"))
if err != nil {
return nil, err
}
@ -39,23 +182,5 @@ func ParseEthJSON(g1sStr, g2sStr []string) (*SRS, error) {
}
g2s[i] = g2s_i
}
return &SRS{G1s: g1s, G2s: g2s}, nil
}
// ToEthJSON outputs the SRS into the eth-kzg-ceremony SRS json format
func (srs *SRS) ToEthJSON() ([]string, []string, error) {
g1 := bls12381.NewG1()
g2 := bls12381.NewG2()
nG1s := len(srs.G1s)
nG2s := len(srs.G2s)
g1s := make([]string, nG1s)
g2s := make([]string, nG2s)
for i := 0; i < nG1s; i++ {
g1s[i] = "0x" + hex.EncodeToString(g1.ToCompressed(srs.G1s[i]))
}
for i := 0; i < nG2s; i++ {
g2s[i] = "0x" + hex.EncodeToString(g2.ToCompressed(srs.G2s[i]))
}
return g1s, g2s, nil
return g2s, nil
}

+ 9
- 48
parsers_test.go

@ -2,6 +2,8 @@ package kzgceremony
import (
"encoding/hex"
"encoding/json"
"io/ioutil"
"strings"
"testing"
@ -9,28 +11,19 @@ import (
bls12381 "github.com/kilic/bls12-381"
)
func TestParseSRS(t *testing.T) {
func TestStateMarshalers(t *testing.T) {
c := qt.New(t)
srs_0 := newEmptySRS(2, 2)
contr_1, err := Contribute(srs_0, []byte("1111111111111111111111111111111111111111111111111111111111111111"))
j, err := ioutil.ReadFile("current_state_10.json")
c.Assert(err, qt.IsNil)
g1s, g2s, err := contr_1.SRS.ToEthJSON()
state := &State{}
err = json.Unmarshal(j, state)
c.Assert(err, qt.IsNil)
parsedSRS, err := ParseEthJSON(g1s, g2s)
b, err := json.Marshal(state)
c.Assert(err, qt.IsNil)
err = ioutil.WriteFile("parsed_state.json", b, 0600)
c.Assert(err, qt.IsNil)
g1 := bls12381.NewG1()
g2 := bls12381.NewG2()
for i := 0; i < len(contr_1.SRS.G1s); i++ {
c.Assert(g1.Equal(parsedSRS.G1s[i], contr_1.SRS.G1s[i]), qt.IsTrue)
}
for i := 0; i < len(contr_1.SRS.G2s); i++ {
c.Assert(g2.Equal(parsedSRS.G2s[i], contr_1.SRS.G2s[i]), qt.IsTrue)
}
}
func TestParseCompressedG1Point(t *testing.T) {
@ -84,35 +77,3 @@ func TestParseCompressedG2Point(t *testing.T) {
// additionally check that g1Point is zero
c.Assert(g2.Equal(g2Point, g2.Zero()), qt.IsTrue)
}
func TestVectorFromRustImpl(t *testing.T) {
c := qt.New(t)
testVectorG1s := []string{
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0xae4a5e0fe4947fd5551664fc49453d805ce6af2dd6f053e147d95d9ede825190b06028f228f47c0d3118b71313235aa7",
"0x888a1073366b3e974c318be5862f607c18fb5241cfefc3c8b82c31c4db10f866c546804db6e44bf61b61d8c31d006099",
"0x84afca7ce5cc42aa998725610d14cd47078e523a9cb96b66856f563d62d44ff6489f0b1827b853e94d9474b75a138ec6",
"0x8ae778a5b534c6eadcce4c4e7dd1dab3674d20bfe686f70506fba1695bbdae2455169b035505e5246d726a9e0c982335",
}
testVectorG2s := []string{
"0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8",
"0xa5d4fc7bfa882ef674fbbcdda73c66c2627a5a723ddf6fc0f242b3f71301a6e7181708a8c63756787a2c3e47c2b347ca18c64b103461036830880cd26bacad80cdbfe00c69e9214b7c90bf30ab0804f520bed3ce608aefeb6f85011f0d745575",
"0x87b93440866545adf37f5119d640036b2856a790bd09c2b7f69a1a1bdc7846c5f48f622fcbf5c46a51dede46a4682b7b118542548df17ff7c7e6f63049e1d1c56ca1a637f8a55136d0ed7ab466e78550f635dc06d78d87a3003dab133b8e275a",
}
parsedSRS, err := ParseEthJSON(testVectorG1s, testVectorG2s)
c.Assert(err, qt.IsNil)
g1s, g2s, err := parsedSRS.ToEthJSON()
c.Assert(err, qt.IsNil)
c.Assert(len(testVectorG1s), qt.Equals, len(g1s))
c.Assert(len(testVectorG2s), qt.Equals, len(g2s))
for i := 0; i < len(g1s); i++ {
c.Assert(g1s[i], qt.Equals, testVectorG1s[i])
}
for i := 0; i < len(g2s); i++ {
c.Assert(g2s[i], qt.Equals, testVectorG2s[i])
}
}

+ 27
- 4
powersoftau_test.go

@ -1,6 +1,8 @@
package kzgceremony
import (
"encoding/json"
"io/ioutil"
"testing"
qt "github.com/frankban/quicktest"
@ -11,12 +13,33 @@ func TestContribution(t *testing.T) {
srs_0 := newEmptySRS(10, 10)
contr_1, err := Contribute(srs_0, []byte("1111111111111111111111111111111111111111111111111111111111111111"))
srs_1, proof_1, err := Contribute(srs_0,
[]byte("1111111111111111111111111111111111111111111111111111111111111111"))
c.Assert(err, qt.IsNil)
c.Assert(Verify(srs_0, contr_1.SRS, contr_1.Proof), qt.IsTrue)
c.Assert(Verify(srs_0, srs_1, proof_1), qt.IsTrue)
contr_2, err := Contribute(contr_1.SRS, []byte("2222222222222222222222222222222222222222222222222222222222222222"))
srs_2, proof_2, err := Contribute(srs_1,
[]byte("2222222222222222222222222222222222222222222222222222222222222222"))
c.Assert(err, qt.IsNil)
c.Assert(Verify(srs_1, srs_2, proof_2), qt.IsTrue)
}
func TestComputeNewState(t *testing.T) {
c := qt.New(t)
j, err := ioutil.ReadFile("current_state_10.json")
c.Assert(err, qt.IsNil)
cs := &State{}
err = json.Unmarshal(j, cs)
c.Assert(err, qt.IsNil)
newState, err :=
cs.Contribute([]byte("1111111111111111111111111111111111111111111111111111111111111111"))
c.Assert(err, qt.IsNil)
b, err := json.Marshal(newState)
c.Assert(err, qt.IsNil)
err = ioutil.WriteFile("new_state.json", b, 0600)
c.Assert(err, qt.IsNil)
c.Assert(Verify(contr_1.SRS, contr_2.SRS, contr_2.Proof), qt.IsTrue)
}

Loading…
Cancel
Save