aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-03-18 21:16:07 +0800
committerobscuren <geffobscura@gmail.com>2015-03-18 21:16:07 +0800
commit4d0ae8b0cb32e9de63092bc36022ea4af76cad8b (patch)
tree240356371b44765d64c9ceed9be84064258e8c1d /cmd
parent48dd601de0ffea4e1bf57a8923f2a6126553b575 (diff)
parent064279c0ec2f048cbdd965c095ea332bb8666f94 (diff)
downloadgo-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.go5
-rw-r--r--cmd/utils/cmd.go36
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
}