add export blockchain subcommand, remove BlockDo
This commit is contained in:
parent
07955b3041
commit
51eed7964e
@ -87,6 +87,11 @@ runtime will execute the file and exit.
|
|||||||
Name: "import",
|
Name: "import",
|
||||||
Usage: `import a blockchain file`,
|
Usage: `import a blockchain file`,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Action: exportchain,
|
||||||
|
Name: "export",
|
||||||
|
Usage: `export blockchain into file`,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
app.Author = ""
|
app.Author = ""
|
||||||
app.Email = ""
|
app.Email = ""
|
||||||
@ -171,25 +176,39 @@ func importchain(ctx *cli.Context) {
|
|||||||
if len(ctx.Args()) != 1 {
|
if len(ctx.Args()) != 1 {
|
||||||
utils.Fatalf("This command requires an argument.")
|
utils.Fatalf("This command requires an argument.")
|
||||||
}
|
}
|
||||||
chain, _, _ := utils.GetChain(ctx)
|
chainmgr, _, _ := utils.GetChain(ctx)
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
err := utils.ImportChain(chain, ctx.Args().First())
|
err := utils.ImportChain(chainmgr, ctx.Args().First())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("Import error: %v\n", err)
|
utils.Fatalf("Import error: %v\n", err)
|
||||||
}
|
}
|
||||||
fmt.Printf("Import done in", time.Since(start))
|
fmt.Printf("Import done in %v", time.Since(start))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func exportchain(ctx *cli.Context) {
|
||||||
|
if len(ctx.Args()) != 1 {
|
||||||
|
utils.Fatalf("This command requires an argument.")
|
||||||
|
}
|
||||||
|
chainmgr, _, _ := utils.GetChain(ctx)
|
||||||
|
start := time.Now()
|
||||||
|
err := utils.ExportChain(chainmgr, ctx.Args().First())
|
||||||
|
if err != nil {
|
||||||
|
utils.Fatalf("Export error: %v\n", err)
|
||||||
|
}
|
||||||
|
fmt.Printf("Export done in %v", time.Since(start))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func dump(ctx *cli.Context) {
|
func dump(ctx *cli.Context) {
|
||||||
chain, _, stateDb := utils.GetChain(ctx)
|
chainmgr, _, stateDb := utils.GetChain(ctx)
|
||||||
for _, arg := range ctx.Args() {
|
for _, arg := range ctx.Args() {
|
||||||
var block *types.Block
|
var block *types.Block
|
||||||
if hashish(arg) {
|
if hashish(arg) {
|
||||||
block = chain.GetBlock(ethutil.Hex2Bytes(arg))
|
block = chainmgr.GetBlock(ethutil.Hex2Bytes(arg))
|
||||||
} else {
|
} else {
|
||||||
num, _ := strconv.Atoi(arg)
|
num, _ := strconv.Atoi(arg)
|
||||||
block = chain.GetBlockByNumber(uint64(num))
|
block = chainmgr.GetBlockByNumber(uint64(num))
|
||||||
}
|
}
|
||||||
if block == nil {
|
if block == nil {
|
||||||
fmt.Println("{}")
|
fmt.Println("{}")
|
||||||
|
@ -35,7 +35,6 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
rpchttp "github.com/ethereum/go-ethereum/rpc/http"
|
rpchttp "github.com/ethereum/go-ethereum/rpc/http"
|
||||||
"github.com/ethereum/go-ethereum/state"
|
|
||||||
"github.com/ethereum/go-ethereum/xeth"
|
"github.com/ethereum/go-ethereum/xeth"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -188,27 +187,8 @@ func FormatTransactionData(data string) []byte {
|
|||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replay block
|
func ImportChain(chainmgr *core.ChainManager, fn string) error {
|
||||||
func BlockDo(ethereum *eth.Ethereum, hash []byte) error {
|
fmt.Printf("importing blockchain '%s'\n", fn)
|
||||||
block := ethereum.ChainManager().GetBlock(hash)
|
|
||||||
if block == nil {
|
|
||||||
return fmt.Errorf("unknown block %x", hash)
|
|
||||||
}
|
|
||||||
|
|
||||||
parent := ethereum.ChainManager().GetBlock(block.ParentHash())
|
|
||||||
|
|
||||||
statedb := state.New(parent.Root(), ethereum.StateDb())
|
|
||||||
_, err := ethereum.BlockProcessor().TransitionState(statedb, parent, block, true)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func ImportChain(chain *core.ChainManager, fn string) error {
|
|
||||||
fmt.Printf("importing chain '%s'\n", fn)
|
|
||||||
fh, err := os.OpenFile(fn, os.O_RDONLY, os.ModePerm)
|
fh, err := os.OpenFile(fn, os.O_RDONLY, os.ModePerm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -220,11 +200,24 @@ func ImportChain(chain *core.ChainManager, fn string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
chain.Reset()
|
chainmgr.Reset()
|
||||||
if err := chain.InsertChain(blocks); err != nil {
|
if err := chainmgr.InsertChain(blocks); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Printf("imported %d blocks\n", len(blocks))
|
fmt.Printf("imported %d blocks\n", len(blocks))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExportChain(chainmgr *core.ChainManager, fn string) error {
|
||||||
|
fmt.Printf("exporting blockchain '%s'\n", fn)
|
||||||
|
|
||||||
|
data := chainmgr.Export()
|
||||||
|
|
||||||
|
if err := ethutil.WriteFile(fn, data); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Printf("exported blockchain\n")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user