aboutsummaryrefslogtreecommitdiffstats
path: root/core/state/dump.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-03-23 23:59:09 +0800
committerobscuren <geffobscura@gmail.com>2015-03-23 23:59:09 +0800
commit0330077d76b48934ab024a309000f83c78047d8a (patch)
tree2a3ffbcd5bd941b30ed28d0eb5c30553a25324e0 /core/state/dump.go
parentd7eaa97a297151637af090ecb05bbd6d260d90b8 (diff)
downloadgo-tangerine-0330077d76b48934ab024a309000f83c78047d8a.tar
go-tangerine-0330077d76b48934ab024a309000f83c78047d8a.tar.gz
go-tangerine-0330077d76b48934ab024a309000f83c78047d8a.tar.bz2
go-tangerine-0330077d76b48934ab024a309000f83c78047d8a.tar.lz
go-tangerine-0330077d76b48934ab024a309000f83c78047d8a.tar.xz
go-tangerine-0330077d76b48934ab024a309000f83c78047d8a.tar.zst
go-tangerine-0330077d76b48934ab024a309000f83c78047d8a.zip
moved state and vm to core
Diffstat (limited to 'core/state/dump.go')
-rw-r--r--core/state/dump.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/core/state/dump.go b/core/state/dump.go
new file mode 100644
index 000000000..712f8da1f
--- /dev/null
+++ b/core/state/dump.go
@@ -0,0 +1,62 @@
+package state
+
+import (
+ "encoding/json"
+ "fmt"
+
+ "github.com/ethereum/go-ethereum/common"
+)
+
+type Account struct {
+ Balance string `json:"balance"`
+ Nonce uint64 `json:"nonce"`
+ Root string `json:"root"`
+ 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 *StateDB) RawDump() World {
+ world := World{
+ Root: common.Bytes2Hex(self.trie.Root()),
+ Accounts: make(map[string]Account),
+ }
+
+ it := self.trie.Iterator()
+ for it.Next() {
+ stateObject := NewStateObjectFromBytes(common.BytesToAddress(it.Key), it.Value, self.db)
+
+ account := Account{Balance: stateObject.balance.String(), Nonce: stateObject.nonce, Root: common.Bytes2Hex(stateObject.Root()), CodeHash: common.Bytes2Hex(stateObject.codeHash)}
+ account.Storage = make(map[string]string)
+
+ storageIt := stateObject.State.trie.Iterator()
+ for storageIt.Next() {
+ fmt.Println("value", storageIt.Value)
+ account.Storage[common.Bytes2Hex(storageIt.Key)] = common.Bytes2Hex(storageIt.Value)
+ }
+ world.Accounts[common.Bytes2Hex(it.Key)] = account
+ }
+ return world
+}
+
+func (self *StateDB) Dump() []byte {
+ json, err := json.MarshalIndent(self.RawDump(), "", " ")
+ if err != nil {
+ fmt.Println("dump err", err)
+ }
+
+ return json
+}
+
+// Debug stuff
+func (self *StateObject) CreateOutputForDiff() {
+ fmt.Printf("%x %x %x %x\n", self.Address(), self.State.Root(), self.balance.Bytes(), self.nonce)
+ it := self.State.trie.Iterator()
+ for it.Next() {
+ fmt.Printf("%x %x\n", it.Key, it.Value)
+ }
+}