MCPcopy Create free account
hub / github.com/SmartPool/smartpool-client / insertNode

Method insertNode

mtree/merkle_tree.go:68–107  ·  view source on GitHub ↗
(_node node)

Source from the content-addressed store, hash-verified

66}
67
68func (mt *MerkleTree) insertNode(_node node) {
69 var e, prev *list.Element
70 var cNode, prevNode node
71 e = mt.mtbuf.PushBack(_node)
72 for {
73 prev = e.Prev()
74 cNode = e.Value.(node)
75 if prev == nil {
76 break
77 }
78 prevNode = prev.Value.(node)
79 if cNode.NodeCount != prevNode.NodeCount {
80 break
81 }
82 if prevNode.Branches != nil {
83 // fmt.Printf("Accepting right sibling\n")
84 for k, v := range *prevNode.Branches {
85 v.Root = AcceptRightSibling(v.Root, cNode.Data)
86 (*prevNode.Branches)[k] = v
87 // fmt.Printf("Proof: %v\n", v.String())
88 }
89 }
90 if cNode.Branches != nil {
91 // fmt.Printf("Accepting left sibling\n")
92 for k, v := range *cNode.Branches {
93 v.Root = AcceptLeftSibling(v.Root, prevNode.Data)
94 (*prevNode.Branches)[k] = v
95 // fmt.Printf("Proof: %v\n", v.String())
96 }
97 }
98 // fmt.Printf("Creating new Node: h(%4s, %4s) ", hex.EncodeToString(prevNode.Data[:]), hex.EncodeToString(cNode.Data[:]))
99 prevNode.Data = mt.h(prevNode.Data, cNode.Data)
100 // fmt.Printf("=> %4s\n", hex.EncodeToString(prevNode.Data[:]))
101 prevNode.NodeCount = cNode.NodeCount*2 + 1
102
103 mt.mtbuf.Remove(e)
104 mt.mtbuf.Remove(prev)
105 e = mt.mtbuf.PushBack(prevNode)
106 }
107}
108
109func (mt *MerkleTree) Finalize() {
110 if !mt.finalized && mt.mtbuf.Len() > 1 {

Callers 2

InsertMethod · 0.95
FinalizeMethod · 0.95

Calls 2

AcceptRightSiblingFunction · 0.85
AcceptLeftSiblingFunction · 0.85

Tested by

no test coverage detected