You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

94 lines
3.1 KiB

const fs = require("fs");
const path = require("path");
const tester = require("circom").tester;
const assert = require('assert');
const circomlib = require("circomlib");
const smt = require("circomlib").smt;
describe("merkletreetree circom-proof-verifier", function () {
this.timeout(0);
const nLevels = 4;
let circuit;
let circuitPath = path.join(__dirname, "circuits", "mt-proof-verifier-main.test.circom");
before( async() => {
const circuitCode = `
include "smt-proof-verifier_test.circom";
component main = SMTVerifierTest(4);
`;
fs.writeFileSync(circuitPath, circuitCode, "utf8");
circuit = await tester(circuitPath, {reduceConstraints:false});
await circuit.loadConstraints();
console.log("Constraints: " + circuit.constraints.length + "\n");
});
after( async() => {
fs.unlinkSync(circuitPath);
});
let inputsVerifier, inputsVerifierNonExistence;
before("generate smt-verifier js inputs", async () => {
let tree = await smt.newMemEmptyTrie();
await tree.insert(1, 11);
await tree.insert(2, 22);
await tree.insert(3, 33);
await tree.insert(4, 44);
const res = await tree.find(2);
assert(res.found);
let root = tree.root;
let siblings = res.siblings;
while (siblings.length < nLevels) {
siblings.push("0");
};
inputsVerifier = {
"fnc": 0,
"key": 2,
"value": 22,
"siblings": siblings,
"root": root,
};
const res2 = await tree.find(5);
assert(!res2.found);
let siblings2 = res2.siblings;
while (siblings2.length < nLevels) {
siblings2.push("0");
};
inputsVerifierNonExistence = {
"fnc": 1,
"oldKey": 1,
"oldValue": 11,
"key": 5,
"value": 11,
"siblings": siblings2,
"root": root,
};
});
it("Test smt-verifier proof of existence go inputs", async () => {
// fromGo is a json CircomVerifierProof generated from Go code using
// https://github.com/vocdoni/arbo
let rawdata = fs.readFileSync('go-data-generator/go-smt-verifier-inputs.json');
let fromGo = JSON.parse(rawdata);
inputsVerifier=fromGo;
// console.log("smtverifier js inputs:\n", inputsVerifier);
const witness = await circuit.calculateWitness(inputsVerifier);
await circuit.checkConstraints(witness);
});
it("Test smt-verifier proof of non-existence go inputs", async () => {
// fromGo is a json CircomVerifierProof generated from Go code using
// https://github.com/vocdoni/arbo
let rawdata = fs.readFileSync('go-data-generator/go-smt-verifier-non-existence-inputs.json');
let fromGo = JSON.parse(rawdata);
inputsVerifierNonExistence=fromGo;
// console.log("smtverifier js inputs:\n", inputsVerifierNonExistence);
const witness = await circuit.calculateWitness(inputsVerifierNonExistence);
await circuit.checkConstraints(witness);
});
});