aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/puppeth/wizard_genesis.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/puppeth/wizard_genesis.go')
-rw-r--r--cmd/puppeth/wizard_genesis.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/cmd/puppeth/wizard_genesis.go b/cmd/puppeth/wizard_genesis.go
index 43dae9c20..222fc2a7c 100644
--- a/cmd/puppeth/wizard_genesis.go
+++ b/cmd/puppeth/wizard_genesis.go
@@ -18,7 +18,9 @@ package main
import (
"bytes"
+ "encoding/json"
"fmt"
+ "io/ioutil"
"math/big"
"math/rand"
"time"
@@ -135,3 +137,53 @@ func (w *wizard) makeGenesis() {
// All done, store the genesis and flush to disk
w.conf.genesis = genesis
}
+
+// manageGenesis permits the modification of chain configuration parameters in
+// a genesis config and the export of the entire genesis spec.
+func (w *wizard) manageGenesis() {
+ // Figure out whether to modify or export the genesis
+ fmt.Println()
+ fmt.Println(" 1. Modify existing fork rules")
+ fmt.Println(" 2. Export genesis configuration")
+
+ choice := w.read()
+ switch {
+ case choice == "1":
+ // Fork rule updating requested, iterate over each fork
+ fmt.Println()
+ fmt.Printf("Which block should Homestead come into effect? (default = %v)\n", w.conf.genesis.Config.HomesteadBlock)
+ w.conf.genesis.Config.HomesteadBlock = w.readDefaultBigInt(w.conf.genesis.Config.HomesteadBlock)
+
+ fmt.Println()
+ fmt.Printf("Which block should EIP150 come into effect? (default = %v)\n", w.conf.genesis.Config.EIP150Block)
+ w.conf.genesis.Config.EIP150Block = w.readDefaultBigInt(w.conf.genesis.Config.EIP150Block)
+
+ fmt.Println()
+ fmt.Printf("Which block should EIP155 come into effect? (default = %v)\n", w.conf.genesis.Config.EIP155Block)
+ w.conf.genesis.Config.EIP155Block = w.readDefaultBigInt(w.conf.genesis.Config.EIP155Block)
+
+ fmt.Println()
+ fmt.Printf("Which block should EIP158 come into effect? (default = %v)\n", w.conf.genesis.Config.EIP158Block)
+ w.conf.genesis.Config.EIP158Block = w.readDefaultBigInt(w.conf.genesis.Config.EIP158Block)
+
+ fmt.Println()
+ fmt.Printf("Which block should Byzantium come into effect? (default = %v)\n", w.conf.genesis.Config.ByzantiumBlock)
+ w.conf.genesis.Config.ByzantiumBlock = w.readDefaultBigInt(w.conf.genesis.Config.ByzantiumBlock)
+
+ out, _ := json.MarshalIndent(w.conf.genesis.Config, "", " ")
+ fmt.Printf("Chain configuration updated:\n\n%s\n", out)
+
+ case choice == "2":
+ // Save whatever genesis configuration we currently have
+ fmt.Println()
+ fmt.Printf("Which file to save the genesis into? (default = %s.json)\n", w.network)
+ out, _ := json.MarshalIndent(w.conf.genesis, "", " ")
+ if err := ioutil.WriteFile(w.readDefaultString(fmt.Sprintf("%s.json", w.network)), out, 0644); err != nil {
+ log.Error("Failed to save genesis file", "err", err)
+ }
+ log.Info("Exported existing genesis block")
+
+ default:
+ log.Error("That's not something I can do")
+ }
+}