diff options
| author | Thibaut Horel <thibaut.horel@gmail.com> | 2016-05-04 17:02:13 -0400 |
|---|---|---|
| committer | Thibaut Horel <thibaut.horel@gmail.com> | 2016-05-04 17:02:13 -0400 |
| commit | ebeffe49049d06a31e7f9497e3f6d13f0d50d5ce (patch) | |
| tree | 2705c5f9bb2496af0b6643468580189cbb7ea55d /merkle.go | |
| parent | 7062dde54e8fa527e785209209d3cd7d90848891 (diff) | |
| download | pos-ebeffe49049d06a31e7f9497e3f6d13f0d50d5ce.tar.gz | |
Some inlining and removing useless code
Diffstat (limited to 'merkle.go')
| -rw-r--r-- | merkle.go | 50 |
1 files changed, 16 insertions, 34 deletions
@@ -27,30 +27,6 @@ func NewMerkle(mtype string, height int64, fname string) Merkle { } return m } -func ChildrenId(m Merkle, id int64) (id1, id2 int64) { - id2 = (id + 1) * 2 - id1 = id2 - 1 - return id1, id2 -} - -func Children(child1, child2 []byte, id int64, m Merkle) { - id1, id2 := ChildrenId(m, id) - m.Read(child1, id1) - m.Read(child2, id2) -} - -func Init(m Merkle) { - h := sha3.New256() - hsize := h.Size() - buf := make([]byte, hsize) - - for id := m.Size() / 2; id <= m.Size(); id++ { - h.Reset() - binary.Write(h, binary.LittleEndian, id) - buf = h.Sum(buf[:0]) - m.Put(id, buf) - } -} // nodes are stored in BFS order, root node first type BFSMerkle struct { @@ -82,20 +58,26 @@ func (m *BFSMerkle) Read(buf []byte, id int64) { // disk access is sequential and mostly backward func (m *BFSMerkle) Build() []byte { - Init(m) size := m.Size() h := sha3.New256() - hsize := h.Size() - child1 := make([]byte, hsize) - child2 := make([]byte, hsize) + hsize := int64(h.Size()) buf := make([]byte, hsize) + + for id := m.Size() / 2; id <= m.Size(); id++ { + h.Reset() + binary.Write(h, binary.LittleEndian, id) + buf = h.Sum(buf[:0]) + m.WriteAt(buf, id*hsize) + } + for id := size/2 - 1; id >= 0; id-- { - Children(child1, child2, id, m) h.Reset() - h.Write(child1) - h.Write(child2) + m.ReadAt(buf, (id*2+1)*hsize) + h.Write(buf) + m.ReadAt(buf, (id*2+2)*hsize) + h.Write(buf) buf = h.Sum(buf[:0]) - m.Put(id, buf) + m.WriteAt(buf, id*hsize) } return buf } @@ -107,9 +89,9 @@ func (m *BFSMerkle) Proof(id int64) [][]byte { for i := 1; id > 0; i++ { proof[i] = make([]byte, hashSize) if id&1 == 0 { - m.Read(proof[i], id-1) + m.ReadAt(proof[i], (id-1)*hashSize) } else { - m.Read(proof[i], id+1) + m.ReadAt(proof[i], (id+1)*hashSize) } id = (id - 1) >> 1 } |
