35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
import { assert } from "chai";
|
|
import * as crypto from "crypto";
|
|
|
|
import { emptyNode, MerkleTree } from "../src";
|
|
|
|
describe("MerkleTree tests", () => {
|
|
it("Check constructor equivalence for depth 2 tree", () => {
|
|
const leaves = [
|
|
crypto.randomBytes(32),
|
|
crypto.randomBytes(32),
|
|
crypto.randomBytes(32),
|
|
];
|
|
const rawLeaves = leaves.concat(emptyNode(0));
|
|
const merkleTreeRaw = new MerkleTree(rawLeaves);
|
|
const merkleTreeSparse = MerkleTree.sparseMerkleTreeFromLeaves(leaves, 2);
|
|
|
|
assert(merkleTreeRaw.root.equals(merkleTreeSparse.root));
|
|
});
|
|
|
|
const TEST_DEPTH = 14;
|
|
it(`Check proofs for 2^${TEST_DEPTH} tree`, () => {
|
|
const leaves: Buffer[] = [];
|
|
for (let i = 0; i < 2 ** TEST_DEPTH; i++) {
|
|
leaves.push(crypto.randomBytes(32));
|
|
}
|
|
const merkleTree = new MerkleTree(leaves);
|
|
|
|
// Check proofs
|
|
for (let i = 0; i < leaves.length; i++) {
|
|
const proof = merkleTree.getProof(i);
|
|
assert(MerkleTree.verify(merkleTree.getRoot(), proof));
|
|
}
|
|
});
|
|
});
|