This commit is contained in:
zhangjing 2021-06-29 03:57:09 -04:00 committed by GitHub
commit 31939fc3e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 13 deletions

View File

@ -2,6 +2,7 @@ package main
import (
"crypto/sha256"
"log"
)
// MerkleTree represent a Merkle tree
@ -20,20 +21,23 @@ type MerkleNode struct {
func NewMerkleTree(data [][]byte) *MerkleTree {
var nodes []MerkleNode
if len(data)%2 != 0 {
data = append(data, data[len(data)-1])
}
for _, datum := range data {
node := NewMerkleNode(nil, nil, datum)
nodes = append(nodes, *node)
}
for i := 0; i < len(data)/2; i++ {
var newLevel []MerkleNode
if len(nodes) == 0 {
log.Panic("No merkel nodes")
}
for j := 0; j < len(nodes); j += 2 {
node := NewMerkleNode(&nodes[j], &nodes[j+1], nil)
for len(nodes) > 1 {
if len(nodes)%2 != 0 {
nodes = append(nodes, nodes[len(nodes)-1])
}
var newLevel []MerkleNode
for i := 0; i < len(nodes); i += 2 {
node := NewMerkleNode(&nodes[i], &nodes[i+1], nil)
newLevel = append(newLevel, *node)
}