Full flow works, multiple deposits & withdraws

This commit is contained in:
arnaucube
2020-05-17 22:25:08 +02:00
parent ae07f70444
commit c2446cba36
10 changed files with 67 additions and 40 deletions

Binary file not shown.

View File

@@ -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="libs/wasmsnark_bn128.js"></script>
<script src="lib/snarkjs.js"></script> <script src="libs/snarkjs.js"></script>
<script src="node_modules/web3/dist/web3.min.js"></script> <!-- <script src="node_modules/web3/dist/web3.min.js"></script> -->
<script src="lib/miksi-browser.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>

View File

@@ -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 = "0x29DB549Ea98d41e0F28A5aA50ED1D37d62BA8C4B";
const miksiAddress = "0xc9009d9Df413883B6064503FDA93A7A8ab9B7afb";
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

View File

@@ -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": "1.0.30",
"_spec": "@web3-js/websocket@^1.0.29", "_where": "/home/user/git/miksi/miksi-core",
"_where": "/home/user/git/miksi/miksi-core/node_modules/web3-providers-ws",
"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": "6.5.2",
"_spec": "elliptic@^6.4.0", "_where": "/home/user/git/miksi/miksi-core",
"_where": "/home/user/git/miksi/miksi-core/node_modules/eth-lib",
"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": "1.2.7",
"_spec": "web3@^1.2.6", "_where": "/home/user/git/miksi/miksi-core",
"_where": "/home/user/git/miksi/miksi-core/node_modules/circomlib",
"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) { let oldKey = "0";
console.error("leaf expect to not exist but exists"); 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)
}); });

1
libs/web3.min.js vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB