Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
4ccd63c
feat: support for multi gRPC query clients serve with old binary
mmsqe Nov 10, 2025
3807a34
apply
mmsqe Nov 10, 2025
42f5da6
cleanup
mmsqe Nov 11, 2025
c068e44
fix
mmsqe Nov 11, 2025
744a04d
estimate by height
mmsqe Nov 12, 2025
7e05c8a
Merge remote-tracking branch 'origin/main' into multi_grpc
mmsqe Nov 12, 2025
72a369f
Merge branch 'main' into multi_grpc
mmsqe Nov 13, 2025
c9528b5
fix host
mmsqe Nov 13, 2025
60f19b2
Merge branch 'main' into multi_grpc
aljo242 Nov 14, 2025
4352b11
make use of sdk
mmsqe Nov 17, 2025
2cb8a97
test has mock client
mmsqe Nov 17, 2025
a59d455
call setupBackupGRPCConnections internally
mmsqe Nov 18, 2025
f59044c
Merge remote-tracking branch 'origin/main' into multi_grpc
mmsqe Nov 18, 2025
cd1a436
StartGrpcServer
mmsqe Nov 18, 2025
7e92410
align invoke
mmsqe Nov 18, 2025
953ab5a
rename
mmsqe Nov 19, 2025
036fd48
bump deps
mmsqe Nov 19, 2025
fc3b798
Merge remote-tracking branch 'origin/main' into multi_grpc
mmsqe Nov 19, 2025
e94473a
fix lint later
mmsqe Nov 19, 2025
5172e28
mod tidy
mmsqe Nov 19, 2025
8987a8f
Merge remote-tracking branch 'origin/main' into multi_grpc
mmsqe Nov 19, 2025
7b37cb1
Merge branch 'main' into multi_grpc
aljo242 Nov 21, 2025
978a977
Merge remote-tracking branch 'origin/main' into multi_grpc
mmsqe Nov 22, 2025
ae505a3
Merge branch 'main' into multi_grpc
aljo242 Nov 29, 2025
79aea6d
Merge branch 'main' into multi_grpc
mmsqe Dec 1, 2025
f590173
Merge branch 'main' into multi_grpc
mmsqe Dec 2, 2025
78941cf
Merge branch 'main' into multi_grpc
aljo242 Dec 10, 2025
37f868a
Merge remote-tracking branch 'origin/main' into multi_grpc
mmsqe Dec 17, 2025
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

