arnaucube
arnaucube/go-merkletree-oldPublic Self-hosted repository
go-merkletree-old/db.go
db.goRaw
 1package merkletree
 2
 3import (
 4	"bytes"
 5
 6	"github.com/fatih/color"
 7)
 8
 9func (mt *MerkleTree) Insert(key Hash, nodeType byte, indexLength uint32, nodeBytes []byte) error {
10	// add nodetype at the first byte of the value
11	var value []byte
12	value = append(value, nodeType)
13	indexLengthBytes := Uint32ToBytes(indexLength)
14	value = append(value, indexLengthBytes[:]...)
15	value = append(value, nodeBytes[:]...)
16
17	err := mt.storage.Put(key[:], value, nil)
18	if err != nil {
19		color.Red(err.Error())
20		return err
21	}
22	return nil
23}
24
25func (mt *MerkleTree) Get(key Hash) (byte, uint32, []byte, error) {
26	if bytes.Equal(key[:], EmptyNodeValue[:]) {
27		return 0, 0, EmptyNodeValue[:], nil
28	}
29
30	value, err := mt.storage.Get(key[:], nil)
31	if err != nil {
32		return 0, 0, EmptyNodeValue[:], err
33	}
34
35	// get nodetype of the first byte of the value
36	nodeType := value[0]
37	indexLength := BytesToUint32(value[1:5])
38	nodeBytes := value[5:]
39	return nodeType, indexLength, nodeBytes, err
40}