aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgary rong <garyrong0905@gmail.com>2019-08-12 22:14:40 +0800
committerPéter Szilágyi <peterke@gmail.com>2019-08-12 22:14:40 +0800
commitdf6c08a485270f96f8a65124748246b84b2c37ae (patch)
treea64702be9f2240fff844c51e7a03ffd78c996765
parent8657a0d6b5777ae5a94cb4714ae18b0c38a25c09 (diff)
downloadgo-tangerine-df6c08a485270f96f8a65124748246b84b2c37ae.tar
go-tangerine-df6c08a485270f96f8a65124748246b84b2c37ae.tar.gz
go-tangerine-df6c08a485270f96f8a65124748246b84b2c37ae.tar.bz2
go-tangerine-df6c08a485270f96f8a65124748246b84b2c37ae.tar.lz
go-tangerine-df6c08a485270f96f8a65124748246b84b2c37ae.tar.xz
go-tangerine-df6c08a485270f96f8a65124748246b84b2c37ae.tar.zst
go-tangerine-df6c08a485270f96f8a65124748246b84b2c37ae.zip
core, trie: decode the value for storage dump (#19943)
* core, trie: decode the value for storage dump * core/state: address comment
-rw-r--r--core/state/dump.go7
-rw-r--r--trie/iterator.go4
2 files changed, 9 insertions, 2 deletions
diff --git a/core/state/dump.go b/core/state/dump.go
index 51d3e5554..7912fd5f9 100644
--- a/core/state/dump.go
+++ b/core/state/dump.go
@@ -118,7 +118,12 @@ func (self *StateDB) dump(c collector, excludeCode, excludeStorage, excludeMissi
account.Storage = make(map[common.Hash]string)
storageIt := trie.NewIterator(obj.getTrie(self.db).NodeIterator(nil))
for storageIt.Next() {
- account.Storage[common.BytesToHash(self.trie.GetKey(storageIt.Key))] = common.Bytes2Hex(storageIt.Value)
+ _, content, _, err := rlp.Split(storageIt.Value)
+ if err != nil {
+ log.Error("Failed to decode the value returned by iterator", "error", err)
+ continue
+ }
+ account.Storage[common.BytesToHash(self.trie.GetKey(storageIt.Key))] = common.Bytes2Hex(content)
}
}
c.onAccount(addr, account)
diff --git a/trie/iterator.go b/trie/iterator.go
index da93b2fad..8e84dee3b 100644
--- a/trie/iterator.go
+++ b/trie/iterator.go
@@ -34,7 +34,9 @@ type Iterator struct {
Err error
}
-// NewIterator creates a new key-value iterator from a node iterator
+// NewIterator creates a new key-value iterator from a node iterator.
+// Note that the value returned by the iterator is raw. If the content is encoded
+// (e.g. storage value is RLP-encoded), it's caller's duty to decode it.
func NewIterator(it NodeIterator) *Iterator {
return &Iterator{
nodeIt: it,