@@ -190,6 +190,11 @@ var (
190190 Usage : "Exits after block synchronisation completes" ,
191191 Category : flags .EthCategory ,
192192 }
193+ GenesisFlag = & cli.StringFlag {
194+ Name : "genesis" ,
195+ Usage : "Load genesis block and configuration from file at this path." ,
196+ Category : flags .EthCategory ,
197+ }
193198
194199 // Dump command options.
195200 IterativeOutputFlag = & cli.BoolFlag {
@@ -1593,7 +1598,7 @@ func setRequiredBlocks(ctx *cli.Context, cfg *ethconfig.Config) {
15931598// SetEthConfig applies eth-related command line flags to the config.
15941599func SetEthConfig (ctx * cli.Context , stack * node.Node , cfg * ethconfig.Config ) {
15951600 // Avoid conflicting network flags, don't allow network id override on preset networks
1596- flags .CheckExclusive (ctx , MainnetFlag , DeveloperFlag , SepoliaFlag , HoleskyFlag , HoodiFlag , NetworkIdFlag )
1601+ flags .CheckExclusive (ctx , MainnetFlag , DeveloperFlag , SepoliaFlag , HoleskyFlag , HoodiFlag , NetworkIdFlag , GenesisFlag )
15971602 flags .CheckExclusive (ctx , DeveloperFlag , ExternalSignerFlag ) // Can't use both ephemeral unlocked and external signer
15981603
15991604 // Set configurations from CLI flags
@@ -1778,8 +1783,6 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
17781783 case ctx .Bool (MainnetFlag .Name ):
17791784 cfg .NetworkId = 1
17801785 cfg .Genesis = core .DefaultGenesisBlock ()
1781- SetDNSDiscoveryDefaults (cfg , params .MainnetGenesisHash )
1782- case ctx .Bool (HoleskyFlag .Name ):
17831786 cfg .NetworkId = 17000
17841787 cfg .Genesis = core .DefaultHoleskyGenesisBlock ()
17851788 SetDNSDiscoveryDefaults (cfg , params .HoleskyGenesisHash )
@@ -1873,6 +1876,18 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
18731876 if ! ctx .IsSet (MinerGasPriceFlag .Name ) {
18741877 cfg .Miner .GasPrice = big .NewInt (1 )
18751878 }
1879+ case ctx .String (GenesisFlag .Name ) != "" :
1880+ f , err := os .Open (ctx .String (GenesisFlag .Name ))
1881+ if err != nil {
1882+ Fatalf ("Failed to read genesis file: %v" , err )
1883+ }
1884+ defer f .Close ()
1885+
1886+ genesis := new (core.Genesis )
1887+ if err := json .NewDecoder (f ).Decode (genesis ); err != nil {
1888+ Fatalf ("Invalid genesis file: %v" , err )
1889+ }
1890+ cfg .Genesis = genesis
18761891 default :
18771892 if cfg .NetworkId == 1 {
18781893 SetDNSDiscoveryDefaults (cfg , params .MainnetGenesisHash )
0 commit comments