Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/evm/cmd/rollback.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/ethereum/go-ethereum/common"
ds "github.com/ipfs/go-datastore"
"github.com/rs/zerolog"
"github.com/spf13/cobra"

goheaderstore "github.com/celestiaorg/go-header/store"
Expand Down Expand Up @@ -166,5 +167,5 @@ func createRollbackEngineClient(cmd *cobra.Command, db ds.Batching) (*evm.Engine
return nil, fmt.Errorf("JWT secret file '%s' is empty", jwtSecretFile)
}

return evm.NewEngineExecutionClient(ethURL, engineURL, jwtSecret, common.Hash{}, common.Address{}, db, false)
return evm.NewEngineExecutionClient(ethURL, engineURL, jwtSecret, common.Hash{}, common.Address{}, db, false, zerolog.Nop())
}
78 changes: 64 additions & 14 deletions apps/evm/cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ package cmd
import (
"bytes"
"context"
"encoding/json"
"fmt"
"os"
"path/filepath"
"time"

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ipfs/go-datastore"
"github.com/rs/zerolog"
"github.com/spf13/cobra"
Expand Down Expand Up @@ -56,9 +58,28 @@ var RunCmd = &cobra.Command{
}

tracingEnabled := nodeConfig.Instrumentation.IsTracingEnabled()
executor, err := createExecutionClient(cmd, datastore, tracingEnabled)
if err != nil {
return err

var executor execution.Executor
useGeth, _ := cmd.Flags().GetBool(evm.FlagEVMInProcessGeth)
if useGeth {
executor, err = createGethExecutionClient(
cmd,
datastore,
logger.With().Str("module", "geth_client").Logger(),
)
if err != nil {
return err
}
} else {
executor, err = createRethExecutionClient(
cmd,
datastore,
tracingEnabled,
logger.With().Str("module", "engine_client").Logger(),
)
if err != nil {
return err
}
}

blobClient, err := blobrpc.NewClient(context.Background(), nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
Expand All @@ -67,12 +88,6 @@ var RunCmd = &cobra.Command{
}

daClient := block.NewDAClient(blobClient, nodeConfig, logger)

// Attach logger to the EVM engine client if available
if ec, ok := executor.(*evm.EngineClient); ok {
ec.SetLogger(logger.With().Str("module", "engine_client").Logger())
}

headerNamespace := da.NamespaceFromString(nodeConfig.DA.GetNamespace())
dataNamespace := da.NamespaceFromString(nodeConfig.DA.GetDataNamespace())

Expand Down Expand Up @@ -198,7 +213,13 @@ func createSequencer(
return sequencer, nil
}

func createExecutionClient(cmd *cobra.Command, db datastore.Batching, tracingEnabled bool) (execution.Executor, error) {
func createRethExecutionClient(cmd *cobra.Command, db datastore.Batching, tracingEnabled bool, logger zerolog.Logger) (execution.Executor, error) {
feeRecipientStr, err := cmd.Flags().GetString(evm.FlagEvmFeeRecipient)
if err != nil {
return nil, fmt.Errorf("failed to get '%s' flag: %w", evm.FlagEvmFeeRecipient, err)
}
feeRecipient := common.HexToAddress(feeRecipientStr)

// Read execution client parameters from flags
ethURL, err := cmd.Flags().GetString(evm.FlagEvmEthURL)
if err != nil {
Expand Down Expand Up @@ -234,16 +255,37 @@ func createExecutionClient(cmd *cobra.Command, db datastore.Batching, tracingEna
if err != nil {
return nil, fmt.Errorf("failed to get '%s' flag: %w", evm.FlagEvmGenesisHash, err)
}

// Convert string parameters to Ethereum types
genesisHash := common.HexToHash(genesisHashStr)

return evm.NewEngineExecutionClient(ethURL, engineURL, jwtSecret, genesisHash, feeRecipient, db, tracingEnabled, logger)
}

func createGethExecutionClient(cmd *cobra.Command, db datastore.Batching, logger zerolog.Logger) (execution.Executor, error) {
feeRecipientStr, err := cmd.Flags().GetString(evm.FlagEvmFeeRecipient)
if err != nil {
return nil, fmt.Errorf("failed to get '%s' flag: %w", evm.FlagEvmFeeRecipient, err)
}

// Convert string parameters to Ethereum types
genesisHash := common.HexToHash(genesisHashStr)
feeRecipient := common.HexToAddress(feeRecipientStr)

return evm.NewEngineExecutionClient(ethURL, engineURL, jwtSecret, genesisHash, feeRecipient, db, tracingEnabled)
genesisPath, _ := cmd.Flags().GetString(evm.FlagEVMGenesisPath)
if len(genesisPath) == 0 {
return nil, fmt.Errorf("genesis path must be provided when using in-process Geth")
}

genesisBz, err := os.ReadFile(genesisPath)
if err != nil {
return nil, fmt.Errorf("failed to read genesis: %w", err)
}

var genesis core.Genesis
if err := json.Unmarshal(genesisBz, &genesis); err != nil {
return nil, fmt.Errorf("failed to unmarshal genesis: %w", err)
}

rpcAddress, _ := cmd.Flags().GetString(evm.FlagEVMRPCAddress)
return evm.NewEngineExecutionClientWithGeth(&genesis, feeRecipient, db, rpcAddress, logger)
}

// addFlags adds flags related to the EVM execution client
Expand All @@ -254,4 +296,12 @@ func addFlags(cmd *cobra.Command) {
cmd.Flags().String(evm.FlagEvmGenesisHash, "", "Hash of the genesis block")
cmd.Flags().String(evm.FlagEvmFeeRecipient, "", "Address that will receive transaction fees")
cmd.Flags().String(flagForceInclusionServer, "", "Address for force inclusion API server (e.g. 127.0.0.1:8547). If set, enables the server for direct DA submission")
cmd.Flags().Bool(evm.FlagEVMInProcessGeth, false, "Use in-process Geth for EVM execution instead of external execution client")
cmd.Flags().String(evm.FlagEVMGenesisPath, "", "EVM genesis path for Geth")
cmd.Flags().String(evm.FlagEVMRPCAddress, "", "Address for in-process Geth JSON-RPC server (e.g., 127.0.0.1:8545)")

cmd.MarkFlagsMutuallyExclusive(evm.FlagEVMInProcessGeth, evm.FlagEvmEthURL)
cmd.MarkFlagsMutuallyExclusive(evm.FlagEVMInProcessGeth, evm.FlagEvmEngineURL)
cmd.MarkFlagsMutuallyExclusive(evm.FlagEVMInProcessGeth, evm.FlagEvmJWTSecretFile)
cmd.MarkFlagsMutuallyExclusive(evm.FlagEVMInProcessGeth, evm.FlagEvmGenesisHash)
}
4 changes: 4 additions & 0 deletions apps/evm/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ require (
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/VictoriaMetrics/fastcache v1.13.0 // indirect
github.com/benbjohnson/clock v1.3.5 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bits-and-blooms/bitset v1.20.0 // indirect
Expand All @@ -47,6 +48,7 @@ require (
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/emicklei/dot v1.6.2 // indirect
github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect
github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect
github.com/ethereum/go-verkle v0.2.2 // indirect
github.com/ferranbt/fastssz v0.1.4 // indirect
github.com/filecoin-project/go-clock v0.1.0 // indirect
Expand All @@ -72,6 +74,7 @@ require (
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/holiman/bloomfilter/v2 v2.0.3 // indirect
github.com/holiman/uint256 v1.3.2 // indirect
github.com/huin/goupnp v1.3.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
Expand Down Expand Up @@ -165,6 +168,7 @@ require (
github.com/stretchr/testify v1.11.1 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
Expand Down
Loading
Loading