diff --git a/cmd/geth/main.go b/cmd/geth/main.go index aacb588feb63010fec560d2dec328f631f21af19..f72f697914c9630885035c159022555a9aa13471 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 80805ca22838d4d7f4692f5648baab0d88033791..95fb649e638fda7c4240ee229024cc52863e2ea0 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 ad2a2c1f94e6111b0728d37f5eb5bd97aee36c6a..639aaaaec9ecb73b9ca2f85b063943b73f64c4e4 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) }