diff options
author | zelig <viktor.tron@gmail.com> | 2014-07-21 20:31:26 +0800 |
---|---|---|
committer | zelig <viktor.tron@gmail.com> | 2014-07-21 20:31:26 +0800 |
commit | 13cc220c0d7f9b31478b49a1109d44aeab66b372 (patch) | |
tree | 7f103997d746e2b5da20eed3ce20cb2521b12852 /ethchain/state_object.go | |
parent | 1e4af85a380977233a3bceaf5e2a020a281aa19a (diff) | |
parent | 8f91d47bf3c26b850f0f40f79856141087e6ef82 (diff) | |
download | go-tangerine-13cc220c0d7f9b31478b49a1109d44aeab66b372.tar.gz go-tangerine-13cc220c0d7f9b31478b49a1109d44aeab66b372.tar.zst go-tangerine-13cc220c0d7f9b31478b49a1109d44aeab66b372.zip |
Merge branch 'develop' of github.com:ethereum/eth-go into feature/ethutil-refactor
Diffstat (limited to 'ethchain/state_object.go')
-rw-r--r-- | ethchain/state_object.go | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/ethchain/state_object.go b/ethchain/state_object.go index 8e7b5fece..184609015 100644 --- a/ethchain/state_object.go +++ b/ethchain/state_object.go @@ -151,6 +151,24 @@ func (self *StateObject) setStorage(k []byte, value *ethutil.Value) { */ } +// Iterate over each storage address and yield callback +func (self *StateObject) EachStorage(cb ethtrie.EachCallback) { + // First loop over the uncommit/cached values in storage + for key, value := range self.storage { + // XXX Most iterators Fns as it stands require encoded values + encoded := ethutil.NewValue(value.Encode()) + cb(key, encoded) + } + + it := self.state.trie.NewIterator() + it.Each(func(key string, value *ethutil.Value) { + // If it's cached don't call the callback. + if self.storage[key] == nil { + cb(key, value) + } + }) +} + func (self *StateObject) Sync() { /* fmt.Println("############# BEFORE ################") @@ -303,6 +321,14 @@ func (c *StateObject) Init() Code { return c.initScript } +// Debug stuff +func (self *StateObject) CreateOutputForDiff() { + fmt.Printf("%x %x %x %x\n", self.Address(), self.state.Root(), self.Amount.Bytes(), self.Nonce) + self.EachStorage(func(addr string, value *ethutil.Value) { + fmt.Printf("%x %x\n", addr, value.Bytes()) + }) +} + // // Encoding // |