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