|
|
|
@ -103,17 +103,14 @@ Use "ethereum dump 0" to dump the genesis block. |
|
|
|
|
// initGenesis will initialise the given JSON format genesis file and writes it as
|
|
|
|
|
// the zero'd block (i.e. genesis) or will fail hard if it can't succeed.
|
|
|
|
|
func initGenesis(ctx *cli.Context) error { |
|
|
|
|
// 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") |
|
|
|
|
utils.Fatalf("Must supply path to genesis JSON file") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
stack := makeFullNode(ctx) |
|
|
|
|
chaindb := utils.MakeChainDatabase(ctx, stack) |
|
|
|
|
|
|
|
|
|
file, err := os.Open(genesisPath) |
|
|
|
|
if err != nil { |
|
|
|
|
utils.Fatalf("failed to read genesis file: %v", err) |
|
|
|
|
utils.Fatalf("Failed to read genesis file: %v", err) |
|
|
|
|
} |
|
|
|
|
defer file.Close() |
|
|
|
|
|
|
|
|
@ -121,12 +118,19 @@ func initGenesis(ctx *cli.Context) error { |
|
|
|
|
if err := json.NewDecoder(file).Decode(genesis); err != nil { |
|
|
|
|
utils.Fatalf("invalid genesis file: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Open an initialise both full and light databases
|
|
|
|
|
stack := makeFullNode(ctx) |
|
|
|
|
for _, name := range []string{"chaindata", "lightchaindata"} { |
|
|
|
|
chaindb, err := stack.OpenDatabase(name, 0, 0) |
|
|
|
|
if err != nil { |
|
|
|
|
utils.Fatalf("Failed to open database: %v", err) |
|
|
|
|
} |
|
|
|
|
_, hash, err := core.SetupGenesisBlock(chaindb, genesis) |
|
|
|
|
if err != nil { |
|
|
|
|
utils.Fatalf("failed to write genesis block: %v", err) |
|
|
|
|
utils.Fatalf("Failed to write genesis block: %v", err) |
|
|
|
|
} |
|
|
|
|
log.Info("Successfully wrote genesis state", "database", name, "hash", hash) |
|
|
|
|
} |
|
|
|
|
log.Info("Successfully wrote genesis state", "hash", hash) |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -245,24 +249,29 @@ func exportChain(ctx *cli.Context) error { |
|
|
|
|
|
|
|
|
|
func removeDB(ctx *cli.Context) error { |
|
|
|
|
stack, _ := makeConfigNode(ctx) |
|
|
|
|
dbdir := stack.ResolvePath(utils.ChainDbName(ctx)) |
|
|
|
|
|
|
|
|
|
for _, name := range []string{"chaindata", "lightchaindata"} { |
|
|
|
|
// Ensure the database exists in the first place
|
|
|
|
|
logger := log.New("database", name) |
|
|
|
|
|
|
|
|
|
dbdir := stack.ResolvePath(name) |
|
|
|
|
if !common.FileExist(dbdir) { |
|
|
|
|
fmt.Println(dbdir, "does not exist") |
|
|
|
|
return nil |
|
|
|
|
logger.Info("Database doesn't exist, skipping", "path", dbdir) |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Confirm removal and execute
|
|
|
|
|
fmt.Println(dbdir) |
|
|
|
|
confirm, err := console.Stdin.PromptConfirm("Remove this database?") |
|
|
|
|
switch { |
|
|
|
|
case err != nil: |
|
|
|
|
utils.Fatalf("%v", err) |
|
|
|
|
case !confirm: |
|
|
|
|
fmt.Println("Operation aborted") |
|
|
|
|
logger.Warn("Database deletion aborted") |
|
|
|
|
default: |
|
|
|
|
fmt.Println("Removing...") |
|
|
|
|
start := time.Now() |
|
|
|
|
os.RemoveAll(dbdir) |
|
|
|
|
fmt.Printf("Removed in %v\n", time.Since(start)) |
|
|
|
|
logger.Info("Database successfully deleted", "elapsed", common.PrettyDuration(time.Since(start))) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|