Documentation ¶
Index ¶
- Constants
- func PrintIAVLNode(node *IAVLNode)
- func SimpleHashFromBinaries(items []interface{}) []byte
- func SimpleHashFromBinary(item interface{}) []byte
- func SimpleHashFromHashables(items []Hashable) []byte
- func SimpleHashFromHashes(hashes [][]byte) []byte
- func SimpleHashFromMap(m map[string]interface{}) []byte
- func SimpleHashFromTwoHashes(left []byte, right []byte) []byte
- type Hashable
- type IAVLNode
- type IAVLProof
- type IAVLProofInnerNode
- type IAVLProofLeafNode
- type IAVLTree
- func (t *IAVLTree) ConstructProof(key []byte) *IAVLProof
- func (t *IAVLTree) Copy() Tree
- func (t *IAVLTree) Get(key []byte) (index int, value []byte, exists bool)
- func (t *IAVLTree) GetByIndex(index int) (key []byte, value []byte)
- func (t *IAVLTree) Has(key []byte) bool
- func (t *IAVLTree) Hash() []byte
- func (t *IAVLTree) HashWithCount() ([]byte, int)
- func (t *IAVLTree) Height() int8
- func (t *IAVLTree) Iterate(fn func(key []byte, value []byte) bool) (stopped bool)
- func (t *IAVLTree) IterateRange(start, end []byte, ascending bool, fn func(key []byte, value []byte) bool) (stopped bool)
- func (t *IAVLTree) Load(hash []byte)
- func (t *IAVLTree) Proof(key []byte) ([]byte, bool)
- func (t *IAVLTree) Remove(key []byte) (value []byte, removed bool)
- func (t *IAVLTree) Save() []byte
- func (t *IAVLTree) Set(key []byte, value []byte) (updated bool)
- func (t *IAVLTree) Size() int
- type KVPair
- type KVPairs
- type SimpleProof
- type SimpleProofNode
- type Tree
Constants ¶
const Version = "0.3.0" // pruning, proof, iterate-range
Variables ¶
This section is empty.
Functions ¶
func SimpleHashFromBinaries ¶
func SimpleHashFromBinaries(items []interface{}) []byte
Convenience for SimpleHashFromHashes.
func SimpleHashFromHashables ¶
Convenience for SimpleHashFromHashes.
func SimpleHashFromHashes ¶
func SimpleHashFromMap ¶
Convenience for SimpleHashFromHashes.
func SimpleHashFromTwoHashes ¶
Types ¶
type IAVLNode ¶
type IAVLNode struct {
// contains filtered or unexported fields
}
func MakeIAVLNode ¶
NOTE: The hash is not saved or set. The caller should set the hash afterwards. (Presumably the caller already has the hash)
func NewIAVLNode ¶
type IAVLProof ¶
type IAVLProof struct { LeafNode IAVLProofLeafNode InnerNodes []IAVLProofInnerNode RootHash []byte }
type IAVLProofInnerNode ¶
func (IAVLProofInnerNode) Hash ¶
func (branch IAVLProofInnerNode) Hash(childHash []byte) []byte
type IAVLProofLeafNode ¶
func (IAVLProofLeafNode) Hash ¶
func (leaf IAVLProofLeafNode) Hash() []byte
type IAVLTree ¶
type IAVLTree struct {
// contains filtered or unexported fields
}
Immutable AVL Tree (wraps the Node root) This tree is not goroutine safe.
func (*IAVLTree) ConstructProof ¶
Returns nil if key is not in tree.
func (*IAVLTree) Copy ¶
The returned tree and the original tree are goroutine independent. That is, they can each run in their own goroutine. However, upon Save(), any other trees that share a db will become outdated, as some nodes will become orphaned. Note that Save() clears leftNode and rightNode. Otherwise, two copies would not be goroutine independent.
func (*IAVLTree) HashWithCount ¶
func (*IAVLTree) IterateRange ¶
func (t *IAVLTree) IterateRange(start, end []byte, ascending bool, fn func(key []byte, value []byte) bool) (stopped bool)
IterateRange makes a callback for all nodes with key between start and end inclusive If either are nil, then it is open on that side (nil, nil is the same as Iterate)
type KVPair ¶
type KVPair struct { Key string Value interface{} }
Convenience struct for key-value pairs.
A list of KVPairs is hashed via `SimpleHashFromHashables`. NOTE: Each `Value` is encoded for hashing without extra type information, so the user is presumed to be aware of the Value types.
type SimpleProof ¶
type SimpleProof struct {
Aunts [][]byte `json:"aunts"` // Hashes from leaf's sibling to a root's child.
}
func SimpleProofsFromHashables ¶
func SimpleProofsFromHashables(items []Hashable) (rootHash []byte, proofs []*SimpleProof)
proofs[0] is the proof for items[0].
func (*SimpleProof) GenRoot ¶
func (sp *SimpleProof) GenRoot(index int, total int, leafHash []byte) []byte
func (*SimpleProof) String ¶
func (sp *SimpleProof) String() string
func (*SimpleProof) StringIndented ¶
func (sp *SimpleProof) StringIndented(indent string) string
type SimpleProofNode ¶
type SimpleProofNode struct { Hash []byte Parent *SimpleProofNode Left *SimpleProofNode // Left sibling (only one of Left,Right is set) Right *SimpleProofNode // Right sibling (only one of Left,Right is set) }
Helper structure to construct merkle proof. The node and the tree is thrown away afterwards. Exactly one of node.Left and node.Right is nil, unless node is the root, in which case both are nil. node.Parent.Hash = hash(node.Hash, node.Right.Hash) or
hash(node.Left.Hash, node.Hash), depending on whether node is a left/right child.
func (*SimpleProofNode) FlattenAunts ¶
func (spn *SimpleProofNode) FlattenAunts() [][]byte
Starting from a leaf SimpleProofNode, FlattenAunts() will return the inner hashes for the item corresponding to the leaf.
type Tree ¶
type Tree interface { Size() (size int) Height() (height int8) Has(key []byte) (has bool) Proof(key []byte) (proof []byte, exists bool) Get(key []byte) (index int, value []byte, exists bool) GetByIndex(index int) (key []byte, value []byte) Set(key []byte, value []byte) (updated bool) Remove(key []byte) (value []byte, removed bool) HashWithCount() (hash []byte, count int) Hash() (hash []byte) Save() (hash []byte) Load(hash []byte) Copy() Tree Iterate(func(key []byte, value []byte) (stop bool)) (stopped bool) IterateRange(start []byte, end []byte, ascending bool, fx func(key []byte, value []byte) (stop bool)) (stopped bool) }