shortnode.go 812 B

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