Added state dump method
This commit is contained in:
parent
4edf7cfb05
commit
da50c75148
|
@ -290,7 +290,6 @@ func (bc *BlockChain) setLastBlock() {
|
|||
data, _ := ethutil.Config.Db.Get([]byte("LastBlock"))
|
||||
if len(data) != 0 {
|
||||
block := NewBlockFromBytes(data)
|
||||
//info := bc.BlockInfo(block)
|
||||
bc.CurrentBlock = block
|
||||
bc.LastBlockHash = block.Hash()
|
||||
bc.LastBlockNumber = block.Number.Uint64()
|
||||
|
@ -301,9 +300,6 @@ func (bc *BlockChain) setLastBlock() {
|
|||
bc.genesisBlock.state.Trie.Sync()
|
||||
// Prepare the genesis block
|
||||
bc.Add(bc.genesisBlock)
|
||||
|
||||
//chainlogger.Infof("root %x\n", bm.bc.genesisBlock.State().Root)
|
||||
//bm.bc.genesisBlock.PrintHash()
|
||||
}
|
||||
|
||||
// Set the last know difficulty (might be 0x0 as initial value, Genesis)
|
||||
|
@ -339,6 +335,18 @@ func (bc *BlockChain) GetBlock(hash []byte) *Block {
|
|||
return NewBlockFromBytes(data)
|
||||
}
|
||||
|
||||
func (self *BlockChain) GetBlockByNumber(num uint64) *Block {
|
||||
block := self.CurrentBlock
|
||||
for ; block.Number.Uint64() != num; block = self.GetBlock(block.PrevHash) {
|
||||
}
|
||||
|
||||
if block.Number.Uint64() == 0 && num != 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return block
|
||||
}
|
||||
|
||||
func (bc *BlockChain) BlockInfoByHash(hash []byte) BlockInfo {
|
||||
bi := BlockInfo{}
|
||||
data, _ := ethutil.Config.Db.Get(append(hash, []byte("Info")...))
|
||||
|
|
|
@ -13,12 +13,9 @@ import (
|
|||
func InitWords(wordsPath string) {
|
||||
filename := path.Join(wordsPath, "mnemonic.words.lst")
|
||||
if _, err := os.Stat(filename); os.IsNotExist(err) {
|
||||
fmt.Printf("reading mnemonic word list file from supplied path not found. Looked in %s. Trying next option.\n", filename)
|
||||
|
||||
dir := path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "eth-go", "ethcrypto")
|
||||
filename = path.Join(dir, "mnemonic.words.lst")
|
||||
if _, err := os.Stat(filename); os.IsNotExist(err) {
|
||||
fmt.Printf("reading mnemonic word list file 'mnemonic.words.lst' from source folder failed: %s.\n", filename)
|
||||
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("problem getting current folder: ", err))
|
||||
|
|
|
@ -3,14 +3,15 @@ package ethpub
|
|||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"math/big"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/ethereum/eth-go/ethchain"
|
||||
"github.com/ethereum/eth-go/ethcrypto"
|
||||
"github.com/ethereum/eth-go/ethlog"
|
||||
"github.com/ethereum/eth-go/ethstate"
|
||||
"github.com/ethereum/eth-go/ethutil"
|
||||
"math/big"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
var logger = ethlog.NewLogger("PUB")
|
||||
|
@ -165,14 +166,6 @@ func (lib *PEthereum) SecretToAddress(key string) string {
|
|||
return ethutil.Bytes2Hex(pair.Address())
|
||||
}
|
||||
|
||||
func (lib *PEthereum) Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr string) (*PReceipt, error) {
|
||||
return lib.createTx(key, recipient, valueStr, gasStr, gasPriceStr, dataStr)
|
||||
}
|
||||
|
||||
func (lib *PEthereum) Create(key, valueStr, gasStr, gasPriceStr, script string) (*PReceipt, error) {
|
||||
return lib.createTx(key, "", valueStr, gasStr, gasPriceStr, script)
|
||||
}
|
||||
|
||||
func FindAddressInNameReg(stateManager *ethchain.StateManager, name string) []byte {
|
||||
nameReg := EthereumConfig(stateManager).NameReg()
|
||||
if nameReg != nil {
|
||||
|
@ -199,6 +192,14 @@ func FindNameInNameReg(stateManager *ethchain.StateManager, addr []byte) string
|
|||
return ""
|
||||
}
|
||||
|
||||
func (lib *PEthereum) Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr string) (*PReceipt, error) {
|
||||
return lib.createTx(key, recipient, valueStr, gasStr, gasPriceStr, dataStr)
|
||||
}
|
||||
|
||||
func (lib *PEthereum) Create(key, valueStr, gasStr, gasPriceStr, script string) (*PReceipt, error) {
|
||||
return lib.createTx(key, "", valueStr, gasStr, gasPriceStr, script)
|
||||
}
|
||||
|
||||
func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, scriptStr string) (*PReceipt, error) {
|
||||
var hash []byte
|
||||
var contractCreation bool
|
||||
|
|
|
@ -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