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}