package merkletree
|
|
|
|
import "bytes"
|
|
|
|
// treeNode is the data structure of an intermediate node of the Merkle Tree
|
|
type treeNode struct {
|
|
ChildL Hash // hash of the left child
|
|
ChildR Hash // hash of the right child
|
|
}
|
|
|
|
// Bytes returns an array of bytes with the Node data
|
|
func (n *treeNode) Bytes() (b []byte) {
|
|
b = append(b, n.ChildL[:]...)
|
|
b = append(b, n.ChildR[:]...)
|
|
return b
|
|
}
|
|
|
|
// Ht returns the hash of the full node
|
|
func (n *treeNode) Ht() Hash {
|
|
h := HashBytes(n.Bytes())
|
|
return h
|
|
}
|
|
|
|
// ParseNodeBytes returns a Node struct from an array of bytes
|
|
func parseNodeBytes(b []byte) treeNode {
|
|
if bytes.Equal(b, EmptyNodeValue[:]) {
|
|
var node treeNode
|
|
node.ChildL = EmptyNodeValue
|
|
node.ChildR = EmptyNodeValue
|
|
return node
|
|
}
|
|
var node treeNode
|
|
copy(node.ChildL[:], b[:32])
|
|
copy(node.ChildR[:], b[32:])
|
|
return node
|
|
}
|