diff options
author | obscuren <geffobscura@gmail.com> | 2015-03-18 21:16:07 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-03-18 21:16:07 +0800 |
commit | 4d0ae8b0cb32e9de63092bc36022ea4af76cad8b (patch) | |
tree | 240356371b44765d64c9ceed9be84064258e8c1d /cmd | |
parent | 48dd601de0ffea4e1bf57a8923f2a6126553b575 (diff) | |
parent | 064279c0ec2f048cbdd965c095ea332bb8666f94 (diff) | |
download | go-tangerine-4d0ae8b0cb32e9de63092bc36022ea4af76cad8b.tar go-tangerine-4d0ae8b0cb32e9de63092bc36022ea4af76cad8b.tar.gz go-tangerine-4d0ae8b0cb32e9de63092bc36022ea4af76cad8b.tar.bz2 go-tangerine-4d0ae8b0cb32e9de63092bc36022ea4af76cad8b.tar.lz go-tangerine-4d0ae8b0cb32e9de63092bc36022ea4af76cad8b.tar.xz go-tangerine-4d0ae8b0cb32e9de63092bc36022ea4af76cad8b.tar.zst go-tangerine-4d0ae8b0cb32e9de63092bc36022ea4af76cad8b.zip |
Merge branch 'conversion' of github.com-obscure:ethereum/go-ethereum into conversion
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/ethereum/admin.go | 5 | ||||
-rw-r--r-- | cmd/utils/cmd.go | 36 |
2 files changed, 22 insertions, 19 deletions
diff --git a/cmd/ethereum/admin.go b/cmd/ethereum/admin.go index 967af2553..41aaf46d8 100644 --- a/cmd/ethereum/admin.go +++ b/cmd/ethereum/admin.go @@ -221,13 +221,10 @@ func (js *jsre) exportChain(call otto.FunctionCall) otto.Value { fmt.Println(err) return otto.FalseValue() } - - data := js.ethereum.ChainManager().Export() - if err := common.WriteFile(fn, data); err != nil { + if err := utils.ExportChain(js.ethereum.ChainManager(), fn); err != nil { fmt.Println(err) return otto.FalseValue() } - return otto.TrueValue() } diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 74fd5334e..feea29d64 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -23,14 +23,15 @@ package utils import ( "fmt" + "io" "os" "os/signal" "regexp" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/rlp" ) @@ -152,29 +153,34 @@ func ImportChain(chainmgr *core.ChainManager, fn string) error { } defer fh.Close() - var blocks types.Blocks - if err := rlp.Decode(fh, &blocks); err != nil { - return err - } - chainmgr.Reset() - if err := chainmgr.InsertChain(blocks); err != nil { - return err + stream := rlp.NewStream(fh) + var i int + for ; ; i++ { + var b types.Block + if err := stream.Decode(&b); err == io.EOF { + break + } else if err != nil { + return fmt.Errorf("at block %d: %v", i, err) + } + if err := chainmgr.InsertChain(types.Blocks{&b}); err != nil { + return fmt.Errorf("invalid block %d: %v", i, err) + } } - fmt.Printf("imported %d blocks\n", len(blocks)) - + fmt.Printf("imported %d blocks\n", i) return nil } func ExportChain(chainmgr *core.ChainManager, fn string) error { fmt.Printf("exporting blockchain '%s'\n", fn) - - data := chainmgr.Export() - - if err := common.WriteFile(fn, data); err != nil { + fh, err := os.OpenFile(fn, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm) + if err != nil { + return err + } + defer fh.Close() + if err := chainmgr.Export(fh); err != nil { return err } fmt.Printf("exported blockchain\n") - return nil } |