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}