项目作者: jharrilim

项目描述 :
Merkle Tree for Javascript/Typescript
高级语言: TypeScript
项目地址: git://github.com/jharrilim/merkletree-js.git
创建时间: 2018-12-24T05:55:32Z
项目社区:https://github.com/jharrilim/merkletree-js

开源协议:GNU General Public License v3.0

下载


merkletree-js

@jharrilim/merkletree-js"">NPM Version
Issues
Pull Requests
License
Gitter
Dev Dependencies
Code Size

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

  1. 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

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

With Data

You may create a MerkleTree with some data that you already have defined.

  1. import { MerkleTree } from '@jharrilim/merkletree-js';
  2. const data = [ 'some', 'data', { msg: 'of any type', except: 'no nulls, functions, or undefined' }, true ];
  3. (async () => {
  4. const newTree = await MerkleTree.createWith(data);
  5. })().catch(_ => {});

Add Some Data

To add data, you may use either #addNode to add one thing, or #addNodes to add multiple things.

  1. import { MerkleTree } from '@jharrilim/merkletree-js';
  2. export async function doCoolThings() {
  3. const newTree = MerkleTree.create();
  4. await newTree.addNodes(['hello', 'world']);
  5. await newTree.addNode(42);
  6. }

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:

  1. import { MerkleTree } from '@jharrilim/merkletree-js';
  2. export async function compareTrees() {
  3. const sharedData = ['this', 'is', 'shared', 'data'];
  4. const firstTree = await MerkleTree.createWith(sharedData);
  5. const secondTree = await MerkleTree.createWith(sharedData);
  6. // Does intermediate actions with the hashes
  7. const attempt1 = await compareAndSave(firstTree, secondTree);
  8. // Compare directly
  9. const attempt2 = await firstTree.compareWith(secondTree);
  10. return attempt1 && attempt2;
  11. }
  12. async function compareAndSave(firstTree, secondTree) { // This is not price matching
  13. const firstTreeHash = await firstTree.computeRootHash();
  14. const secondTreeHash = await secondTree.computeRootHash();
  15. try {
  16. // Perhaps do stuff such as
  17. await SomeMongooseModel.save(firstTreeHash);
  18. await SomeMongooseModel.save(secondTreeHash);
  19. } catch (e) {
  20. uhOhMadeAMistake(e);
  21. return false;
  22. }
  23. return firstTreeHash === secondTreeHash;
  24. }