From f04b3a6f293ef15151dc040183ab74ef5ce54d2a Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke Date: Sun, 6 Sep 2015 15:46:54 +0200 Subject: [PATCH] cmd/geth, cmd/utils, eth: added dev mode flag Dev mode enabled some debugging flags such as: * VM debugging mode * Simpler proof of work * Whisper enabled by default * Datadir to a tmp datadir * Maxpeers set to 0 * Gas price of 0 * Random listen port --- cmd/geth/main.go | 1 + cmd/utils/flags.go | 33 ++++++++++++++++++++++++++++++++- eth/backend.go | 15 +++++++++------ 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index aacb588fe..f72f69791 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -308,6 +308,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso utils.IPCPathFlag, utils.ExecFlag, utils.WhisperEnabledFlag, + utils.DevModeFlag, utils.VMDebugFlag, utils.VMForceJitFlag, utils.VMJitCacheFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 80805ca22..95fb649e6 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -121,6 +121,10 @@ var ( Name: "genesis", Usage: "Inserts/Overwrites the genesis block (json format)", } + DevModeFlag = cli.BoolFlag{ + Name: "dev", + Usage: "Developer mode. This mode creates a private network and sets several debugging flags", + } IdentityFlag = cli.StringFlag{ Name: "identity", Usage: "Custom node name", @@ -410,7 +414,7 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config { glog.V(logger.Error).Infoln("WARNING: No etherbase set and no accounts found as default") } - return ð.Config{ + cfg := ð.Config{ Name: common.MakeName(clientID, version), DataDir: ctx.GlobalString(DataDirFlag.Name), GenesisNonce: ctx.GlobalInt(GenesisNonceFlag.Name), @@ -447,6 +451,33 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config { SolcPath: ctx.GlobalString(SolcPathFlag.Name), AutoDAG: ctx.GlobalBool(AutoDAGFlag.Name) || ctx.GlobalBool(MiningEnabledFlag.Name), } + + if ctx.GlobalBool(DevModeFlag.Name) { + if !ctx.GlobalIsSet(VMDebugFlag.Name) { + cfg.VmDebug = true + } + if !ctx.GlobalIsSet(MaxPeersFlag.Name) { + cfg.MaxPeers = 0 + } + if !ctx.GlobalIsSet(GasPriceFlag.Name) { + cfg.GasPrice = new(big.Int) + } + if !ctx.GlobalIsSet(ListenPortFlag.Name) { + cfg.Port = "0" // auto port + } + if !ctx.GlobalIsSet(WhisperEnabledFlag.Name) { + cfg.Shh = true + } + if !ctx.GlobalIsSet(DataDirFlag.Name) { + cfg.DataDir = os.TempDir() + "/ethereum_dev_mode" + } + cfg.PowTest = true + cfg.DevMode = true + + glog.V(logger.Info).Infoln("dev mode enabled") + } + + return cfg } // SetupLogger configures glog from the logging-related command line flags. diff --git a/eth/backend.go b/eth/backend.go index ad2a2c1f9..639aaaaec 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -73,6 +73,8 @@ var ( ) type Config struct { + DevMode bool + Name string NetworkId int GenesisNonce int @@ -303,16 +305,17 @@ func New(config *Config) (*Ethereum, error) { glog.V(logger.Info).Infof("Successfully wrote genesis block. New genesis hash = %x\n", block.Hash()) } - if config.Olympic { + // different modes + switch { + case config.Olympic: + glog.V(logger.Error).Infoln("Starting Olympic network") + fallthrough + case config.DevMode: _, err := core.WriteTestNetGenesisBlock(chainDb, 42) if err != nil { return nil, err } - glog.V(logger.Error).Infoln("Starting Olympic network") - } - - // This is for testing only. - if config.GenesisBlock != nil { + case config.GenesisBlock != nil: // This is for testing only. core.WriteBlock(chainDb, config.GenesisBlock) core.WriteHead(chainDb, config.GenesisBlock) }