diff --git a/test/smttestvectors.js b/test/smttestvectors.js new file mode 100644 index 0000000..a95d1b6 --- /dev/null +++ b/test/smttestvectors.js @@ -0,0 +1,231 @@ +const chai = require("chai"); +const snarkjs = require("snarkjs"); + +const smt = require("../src/smt.js"); +const mimcjs = require("../src/mimc7.js"); + +const assert = chai.assert; +const expect = chai.expect; + +const bigInt = snarkjs.bigInt; + +function stringifyBigInts(o) { + if ((typeof(o) == "bigint") || (o instanceof bigInt)) { + return o.toString(10); + } else if (Array.isArray(o)) { + return o.map(stringifyBigInts); + } else if (typeof o == "object") { + const res = {}; + for (let k in o) { + res[k] = stringifyBigInts(o[k]); + } + return res; + } else { + return o; + } +} + +function newEntryFromInts(a, b, c, d) { + return { + hi: mimcjs.hash(c, d), + hv: mimcjs.hash(a, b), + }; +} + +function smtHash(arr) { + let r = bigInt(0); + for (let i=0; i { + }); + + it("test MIMC7", async() => { + //const h = mimcjs.multiHash(1,2,3); + //const h = smtHash([1,2,3]); + //console.log(h.toString(10)); + +const mimcjs = require("../src/mimc7.js"); +const snarkjs = require("snarkjs"); +const bigInt = snarkjs.bigInt; +const smt = require("../src/smt.js"); + +h = mimcjs.hash(1,2,91); +console.log(h); + +function smtHash(arr) { + let r = bigInt(0); + for (let i=0; i { + // const entry = newEntryFromInts(12, 45, 78, 41); + // //console.log(entry.hi.toString(16)); + // expect(entry.hi.toString(16)).to.be. + // equal("114438e8321f62c4a1708f443a5a66f9c8fcb0958e7b7008332b71442610b7a0"); + //}); + + //it("Should insert 2 elements and empty them", async () => { + // const tree = await smt.newMemEmptyTrie(); + // const key1 = bigInt(111); + // const value1 = bigInt(222); + // const key2 = bigInt(333); + // const value2 = bigInt(444); + + // await tree.insert(key1,value1); + // await tree.insert(key2,value2); + // await tree.delete(key2); + // await tree.delete(key1); + + // assert(tree.root.isZero()); + //}); + + //it("Should insert 3 elements in dferent order and should be the same", async () => { + // const keys = [bigInt(8), bigInt(9), bigInt(32)]; + // const values = [bigInt(88), bigInt(99), bigInt(3232)]; + // const tree1 = await smt.newMemEmptyTrie(); + // const tree2 = await smt.newMemEmptyTrie(); + // const tree3 = await smt.newMemEmptyTrie(); + // const tree4 = await smt.newMemEmptyTrie(); + // const tree5 = await smt.newMemEmptyTrie(); + // const tree6 = await smt.newMemEmptyTrie(); + + // await tree1.insert(keys[0],values[0]); + // await tree1.insert(keys[1],values[1]); + // await tree1.insert(keys[2],values[2]); + + // await tree2.insert(keys[0],values[0]); + // await tree2.insert(keys[2],values[2]); + // await tree2.insert(keys[1],values[1]); + + // await tree3.insert(keys[1],values[1]); + // await tree3.insert(keys[0],values[0]); + // await tree3.insert(keys[2],values[2]); + + // await tree4.insert(keys[1],values[1]); + // await tree4.insert(keys[2],values[2]); + // await tree4.insert(keys[0],values[0]); + + // await tree5.insert(keys[2],values[2]); + // await tree5.insert(keys[0],values[0]); + // await tree5.insert(keys[1],values[1]); + + // await tree6.insert(keys[2],values[2]); + // await tree6.insert(keys[1],values[1]); + // await tree6.insert(keys[0],values[0]); + + // assert(tree1.root.equals(tree2.root)); + // assert(tree2.root.equals(tree3.root)); + // assert(tree3.root.equals(tree4.root)); + // assert(tree4.root.equals(tree5.root)); + // assert(tree5.root.equals(tree6.root)); + + // assert.equal(Object.keys(tree1.db.nodes).length, Object.keys(tree2.db.nodes).length); + // assert.equal(Object.keys(tree2.db.nodes).length, Object.keys(tree3.db.nodes).length); + // assert.equal(Object.keys(tree3.db.nodes).length, Object.keys(tree4.db.nodes).length); + // assert.equal(Object.keys(tree4.db.nodes).length, Object.keys(tree5.db.nodes).length); + // assert.equal(Object.keys(tree5.db.nodes).length, Object.keys(tree6.db.nodes).length); + + // await tree1.delete(keys[0]); + // await tree1.delete(keys[1]); + // await tree2.delete(keys[1]); + // await tree2.delete(keys[0]); + // assert(tree1.root.equals(tree2.root)); + + // await tree3.delete(keys[0]); + // await tree3.delete(keys[2]); + // await tree4.delete(keys[2]); + // await tree4.delete(keys[0]); + // assert(tree3.root.equals(tree4.root)); + + // await tree5.delete(keys[1]); + // await tree5.delete(keys[2]); + // await tree6.delete(keys[2]); + // await tree6.delete(keys[1]); + // assert(tree5.root.equals(tree6.root)); + + // await tree1.delete(keys[2]); + // await tree2.delete(keys[2]); + // await tree3.delete(keys[1]); + // await tree4.delete(keys[1]); + // await tree5.delete(keys[0]); + // await tree6.delete(keys[0]); + + // assert(tree1.root.isZero()); + // assert(tree2.root.isZero()); + // assert(tree3.root.isZero()); + // assert(tree4.root.isZero()); + // assert(tree5.root.isZero()); + // assert(tree6.root.isZero()); + + // assert.equal(Object.keys(tree1.db.nodes).length, 0); + // assert.equal(Object.keys(tree2.db.nodes).length, 0); + // assert.equal(Object.keys(tree3.db.nodes).length, 0); + // assert.equal(Object.keys(tree4.db.nodes).length, 0); + // assert.equal(Object.keys(tree5.db.nodes).length, 0); + // assert.equal(Object.keys(tree6.db.nodes).length, 0); + //}); + + //it("Insert and remove 100 numbers randomly", async () => { + // function perm(a) { + // const arr = a.slice(); + // const rArr = []; + // for (let i=0; i { + // const tree1 = await smt.newMemEmptyTrie(); + // const tree2 = await smt.newMemEmptyTrie(); + + // await tree1.insert(8,88); + // await tree1.insert(9,99,); + // await tree1.insert(32,3232); + + // await tree2.insert(8,888); + // await tree2.insert(9,999); + // await tree2.insert(32,323232); + + // await tree1.update(8, 888); + // await tree1.update(9, 999); + // await tree1.update(32, 323232); + + // assert(tree1.root.equals(tree2.root)); + //}); + +}); +