actually remove current from sender and calc on the fly for addnext
This commit is contained in:
parent
2301af5615
commit
2b66c234c6
@ -48,7 +48,6 @@ type ElkremSender struct {
|
|||||||
root *wire.ShaHash // root hash of the tree
|
root *wire.ShaHash // root hash of the tree
|
||||||
}
|
}
|
||||||
type ElkremReceiver struct {
|
type ElkremReceiver struct {
|
||||||
current uint64 // last received index (actually don't need it?)
|
|
||||||
treeHeight uint8 // height of tree (size is 2**height -1 )
|
treeHeight uint8 // height of tree (size is 2**height -1 )
|
||||||
s []ElkremNode // store of received hashes, max size = height
|
s []ElkremNode // store of received hashes, max size = height
|
||||||
}
|
}
|
||||||
@ -123,7 +122,10 @@ func (e *ElkremReceiver) AddNext(sha *wire.ShaHash) error {
|
|||||||
// note: careful about atomicity / disk writes here
|
// note: careful about atomicity / disk writes here
|
||||||
var n ElkremNode
|
var n ElkremNode
|
||||||
n.sha = sha
|
n.sha = sha
|
||||||
t := len(e.s) - 1 // top of stack
|
t := len(e.s) - 1 // top of stack
|
||||||
|
if t > 0 { // if this is not the first hash
|
||||||
|
n.i = e.s[t].i + 1 // incoming index is tip of stack index + 1
|
||||||
|
}
|
||||||
if t > 0 && e.s[t-1].h == e.s[t].h { // top 2 elements are equal height
|
if t > 0 && e.s[t-1].h == e.s[t].h { // top 2 elements are equal height
|
||||||
// next node must be parent; verify and remove children
|
// next node must be parent; verify and remove children
|
||||||
n.h = e.s[t].h + 1 // assign height
|
n.h = e.s[t].h + 1 // assign height
|
||||||
@ -139,8 +141,6 @@ func (e *ElkremReceiver) AddNext(sha *wire.ShaHash) error {
|
|||||||
}
|
}
|
||||||
e.s = e.s[:len(e.s)-2] // l and r children OK, remove them
|
e.s = e.s[:len(e.s)-2] // l and r children OK, remove them
|
||||||
} // if that didn't happen, height defaults to 0
|
} // if that didn't happen, height defaults to 0
|
||||||
e.current++ // increment current index
|
|
||||||
n.i = e.current // set new node to that incremented index
|
|
||||||
e.s = append(e.s, n) // append new node to stack
|
e.s = append(e.s, n) // append new node to stack
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user