Browse Source

Full flow works, multiple deposits & withdraws

pull/1/head
arnaucube 4 years ago
parent
commit
c2446cba36
10 changed files with 67 additions and 40 deletions
  1. BIN
      circuits-files/deposit-proving_key.bin
  2. BIN
      circuits-files/deposit.wasm
  3. BIN
      circuits-files/withdraw-proving_key.bin
  4. +7
    -4
      index.html
  5. +5
    -3
      index.js
  6. +54
    -33
      libs/miksi-browser.js
  7. +0
    -0
      libs/snarkjs.js
  8. +0
    -0
      libs/wasmsnark_bn128.js
  9. +1
    -0
      libs/web3.min.js
  10. BIN
      miksi-logo00-square-pink.png

BIN
circuits-files/deposit-proving_key.bin


BIN
circuits-files/deposit.wasm


BIN
circuits-files/withdraw-proving_key.bin


+ 7
- 4
index.html

@ -88,8 +88,10 @@
<br><br> <br><br>
<h5 class="card-title">Stats</h5> <h5 class="card-title">Stats</h5>
<hr> <hr>
<img src="miksi-logo00-square-pink.png" style="width:300px;" class="float-right">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
<br>
</div> </div>
<!-- config --> <!-- config -->
<div class="tab-pane fade" id="config" role="tabpanel" aria-labelledby="config-tab"> <div class="tab-pane fade" id="config" role="tabpanel" aria-labelledby="config-tab">
@ -174,10 +176,11 @@
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.min.js"></script> --> <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.min.js"></script> -->
<script src="lib/wasmsnark_bn128.js"></script>
<script src="lib/snarkjs.js"></script>
<script src="node_modules/web3/dist/web3.min.js"></script>
<script src="lib/miksi-browser.js"></script>
<script src="libs/wasmsnark_bn128.js"></script>
<script src="libs/snarkjs.js"></script>
<!-- <script src="node_modules/web3/dist/web3.min.js"></script> -->
<script src="libs/web3.min.js"></script>
<script src="libs/miksi-browser.js"></script>
<script src="index.js"></script> <script src="index.js"></script>

+ 5
- 3
index.js

