@ -61,9 +61,10 @@ It expects the genesis file as argument.`,
Name : "dumpgenesis" ,
Usage : "Dumps genesis block JSON configuration to stdout" ,
ArgsUsage : "" ,
Flags : utils . NetworkFlags ,
Flags : append ( [ ] cli . Flag { utils . DataDirFlag } , utils . NetworkFlags ... ) ,
Description : `
The dumpgenesis command dumps the genesis block configuration in JSON format to stdout . ` ,
The dumpgenesis command prints the genesis configuration of the network preset
if one is set . Otherwise it prints the genesis from the datadir . ` ,
}
importCommand = & cli . Command {
Action : importChain ,
@ -203,14 +204,39 @@ func initGenesis(ctx *cli.Context) error {
}
func dumpGenesis ( ctx * cli . Context ) error {
// TODO(rjl493456442) support loading from the custom datadir
genesis := utils . MakeGenesis ( ctx )
if genesis == nil {
genesis = core . DefaultGenesisBlock ( )
// if there is a testnet preset enabled, dump that
if utils . IsNetworkPreset ( ctx ) {
genesis := utils . MakeGenesis ( ctx )
if err := json . NewEncoder ( os . Stdout ) . Encode ( genesis ) ; err != nil {
utils . Fatalf ( "could not encode genesis: %s" , err )
}
return nil
}
// dump whatever already exists in the datadir
stack , _ := makeConfigNode ( ctx )
for _ , name := range [ ] string { "chaindata" , "lightchaindata" } {
db , err := stack . OpenDatabase ( name , 0 , 0 , "" , true )
if err != nil {
if ! os . IsNotExist ( err ) {
return err
}
continue
}
genesis , err := core . ReadGenesis ( db )
if err != nil {
utils . Fatalf ( "failed to read genesis: %s" , err )
}
db . Close ( )
if err := json . NewEncoder ( os . Stdout ) . Encode ( * genesis ) ; err != nil {
utils . Fatalf ( "could not encode stored genesis: %s" , err )
}
return nil
}
if err := json . NewEncoder ( os . Stdout ) . Encode ( genesis ) ; err != nil {
utils . Fatalf ( "could not encode genesis" )
if ctx . IsSet ( utils . DataDirFlag . Name ) {
utils . Fatalf ( "no existing datadir at %s" , stack . Config ( ) . DataDir )
}
utils . Fatalf ( "no network preset provided. no exisiting genesis in the default datadir" )
return nil
}