@@ -59,14 +59,28 @@ var RunCmd = &cobra.Command{
5959
6060 tracingEnabled := nodeConfig .Instrumentation .IsTracingEnabled ()
6161
62- executor , err := createExecutionClient (
63- cmd ,
64- datastore ,
65- tracingEnabled ,
66- logger .With ().Str ("module" , "engine_client" ).Logger (),
67- )
68- if err != nil {
69- return err
62+ var executor execution.Executor
63+ useGeth , _ := cmd .Flags ().GetBool (evm .FlagEVMInProcessGeth )
64+ if useGeth {
65+ executor , err = createGethExecutionClient (
66+ cmd ,
67+ datastore ,
68+ tracingEnabled ,
69+ logger .With ().Str ("module" , "geth_client" ).Logger (),
70+ )
71+ if err != nil {
72+ return err
73+ }
74+ } else {
75+ executor , err = createRethExecutionClient (
76+ cmd ,
77+ datastore ,
78+ tracingEnabled ,
79+ logger .With ().Str ("module" , "engine_client" ).Logger (),
80+ )
81+ if err != nil {
82+ return err
83+ }
7084 }
7185
7286 blobClient , err := blobrpc .NewClient (context .Background (), nodeConfig .DA .Address , nodeConfig .DA .AuthToken , "" )
@@ -202,34 +216,13 @@ func createSequencer(
202216 return sequencer , nil
203217}
204218
205- func createExecutionClient (cmd * cobra.Command , db datastore.Batching , tracingEnabled bool , logger zerolog.Logger ) (execution.Executor , error ) {
219+ func createRethExecutionClient (cmd * cobra.Command , db datastore.Batching , tracingEnabled bool , logger zerolog.Logger ) (execution.Executor , error ) {
206220 feeRecipientStr , err := cmd .Flags ().GetString (evm .FlagEvmFeeRecipient )
207221 if err != nil {
208222 return nil , fmt .Errorf ("failed to get '%s' flag: %w" , evm .FlagEvmFeeRecipient , err )
209223 }
210224 feeRecipient := common .HexToAddress (feeRecipientStr )
211225
212- useGeth , _ := cmd .Flags ().GetBool (evm .FlagEVMInProcessGeth )
213- if useGeth {
214- genesisPath , _ := cmd .Flags ().GetString (evm .FlagEVMGenesisPath )
215- if len (genesisPath ) == 0 {
216- return nil , fmt .Errorf ("genesis path must be provided when using in-process Geth" )
217- }
218-
219- genesisBz , err := os .ReadFile (genesisPath )
220- if err != nil {
221- return nil , fmt .Errorf ("failed to read genesis: %w" , err )
222- }
223-
224- var genesis core.Genesis
225- if err := json .Unmarshal (genesisBz , & genesis ); err != nil {
226- return nil , fmt .Errorf ("failed to unmarshal genesis: %w" , err )
227- }
228-
229- rpcAddress , _ := cmd .Flags ().GetString (evm .FlagEVMRPCAddress )
230- return evm .NewEngineExecutionClientWithGeth (& genesis , feeRecipient , db , rpcAddress , logger )
231- }
232-
233226 // Read execution client parameters from flags
234227 ethURL , err := cmd .Flags ().GetString (evm .FlagEvmEthURL )
235228 if err != nil {
@@ -272,6 +265,32 @@ func createExecutionClient(cmd *cobra.Command, db datastore.Batching, tracingEna
272265 return evm .NewEngineExecutionClient (ethURL , engineURL , jwtSecret , genesisHash , feeRecipient , db , tracingEnabled , logger )
273266}
274267
268+ func createGethExecutionClient (cmd * cobra.Command , db datastore.Batching , tracingEnabled bool , logger zerolog.Logger ) (execution.Executor , error ) {
269+ feeRecipientStr , err := cmd .Flags ().GetString (evm .FlagEvmFeeRecipient )
270+ if err != nil {
271+ return nil , fmt .Errorf ("failed to get '%s' flag: %w" , evm .FlagEvmFeeRecipient , err )
272+ }
273+ feeRecipient := common .HexToAddress (feeRecipientStr )
274+
275+ genesisPath , _ := cmd .Flags ().GetString (evm .FlagEVMGenesisPath )
276+ if len (genesisPath ) == 0 {
277+ return nil , fmt .Errorf ("genesis path must be provided when using in-process Geth" )
278+ }
279+
280+ genesisBz , err := os .ReadFile (genesisPath )
281+ if err != nil {
282+ return nil , fmt .Errorf ("failed to read genesis: %w" , err )
283+ }
284+
285+ var genesis core.Genesis
286+ if err := json .Unmarshal (genesisBz , & genesis ); err != nil {
287+ return nil , fmt .Errorf ("failed to unmarshal genesis: %w" , err )
288+ }
289+
290+ rpcAddress , _ := cmd .Flags ().GetString (evm .FlagEVMRPCAddress )
291+ return evm .NewEngineExecutionClientWithGeth (& genesis , feeRecipient , db , rpcAddress , logger )
292+ }
293+
275294// addFlags adds flags related to the EVM execution client
276295func addFlags (cmd * cobra.Command ) {
277296 cmd .Flags ().String (evm .FlagEvmEthURL , "http://localhost:8545" , "URL of the Ethereum JSON-RPC endpoint" )
@@ -284,4 +303,6 @@ func addFlags(cmd *cobra.Command) {
284303 cmd .Flags ().Bool (evm .FlagEVMInProcessGeth , false , "Use in-process Geth for EVM execution instead of external execution client" )
285304 cmd .Flags ().String (evm .FlagEVMGenesisPath , "" , "EVM genesis path for Geth" )
286305 cmd .Flags ().String (evm .FlagEVMRPCAddress , "" , "Address for in-process Geth JSON-RPC server (e.g., 127.0.0.1:8545)" )
306+
307+ cmd .MarkFlagsMutuallyExclusive (evm .FlagEVMInProcessGeth , evm .FlagEvmEthURL , evm .FlagEvmEngineURL , evm .FlagEvmJWTSecretFile , evm .FlagEvmGenesisHash )
287308}
0 commit comments