Skip to content
Closed
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