From 8b831c6764ffabaca1c7f4129fa0ba787a68d91f Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Wed, 29 May 2024 13:47:35 +0100 Subject: [PATCH] example for cli --- benchmarks/circomcompat_cli.nim | 7 +- .../expected/inputs.json | 1 + .../expected/multiply_0000.zkey | Bin 0 -> 3308 bytes .../expected/multiply_0001.zkey | Bin 0 -> 3722 bytes .../expected/proof.json | 28 ++++++ .../expected/public.json | 3 + .../expected/verification_key.json | 94 ++++++++++++++++++ .../expected/witness.json | 8 ++ .../expected/witness.wtns | Bin 0 -> 268 bytes .../example_circomcompat_cli/inputs.json | 1 + .../example_circomcompat_cli/multiply.circom | 14 +++ .../example_circomcompat_cli/multiply.r1cs | Bin 0 -> 400 bytes .../example_circomcompat_cli/multiply.wasm | Bin 0 -> 34328 bytes .../example_circomcompat_cli/multiply.zkey | Bin 0 -> 3722 bytes .../example_circomcompat_cli/witness.wtns | Bin 0 -> 268 bytes 15 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 benchmarks/example_circomcompat_cli/expected/inputs.json create mode 100644 benchmarks/example_circomcompat_cli/expected/multiply_0000.zkey create mode 100644 benchmarks/example_circomcompat_cli/expected/multiply_0001.zkey create mode 100644 benchmarks/example_circomcompat_cli/expected/proof.json create mode 100644 benchmarks/example_circomcompat_cli/expected/public.json create mode 100644 benchmarks/example_circomcompat_cli/expected/verification_key.json create mode 100644 benchmarks/example_circomcompat_cli/expected/witness.json create mode 100644 benchmarks/example_circomcompat_cli/expected/witness.wtns create mode 100644 benchmarks/example_circomcompat_cli/inputs.json create mode 100644 benchmarks/example_circomcompat_cli/multiply.circom create mode 100644 benchmarks/example_circomcompat_cli/multiply.r1cs create mode 100644 benchmarks/example_circomcompat_cli/multiply.wasm create mode 100644 benchmarks/example_circomcompat_cli/multiply.zkey create mode 100644 benchmarks/example_circomcompat_cli/witness.wtns diff --git a/benchmarks/circomcompat_cli.nim b/benchmarks/circomcompat_cli.nim index 43c9e042..f3ffcf86 100644 --- a/benchmarks/circomcompat_cli.nim +++ b/benchmarks/circomcompat_cli.nim @@ -182,7 +182,8 @@ proc parseCliOptions(self: var CircomCircuit) = "--name:proof_main" ] - for kind, key, value in getOpt(params): + # for kind, key, value in getOpt(params): + for kind, key, value in getOpt(): case kind # Positional arguments @@ -239,7 +240,7 @@ proc run*() = self.zkeyPath = dir / fmt"{self.circName}.zkey" if self.inputsPath == "": - self.inputsPath = dir / fmt"input.json" + self.inputsPath = dir / fmt"inputs.json" echo "Got file args: ", self @@ -249,7 +250,7 @@ proc run*() = echo "\nERROR: must provide `" & name & "` file" fileErrors = true - checkFile self.inputsPath, "inputs.json" + checkFile self.inputsPath, "input json" checkFile self.r1csPath, "r1cs" checkFile self.wasmPath, "wasm" checkFile self.zkeyPath, "zkey" diff --git a/benchmarks/example_circomcompat_cli/expected/inputs.json b/benchmarks/example_circomcompat_cli/expected/inputs.json new file mode 100644 index 00000000..f69db28b --- /dev/null +++ b/benchmarks/example_circomcompat_cli/expected/inputs.json @@ -0,0 +1 @@ +{"a": "2","b": "3","c": "5"} diff --git a/benchmarks/example_circomcompat_cli/expected/multiply_0000.zkey b/benchmarks/example_circomcompat_cli/expected/multiply_0000.zkey new file mode 100644 index 0000000000000000000000000000000000000000..474bfcab898bd3127a7a0d340c9ed0470edd4f4c GIT binary patch literal 3308 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 Jp}mLWKLCpG%x(Yx literal 0 HcmV?d00001 diff --git a/benchmarks/example_circomcompat_cli/expected/proof.json b/benchmarks/example_circomcompat_cli/expected/proof.json new file mode 100644 index 00000000..bba4ce9a --- /dev/null +++ b/benchmarks/example_circomcompat_cli/expected/proof.json @@ -0,0 +1,28 @@ +{ + "pi_a": [ + "9394338185732305719806011065134446911108323018457588286456961882986219363865", + "15746759809874621985987780715821363746217179062284140706010953533743322353143", + "1" + ], + "pi_b": [ + [ + "11767400320831182291836719976706808438069844656325769591942922679870302275961", + "6655555805282541293507766019114818732448651987649641056472193412793000608658" + ], + [ + "165573447069789874882691451778743648261064383235713444940861981449848990224", + "19988792931394998924065924688231640113706338141254618060579448296980590803938" + ], + [ + "1", + "0" + ] + ], + "pi_c": [ + "17909441321969125567799631222722899785743377975760647946061723535215534382510", + "11283272754750438996756092628724960121502710178397142080911723324462149051123", + "1" + ], + "protocol": "groth16", + "curve": "bn128" +} \ No newline at end of file diff --git a/benchmarks/example_circomcompat_cli/expected/public.json b/benchmarks/example_circomcompat_cli/expected/public.json new file mode 100644 index 00000000..2f4b78be --- /dev/null +++ b/benchmarks/example_circomcompat_cli/expected/public.json @@ -0,0 +1,3 @@ +[ + "30" +] \ No newline at end of file diff --git a/benchmarks/example_circomcompat_cli/expected/verification_key.json b/benchmarks/example_circomcompat_cli/expected/verification_key.json new file mode 100644 index 00000000..834fdc28 --- /dev/null +++ b/benchmarks/example_circomcompat_cli/expected/verification_key.json @@ -0,0 +1,94 @@ +{ + "protocol": "groth16", + "curve": "bn128", + "nPublic": 1, + "vk_alpha_1": [ + "20491192805390485299153009773594534940189261866228447918068658471970481763042", + "9383485363053290200918347156157836566562967994039712273449902621266178545958", + "1" + ], + "vk_beta_2": [ + [ + "6375614351688725206403948262868962793625744043794305715222011528459656738731", + "4252822878758300859123897981450591353533073413197771768651442665752259397132" + ], + [ + "10505242626370262277552901082094356697409835680220590971873171140371331206856", + "21847035105528745403288232691147584728191162732299865338377159692350059136679" + ], + [ + "1", + "0" + ] + ], + "vk_gamma_2": [ + [ + "10857046999023057135944570762232829481370756359578518086990519993285655852781", + "11559732032986387107991004021392285783925812861821192530917403151452391805634" + ], + [ + "8495653923123431417604973247489272438418190587263600148770280649306958101930", + "4082367875863433681332203403145435568316851327593401208105741076214120093531" + ], + [ + "1", + "0" + ] + ], + "vk_delta_2": [ + [ + "1747014100310549185786267801742033865627943574729348577592584345594030059513", + "16711809229852947806112024364434572651070644366787595318945698594033698101166" + ], + [ + "7959627701669666787676714778866583924558661647097841159638803895395285779619", + "5745710440443182690267071684942290668945011932415467031714706685148557703570" + ], + [ + "1", + "0" + ] + ], + "vk_alphabeta_12": [ + [ + [ + "2029413683389138792403550203267699914886160938906632433982220835551125967885", + "21072700047562757817161031222997517981543347628379360635925549008442030252106" + ], + [ + "5940354580057074848093997050200682056184807770593307860589430076672439820312", + "12156638873931618554171829126792193045421052652279363021382169897324752428276" + ], + [ + "7898200236362823042373859371574133993780991612861777490112507062703164551277", + "7074218545237549455313236346927434013100842096812539264420499035217050630853" + ] + ], + [ + [ + "7077479683546002997211712695946002074877511277312570035766170199895071832130", + "10093483419865920389913245021038182291233451549023025229112148274109565435465" + ], + [ + "4595479056700221319381530156280926371456704509942304414423590385166031118820", + "19831328484489333784475432780421641293929726139240675179672856274388269393268" + ], + [ + "11934129596455521040620786944827826205713621633706285934057045369193958244500", + "8037395052364110730298837004334506829870972346962140206007064471173334027475" + ] + ] + ], + "IC": [ + [ + "7208961304015467505974244928798294369663146566375946727480874978378963231594", + "21614551618839849099527790288527978962977478454444004954197553865077104731641", + "1" + ], + [ + "20307339771029451491474674032727372515507048888836318967504414849042064633937", + "9401931764668861050170218745300289496263152524845401471688659460238598401815", + "1" + ] + ] +} \ No newline at end of file diff --git a/benchmarks/example_circomcompat_cli/expected/witness.json b/benchmarks/example_circomcompat_cli/expected/witness.json new file mode 100644 index 00000000..52d0a1f1 --- /dev/null +++ b/benchmarks/example_circomcompat_cli/expected/witness.json @@ -0,0 +1,8 @@ +[ + "1", + "30", + "2", + "3", + "5", + "6" +] \ No newline at end of file diff --git a/benchmarks/example_circomcompat_cli/expected/witness.wtns b/benchmarks/example_circomcompat_cli/expected/witness.wtns new file mode 100644 index 0000000000000000000000000000000000000000..1be4485e24f749d0699da3a611cd78a15c0d9618 GIT binary patch literal 268 zcmXRf$tz}JU|;}YMj+MzVh~UOVj%y+6i^mt*c5gXCixXm?ShvovqheduV n25dkzAbkgb7z9B2@c}t}l0Z3-S@-}mK1rY)D*<_sd+`APWZV%| literal 0 HcmV?d00001 diff --git a/benchmarks/example_circomcompat_cli/inputs.json b/benchmarks/example_circomcompat_cli/inputs.json new file mode 100644 index 00000000..f69db28b --- /dev/null +++ b/benchmarks/example_circomcompat_cli/inputs.json @@ -0,0 +1 @@ +{"a": "2","b": "3","c": "5"} diff --git a/benchmarks/example_circomcompat_cli/multiply.circom b/benchmarks/example_circomcompat_cli/multiply.circom new file mode 100644 index 00000000..7da042aa --- /dev/null +++ b/benchmarks/example_circomcompat_cli/multiply.circom @@ -0,0 +1,14 @@ +pragma circom 2.1.6; + +template Multiply() { + signal input a; + signal input b; + signal input c; + signal s1; + signal output out; + + s1 <== a * b; + out <== s1 * c; +} + +component main = Multiply(); diff --git a/benchmarks/example_circomcompat_cli/multiply.r1cs b/benchmarks/example_circomcompat_cli/multiply.r1cs new file mode 100644 index 0000000000000000000000000000000000000000..1454ce3051e652bb83ede72470d9799a7c28424a GIT binary patch literal 400 zcmXRiOfF_*U|?VdVkRK|0K^~w5(Dvp;KSsv51l6#?5y;7VXP4w(b%}nHDHJ40>g(z zeklepy&xJN0LimL6c99zSamEw^N6t*s)nGw4iNV-C_v1`tDX&_2CM@Vb|5|ofWi#K ZHvn;v0L-1xFa@gtNrU_V0#H9Q002a$N|68n literal 0 HcmV?d00001 diff --git a/benchmarks/example_circomcompat_cli/multiply.wasm b/benchmarks/example_circomcompat_cli/multiply.wasm new file mode 100644 index 0000000000000000000000000000000000000000..fe482053fea07f3cc7574a78e9309abda52a53c6 GIT binary patch literal 34328 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 literal 0 HcmV?d00001 diff --git a/benchmarks/example_circomcompat_cli/multiply.zkey b/benchmarks/example_circomcompat_cli/multiply.zkey new file mode 100644 index 0000000000000000000000000000000000000000..522cbb46bcd9fe2a0e3b5214d93d346e49e7cfeb GIT binary patch literal 3722 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 Jp}mLWKLCpG%x(Yx literal 0 HcmV?d00001 diff --git a/benchmarks/example_circomcompat_cli/witness.wtns b/benchmarks/example_circomcompat_cli/witness.wtns new file mode 100644 index 0000000000000000000000000000000000000000..1be4485e24f749d0699da3a611cd78a15c0d9618 GIT binary patch literal 268 zcmXRf$tz}JU|;}YMj+MzVh~UOVj%y+6i^mt*c5gXCixXm?ShvovqheduV n25dkzAbkgb7z9B2@c}t}l0Z3-S@-}mK1rY)D*<_sd+`APWZV%| literal 0 HcmV?d00001