diff --git a/ethereum/flags.go b/ethereum/flags.go index 58220f4e6..7924dd7bf 100644 --- a/ethereum/flags.go +++ b/ethereum/flags.go @@ -3,11 +3,13 @@ package main import ( "flag" "fmt" + "log" "os" "os/user" "path" "github.com/ethereum/eth-go/ethlog" + "github.com/ethereum/eth-go/ethvm" ) var ( @@ -37,6 +39,7 @@ var ( Dump bool DumpHash string DumpNumber int + VmType int ) // flags specific to cli client @@ -59,6 +62,7 @@ func Init() { flag.PrintDefaults() } + flag.IntVar(&VmType, "vm", 0, "Virtual Machine type: 0-1: standard, debug") flag.StringVar(&Identifier, "id", "", "Custom client identifier") flag.StringVar(&KeyRing, "keyring", "", "identifier for keyring to use") flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)") @@ -91,5 +95,9 @@ func Init() { flag.Parse() + if VmType >= int(ethvm.MaxVmTy) { + log.Fatal("Invalid VM type ", VmType) + } + InputFile = flag.Arg(0) } diff --git a/ethereum/main.go b/ethereum/main.go index 6a9af6b96..b8f8ce39a 100644 --- a/ethereum/main.go +++ b/ethereum/main.go @@ -31,7 +31,7 @@ func main() { LogLevel = 0 } - utils.InitConfig(ConfigFile, Datadir, "ETH") + utils.InitConfig(VmType, ConfigFile, Datadir, "ETH") ethutil.Config.Diff = DiffTool ethutil.Config.DiffType = DiffType diff --git a/mist/debugger.go b/mist/debugger.go index 9d1de8c42..241635ebe 100644 --- a/mist/debugger.go +++ b/mist/debugger.go @@ -20,7 +20,7 @@ type DebuggerWindow struct { engine *qml.Engine lib *UiLib - vm *ethvm.Vm + vm *ethvm.DebugVm Db *Debugger state *ethstate.State @@ -37,7 +37,7 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow { win := component.CreateWindow(nil) - w := &DebuggerWindow{engine: engine, win: win, lib: lib, vm: ðvm.Vm{}} + w := &DebuggerWindow{engine: engine, win: win, lib: lib, vm: ðvm.DebugVm{}} w.Db = NewDebugger(w) return w @@ -135,8 +135,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data callerClosure := ethvm.NewClosure(ðstate.Message{}, account, contract, script, gas, gasPrice) env := utils.NewEnv(state, block, account.Address(), value) - vm := ethvm.New(env) - vm.Verbose = true + vm := ethvm.NewDebugVm(env) vm.Dbg = self.Db self.vm = vm diff --git a/mist/flags.go b/mist/flags.go index a56d689c0..5cf34c740 100644 --- a/mist/flags.go +++ b/mist/flags.go @@ -3,6 +3,7 @@ package main import ( "flag" "fmt" + "log" "os" "os/user" "path" @@ -11,6 +12,7 @@ import ( "bitbucket.org/kardianos/osext" "github.com/ethereum/eth-go/ethlog" + "github.com/ethereum/eth-go/ethvm" ) var ( @@ -35,6 +37,7 @@ var ( ConfigFile string DebugFile string LogLevel int + VmType int ) // flags specific to gui client @@ -78,6 +81,7 @@ func Init() { flag.PrintDefaults() } + flag.IntVar(&VmType, "vm", 0, "Virtual Machine type: 0-1: standard, debug") flag.StringVar(&Identifier, "id", "", "Custom client identifier") flag.StringVar(&KeyRing, "keyring", "", "identifier for keyring to use") flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)") @@ -101,4 +105,8 @@ func Init() { flag.StringVar(&AssetPath, "asset_path", defaultAssetPath(), "absolute path to GUI assets directory") flag.Parse() + + if VmType >= int(ethvm.MaxVmTy) { + log.Fatal("Invalid VM type ", VmType) + } } diff --git a/mist/main.go b/mist/main.go index 12f8681cf..54c4d4501 100644 --- a/mist/main.go +++ b/mist/main.go @@ -21,7 +21,7 @@ func run() error { // precedence: code-internal flag default < config file < environment variables < command line Init() // parsing command line - config := utils.InitConfig(ConfigFile, Datadir, "ETH") + config := utils.InitConfig(VmType, ConfigFile, Datadir, "ETH") utils.InitDataDir(Datadir) diff --git a/utils/cmd.go b/utils/cmd.go index 700542cae..060e8067b 100644 --- a/utils/cmd.go +++ b/utils/cmd.go @@ -118,9 +118,12 @@ func InitLogging(Datadir string, LogFile string, LogLevel int, DebugFile string) return sys } -func InitConfig(ConfigFile string, Datadir string, EnvPrefix string) *ethutil.ConfigManager { +func InitConfig(vmType int, ConfigFile string, Datadir string, EnvPrefix string) *ethutil.ConfigManager { InitDataDir(Datadir) - return ethutil.ReadConfig(ConfigFile, Datadir, EnvPrefix) + cfg := ethutil.ReadConfig(ConfigFile, Datadir, EnvPrefix) + cfg.VmType = vmType + + return cfg } func exit(err error) {