7272)
7373
7474func makeChainConfig (ctx * cli.Context ) lightClientConfig {
75- utils .CheckExclusive (ctx , utils .MainnetFlag , utils .GoerliFlag , utils .SepoliaFlag )
76- customConfig := ctx .IsSet (utils .BeaconConfigFlag .Name ) || ctx .IsSet (utils .BeaconGenesisRootFlag .Name ) || ctx .IsSet (utils .BeaconGenesisTimeFlag .Name )
7775 var config lightClientConfig
76+ customConfig := ctx .IsSet (utils .BeaconConfigFlag .Name )
77+ utils .CheckExclusive (ctx , utils .MainnetFlag , utils .GoerliFlag , utils .SepoliaFlag , utils .BeaconConfigFlag )
7878 switch {
7979 case ctx .Bool (utils .MainnetFlag .Name ):
8080 config = MainnetConfig
@@ -87,24 +87,37 @@ func makeChainConfig(ctx *cli.Context) lightClientConfig {
8787 config = MainnetConfig
8888 }
8989 }
90- if customConfig && config .Forks != nil {
91- utils .Fatalf ("Cannot use custom beacon chain config flags in combination with pre-defined network config" )
92- }
93- if ctx .IsSet (utils .BeaconGenesisRootFlag .Name ) {
90+ // Genesis root and time should always be specified together with custom chain config
91+ if customConfig {
92+ if ! ctx .IsSet (utils .BeaconGenesisRootFlag .Name ) {
93+ utils .Fatalf ("Custom beacon chain config is specified but genesis root is missing" )
94+ }
95+ if ! ctx .IsSet (utils .BeaconGenesisTimeFlag .Name ) {
96+ utils .Fatalf ("Custom beacon chain config is specified but genesis time is missing" )
97+ }
98+ if ! ctx .IsSet (utils .BeaconCheckpointFlag .Name ) {
99+ utils .Fatalf ("Custom beacon chain config is specified but checkpoint is missing" )
100+ }
101+ config .ChainConfig = & types.ChainConfig {
102+ GenesisTime : ctx .Uint64 (utils .BeaconGenesisTimeFlag .Name ),
103+ }
94104 if c , err := hexutil .Decode (ctx .String (utils .BeaconGenesisRootFlag .Name )); err == nil && len (c ) <= 32 {
95105 copy (config .GenesisValidatorsRoot [:len (c )], c )
96106 } else {
97107 utils .Fatalf ("Invalid hex string" , "beacon.genesis.gvroot" , ctx .String (utils .BeaconGenesisRootFlag .Name ), "error" , err )
98108 }
99- }
100- if ctx .IsSet (utils .BeaconGenesisTimeFlag .Name ) {
101- config .GenesisTime = ctx .Uint64 (utils .BeaconGenesisTimeFlag .Name )
102- }
103- if ctx .IsSet (utils .BeaconConfigFlag .Name ) {
104109 if err := config .ChainConfig .LoadForks (ctx .String (utils .BeaconConfigFlag .Name )); err != nil {
105110 utils .Fatalf ("Could not load beacon chain config file" , "file name" , ctx .String (utils .BeaconConfigFlag .Name ), "error" , err )
106111 }
112+ } else {
113+ if ctx .IsSet (utils .BeaconGenesisRootFlag .Name ) {
114+ utils .Fatalf ("Genesis root is specified but custom beacon chain config is missing" )
115+ }
116+ if ctx .IsSet (utils .BeaconGenesisTimeFlag .Name ) {
117+ utils .Fatalf ("Genesis time is specified but custom beacon chain config is missing" )
118+ }
107119 }
120+ // Checkpoint is required with custom chain config and is optional with pre-defined config
108121 if ctx .IsSet (utils .BeaconCheckpointFlag .Name ) {
109122 if c , err := hexutil .Decode (ctx .String (utils .BeaconCheckpointFlag .Name )); err == nil && len (c ) <= 32 {
110123 copy (config .Checkpoint [:len (c )], c )
0 commit comments