merkle

package
v1.4.3-beta2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 24, 2021 License: MIT Imports: 2 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BuildCoinbaseMerkleBranch added in v1.3.0

func BuildCoinbaseMerkleBranch(txHashes []*types.Hash) []*types.Hash

BuildCoinbaseMerkleBranch calculate the merkel tree branch for a slice of transactions without coinbase tx

func BuildMerkleTreeStore

func BuildMerkleTreeStore(txHashs []*types.Hash) []*types.Hash

BuildMerkleTreeStore creates a merkle tree from a slice of transactions, stores it using a linear array, and returns a slice of the backing array. A linear array was chosen as opposed to an actual tree structure since it uses about half as much memory. The following describes a merkle tree and how it is stored in a linear array.

A merkle tree is a tree in which every non-leaf node is the hash of its children nodes. A diagram depicting how this works for bitcoin transactions where h(x) is a hash256 follows:

         root = h1234 = h(h12 + h34)
        /                           \
  h12 = h(h1 + h2)            h34 = h(h3 + h4)
   /            \              /            \
h1 = h(tx1)  h2 = h(tx2)    h3 = h(tx3)  h4 = h(tx4)

The above stored as a linear array is as follows:

[h1 h2 h3 h4 h12 h34 root]

As the above shows, the merkle root is always the last element in the array.

The number of inputs is not always a power of two which results in a balanced tree structure as above. In that case, parent nodes with no children are also zero and parent nodes with only a single left node are calculated by concatenating the left node with itself before hashing. Since this function uses nodes that are pointers to the hashes, empty nodes will be nil.

func CalcAuxPowExpectedIndex added in v1.3.0

func CalcAuxPowExpectedIndex(nonce uint32, chainID, h int) int

func CalcCoinbaseMerkleRoot added in v1.3.0

func CalcCoinbaseMerkleRoot(coinbaseHash *types.Hash, merkleBranch []*types.Hash) types.Hash

func CalcMerkleRootByIndex added in v1.3.0

func CalcMerkleRootByIndex(hash types.Hash, merkleBranch []*types.Hash, index int) types.Hash

func CalcMerkleTreeRootHash

func CalcMerkleTreeRootHash(txHashs []*types.Hash) types.Hash

CalcMerkleTreeRootHash calculate the merkle tree root hash for a slice of transactions

func HashMerkleBranches

func HashMerkleBranches(left *types.Hash, right *types.Hash) *types.Hash

HashMerkleBranches takes two hashes, treated as the left and right tree nodes, and returns the hash of their concatenation. This is a helper function used to aid in the generation of a merkle tree.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL