shortnode.go 935 B

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