arnaucube
arnaucube/circomlib-testvectorsPublic Self-hosted repository
circomlib-testvectors/test/mt.test.js
test/mt.test.jsRaw
  1const chai = require("chai");
  2
  3const Fr = require("ffjavascript").bn128.Fr;
  4
  5const smt = require("circomlib").smt;
  6// const smt = require("../../iden3/circomlib/src/smt.js");
  7
  8const assert = chai.assert;
  9
 10describe("SMT javascript testvectors", function () {
 11    this.timeout(100000);
 12    before( async () => {
 13    });
 14
 15    it("Should insert 2 elements and empty them", async () => {
 16        const tree = await smt.newMemEmptyTrie();
 17        console.log(tree);
 18
 19        let k = Fr.e(1);
 20        let v = Fr.e(2);
 21        await tree.insert(k,v);
 22        console.log("insert(1,2)", tree.root);
 23
 24        k = Fr.e(33);
 25        v = Fr.e(44);
 26        await tree.insert(k,v);
 27        console.log("insert(33, 44)", tree.root);
 28
 29        k = Fr.e(1234);
 30        v = Fr.e(9876);
 31        await tree.insert(k,v);
 32        console.log("insert(1234, 9876)", tree.root);
 33
 34        await tree.delete(Fr.e(33));
 35        console.log("delete(33)", tree.root);
 36
 37        await tree.delete(Fr.e(1234));
 38        await tree.delete(Fr.e(1));
 39        console.log("delete(1234 & 1)", tree.root);
 40
 41        assert(Fr.isZero(tree.root));
 42    });
 43    it("TestDelete3", async () => {
 44        const tree = await smt.newMemEmptyTrie();
 45        console.log(tree);
 46
 47        let k = Fr.e(1);
 48        let v = Fr.e(1);
 49        await tree.insert(k,v);
 50
 51        k = Fr.e(2);
 52        v = Fr.e(2);
 53        await tree.insert(k,v);
 54        console.log("insert(2,2)", tree.root);
 55
 56        console.log("TestDelete3", tree.root);
 57        await tree.delete(Fr.e(1));
 58        console.log("TestDelete3", tree.root);
 59    });
 60    it("TestDelete4", async () => {
 61        const tree = await smt.newMemEmptyTrie();
 62        console.log(tree);
 63
 64        let k = Fr.e(1);
 65        let v = Fr.e(1);
 66        await tree.insert(k,v);
 67
 68        k = Fr.e(2);
 69        v = Fr.e(2);
 70        await tree.insert(k,v);
 71        console.log(tree.root);
 72
 73        k = Fr.e(3);
 74        v = Fr.e(3);
 75        await tree.insert(k,v);
 76        console.log(tree.root);
 77
 78        console.log("TestDelete4", tree.root);
 79        let res = await tree.delete(Fr.e(1));
 80        console.log("TestDelete4 res", res);
 81        console.log("TestDelete4", tree.root);
 82    });
 83    it("TestDelete5", async () => {
 84        const tree = await smt.newMemEmptyTrie();
 85        console.log(tree);
 86
 87        let k = Fr.e(1);
 88        let v = Fr.e(2);
 89        await tree.insert(k,v);
 90
 91        k = Fr.e(33);
 92        v = Fr.e(44);
 93        await tree.insert(k,v);
 94        console.log(tree.root);
 95
 96
 97        console.log("TestDelete5", tree.root);
 98        await tree.delete(Fr.e(1));
 99        console.log("TestDelete5", tree.root);
100    });
101
102    it("TestAddAndGetCircomProof", async () => {
103        const tree = await smt.newMemEmptyTrie();
104
105        let key = Fr.e(1);
106        let value = Fr.e(2);
107
108        let res = await tree.insert(key,value);
109        res = fixRes(res);
110        console.log(res);
111
112        key = Fr.e(33);
113        value = Fr.e(44);
114        res = await tree.insert(key,value);
115        res = fixRes(res);
116        console.log(res);
117
118        key = Fr.e(55);
119        value = Fr.e(66);
120        res = await tree.insert(key,value);
121        res = fixRes(res);
122        console.log(res);
123    });
124
125    it("TestUpdateAndCircomProcessorProof", async () => {
126        const tree = await smt.newMemEmptyTrie();
127        console.log(tree);
128
129        for (let i=0; i<16; i++) {
130            let k = Fr.e(i);
131            let v = Fr.e(i*2);
132            await tree.insert(k,v);
133        }
134        console.log(tree.root);
135        k = Fr.e(10);
136        v = Fr.e(1024);
137        let res = await tree.update(k, v)
138        console.log(res);
139
140    });
141})
142
143function fixRes(res) {
144    while (res.siblings.length<10) res.siblings.push(Fr.e(0));
145    res.oldKey = res.isOld0 ? 0 : res.oldKey;
146    res.oldValue = res.isOld0 ? 0 : res.oldValue;
147    res.isOld0 = res.isOld0 ? 1 : 0;
148    return res;
149}