├── README.md ├── .gitignore ├── scripts ├── compile_circuit.sh ├── generate_calldata.sh ├── verify_proof.sh ├── generate_contract.sh ├── generate_proof.sh └── generate_keys.sh ├── circuit └── circuit.circom ├── package.json └── yarn.lock /README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /scripts/compile_circuit.sh: -------------------------------------------------------------------------------- 1 | circom circuit/circuit.circom --r1cs --wasm --sym -------------------------------------------------------------------------------- /scripts/generate_calldata.sh: -------------------------------------------------------------------------------- 1 | snarkjs zkey export soliditycalldata public.json proof.json -------------------------------------------------------------------------------- /scripts/verify_proof.sh: -------------------------------------------------------------------------------- 1 | ./node_modules/.bin/snarkjs plonk verify verification_key.json $1 $2 -------------------------------------------------------------------------------- /scripts/generate_contract.sh: -------------------------------------------------------------------------------- 1 | snarkjs zkey export solidityverifier circuit_final.zkey verifier.sol -------------------------------------------------------------------------------- /circuit/circuit.circom: -------------------------------------------------------------------------------- 1 | pragma circom 2.0.0; 2 | 3 | template Factors() { 4 | } 5 | 6 | component main = Factors(); -------------------------------------------------------------------------------- /scripts/generate_proof.sh: -------------------------------------------------------------------------------- 1 | cd circuit_js 2 | node generate_witness.js circuit.wasm ../input.json ../witness.wtns 3 | cd ../ 4 | ./node_modules/.bin/snarkjs plonk prove circuit_final.zkey witness.wtns proof.json public.json 5 | rm witness.wtns -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zk101", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "genKey": "bash ./scripts/generate_keys.sh", 9 | "genProof": "bash ./scripts/generate_proof.sh", 10 | "verifyProof": "bash ./scripts/verify_proof.sh", 11 | "compile": "bash ./scripts/compile_circuit.sh", 12 | "genContract":"bash ./scripts/generate_contract.sh", 13 | "genCalldata":"bash ./scripts/generate_calldata.sh" 14 | }, 15 | "keywords": [], 16 | "author": "", 17 | "license": "ISC", 18 | "dependencies": { 19 | "snarkjs": "0.4.22" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /scripts/generate_keys.sh: -------------------------------------------------------------------------------- 1 | ./node_modules/.bin/snarkjs powersoftau new bn128 12 pot12_0000.ptau -v 2 | ./node_modules/.bin/snarkjs powersoftau contribute pot12_0000.ptau pot12_0001.ptau --name="First contribution" -v -e="some random text 2" 3 | ./node_modules/.bin/snarkjs powersoftau contribute pot12_0001.ptau pot12_0002.ptau --name="Second contribution" -v -e="some random text" 4 | ./node_modules/.bin/snarkjs powersoftau export challenge pot12_0002.ptau challenge_0003 5 | ./node_modules/.bin/snarkjs powersoftau challenge contribute bn128 challenge_0003 response_0003 -e="some random text" 6 | ./node_modules/.bin/snarkjs powersoftau import response pot12_0002.ptau response_0003 pot12_0003.ptau -n="Third contribution name" 7 | ./node_modules/.bin/snarkjs powersoftau verify pot12_0003.ptau 8 | ./node_modules/.bin/snarkjs powersoftau beacon pot12_0003.ptau pot12_beacon.ptau 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 10 -n="Final Beacon" 9 | ./node_modules/.bin/snarkjs powersoftau prepare phase2 pot12_beacon.ptau pot12_final.ptau -v 10 | rm pot12_0000.ptau 11 | rm pot12_0001.ptau 12 | rm pot12_0002.ptau 13 | rm pot12_0003.ptau 14 | rm pot12_0001.ptau 15 | rm pot12_0002.ptau 16 | rm pot12_0003.ptau 17 | ./node_modules/.bin/snarkjs powersoftau verify pot12_final.ptau 18 | ./node_modules/.bin/snarkjs r1cs export json circuit.r1cs circuit.r1cs.json 19 | ./node_modules/.bin/snarkjs plonk setup circuit.r1cs pot12_final.ptau circuit_final.zkey 20 | ./node_modules/.bin/snarkjs zkey export verificationkey circuit_final.zkey verification_key.json 21 | rm pot12_final.ptau 22 | rm pot12_beacon.ptau 23 | rm response_0003 24 | rm circuit.r1cs 25 | rm circuit.r1cs.json 26 | rm challenge_0003 27 | rm circuit.sym -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@iden3/bigarray@0.0.2": 6 | version "0.0.2" 7 | resolved "https://registry.yarnpkg.com/@iden3/bigarray/-/bigarray-0.0.2.tgz#6fc4ba5be18daf8a26ee393f2fb62b80d98c05e9" 8 | integrity sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g== 9 | 10 | "@iden3/binfileutils@0.0.11": 11 | version "0.0.11" 12 | resolved "https://registry.yarnpkg.com/@iden3/binfileutils/-/binfileutils-0.0.11.tgz#9ffbbcc1279f2b2182bb6dcff4eee8a5b2167911" 13 | integrity sha512-LylnJoZ0CTdgErnKY8OxohvW4K+p6UHD3sxt+3P9AmMyBQjYR4IpoqoYZZ+9aMj89cmCQ21UvdhndAx04er3NA== 14 | dependencies: 15 | fastfile "0.0.20" 16 | ffjavascript "^0.2.48" 17 | 18 | ansi-styles@^4.1.0: 19 | version "4.3.0" 20 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 21 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 22 | dependencies: 23 | color-convert "^2.0.1" 24 | 25 | async@^3.2.3: 26 | version "3.2.4" 27 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" 28 | integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== 29 | 30 | b4a@^1.0.1: 31 | version "1.6.0" 32 | resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.0.tgz#5430a9cac1af388910dd1a1c1aa9d3a0a796ed68" 33 | integrity sha512-fsTxXxj1081Yq5MOQ06gZ5+e2QcSyP2U6NofdOWyq+lrNI4IjkZ+fLVmoQ6uUCiNg1NWePMMVq93vOTdbJmErw== 34 | 35 | balanced-match@^1.0.0: 36 | version "1.0.2" 37 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 38 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 39 | 40 | big-integer@^1.6.42, big-integer@^1.6.48: 41 | version "1.6.51" 42 | resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" 43 | integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== 44 | 45 | blake2b-wasm@^2.4.0: 46 | version "2.4.0" 47 | resolved "https://registry.yarnpkg.com/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz#9115649111edbbd87eb24ce7c04b427e4e2be5be" 48 | integrity sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w== 49 | dependencies: 50 | b4a "^1.0.1" 51 | nanoassert "^2.0.0" 52 | 53 | blakejs@^1.1.0: 54 | version "1.2.1" 55 | resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" 56 | integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== 57 | 58 | brace-expansion@^1.1.7: 59 | version "1.1.11" 60 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 61 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 62 | dependencies: 63 | balanced-match "^1.0.0" 64 | concat-map "0.0.1" 65 | 66 | brace-expansion@^2.0.1: 67 | version "2.0.1" 68 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 69 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 70 | dependencies: 71 | balanced-match "^1.0.0" 72 | 73 | chalk@^4.0.2: 74 | version "4.1.2" 75 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 76 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 77 | dependencies: 78 | ansi-styles "^4.1.0" 79 | supports-color "^7.1.0" 80 | 81 | circom_runtime@0.1.18: 82 | version "0.1.18" 83 | resolved "https://registry.yarnpkg.com/circom_runtime/-/circom_runtime-0.1.18.tgz#6b4d7b4b869dc67750be55e16ca506b708dcacb0" 84 | integrity sha512-j6k+Jg1DXCYFVgjDRbJDmkAJ9E17js8h1iR7F1UX0IUr5v8NXeOXkfRh9+/73JqSgXb3Eo166a4JHdA/CeoEeA== 85 | dependencies: 86 | ffjavascript "0.2.55" 87 | 88 | color-convert@^2.0.1: 89 | version "2.0.1" 90 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 91 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 92 | dependencies: 93 | color-name "~1.1.4" 94 | 95 | color-name@~1.1.4: 96 | version "1.1.4" 97 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 98 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 99 | 100 | concat-map@0.0.1: 101 | version "0.0.1" 102 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 103 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 104 | 105 | ejs@^3.1.6: 106 | version "3.1.8" 107 | resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" 108 | integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== 109 | dependencies: 110 | jake "^10.8.5" 111 | 112 | fastfile@0.0.20: 113 | version "0.0.20" 114 | resolved "https://registry.yarnpkg.com/fastfile/-/fastfile-0.0.20.tgz#794a143d58cfda2e24c298e5ef619c748c8a1879" 115 | integrity sha512-r5ZDbgImvVWCP0lA/cGNgQcZqR+aYdFx3u+CtJqUE510pBUVGMn4ulL/iRTI4tACTYsNJ736uzFxEBXesPAktA== 116 | 117 | ffjavascript@0.2.55, ffjavascript@^0.2.48: 118 | version "0.2.55" 119 | resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.2.55.tgz#fb4bc53265501526a2916d6a20bbbc06d113d7be" 120 | integrity sha512-8X0FCIPOWiK6DTWh3pnE3O6D6nIQsirStAXpWMzRDnoDX7SEnDX4I28aVhwjL7L35XS1vy2AU7zc0UCGYxdLjw== 121 | dependencies: 122 | big-integer "^1.6.48" 123 | wasmbuilder "^0.0.12" 124 | wasmcurves "0.1.0" 125 | web-worker "^1.2.0" 126 | 127 | filelist@^1.0.1: 128 | version "1.0.4" 129 | resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" 130 | integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== 131 | dependencies: 132 | minimatch "^5.0.1" 133 | 134 | has-flag@^4.0.0: 135 | version "4.0.0" 136 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 137 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 138 | 139 | jake@^10.8.5: 140 | version "10.8.5" 141 | resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" 142 | integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== 143 | dependencies: 144 | async "^3.2.3" 145 | chalk "^4.0.2" 146 | filelist "^1.0.1" 147 | minimatch "^3.0.4" 148 | 149 | js-sha3@^0.8.0: 150 | version "0.8.0" 151 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" 152 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== 153 | 154 | logplease@^1.2.15: 155 | version "1.2.15" 156 | resolved "https://registry.yarnpkg.com/logplease/-/logplease-1.2.15.tgz#3da442e93751a5992cc19010a826b08d0293c48a" 157 | integrity sha512-jLlHnlsPSJjpwUfcNyUxXCl33AYg2cHhIf9QhGL2T4iPT0XPB+xP1LRKFPgIg1M/sg9kAJvy94w9CzBNrfnstA== 158 | 159 | minimatch@^3.0.4: 160 | version "3.1.2" 161 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 162 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 163 | dependencies: 164 | brace-expansion "^1.1.7" 165 | 166 | minimatch@^5.0.1: 167 | version "5.1.0" 168 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" 169 | integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== 170 | dependencies: 171 | brace-expansion "^2.0.1" 172 | 173 | nanoassert@^2.0.0: 174 | version "2.0.0" 175 | resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-2.0.0.tgz#a05f86de6c7a51618038a620f88878ed1e490c09" 176 | integrity sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA== 177 | 178 | r1csfile@0.0.36: 179 | version "0.0.36" 180 | resolved "https://registry.yarnpkg.com/r1csfile/-/r1csfile-0.0.36.tgz#978453e00066b0726c48e848ee6c308a6df7b2a4" 181 | integrity sha512-xC4ZGiFUGFhHonLutKsKEhxmR5janViiSvevpkZukpQNor3kFan8byKcvXNU9jkm49ffQxj5IvU8SDluOI0IQQ== 182 | dependencies: 183 | "@iden3/bigarray" "0.0.2" 184 | "@iden3/binfileutils" "0.0.11" 185 | fastfile "0.0.20" 186 | ffjavascript "0.2.55" 187 | 188 | readline@^1.3.0: 189 | version "1.3.0" 190 | resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" 191 | integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg== 192 | 193 | snarkjs@0.4.22: 194 | version "0.4.22" 195 | resolved "https://registry.yarnpkg.com/snarkjs/-/snarkjs-0.4.22.tgz#0a519fe989794111b6f9a755ba4e86a31b6617fb" 196 | integrity sha512-7dCpiywU9RGfiymZYq4nMCwj6/jfWabw3z/F7FTWuzB4qDrbxAl9j73anDEVh0kzfSV1j+2B+y30fd0SXOGhDg== 197 | dependencies: 198 | "@iden3/binfileutils" "0.0.11" 199 | blake2b-wasm "^2.4.0" 200 | circom_runtime "0.1.18" 201 | ejs "^3.1.6" 202 | fastfile "0.0.20" 203 | ffjavascript "0.2.55" 204 | js-sha3 "^0.8.0" 205 | logplease "^1.2.15" 206 | r1csfile "0.0.36" 207 | readline "^1.3.0" 208 | 209 | supports-color@^7.1.0: 210 | version "7.2.0" 211 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 212 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 213 | dependencies: 214 | has-flag "^4.0.0" 215 | 216 | wasmbuilder@^0.0.12: 217 | version "0.0.12" 218 | resolved "https://registry.yarnpkg.com/wasmbuilder/-/wasmbuilder-0.0.12.tgz#a60cb25d6d11f314fe5ab3f4ee041ccb493cb78a" 219 | integrity sha512-dTMpBgrnLOXrN58i2zakn2ScynsBhq9LfyQIsPz4CyxRF9k1GAORniuqn3xmE9NnI1l7g3iiVCkoB2Cl0/oG8w== 220 | dependencies: 221 | big-integer "^1.6.48" 222 | 223 | wasmcurves@0.1.0: 224 | version "0.1.0" 225 | resolved "https://registry.yarnpkg.com/wasmcurves/-/wasmcurves-0.1.0.tgz#0bc3f9d465367fcd8243395cb0094a05577e5609" 226 | integrity sha512-kIlcgbVUAv2uQ6lGsepGz/m5V40+Z6rvTBkqCYn3Y2+OcXst+UaP4filJYLh/xDxjJl62FFjZZeAnpeli1Y5/Q== 227 | dependencies: 228 | big-integer "^1.6.42" 229 | blakejs "^1.1.0" 230 | 231 | web-worker@^1.2.0: 232 | version "1.2.0" 233 | resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da" 234 | integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA== 235 | --------------------------------------------------------------------------------