@ -2,8 +2,7 @@ var circuit = {};
var provingKey = {}; var provingKey = {};
var witnessCalc = {}; var witnessCalc = {};
const abi = JSON.parse(`[{"inputs":[{"internalType":"address","name":"_depositVerifierContractAddr","type":"address"},{"internalType":"address","name":"_withdrawVerifierContractAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_commitment","type":"uint256"},{"internalType":"uint256","name":"_root","type":"uint256"},{"internalType":"uint256[2]","name":"a","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"b","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"c","type":"uint256[2]"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getCommitments","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"},{"internalType":"uint256","name":"nullifier","type":"uint256"},{"internalType":"uint256[2]","name":"a","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"b","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"c","type":"uint256[2]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]`); const abi = JSON.parse(`[{"inputs":[{"internalType":"address","name":"_depositVerifierContractAddr","type":"address"},{"internalType":"address","name":"_withdrawVerifierContractAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_commitment","type":"uint256"},{"internalType":"uint256","name":"_root","type":"uint256"},{"internalType":"uint256[2]","name":"a","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"b","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"c","type":"uint256[2]"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getCommitments","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"},{"internalType":"uint256","name":"nullifier","type":"uint256"},{"internalType":"uint256[2]","name":"a","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"b","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"c","type":"uint256[2]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]`);
// const miksiAddress = "0x6E77f4bB1356426baD1Bd014d04388eFAc197Fe1";
const miksiAddress = "0xc9009d9Df413883B6064503FDA93A7A8ab9B7afb";
const miksiAddress = "0x29DB549Ea98d41e0F28A5aA50ED1D37d62BA8C4B";
function loadCircuit(circuitname) { function loadCircuit(circuitname) {
fetch("circuits-files/"+circuitname+"-proving_key.bin").then( (response) => { fetch("circuits-files/"+circuitname+"-proving_key.bin").then( (response) => {
@ -33,7 +32,10 @@ async function deposit(circuitname) {
const nullifier = miksi.randBigInt().toString(); const nullifier = miksi.randBigInt().toString();
// const secret = "1234567890"; // const secret = "1234567890";
// const nullifier = "5678901234"; // const nullifier = "5678901234";
const commitments = [];
let res = await miksiContract.methods.getCommitments().call();
console.log("res", res);
const commitments = res[0];
console.log("commitments", commitments);
// getCommitments from the tree // getCommitments from the tree
// calculate witness // calculate witness

lib/miksi-browser.js → libs/miksi-browser.js

@ -58,30 +58,35 @@ module.exports = require('../package.json').version;
},{"../package.json":4}],4:[function(require,module,exports){ },{"../package.json":4}],4:[function(require,module,exports){
module.exports={ module.exports={
"_from": "@web3-js/websocket@^1.0.29",
"_args": [
[
"@web3-js/websocket@1.0.30",
"/home/user/git/miksi/miksi-core"
]
],
"_from": "@web3-js/websocket@1.0.30",
"_id": "@web3-js/websocket@1.0.30", "_id": "@web3-js/websocket@1.0.30",
"_inBundle": false, "_inBundle": false,
"_integrity": "sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA==", "_integrity": "sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA==",
"_location": "/@web3-js/websocket", "_location": "/@web3-js/websocket",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
"type": "range",
"type": "version",
"registry": true, "registry": true,
"raw": "@web3-js/websocket@^1.0.29",
"raw": "@web3-js/websocket@1.0.30",
"name": "@web3-js/websocket", "name": "@web3-js/websocket",
"escapedName": "@web3-js%2fwebsocket", "escapedName": "@web3-js%2fwebsocket",
"scope": "@web3-js", "scope": "@web3-js",
"rawSpec": "^1.0.29",
"rawSpec": "1.0.30",
"saveSpec": null, "saveSpec": null,
"fetchSpec": "^1.0.29"
"fetchSpec": "1.0.30"
}, },
"_requiredBy": [ "_requiredBy": [
"/web3-providers-ws" "/web3-providers-ws"
], ],
"_resolved": "https://registry.npmjs.org/@web3-js/websocket/-/websocket-1.0.30.tgz", "_resolved": "https://registry.npmjs.org/@web3-js/websocket/-/websocket-1.0.30.tgz",
"_shasum": "9ea15b7b582cf3bf3e8bc1f4d3d54c0731a87f87",
"_spec": "@web3-js/websocket@^1.0.29",
"_where": "/home/user/git/miksi/miksi-core/node_modules/web3-providers-ws",
"_spec": "1.0.30",
"_where": "/home/user/git/miksi/miksi-core",
"author": { "author": {
"name": "Brian McKelvey", "name": "Brian McKelvey",
"email": "theturtle32@gmail.com", "email": "theturtle32@gmail.com",
@ -91,7 +96,6 @@ module.exports={
"bugs": { "bugs": {
"url": "https://github.com/web3-js/WebSocket-Node/issues" "url": "https://github.com/web3-js/WebSocket-Node/issues"
}, },
"bundleDependencies": false,
"config": { "config": {
"verbose": false "verbose": false
}, },
@ -109,7 +113,6 @@ module.exports={
"typedarray-to-buffer": "^3.1.5", "typedarray-to-buffer": "^3.1.5",
"yaeti": "^0.0.6" "yaeti": "^0.0.6"
}, },
"deprecated": false,
"description": "Websocket Client & Server Library implementing the WebSocket protocol as specified in RFC 6455.", "description": "Websocket Client & Server Library implementing the WebSocket protocol as specified in RFC 6455.",
"devDependencies": { "devDependencies": {
"buffer-equal": "^1.0.0", "buffer-equal": "^1.0.0",
@ -27399,21 +27402,27 @@ utils.intFromLE = intFromLE;
},{"bn.js":38,"minimalistic-assert":261,"minimalistic-crypto-utils":262}],155:[function(require,module,exports){ },{"bn.js":38,"minimalistic-assert":261,"minimalistic-crypto-utils":262}],155:[function(require,module,exports){
module.exports={ module.exports={
"_from": "elliptic@^6.4.0",
"_args": [
[
"elliptic@6.5.2",
"/home/user/git/miksi/miksi-core"
]
],
"_from": "elliptic@6.5.2",
"_id": "elliptic@6.5.2", "_id": "elliptic@6.5.2",
"_inBundle": false, "_inBundle": false,
"_integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "_integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
"_location": "/elliptic", "_location": "/elliptic",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
"type": "range",
"type": "version",
"registry": true, "registry": true,
"raw": "elliptic@^6.4.0",
"raw": "elliptic@6.5.2",
"name": "elliptic", "name": "elliptic",
"escapedName": "elliptic", "escapedName": "elliptic",
"rawSpec": "^6.4.0",
"rawSpec": "6.5.2",
"saveSpec": null, "saveSpec": null,
"fetchSpec": "^6.4.0"
"fetchSpec": "6.5.2"
}, },
"_requiredBy": [ "_requiredBy": [
"/browserify-sign", "/browserify-sign",
@ -27424,9 +27433,8 @@ module.exports={
"/web3-utils/eth-lib" "/web3-utils/eth-lib"
], ],
"_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
"_shasum": "05c5678d7173c049d8ca433552224a495d0e3762",
"_spec": "elliptic@^6.4.0",
"_where": "/home/user/git/miksi/miksi-core/node_modules/eth-lib",
"_spec": "6.5.2",
"_where": "/home/user/git/miksi/miksi-core",
"author": { "author": {
"name": "Fedor Indutny", "name": "Fedor Indutny",
"email": "fedor@indutny.com" "email": "fedor@indutny.com"
@ -27434,7 +27442,6 @@ module.exports={
"bugs": { "bugs": {
"url": "https://github.com/indutny/elliptic/issues" "url": "https://github.com/indutny/elliptic/issues"
}, },
"bundleDependencies": false,
"dependencies": { "dependencies": {
"bn.js": "^4.4.0", "bn.js": "^4.4.0",
"brorand": "^1.0.1", "brorand": "^1.0.1",
@ -27444,7 +27451,6 @@ module.exports={
"minimalistic-assert": "^1.0.0", "minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.0" "minimalistic-crypto-utils": "^1.0.0"
}, },
"deprecated": false,
"description": "EC cryptography", "description": "EC cryptography",
"devDependencies": { "devDependencies": {
"brfs": "^1.4.3", "brfs": "^1.4.3",
@ -75050,29 +75056,35 @@ module.exports = {
}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
},{"../../is-buffer/index.js":247,"bn.js":38,"eth-lib/lib/hash":443,"ethereum-bloom-filters":162,"number-to-bn":265,"underscore":390,"utf8":394}],447:[function(require,module,exports){ },{"../../is-buffer/index.js":247,"bn.js":38,"eth-lib/lib/hash":443,"ethereum-bloom-filters":162,"number-to-bn":265,"underscore":390,"utf8":394}],447:[function(require,module,exports){
module.exports={ module.exports={
"_from": "web3@^1.2.6",
"_args": [
[
"web3@1.2.7",
"/home/user/git/miksi/miksi-core"
]
],
"_from": "web3@1.2.7",
"_id": "web3@1.2.7", "_id": "web3@1.2.7",
"_inBundle": false, "_inBundle": false,
"_integrity": "sha512-jAAJHMfUlTps+jH2li1ckDFEpPrEEriU/ubegSTGRl3KRdNhEqT93+3kd7FHJTn3NgjcyURo2+f7Da1YcZL8Mw==", "_integrity": "sha512-jAAJHMfUlTps+jH2li1ckDFEpPrEEriU/ubegSTGRl3KRdNhEqT93+3kd7FHJTn3NgjcyURo2+f7Da1YcZL8Mw==",
"_location": "/web3", "_location": "/web3",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
"type": "range",
"type": "version",
"registry": true, "registry": true,
"raw": "web3@^1.2.6",
"raw": "web3@1.2.7",
"name": "web3", "name": "web3",
"escapedName": "web3", "escapedName": "web3",
"rawSpec": "^1.2.6",
"rawSpec": "1.2.7",
"saveSpec": null, "saveSpec": null,
"fetchSpec": "^1.2.6"
"fetchSpec": "1.2.7"
}, },
"_requiredBy": [ "_requiredBy": [
"#DEV:/",
"/circomlib" "/circomlib"
], ],
"_resolved": "https://registry.npmjs.org/web3/-/web3-1.2.7.tgz", "_resolved": "https://registry.npmjs.org/web3/-/web3-1.2.7.tgz",
"_shasum": "fcb83571036c1c6f475bc984785982a444e8d78e",
"_spec": "web3@^1.2.6",
"_where": "/home/user/git/miksi/miksi-core/node_modules/circomlib",
"_spec": "1.2.7",
"_where": "/home/user/git/miksi/miksi-core",
"author": { "author": {
"name": "ethereum.org" "name": "ethereum.org"
}, },
@ -75105,7 +75117,6 @@ module.exports={
"bugs": { "bugs": {
"url": "https://github.com/ethereum/web3.js/issues" "url": "https://github.com/ethereum/web3.js/issues"
}, },
"bundleDependencies": false,
"dependencies": { "dependencies": {
"web3-bzz": "1.2.7", "web3-bzz": "1.2.7",
"web3-core": "1.2.7", "web3-core": "1.2.7",
@ -75115,7 +75126,6 @@ module.exports={
"web3-shh": "1.2.7", "web3-shh": "1.2.7",
"web3-utils": "1.2.7" "web3-utils": "1.2.7"
}, },
"deprecated": false,
"description": "Ethereum JavaScript API", "description": "Ethereum JavaScript API",
"devDependencies": { "devDependencies": {
"@types/node": "^12.12.34", "@types/node": "^12.12.34",
@ -76282,6 +76292,7 @@ const WitnessCalculatorBuilder = require("circom_runtime").WitnessCalculatorBuil
const circomlib = require("circomlib"); const circomlib = require("circomlib");
const smt = require("circomlib").smt; const smt = require("circomlib").smt;
const Web3 = require("web3"); const Web3 = require("web3");
// const buildBn128 = require("wasmsnark").buildBn128;
const nLevels = 5; const nLevels = 5;
@ -76313,9 +76324,14 @@ exports.calcDepositWitness = async (wasm, secret, nullifier, commitments) => {
// old root // old root
const rootOld = tree.root; const rootOld = tree.root;
const resOld = await tree.find(commitment); const resOld = await tree.find(commitment);
if (resOld.found) {
console.error("leaf expect to not exist but exists");
let oldKey = "0";
if (!resOld.found) {
oldKey = resOld.notFoundKey.toString();
} }
console.log("oldKey", oldKey);
// if (resOld.found) {
// console.error("leaf expect to not exist but exists");
// }
let siblingsOld = resOld.siblings; let siblingsOld = resOld.siblings;
while (siblingsOld.length < nLevels) { while (siblingsOld.length < nLevels) {
siblingsOld.push("0"); siblingsOld.push("0");
@ -76340,6 +76356,7 @@ exports.calcDepositWitness = async (wasm, secret, nullifier, commitments) => {
"amount": amount, "amount": amount,
"secret": secret, "secret": secret,
"nullifier": nullifier, "nullifier": nullifier,
"oldKey": oldKey,
"siblingsOld": siblingsOld, "siblingsOld": siblingsOld,
"siblingsNew": siblingsNew, "siblingsNew": siblingsNew,
"rootOld": rootOld, "rootOld": rootOld,
@ -76360,12 +76377,14 @@ exports.calcDepositWitness = async (wasm, secret, nullifier, commitments) => {
for (let j=0; j<8; j++) { for (let j=0; j<8; j++) {
const bi = witness[i]; const bi = witness[i];
const v = bigInt(bi).shiftRight(j*32).and(0xFFFFFFFF).toJSNumber(); const v = bigInt(bi).shiftRight(j*32).and(0xFFFFFFFF).toJSNumber();
wBuff.writeUInt32LE(v, i*32 + j*4, 4)
// wBuff.writeUInt32LE(v, i*32 + j*4, 4)
wBuff.writeUInt32LE(v, i*32 + j*4)
} }
} }
// const witness = unstringifyBigInts(stringifyBigInts(w)); // const witness = unstringifyBigInts(stringifyBigInts(w));
// return wBuff;
return { return {
witness: wBuff, witness: wBuff,
publicInputs: { publicInputs: {
@ -76438,6 +76457,8 @@ exports.calcWithdrawWitness = async (wasm, secret, nullifier, commitments, addr)
} }
}).call(this,require("buffer").Buffer) }).call(this,require("buffer").Buffer)
},{"big-integer":24,"buffer":70,"circom_runtime":76,"circomlib":95,"ffjavascript":209,"fs":69,"snarkjs":329,"web3":448}]},{},[461])(461) },{"big-integer":24,"buffer":70,"circom_runtime":76,"circomlib":95,"ffjavascript":209,"fs":69,"snarkjs":329,"web3":448}]},{},[461])(461)
}); });

lib/snarkjs.js → libs/snarkjs.js


lib/wasmsnark_bn128.js → libs/wasmsnark_bn128.js


+ 1
- 0
libs/web3.min.js
File diff suppressed because it is too large
View File


BIN
miksi-logo00-square-pink.png

Before After
Width: 856  |  Height: 856  |  Size: 84 KiB

Loading…
Cancel
Save