@jharrilim/merkletree-js
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.0 • Public • Published

    merkletree-js

    NPM Version Issues Pull Requests License Gitter

    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 Build Status Codacy Codacy Badge NPM NPM Downloads
    Node 8 Node 8 Coveralls Coveralls Github Github Releases
    Node 9 Node 9 Codecov Codecov
    Node 10 Node 10
    Node 11 Node 11

    Table of Contents

    Install via NPM

    npm i @jharrilim/merkletree-js

    Usage

    Create a Merkle Tree

    To create a Merkle Tree, you may do so in one of the following ways:

    Without Data

    import { MerkleTree } from '@jharrilim/merkletree-js';
    
    // Creates a new instance of the MerkleTree
    const newTree = MerkleTree.create();

    With Data

    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(_ => {});

    Add Some Data

    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);
    }

    Compare Data

    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;
    }

    Install

    npm i @jharrilim/merkletree-js

    DownloadsWeekly Downloads

    1

    Version

    1.1.0

    License

    GPL-3.0

    Unpacked Size

    58.3 kB

    Total Files

    6

    Last publish

    Collaborators

    • jharrilim