mirror of https://github.com/ethereum/go-ethereum
parent
4edf7cfb05
commit
da50c75148
@ -0,0 +1,47 @@ |
||||
package ethstate |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"fmt" |
||||
|
||||
"github.com/ethereum/eth-go/ethutil" |
||||
) |
||||
|
||||
type Account struct { |
||||
Balance string `json:"balance"` |
||||
Nonce uint64 `json:"nonce"` |
||||
CodeHash string `json:"codeHash"` |
||||
Storage map[string]string `json:"storage"` |
||||
} |
||||
|
||||
type World struct { |
||||
Root string `json:"root"` |
||||
Accounts map[string]Account `json:"accounts"` |
||||
} |
||||
|
||||
func (self *State) Dump() string { |
||||
world := World{ |
||||
Root: ethutil.Bytes2Hex(self.Trie.Root.([]byte)), |
||||
Accounts: make(map[string]Account), |
||||
} |
||||
|
||||
self.Trie.NewIterator().Each(func(key string, value *ethutil.Value) { |
||||
stateObject := NewStateObjectFromBytes([]byte(key), value.Bytes()) |
||||
|
||||
account := Account{Balance: stateObject.Balance.String(), Nonce: stateObject.Nonce, CodeHash: ethutil.Bytes2Hex(stateObject.CodeHash)} |
||||
account.Storage = make(map[string]string) |
||||
|
||||
stateObject.EachStorage(func(key string, value *ethutil.Value) { |
||||
value.Decode() |
||||
account.Storage[ethutil.Bytes2Hex([]byte(key))] = ethutil.Bytes2Hex(value.Bytes()) |
||||
}) |
||||
world.Accounts[ethutil.Bytes2Hex([]byte(key))] = account |
||||
}) |
||||
|
||||
json, err := json.MarshalIndent(world, "", " ") |
||||
if err != nil { |
||||
fmt.Println("dump err", err) |
||||
} |
||||
|
||||
return string(json) |
||||
} |
Loading…
Reference in new issue