trie: added error handling

Created alternate versions of Trie and SecureTrie functions that can return a MissingNodeError (used by ODR services)
This commit is contained in:
zsfelfoldi
2015-11-25 18:28:21 +01:00
parent 66d47ced48
commit 52904ae32f
7 changed files with 346 additions and 71 deletions

View File

@ -16,7 +16,12 @@
package trie
import "bytes"
import (
"bytes"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
)
type Iterator struct {
trie *Trie
@ -100,7 +105,11 @@ func (self *Iterator) next(node interface{}, key []byte, isIterStart bool) []byt
}
case hashNode:
return self.next(self.trie.resolveHash(node), key, isIterStart)
rn, err := self.trie.resolveHash(node, nil, nil)
if err != nil && glog.V(logger.Error) {
glog.Errorf("Unhandled trie error: %v", err)
}
return self.next(rn, key, isIterStart)
}
return nil
}
@ -127,7 +136,11 @@ func (self *Iterator) key(node interface{}) []byte {
}
}
case hashNode:
return self.key(self.trie.resolveHash(node))
rn, err := self.trie.resolveHash(node, nil, nil)
if err != nil && glog.V(logger.Error) {
glog.Errorf("Unhandled trie error: %v", err)
}
return self.key(rn)
}
return nil