From fede8847a3d53797fc09f7efc5ac71646a51e76d Mon Sep 17 00:00:00 2001 From: nrakochy Date: Thu, 21 Dec 2017 12:29:36 -0600 Subject: [PATCH] Moved GenesisFlag to utils to use --prestate flag for loading JSON file in Rinkeby and Testnet --- cmd/evm/main.go | 4 ---- cmd/evm/runner.go | 23 +---------------------- cmd/geth/main.go | 1 + cmd/utils/flags.go | 40 ++++++++++++++++++++++++++++++++++++++-- 4 files changed, 40 insertions(+), 28 deletions(-) diff --git a/cmd/evm/main.go b/cmd/evm/main.go index 6c39cf8b88..a43679ea3f 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -90,10 +90,6 @@ var ( Name: "nogasmetering", Usage: "disable gas metering", } - GenesisFlag = cli.StringFlag{ - Name: "prestate", - Usage: "JSON file with prestate (genesis) config", - } MachineFlag = cli.BoolFlag{ Name: "json", Usage: "output trace logs in machine readable format (json)", diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go index 96de0c76ac..c374384a68 100644 --- a/cmd/evm/runner.go +++ b/cmd/evm/runner.go @@ -48,27 +48,6 @@ var runCommand = cli.Command{ Description: `The run command runs arbitrary EVM code.`, } -// readGenesis will read the given JSON format genesis file and return -// the initialized Genesis structure -func readGenesis(genesisPath string) *core.Genesis { - // Make sure we have a valid genesis JSON - //genesisPath := ctx.Args().First() - if len(genesisPath) == 0 { - utils.Fatalf("Must supply path to genesis JSON file") - } - file, err := os.Open(genesisPath) - if err != nil { - utils.Fatalf("Failed to read genesis file: %v", err) - } - defer file.Close() - - genesis := new(core.Genesis) - if err := json.NewDecoder(file).Decode(genesis); err != nil { - utils.Fatalf("invalid genesis file: %v", err) - } - return genesis -} - func runCmd(ctx *cli.Context) error { glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) glogger.Verbosity(log.Lvl(ctx.GlobalInt(VerbosityFlag.Name))) @@ -95,7 +74,7 @@ func runCmd(ctx *cli.Context) error { debugLogger = vm.NewStructLogger(logconfig) } if ctx.GlobalString(GenesisFlag.Name) != "" { - gen := readGenesis(ctx.GlobalString(GenesisFlag.Name)) + gen := utils.ReadGenesis(ctx.GlobalString(GenesisFlag.Name)) _, statedb = gen.ToBlock() chainConfig = gen.Config } else { diff --git a/cmd/geth/main.go b/cmd/geth/main.go index bdb7fad62a..7485e0201b 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -118,6 +118,7 @@ var ( utils.GpoBlocksFlag, utils.GpoPercentileFlag, utils.ExtraDataFlag, + utils.GenesisFlag, configFileFlag, } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 30edf199c9..2da9e60632 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -19,6 +19,7 @@ package utils import ( "crypto/ecdsa" + "encoding/json" "fmt" "io/ioutil" "math/big" @@ -146,6 +147,10 @@ var ( Name: "dev.period", Usage: "Block period to use in developer mode (0 = mine only if transaction pending)", } + GenesisFlag = cli.StringFlag{ + Name: "prestate", + Usage: "JSON file with prestate (genesis) config", + } IdentityFlag = cli.StringFlag{ Name: "identity", Usage: "Custom node name", @@ -519,6 +524,27 @@ var ( } ) +// readGenesis will read the given JSON format genesis file and return +// the initialized Genesis structure +func ReadGenesis(genesisPath string) *core.Genesis { + // Make sure we have a valid genesis JSON + //genesisPath := ctx.Args().First() + if len(genesisPath) == 0 { + Fatalf("Must supply path to genesis JSON file") + } + file, err := os.Open(genesisPath) + if err != nil { + Fatalf("Failed to read genesis file: %v", err) + } + defer file.Close() + + genesis := new(core.Genesis) + if err := json.NewDecoder(file).Decode(genesis); err != nil { + Fatalf("invalid genesis file: %v", err) + } + return genesis +} + // MakeDataDir retrieves the currently requested data directory, terminating // if none (or the empty string) is specified. If the node is starting a testnet, // the a subdirectory of the specified datadir will be used. @@ -1036,12 +1062,20 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { if !ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = 3 } - cfg.Genesis = core.DefaultTestnetGenesisBlock() + if ctx.GlobalString(GenesisFlag.Name) != "" { + cfg.Genesis = ReadGenesis(ctx.GlobalString(GenesisFlag.Name)) + } else { + cfg.Genesis = core.DefaultTestnetGenesisBlock() + } case ctx.GlobalBool(RinkebyFlag.Name): if !ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = 4 } - cfg.Genesis = core.DefaultRinkebyGenesisBlock() + if ctx.GlobalString(GenesisFlag.Name) != "" { + cfg.Genesis = ReadGenesis(ctx.GlobalString(GenesisFlag.Name)) + } else { + cfg.Genesis = core.DefaultRinkebyGenesisBlock() + } case ctx.GlobalBool(DeveloperFlag.Name): // Create new developer account or reuse existing one var ( @@ -1161,6 +1195,8 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { func MakeGenesis(ctx *cli.Context) *core.Genesis { var genesis *core.Genesis switch { + case ctx.GlobalBool(GenesisFlag.Name): + genesis = ReadGenesis(ctx.GlobalString(GenesisFlag.Name)) case ctx.GlobalBool(TestnetFlag.Name): genesis = core.DefaultTestnetGenesisBlock() case ctx.GlobalBool(RinkebyFlag.Name):