diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/state/dump.go | 16 | ||||
-rw-r--r-- | core/state/state_object.go | 2 | ||||
-rw-r--r-- | core/state/state_test.go | 18 |
3 files changed, 27 insertions, 9 deletions
diff --git a/core/state/dump.go b/core/state/dump.go index 8eb03e8e4..a328b0537 100644 --- a/core/state/dump.go +++ b/core/state/dump.go @@ -46,11 +46,19 @@ func (self *StateDB) RawDump() World { it := self.trie.Iterator() for it.Next() { addr := self.trie.GetKey(it.Key) - stateObject, _ := DecodeObject(common.BytesToAddress(addr), self.db, it.Value) - - account := Account{Balance: stateObject.balance.String(), Nonce: stateObject.nonce, Root: common.Bytes2Hex(stateObject.Root()), CodeHash: common.Bytes2Hex(stateObject.codeHash), Code: common.Bytes2Hex(stateObject.Code())} - account.Storage = make(map[string]string) + stateObject, err := DecodeObject(common.BytesToAddress(addr), self.db, it.Value) + if err != nil { + panic(err) + } + account := Account{ + Balance: stateObject.balance.String(), + Nonce: stateObject.nonce, + Root: common.Bytes2Hex(stateObject.Root()), + CodeHash: common.Bytes2Hex(stateObject.codeHash), + Code: common.Bytes2Hex(stateObject.Code()), + Storage: make(map[string]string), + } storageIt := stateObject.trie.Iterator() for storageIt.Next() { account.Storage[common.Bytes2Hex(self.trie.GetKey(storageIt.Key))] = common.Bytes2Hex(storageIt.Value) diff --git a/core/state/state_object.go b/core/state/state_object.go index 326708118..769c63d42 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -287,7 +287,7 @@ func DecodeObject(address common.Address, db trie.Database, data []byte) (*State } if !bytes.Equal(ext.CodeHash, emptyCodeHash) { if obj.code, err = db.Get(ext.CodeHash); err != nil { - return nil, fmt.Errorf("can't find code for hash %x: %v", ext.CodeHash, err) + return nil, fmt.Errorf("can't get code for hash %x: %v", ext.CodeHash, err) } } obj.nonce = ext.Nonce diff --git a/core/state/state_test.go b/core/state/state_test.go index a45eddd0d..ce86a5b76 100644 --- a/core/state/state_test.go +++ b/core/state/state_test.go @@ -36,7 +36,6 @@ var _ = checker.Suite(&StateSuite{}) var toAddr = common.BytesToAddress func (s *StateSuite) TestDump(c *checker.C) { - return // generate a few entries obj1 := s.state.GetOrNewStateObject(toAddr([]byte{0x01})) obj1.AddBalance(big.NewInt(22)) @@ -48,24 +47,35 @@ func (s *StateSuite) TestDump(c *checker.C) { // write some of them to the trie s.state.UpdateStateObject(obj1) s.state.UpdateStateObject(obj2) + s.state.Commit() // check that dump contains the state objects that are in trie got := string(s.state.Dump()) want := `{ - "root": "6e277ae8357d013e50f74eedb66a991f6922f93ae03714de58b3d0c5e9eee53f", + "root": "71edff0130dd2385947095001c73d9e28d862fc286fca2b922ca6f6f3cddfdd2", "accounts": { - "1468288056310c82aa4c01a7e12a10f8111a0560e72b700555479031b86c357d": { + "0000000000000000000000000000000000000001": { "balance": "22", "nonce": 0, "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "code": "", "storage": {} }, - "a17eacbc25cda025e81db9c5c62868822c73ce097cee2a63e33a2e41268358a1": { + "0000000000000000000000000000000000000002": { + "balance": "44", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "code": "", + "storage": {} + }, + "0000000000000000000000000000000000000102": { "balance": "0", "nonce": 0, "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "87874902497a5bb968da31a2998d8f22e949d1ef6214bcdedd8bae24cca4b9e3", + "code": "03030303030303", "storage": {} } } |