github.com/karalabe/go-ethereum@v0.8.5/trie/shortnode.go (about)

     1  package trie
     2  
     3  import "github.com/ethereum/go-ethereum/ethutil"
     4  
     5  type ShortNode struct {
     6  	trie  *Trie
     7  	key   []byte
     8  	value Node
     9  }
    10  
    11  func NewShortNode(t *Trie, key []byte, value Node) *ShortNode {
    12  	return &ShortNode{t, []byte(CompactEncode(key)), value}
    13  }
    14  func (self *ShortNode) Value() Node {
    15  	self.value = self.trie.trans(self.value)
    16  
    17  	return self.value
    18  }
    19  func (self *ShortNode) Dirty() bool { return true }
    20  func (self *ShortNode) Copy(t *Trie) Node {
    21  	node := &ShortNode{t, nil, self.value.Copy(t)}
    22  	node.key = ethutil.CopyBytes(self.key)
    23  	return node
    24  }
    25  
    26  func (self *ShortNode) RlpData() interface{} {
    27  	return []interface{}{self.key, self.value.Hash()}
    28  }
    29  func (self *ShortNode) Hash() interface{} {
    30  	return self.trie.store(self)
    31  }
    32  
    33  func (self *ShortNode) Key() []byte {
    34  	return CompactDecode(string(self.key))
    35  }