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 |