Merkle Tree for Javascript/Typescript on Node. Currently, browser is not supported. API documentation can be found here.
Build | Status | Coverage | Score | Downloads | Count |
---|---|---|---|---|---|
Overall | Codacy | NPM | |||
Node 8 | Coveralls | Github | |||
Node 9 | Codecov | ||||
Node 10 | |||||
Node 11 |
npm i @jharrilim/merkletree-js
To create a Merkle Tree, you may do so in one of the following ways:
import { MerkleTree } from '@jharrilim/merkletree-js';
// Creates a new instance of the MerkleTree
const newTree = MerkleTree.create();
You may create a MerkleTree with some data that you already have defined.
import { MerkleTree } from '@jharrilim/merkletree-js';
const data = [ 'some', 'data', { msg: 'of any type', except: 'no nulls, functions, or undefined' }, true ];
(async () => {
const newTree = await MerkleTree.createWith(data);
})().catch(_ => {});
To add data, you may use either #addNode to add one thing, or #addNodes to add multiple things.
import { MerkleTree } from '@jharrilim/merkletree-js';
export async function doCoolThings() {
const newTree = MerkleTree.create();
await newTree.addNodes(['hello', 'world']);
await newTree.addNode(42);
}
To make use of the merkle tree, you will want to compare data across multiple trees. You may do so by using MerkleTree#compareWith, or by using MerkleTree#computeRootHash and comparing the hash yourself:
import { MerkleTree } from '@jharrilim/merkletree-js';
export async function compareTrees() {
const sharedData = ['this', 'is', 'shared', 'data'];
const firstTree = await MerkleTree.createWith(sharedData);
const secondTree = await MerkleTree.createWith(sharedData);
// Does intermediate actions with the hashes
const attempt1 = await compareAndSave(firstTree, secondTree);
// Compare directly
const attempt2 = await firstTree.compareWith(secondTree);
return attempt1 && attempt2;
}
async function compareAndSave(firstTree, secondTree) { // This is not price matching
const firstTreeHash = await firstTree.computeRootHash();
const secondTreeHash = await secondTree.computeRootHash();
try {
// Perhaps do stuff such as
await SomeMongooseModel.save(firstTreeHash);
await SomeMongooseModel.save(secondTreeHash);
} catch (e) {
uhOhMadeAMistake(e);
return false;
}
return firstTreeHash === secondTreeHash;
}