- [\#589](https://github.com/cosmos/evm/pull/589) Remove parallelization blockers via migration from transient to object store, refactoring of gas, indexing, and bloom utilities.
- [\#768](https://github.com/cosmos/evm/pull/768) Added ICS-02 Client Router precompile
- [\#815](https://github.com/cosmos/evm/pull/815) Support for multi gRPC query clients serve with old binary.

### BUG FIXES

Expand Down
8 changes: 5 additions & 3 deletions evmd/tests/network/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

"github.com/ethereum/go-ethereum/ethclient"
"golang.org/x/sync/errgroup"
"google.golang.org/grpc"

cmtcfg "github.com/cometbft/cometbft/config"
tmos "github.com/cometbft/cometbft/libs/os"
Expand Down Expand Up @@ -110,15 +111,17 @@ func startInProcess(cfg Config, val *Validator) error {
}

if val.AppConfig.GRPC.Enable {
grpcSrv, err := servergrpc.NewGRPCServer(val.ClientCtx, app, val.AppConfig.GRPC)
grpcLogger := logger.With(log.ModuleKey, "grpc-server")
var grpcSrv *grpc.Server
grpcSrv, val.ClientCtx, err = servergrpc.NewGRPCServerAndContext(val.ClientCtx, app, val.AppConfig.GRPC, grpcLogger)
if err != nil {
return err
}

// Start the gRPC server in a goroutine. Note, the provided ctx will ensure
// that the server is gracefully shut down.
val.errGroup.Go(func() error {
return servergrpc.StartGRPCServer(ctx, logger.With(log.ModuleKey, "grpc-server"), val.AppConfig.GRPC, grpcSrv)
return servergrpc.StartGRPCServer(ctx, grpcLogger, val.AppConfig.GRPC, grpcSrv)
})

val.grpc = grpcSrv
Expand All @@ -128,7 +131,6 @@ func startInProcess(cfg Config, val *Validator) error {
if val.Ctx == nil || val.Ctx.Viper == nil {
return fmt.Errorf("validator %s context is nil", val.Moniker)
}

val.jsonrpc, err = server.StartJSONRPC(
ctx,
val.Ctx,
Expand Down
5 changes: 5 additions & 0 deletions server/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,11 @@ func GetConfig(v *viper.Viper) (Config, error) {
if err := v.Unmarshal(conf); err != nil {
return Config{}, fmt.Errorf("error extracting app config: %w", err)
}
sdkConf, err := config.GetConfig(v)
if err != nil {
return Config{}, err
}
conf.GRPC.HistoricalGRPCAddressBlockRange = sdkConf.GRPC.HistoricalGRPCAddressBlockRange
return *conf, nil
}

Expand Down
69 changes: 1 addition & 68 deletions server/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"context"
"fmt"
"io"
"net"
"os"
"path/filepath"
"runtime/pprof"
Expand All @@ -13,7 +12,6 @@ import (
"github.com/spf13/cobra"
"golang.org/x/sync/errgroup"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"

abciserver "github.com/cometbft/cometbft/abci/server"
tcmd "github.com/cometbft/cometbft/cmd/cometbft/commands"
Expand All @@ -35,18 +33,15 @@ import (
srvflags "github.com/cosmos/evm/server/flags"
servertypes "github.com/cosmos/evm/server/types"

errorsmod "cosmossdk.io/errors"
"cosmossdk.io/log"
pruningtypes "cosmossdk.io/store/pruning/types"

"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
"github.com/cosmos/cosmos-sdk/server"
"github.com/cosmos/cosmos-sdk/server/api"
serverconfig "github.com/cosmos/cosmos-sdk/server/config"
servergrpc "github.com/cosmos/cosmos-sdk/server/grpc"
servercmtlog "github.com/cosmos/cosmos-sdk/server/log"
"github.com/cosmos/cosmos-sdk/server/types"
"github.com/cosmos/cosmos-sdk/telemetry"
Expand Down Expand Up @@ -527,13 +522,10 @@ func startInProcess(svrCtx *server.Context, clientCtx client.Context, opts Start
WithChainID(genDoc.ChainID)
}

grpcSrv, clientCtx, err := startGrpcServer(ctx, svrCtx, clientCtx, g, config.GRPC, app)
grpcSrv, clientCtx, err := server.StartGrpcServer(ctx, g, config.GRPC, clientCtx, svrCtx, app)
if err != nil {
return err
}
if grpcSrv != nil {
defer grpcSrv.GracefulStop()
}

startAPIServer(ctx, svrCtx, clientCtx, g, config.Config, app, grpcSrv, metrics, config.EVM.GethMetricsAddress)

Expand Down Expand Up @@ -628,65 +620,6 @@ func getCtx(svrCtx *server.Context, block bool) (*errgroup.Group, context.Contex
return g, ctx
}

// startGrpcServer starts a gRPC server based on the provided configuration.
func startGrpcServer(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is it ok to remove all of this?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since we can replace with sdk StartGrpcServer?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirming here that this was a duplicate function

ctx context.Context,
svrCtx *server.Context,
clientCtx client.Context,
g *errgroup.Group,
config serverconfig.GRPCConfig,
app types.Application,
) (*grpc.Server, client.Context, error) {
if !config.Enable {
// return grpcServer as nil if gRPC is disabled
return nil, clientCtx, nil
}
_, _, err := net.SplitHostPort(config.Address)
if err != nil {
return nil, clientCtx, errorsmod.Wrapf(err, "invalid grpc address %s", config.Address)
}

maxSendMsgSize := config.MaxSendMsgSize
if maxSendMsgSize == 0 {
maxSendMsgSize = serverconfig.DefaultGRPCMaxSendMsgSize
}

maxRecvMsgSize := config.MaxRecvMsgSize
if maxRecvMsgSize == 0 {
maxRecvMsgSize = serverconfig.DefaultGRPCMaxRecvMsgSize
}

// if gRPC is enabled, configure gRPC client for gRPC gateway and json-rpc
grpcClient, err := grpc.NewClient(
config.Address,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithDefaultCallOptions(
grpc.ForceCodec(codec.NewProtoCodec(clientCtx.InterfaceRegistry).GRPCCodec()),
grpc.MaxCallRecvMsgSize(maxRecvMsgSize),
grpc.MaxCallSendMsgSize(maxSendMsgSize),
),
)
if err != nil {
return nil, clientCtx, err
}
// Set `GRPCClient` to `clientCtx` to enjoy concurrent grpc query.
// only use it if gRPC server is enabled.
clientCtx = clientCtx.WithGRPCClient(grpcClient)
svrCtx.Logger.Debug("gRPC client assigned to client context", "address", config.Address)

grpcSrv, err := servergrpc.NewGRPCServer(clientCtx, app, config)
if err != nil {
return nil, clientCtx, err
}

// Start the gRPC server in a goroutine. Note, the provided ctx will ensure
// that the server is gracefully shut down.
g.Go(func() error {
return servergrpc.StartGRPCServer(ctx, svrCtx.Logger.With("module", "grpc-server"), config, grpcSrv)
})
return grpcSrv, clientCtx, nil
}

// startAPIServer starts an API server based on the provided configuration and application context.
// Parameters:
// - ctx: The context used for managing the server's lifecycle, allowing for graceful shutdown.
Expand Down
Loading