bug(merkle-tree): fix out of index error in even nodes case
This commit is contained in:
parent
fee9bfd3af
commit
8733aad87f
|
@ -38,6 +38,10 @@ func NewMerkleTree(data [][]byte) *MerkleTree {
|
||||||
}
|
}
|
||||||
|
|
||||||
nodes = newLevel
|
nodes = newLevel
|
||||||
|
|
||||||
|
if len(newLevel) == 1 {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mTree := MerkleTree{&nodes[0]}
|
mTree := MerkleTree{&nodes[0]}
|
||||||
|
|
|
@ -49,7 +49,7 @@ func TestNewMerkleNode(t *testing.T) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewMerkleTree(t *testing.T) {
|
func TestNewMerkleTreeOddNodes(t *testing.T) {
|
||||||
data := [][]byte{
|
data := [][]byte{
|
||||||
[]byte("node1"),
|
[]byte("node1"),
|
||||||
[]byte("node2"),
|
[]byte("node2"),
|
||||||
|
@ -73,3 +73,45 @@ func TestNewMerkleTree(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, rootHash, fmt.Sprintf("%x", mTree.RootNode.Data), "Merkle tree root hash is correct")
|
assert.Equal(t, rootHash, fmt.Sprintf("%x", mTree.RootNode.Data), "Merkle tree root hash is correct")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNewMerkleTreeEvenNodes(t *testing.T) {
|
||||||
|
|
||||||
|
data := [][]byte{
|
||||||
|
[]byte("node1"),
|
||||||
|
[]byte("node2"),
|
||||||
|
[]byte("node3"),
|
||||||
|
[]byte("node4"),
|
||||||
|
[]byte("node5"),
|
||||||
|
[]byte("node6"),
|
||||||
|
[]byte("node7"),
|
||||||
|
[]byte("node8"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Level 1
|
||||||
|
n1 := NewMerkleNode(nil, nil, data[0])
|
||||||
|
n2 := NewMerkleNode(nil, nil, data[1])
|
||||||
|
n3 := NewMerkleNode(nil, nil, data[2])
|
||||||
|
n4 := NewMerkleNode(nil, nil, data[3])
|
||||||
|
n5 := NewMerkleNode(nil, nil, data[4])
|
||||||
|
n6 := NewMerkleNode(nil, nil, data[5])
|
||||||
|
n7 := NewMerkleNode(nil, nil, data[6])
|
||||||
|
n8 := NewMerkleNode(nil, nil, data[7])
|
||||||
|
|
||||||
|
// Level 2
|
||||||
|
n9 := NewMerkleNode(n1, n2, nil)
|
||||||
|
n10 := NewMerkleNode(n3, n4, nil)
|
||||||
|
n11 := NewMerkleNode(n5, n6, nil)
|
||||||
|
n12 := NewMerkleNode(n7, n8, nil)
|
||||||
|
|
||||||
|
// Level 3
|
||||||
|
n13 := NewMerkleNode(n9, n10, nil)
|
||||||
|
n14 := NewMerkleNode(n11, n12, nil)
|
||||||
|
|
||||||
|
// Level 4
|
||||||
|
n15 := NewMerkleNode(n13, n14, nil)
|
||||||
|
|
||||||
|
rootHash := fmt.Sprintf("%x", n15.Data)
|
||||||
|
mTree := NewMerkleTree(data)
|
||||||
|
|
||||||
|
assert.Equal(t, rootHash, fmt.Sprintf("%x", mTree.RootNode.Data), "Merkle tree root hash is correct")
|
||||||
|
}
|
Loading…
Reference in New Issue