From 51f7bbcd31f894f663bcca0d7cdb30fbdac2cffd Mon Sep 17 00:00:00 2001 From: Katie McKeon <62887234+katiemckeon@users.noreply.github.com> Date: Sun, 25 Feb 2024 12:40:42 -0600 Subject: [PATCH] Extend snarkjs testing This PR adds a test invoking all of the commands in `snarkjs --help`. The new files in `snark_js/circom_files` were generated by Circom v2.1.5 (not the latest release, but close enough). I have considered the possibility that Circom & Snarkjs undergo an update, introducing errors in the test script from our outdated serializations in `circom_files/`. Informally, I'd estimate the likelihood is low. I've never encountered or heard about snarkjs breaking changes. There are enough Circom circuits in production use cases out there, I suspect they develop around backwards compatibility Since the test script generates so many intermediate files - I created `/tmp/snarkjs` at the beginning of the script and remove it at the end. There are plenty of subdirectories added to this folder, but I never bother to delete them. I let the recursive flag handle all that at the end. Just pointing this out in case there is a reason not to do that (if `test.sh` ends early, many intermediate files are left). Merges #6 --- images/snarkjs/circom-files/circuit.circom | 18 ++ images/snarkjs/circom-files/circuit.r1cs | Bin 0 -> 49336 bytes images/snarkjs/circom-files/circuit.sym | 303 +++++++++++++++++++++ images/snarkjs/circom-files/circuit.wasm | Bin 0 -> 35938 bytes images/snarkjs/circom-files/input.json | 1 + images/snarkjs/circom-files/witness.wtns | Bin 0 -> 9772 bytes images/snarkjs/test.sh | 142 ++++++++++ 7 files changed, 464 insertions(+) create mode 100644 images/snarkjs/circom-files/circuit.circom create mode 100644 images/snarkjs/circom-files/circuit.r1cs create mode 100644 images/snarkjs/circom-files/circuit.sym create mode 100644 images/snarkjs/circom-files/circuit.wasm create mode 100644 images/snarkjs/circom-files/input.json create mode 100644 images/snarkjs/circom-files/witness.wtns diff --git a/images/snarkjs/circom-files/circuit.circom b/images/snarkjs/circom-files/circuit.circom new file mode 100644 index 0000000..5f44248 --- /dev/null +++ b/images/snarkjs/circom-files/circuit.circom @@ -0,0 +1,18 @@ +pragma circom 2.0.0; + +template Multiplier(n) { + signal input a; + signal input b; + signal output c; + + signal int[n]; + + int[0] <== a*a + b; + for (var i=1; i10EO{aLb|)VTkJ#;#X@WhEU*i~02{j%u@k#n5$x{3?!d&xz^=V=nDH-p z&dj+pyJvQJ=DWYy;g5U2_f8x#ZqgE^l56*?K^m)1_=Zq0Q-1wqDTYbSYbJXmh%h ztq-(0UCP!M+MF(B>j!O4m$LPTHm6J320)wBrECMC&FNCMLD1%ODcfLZbGnpm2(&p} z%C;1=IbF&&6xy6FWm_8BoGxWs2HKo1Wm^{7oGxWs4%(b9Wm_KFoGxWs0ot4{Wm^&2 zoGxWs3EG@4Wm_5AoGxWs1=^f0Wm^^6oGxWs4ceS8Wg7-56+17+Mr%TyJK%3L0Y->TA)1_={Lz~m3Y$Kt~=~A|Jpv~!0wsoP+=~A}!pv~!0 zw)LUS=~A{0pv~!0wo%aLbSc}0(B^b0+h}NWx|D4rXmh%hZDVM2x|D4bXmh%hZBuA- zx|D4*Xmh%hZF6XIx|D4TXmh%hZ49(IUCOp4v^ibMwiUEFUCOpKv^ibMwhgp7UCK5V z+MF(B+ZNiKE@j&e+MF(B+aB7SE@j&R+MF(B+Y#EFE@c}BZBCc6jfXa;OWAgUHm6J3 zc7`^mOWAgTHm6J3c7-;lOWAgVHm6J3c84~nOWF2-Hm6J3_JlU4OWF2QE%62%kIbF(j z1hhF_$~G0+oGxWM65556*)D)Kr%Tx`gf^#3*)D=Mr%Tx`hBl{5*)D-Lr%TypK%3L0Y?nft)1_>eL7UU1 zY?niu)1_=zK%3L0Y*#{?)1_=zL7UU1Y*#~@)1_?JK%3L0Y}Z1Y)1_?JL7UU1Y}Z4Z z)1_=TK%3L0Y&Sxi)1_=TL7UU1Y&S!j)1_>;K%3L0Y_~$2)1_>;L7UU1Y_~(3)1_>8 zK%3L0YIb!szJ~M{Qoj7Xz;ObSj#a-*)e+SoE)Gh9M)hf>ku19U;T9v1(bi`II zXd~CEJYA(DHu5*A4*ZqG=~A{D(B^b0TTN(lx|D56Xmh%htroO7UCLG)+MF(Bs{?IL zm$KD`Hm6J3>Oq^+rEK+~&FNCM2GHhoDO*EmbGnqR5wtm7%GMa#oGxW+0&Py0vNeS^ zr%TzIL7UU1Y|Wv~=~A{9(B^b0TT5tjx|FRIv^ibM)*9NJE@f*2ZBCc6wS_jPOWE2% zo71Ii?V-)-Qnn7z=5#4rM`&}pl&urAIbF)u8QPpKW$OZMPM5NEg*K;4*}6fS)1_?P zq0Q-1wjR*tbSYa;Xmh%htrxU8UCP!Q+MF(B>jQ00m$LPRHm6J3`azr1rELA7&FNCM z0np}jDceA3b2?&E6FH+CR&}OTd33J&s=Ds~UUN`Ypyw`?^T@&aq4NKta>h2fPSv;n zJpS8OeqCuQj~WZ7)YLAit);E4U39s+`njIAzP5q3p|+8>v9^h}skWK6xweJ2rM8u} zwYH76t+t)Ey|#n4qqdW_v$l)2tG1iAyS9h6r?!{2x3-VAueP7IzjlCjpmvaUuy%-c zDeX}0(%NOT%W9X?F0WldyP|d_?aJC!w5w`Y(+<N`us)FXB~<@S5S0@ zUvyqxbT(ad4qSBRT6Dfybe33jZdY_hR&*X!boNtp&Qf%yQFMM#bg#bXzIf3+=%V|* zMfX;V?qe3+Gc3A4S9C9|bY5cNA42zditeWr-Mc8dPf+xpyy*RJ(Rw3 literal 0 HcmV?d00001 diff --git a/images/snarkjs/circom-files/circuit.sym b/images/snarkjs/circom-files/circuit.sym new file mode 100644 index 0000000..9cbe588 --- /dev/null +++ b/images/snarkjs/circom-files/circuit.sym @@ -0,0 +1,303 @@ +1,1,0,main.c +2,2,0,main.a +3,3,0,main.b +4,4,0,main.int[0] +5,5,0,main.int[1] +6,6,0,main.int[2] +7,7,0,main.int[3] +8,8,0,main.int[4] +9,9,0,main.int[5] +10,10,0,main.int[6] +11,11,0,main.int[7] +12,12,0,main.int[8] +13,13,0,main.int[9] +14,14,0,main.int[10] +15,15,0,main.int[11] +16,16,0,main.int[12] +17,17,0,main.int[13] +18,18,0,main.int[14] +19,19,0,main.int[15] +20,20,0,main.int[16] +21,21,0,main.int[17] +22,22,0,main.int[18] +23,23,0,main.int[19] +24,24,0,main.int[20] +25,25,0,main.int[21] +26,26,0,main.int[22] +27,27,0,main.int[23] +28,28,0,main.int[24] +29,29,0,main.int[25] +30,30,0,main.int[26] +31,31,0,main.int[27] +32,32,0,main.int[28] +33,33,0,main.int[29] +34,34,0,main.int[30] +35,35,0,main.int[31] +36,36,0,main.int[32] +37,37,0,main.int[33] +38,38,0,main.int[34] +39,39,0,main.int[35] +40,40,0,main.int[36] +41,41,0,main.int[37] +42,42,0,main.int[38] +43,43,0,main.int[39] +44,44,0,main.int[40] +45,45,0,main.int[41] +46,46,0,main.int[42] +47,47,0,main.int[43] +48,48,0,main.int[44] +49,49,0,main.int[45] +50,50,0,main.int[46] +51,51,0,main.int[47] +52,52,0,main.int[48] +53,53,0,main.int[49] +54,54,0,main.int[50] +55,55,0,main.int[51] +56,56,0,main.int[52] +57,57,0,main.int[53] +58,58,0,main.int[54] +59,59,0,main.int[55] +60,60,0,main.int[56] +61,61,0,main.int[57] +62,62,0,main.int[58] +63,63,0,main.int[59] +64,64,0,main.int[60] +65,65,0,main.int[61] +66,66,0,main.int[62] +67,67,0,main.int[63] +68,68,0,main.int[64] +69,69,0,main.int[65] +70,70,0,main.int[66] +71,71,0,main.int[67] +72,72,0,main.int[68] +73,73,0,main.int[69] +74,74,0,main.int[70] +75,75,0,main.int[71] +76,76,0,main.int[72] +77,77,0,main.int[73] +78,78,0,main.int[74] +79,79,0,main.int[75] +80,80,0,main.int[76] +81,81,0,main.int[77] +82,82,0,main.int[78] +83,83,0,main.int[79] +84,84,0,main.int[80] +85,85,0,main.int[81] +86,86,0,main.int[82] +87,87,0,main.int[83] +88,88,0,main.int[84] +89,89,0,main.int[85] +90,90,0,main.int[86] +91,91,0,main.int[87] +92,92,0,main.int[88] +93,93,0,main.int[89] +94,94,0,main.int[90] +95,95,0,main.int[91] +96,96,0,main.int[92] +97,97,0,main.int[93] +98,98,0,main.int[94] +99,99,0,main.int[95] +100,100,0,main.int[96] +101,101,0,main.int[97] +102,102,0,main.int[98] +103,103,0,main.int[99] +104,104,0,main.int[100] +105,105,0,main.int[101] +106,106,0,main.int[102] +107,107,0,main.int[103] +108,108,0,main.int[104] +109,109,0,main.int[105] +110,110,0,main.int[106] +111,111,0,main.int[107] +112,112,0,main.int[108] +113,113,0,main.int[109] +114,114,0,main.int[110] +115,115,0,main.int[111] +116,116,0,main.int[112] +117,117,0,main.int[113] +118,118,0,main.int[114] +119,119,0,main.int[115] +120,120,0,main.int[116] +121,121,0,main.int[117] +122,122,0,main.int[118] +123,123,0,main.int[119] +124,124,0,main.int[120] +125,125,0,main.int[121] +126,126,0,main.int[122] +127,127,0,main.int[123] +128,128,0,main.int[124] +129,129,0,main.int[125] +130,130,0,main.int[126] +131,131,0,main.int[127] +132,132,0,main.int[128] +133,133,0,main.int[129] +134,134,0,main.int[130] +135,135,0,main.int[131] +136,136,0,main.int[132] +137,137,0,main.int[133] +138,138,0,main.int[134] +139,139,0,main.int[135] +140,140,0,main.int[136] +141,141,0,main.int[137] +142,142,0,main.int[138] +143,143,0,main.int[139] +144,144,0,main.int[140] +145,145,0,main.int[141] +146,146,0,main.int[142] +147,147,0,main.int[143] +148,148,0,main.int[144] +149,149,0,main.int[145] +150,150,0,main.int[146] +151,151,0,main.int[147] +152,152,0,main.int[148] +153,153,0,main.int[149] +154,154,0,main.int[150] +155,155,0,main.int[151] +156,156,0,main.int[152] +157,157,0,main.int[153] +158,158,0,main.int[154] +159,159,0,main.int[155] +160,160,0,main.int[156] +161,161,0,main.int[157] +162,162,0,main.int[158] +163,163,0,main.int[159] +164,164,0,main.int[160] +165,165,0,main.int[161] +166,166,0,main.int[162] +167,167,0,main.int[163] +168,168,0,main.int[164] +169,169,0,main.int[165] +170,170,0,main.int[166] +171,171,0,main.int[167] +172,172,0,main.int[168] +173,173,0,main.int[169] +174,174,0,main.int[170] +175,175,0,main.int[171] +176,176,0,main.int[172] +177,177,0,main.int[173] +178,178,0,main.int[174] +179,179,0,main.int[175] +180,180,0,main.int[176] +181,181,0,main.int[177] +182,182,0,main.int[178] +183,183,0,main.int[179] +184,184,0,main.int[180] +185,185,0,main.int[181] +186,186,0,main.int[182] +187,187,0,main.int[183] +188,188,0,main.int[184] +189,189,0,main.int[185] +190,190,0,main.int[186] +191,191,0,main.int[187] +192,192,0,main.int[188] +193,193,0,main.int[189] +194,194,0,main.int[190] +195,195,0,main.int[191] +196,196,0,main.int[192] +197,197,0,main.int[193] +198,198,0,main.int[194] +199,199,0,main.int[195] +200,200,0,main.int[196] +201,201,0,main.int[197] +202,202,0,main.int[198] +203,203,0,main.int[199] +204,204,0,main.int[200] +205,205,0,main.int[201] +206,206,0,main.int[202] +207,207,0,main.int[203] +208,208,0,main.int[204] +209,209,0,main.int[205] +210,210,0,main.int[206] +211,211,0,main.int[207] +212,212,0,main.int[208] +213,213,0,main.int[209] +214,214,0,main.int[210] +215,215,0,main.int[211] +216,216,0,main.int[212] +217,217,0,main.int[213] +218,218,0,main.int[214] +219,219,0,main.int[215] +220,220,0,main.int[216] +221,221,0,main.int[217] +222,222,0,main.int[218] +223,223,0,main.int[219] +224,224,0,main.int[220] +225,225,0,main.int[221] +226,226,0,main.int[222] +227,227,0,main.int[223] +228,228,0,main.int[224] +229,229,0,main.int[225] +230,230,0,main.int[226] +231,231,0,main.int[227] +232,232,0,main.int[228] +233,233,0,main.int[229] +234,234,0,main.int[230] +235,235,0,main.int[231] +236,236,0,main.int[232] +237,237,0,main.int[233] +238,238,0,main.int[234] +239,239,0,main.int[235] +240,240,0,main.int[236] +241,241,0,main.int[237] +242,242,0,main.int[238] +243,243,0,main.int[239] +244,244,0,main.int[240] +245,245,0,main.int[241] +246,246,0,main.int[242] +247,247,0,main.int[243] +248,248,0,main.int[244] +249,249,0,main.int[245] +250,250,0,main.int[246] +251,251,0,main.int[247] +252,252,0,main.int[248] +253,253,0,main.int[249] +254,254,0,main.int[250] +255,255,0,main.int[251] +256,256,0,main.int[252] +257,257,0,main.int[253] +258,258,0,main.int[254] +259,259,0,main.int[255] +260,260,0,main.int[256] +261,261,0,main.int[257] +262,262,0,main.int[258] +263,263,0,main.int[259] +264,264,0,main.int[260] +265,265,0,main.int[261] +266,266,0,main.int[262] +267,267,0,main.int[263] +268,268,0,main.int[264] +269,269,0,main.int[265] +270,270,0,main.int[266] +271,271,0,main.int[267] +272,272,0,main.int[268] +273,273,0,main.int[269] +274,274,0,main.int[270] +275,275,0,main.int[271] +276,276,0,main.int[272] +277,277,0,main.int[273] +278,278,0,main.int[274] +279,279,0,main.int[275] +280,280,0,main.int[276] +281,281,0,main.int[277] +282,282,0,main.int[278] +283,283,0,main.int[279] +284,284,0,main.int[280] +285,285,0,main.int[281] +286,286,0,main.int[282] +287,287,0,main.int[283] +288,288,0,main.int[284] +289,289,0,main.int[285] +290,290,0,main.int[286] +291,291,0,main.int[287] +292,292,0,main.int[288] +293,293,0,main.int[289] +294,294,0,main.int[290] +295,295,0,main.int[291] +296,296,0,main.int[292] +297,297,0,main.int[293] +298,298,0,main.int[294] +299,299,0,main.int[295] +300,300,0,main.int[296] +301,301,0,main.int[297] +302,302,0,main.int[298] +303,-1,0,main.int[299] diff --git a/images/snarkjs/circom-files/circuit.wasm b/images/snarkjs/circom-files/circuit.wasm new file mode 100644 index 0000000000000000000000000000000000000000..9abc68af9b377cc088d0fdb108d5a13bb0e29b81 GIT binary patch literal 35938 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 literal 0 HcmV?d00001 diff --git a/images/snarkjs/circom-files/input.json b/images/snarkjs/circom-files/input.json new file mode 100644 index 0000000..c7e0fc6 --- /dev/null +++ b/images/snarkjs/circom-files/input.json @@ -0,0 +1 @@ +{"a": 3, "b": 11} diff --git a/images/snarkjs/circom-files/witness.wtns b/images/snarkjs/circom-files/witness.wtns new file mode 100644 index 0000000000000000000000000000000000000000..abaf33c25921d8d30ef35486134b7da1e65189db GIT binary patch literal 9772 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