mirror of
https://github.com/arnaucube/circomlib-testvectors.git
synced 2026-02-06 18:56:41 +01:00
Add merkletree testvectos
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
5
README.md
Normal file
5
README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# circomlib-testvectors
|
||||
Test vectors to check compatible implementations of the [circomlib](https://github.com/iden3/circomlib), such as:
|
||||
- merkletree ([go](https://github.com/iden3/go-merkletree))
|
||||
- poseidon ([go](https://github.com/iden3/go-iden3-crypto/tree/master/poseidon), [rust](https://github.com/arnaucube/poseidon-rs))
|
||||
- babyjubjub ([go](https://github.com/iden3/go-iden3-crypto/tree/master/babyjub), [rust](https://github.com/arnaucube/babyjubjub-rs))
|
||||
3955
package-lock.json
generated
Normal file
3955
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
package.json
Normal file
18
package.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "circomlib-testvectors",
|
||||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "mocha"
|
||||
},
|
||||
"author": "",
|
||||
"license": "GPLv3.0",
|
||||
"dependencies": {
|
||||
"circomlib": "^0.2.3",
|
||||
"ffjavascript": "^0.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"mocha": "^7.1.1"
|
||||
}
|
||||
}
|
||||
147
test/mt.test.js
Normal file
147
test/mt.test.js
Normal file
@@ -0,0 +1,147 @@
|
||||
const chai = require("chai");
|
||||
|
||||
const Fr = require("ffjavascript").bn128.Fr;
|
||||
|
||||
const smt = require("circomlib").smt;
|
||||
|
||||
const assert = chai.assert;
|
||||
|
||||
describe("SMT javascript testvectors", function () {
|
||||
this.timeout(100000);
|
||||
before( async () => {
|
||||
});
|
||||
|
||||
it("Should insert 2 elements and empty them", async () => {
|
||||
const tree = await smt.newMemEmptyTrie();
|
||||
console.log(tree);
|
||||
|
||||
let k = Fr.e(1);
|
||||
let v = Fr.e(2);
|
||||
await tree.insert(k,v);
|
||||
console.log(tree.root);
|
||||
|
||||
k = Fr.e(33);
|
||||
v = Fr.e(44);
|
||||
await tree.insert(k,v);
|
||||
console.log(tree.root);
|
||||
|
||||
k = Fr.e(1234);
|
||||
v = Fr.e(9876);
|
||||
await tree.insert(k,v);
|
||||
console.log(tree.root);
|
||||
|
||||
await tree.delete(Fr.e(33));
|
||||
console.log(tree.root);
|
||||
|
||||
await tree.delete(Fr.e(1234));
|
||||
await tree.delete(Fr.e(1));
|
||||
console.log(tree.root);
|
||||
|
||||
assert(Fr.isZero(tree.root));
|
||||
});
|
||||
it("TestDelete3", async () => {
|
||||
const tree = await smt.newMemEmptyTrie();
|
||||
console.log(tree);
|
||||
|
||||
let k = Fr.e(1);
|
||||
let v = Fr.e(1);
|
||||
await tree.insert(k,v);
|
||||
|
||||
k = Fr.e(2);
|
||||
v = Fr.e(2);
|
||||
await tree.insert(k,v);
|
||||
console.log(tree.root);
|
||||
|
||||
console.log("TestDelete3", tree.root);
|
||||
await tree.delete(Fr.e(1));
|
||||
console.log("TestDelete3", tree.root);
|
||||
});
|
||||
it("TestDelete4", async () => {
|
||||
const tree = await smt.newMemEmptyTrie();
|
||||
console.log(tree);
|
||||
|
||||
let k = Fr.e(1);
|
||||
let v = Fr.e(1);
|
||||
await tree.insert(k,v);
|
||||
|
||||
k = Fr.e(2);
|
||||
v = Fr.e(2);
|
||||
await tree.insert(k,v);
|
||||
console.log(tree.root);
|
||||
|
||||
k = Fr.e(3);
|
||||
v = Fr.e(3);
|
||||
await tree.insert(k,v);
|
||||
console.log(tree.root);
|
||||
|
||||
console.log("TestDelete4", tree.root);
|
||||
await tree.delete(Fr.e(1));
|
||||
console.log("TestDelete4", tree.root);
|
||||
});
|
||||
it("TestDelete5", async () => {
|
||||
const tree = await smt.newMemEmptyTrie();
|
||||
console.log(tree);
|
||||
|
||||
let k = Fr.e(1);
|
||||
let v = Fr.e(2);
|
||||
await tree.insert(k,v);
|
||||
|
||||
k = Fr.e(33);
|
||||
v = Fr.e(44);
|
||||
await tree.insert(k,v);
|
||||
console.log(tree.root);
|
||||
|
||||
|
||||
console.log("TestDelete5", tree.root);
|
||||
await tree.delete(Fr.e(1));
|
||||
console.log("TestDelete5", tree.root);
|
||||
});
|
||||
|
||||
it("TestAddAndGetCircomProof", async () => {
|
||||
const tree = await smt.newMemEmptyTrie();
|
||||
|
||||
let key = Fr.e(1);
|
||||
let value = Fr.e(2);
|
||||
|
||||
let res = await tree.insert(key,value);
|
||||
res = fixRes(res);
|
||||
console.log(res);
|
||||
|
||||
key = Fr.e(33);
|
||||
value = Fr.e(44);
|
||||
res = await tree.insert(key,value);
|
||||
res = fixRes(res);
|
||||
console.log(res);
|
||||
|
||||
key = Fr.e(55);
|
||||
value = Fr.e(66);
|
||||
res = await tree.insert(key,value);
|
||||
res = fixRes(res);
|
||||
console.log(res);
|
||||
});
|
||||
|
||||
it("TestUpdateAndCircomProcessorProof", async () => {
|
||||
const tree = await smt.newMemEmptyTrie();
|
||||
console.log(tree);
|
||||
|
||||
for (let i=0; i<16; i++) {
|
||||
let k = Fr.e(i);
|
||||
let v = Fr.e(i*2);
|
||||
await tree.insert(k,v);
|
||||
}
|
||||
console.log(tree.root);
|
||||
k = Fr.e(10);
|
||||
v = Fr.e(1024);
|
||||
let res = await tree.update(k, v)
|
||||
console.log(res);
|
||||
|
||||
});
|
||||
})
|
||||
|
||||
function fixRes(res) {
|
||||
while (res.siblings.length<10) res.siblings.push(Fr.e(0));
|
||||
res.oldKey = res.isOld0 ? 0 : res.oldKey;
|
||||
res.oldValue = res.isOld0 ? 0 : res.oldValue;
|
||||
res.isOld0 = res.isOld0 ? 1 : 0;
|
||||
return res;
|
||||
}
|
||||
Reference in New Issue
Block a user