diff --git a/README.md b/README.md index 2d4b128fc..8cdcfe2a6 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Status](http://cpt-obvious.ethercasts.com:8010/buildstatusimage?builder=go-ether Ethereum Go Client © 2014 Jeffrey Wilcke. -Current state: Proof of Concept 0.6.4. +Current state: Proof of Concept 0.6.5. For the development package please see the [eth-go package](https://github.com/ethereum/eth-go). diff --git a/ethereal/errors.go b/ethereal/errors.go new file mode 100644 index 000000000..409b7a281 --- /dev/null +++ b/ethereal/errors.go @@ -0,0 +1,36 @@ +package main + +import ( + "fmt" + "os" + + "gopkg.in/qml.v1" +) + +func ErrorWindow(err error) { + engine := qml.NewEngine() + component, e := engine.LoadString("local", qmlErr) + if e != nil { + fmt.Println("err:", err) + os.Exit(1) + } + + win := component.CreateWindow(nil) + win.Root().ObjectByName("label").Set("text", err.Error()) + win.Show() + win.Wait() +} + +const qmlErr = ` +import QtQuick 2.0; import QtQuick.Controls 1.0; +ApplicationWindow { + width: 600; height: 150; + flags: Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint + title: "Error" + Text { + x: parent.width / 2 - this.width / 2; + y: parent.height / 2 - this.height / 2; + objectName: "label"; + } +} +` diff --git a/ethereal/main.go b/ethereal/main.go index 4cb8630e8..3729dbdaf 100644 --- a/ethereal/main.go +++ b/ethereal/main.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "os" "runtime" @@ -12,7 +13,7 @@ import ( const ( ClientIdentifier = "Ethereal" - Version = "0.6.4" + Version = "0.6.5" ) var ethereum *eth.Ethereum @@ -28,6 +29,23 @@ func run() error { utils.InitLogging(Datadir, LogFile, LogLevel, DebugFile) db := utils.NewDatabase() + err := utils.DBSanityCheck(db) + if err != nil { + engine := qml.NewEngine() + component, e := engine.LoadString("local", qmlErr) + if e != nil { + fmt.Println("err:", err) + os.Exit(1) + } + + win := component.CreateWindow(nil) + win.Root().ObjectByName("label").Set("text", err.Error()) + win.Show() + win.Wait() + + ErrorWindow(err) + os.Exit(1) + } keyManager := utils.NewKeyManager(KeyStore, Datadir, db) diff --git a/ethereum/main.go b/ethereum/main.go index b7c8ea1e7..937a2b399 100644 --- a/ethereum/main.go +++ b/ethereum/main.go @@ -13,7 +13,7 @@ import ( const ( ClientIdentifier = "Ethereum(G)" - Version = "0.6.4" + Version = "0.6.5" ) var logger = ethlog.NewLogger("CLI") diff --git a/utils/cmd.go b/utils/cmd.go index cda735c27..3f3948d60 100644 --- a/utils/cmd.go +++ b/utils/cmd.go @@ -80,6 +80,16 @@ func confirm(message string) bool { return r == "y" } +func DBSanityCheck(db ethutil.Database) error { + d, _ := db.Get([]byte("ProtocolVersion")) + protov := ethutil.NewValue(d).Uint() + if protov != eth.ProtocolVersion && protov != 0 { + return fmt.Errorf("Database version mismatch. Protocol(%d / %d). `rm -rf %s`", protov, eth.ProtocolVersion, ethutil.Config.ExecPath+"/database") + } + + return nil +} + func InitDataDir(Datadir string) { _, err := os.Stat(Datadir) if err != nil { @@ -112,7 +122,6 @@ func InitConfig(ConfigFile string, Datadir string, EnvPrefix string) *ethutil.Co func exit(err error) { status := 0 if err != nil { - fmt.Println(err) logger.Errorln("Fatal: ", err) status = 1 }