@shyftnetwork/shyft_merkle-lib

Basic libary for Shyft-specific merkle tree operations.

Usage no npm install needed!

<script type="module">
  import shyftnetworkShyftMerkleLib from 'https://cdn.skypack.dev/@shyftnetwork/shyft_merkle-lib';
</script>

README

Shyft Merkle Tree Library

Basic libary for Shyft-specific merkle tree operations.

Installing

npm install @shyftnetwork/shyft_merkle-lib

Re-generating Docs

npm install && npm run docs

Functions

hashAB(a, b)string

Hashes two values together.

hashHeader()string

Hashes a block header: {previousHeader, timestamp, blockNumber, transactionRoot}

isPowerOfTwo(n)boolean

Checks if a number is a power of two (ie. valid leaf array size)

setupleafs(leafs)Array.<Array.<string>>

Creates first two layers of a tree, ie. the leafs and their hashes

treePad(tree)Array.<Array.<string>>

Pads the leaves of a tree with null to ensure its length is a power of two

buildTree(height)Tree

Constructs a merkle tree recursively as a 2d array.

getProof(tree, leaf)Array.<any>

Assembles a proof from a given tree for a given leaf. This produces a proof of the format [boolean, leaf, boolean, leaf ...]

verifyProof(proof, leaf, root)boolean

Verifies that the leaf and the proof do in fact hash to the root

stringifyProof(proof)string

Stringifies the proof by assmbling a bit array of the path indicators and appending it to the path segments.

getRoot(tree)string

Returns root element of tree.

isValidLeaf(leaf, tree)boolean

Checks if the leaf exists in the tree.

hashAB(a, b) ⇒ string

Hashes two values together.

Kind: global function

Param Type Description
a string a bytes32 appropriate value
b string a bytes32 appropriate value

hashHeader() ⇒ string

Hashes a block header: {previousHeader, timestamp, blockNumber, transactionRoot}

Kind: global function

Param Type Description
obj.previousHeader string previous block header
obj.timestamp number block timestamp
obj.blockNumber number current block number
obj.transactionsRoot string current transaction root
obj.receiptsRoot string current receipts root

isPowerOfTwo(n) ⇒ boolean

Checks if a number is a power of two (ie. valid leaf array size)

Kind: global function

Param Type
n number

setupleafs(leafs) ⇒ Array.<Array.<string>>

Creates first two layers of a tree, ie. the leafs and their hashes

Kind: global function

Param Type
leafs Array.<string>

treePad(tree) ⇒ Array.<Array.<string>>

Pads the leaves of a tree with null to ensure its length is a power of two

Kind: global function

Param Type
tree Array.<Array.<string>>

buildTree(height) ⇒ Tree

Constructs a merkle tree recursively as a 2d array.

Kind: global function

Param Type Description
Array.<string> | Array.<Array.<string>> the current tree. Initially a single dimensional array of leaves
height current height of the tree (starts at 0)

getProof(tree, leaf) ⇒ Array.<any>

Assembles a proof from a given tree for a given leaf. This produces a proof of the format [boolean, leaf, boolean, leaf ...]

Kind: global function

Param Type
tree Array.<Array.<string>>
leaf string

verifyProof(proof, leaf, root) ⇒ boolean

Verifies that the leaf and the proof do in fact hash to the root

Kind: global function

Param Type
proof Array.<any>
leaf Object
root string

stringifyProof(proof) ⇒ string

Stringifies the proof by assmbling a bit array of the path indicators and appending it to the path segments.

Kind: global function

Param Type
proof Array.<any>

getRoot(tree) ⇒ string

Returns root element of tree.

Kind: global function

Param
tree

isValidLeaf(leaf, tree) ⇒ boolean

Checks if the leaf exists in the tree.

Kind: global function

Param Type Description
leaf Object
leaf.previousHeader string previous block header
leaf.timestamp number block timestamp
leaf.blockNumber number current block number
leaf.transactionsRoot string current transaction root
leaf.receiptsRoot string current receipts root
tree Valid merkle tree