diff options
author | obscuren <geffobscura@gmail.com> | 2014-11-19 23:35:57 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-11-19 23:35:57 +0800 |
commit | cab7e6000e20413d697d07a1a6b2abcc85dfc2e1 (patch) | |
tree | bee635f9484aae1247ad79f9d99059cbd8d84dbf /ptrie/trie.go | |
parent | 0f460ad26e864ae8b4c4cf99147c5b57a10f3be9 (diff) | |
download | dexon-cab7e6000e20413d697d07a1a6b2abcc85dfc2e1.tar dexon-cab7e6000e20413d697d07a1a6b2abcc85dfc2e1.tar.gz dexon-cab7e6000e20413d697d07a1a6b2abcc85dfc2e1.tar.bz2 dexon-cab7e6000e20413d697d07a1a6b2abcc85dfc2e1.tar.lz dexon-cab7e6000e20413d697d07a1a6b2abcc85dfc2e1.tar.xz dexon-cab7e6000e20413d697d07a1a6b2abcc85dfc2e1.tar.zst dexon-cab7e6000e20413d697d07a1a6b2abcc85dfc2e1.zip |
Increased coverage
Diffstat (limited to 'ptrie/trie.go')
-rw-r--r-- | ptrie/trie.go | 59 |
1 files changed, 11 insertions, 48 deletions
diff --git a/ptrie/trie.go b/ptrie/trie.go index 687126aef..0ef498b10 100644 --- a/ptrie/trie.go +++ b/ptrie/trie.go @@ -10,47 +10,6 @@ import ( "github.com/ethereum/go-ethereum/trie" ) -type Backend interface { - Get([]byte) []byte - Set([]byte, []byte) -} - -type Cache struct { - store map[string][]byte - backend Backend -} - -func NewCache(backend Backend) *Cache { - return &Cache{make(map[string][]byte), backend} -} - -func (self *Cache) Get(key []byte) []byte { - data := self.store[string(key)] - if data == nil { - data = self.backend.Get(key) - } - - return data -} - -func (self *Cache) Set(key []byte, data []byte) { - self.store[string(key)] = data -} - -func (self *Cache) Flush() { - for k, v := range self.store { - self.backend.Set([]byte(k), v) - } - - // This will eventually grow too large. We'd could - // do a make limit on storage and push out not-so-popular nodes. - //self.Reset() -} - -func (self *Cache) Reset() { - self.store = make(map[string][]byte) -} - type Trie struct { mu sync.Mutex root Node @@ -83,14 +42,17 @@ func (self *Trie) Root() []byte { return self.Hash() } func (self *Trie) Hash() []byte { var hash []byte if self.root != nil { - t := self.root.Hash() - if byts, ok := t.([]byte); ok { - hash = byts - } else { - hash = crypto.Sha3(ethutil.Encode(self.root.RlpData())) - } + hash = self.root.Hash().([]byte) + /* + t := self.root.Hash() + if byts, ok := t.([]byte); ok { + hash = byts + } else { + hash = crypto.Sha3(ethutil.Encode(self.root.RlpData())) + } + */ } else { - hash = crypto.Sha3(ethutil.Encode(self.root)) + hash = crypto.Sha3(ethutil.Encode("")) } if !bytes.Equal(hash, self.roothash) { @@ -107,6 +69,7 @@ func (self *Trie) Commit() { self.cache.Flush() } +// Reset should only be called if the trie has been hashed func (self *Trie) Reset() { self.cache.Reset() |