arnaucube
arnaucube/miksi-corePublic Self-hosted repository
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(commitment, 0);
33        await tree.insert(1, 0);
34        await tree.insert(2, 0);
35        console.log("root", tree.root);
36        const res = await tree.find(commitment);
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        });
55        await circuit.checkConstraints(witness);
56    });
57});