miksi-core/test/circuits/withdraw.test.ts
test/circuits/withdraw.test.tsRaw
1const path = require("path");
2const tester = require("circom").tester;
3const chai = require("chai");
4const assert = chai.assert;
5const circomlib = require("circomlib");
6const smt = require("circomlib").smt;
7
8export {};
9
10describe("withdraw test", function () {
11 this.timeout(200000);
12
13
14 it("Test Withdraw", async () => {
15 const circuit = await tester(
16 path.join(__dirname, "../../circuits", "withdraw.circom"),
17 {reduceConstraints: false}
18 );
19
20 const nLevels = 5;
21 const secret = "1234567890";
22
23 const coinCode = "0";
24 const amount = '1000000000000000000';
25 const nullifier = "567891234";
26
27 const poseidon = circomlib.poseidon.createHash(6, 8, 57);
28 const commitment = poseidon([coinCode, amount, secret, nullifier]).toString();
29
30 // add commitment into SMT
31 let tree = await smt.newMemEmptyTrie();
32 await tree.insert(1, 0);
33 await tree.insert(2, commitment);
34 await tree.insert(3, 0);
35 console.log("root", tree.root);
36 const res = await tree.find(2);
37 assert(res.found);
38 let siblings = res.siblings;
39 while (siblings.length < nLevels) {
40 siblings.push("0");
41 };
42 console.log("siblings", siblings);
43
44 let root = tree.root;
45
46 const witness = await circuit.calculateWitness({
47 "coinCode": coinCode,
48 "amount": amount,
49 "secret": secret,
50 "nullifier": nullifier,
51 "siblings": siblings,
52 "root": root,
53 "address": "987654321",
54 "key": 2
55 });
56 await circuit.checkConstraints(witness);
57 });
58});