diff --git a/pkg/lumera/client.go b/pkg/lumera/client.go index 89c993ed..f07d5f08 100644 --- a/pkg/lumera/client.go +++ b/pkg/lumera/client.go @@ -24,13 +24,7 @@ type lumeraClient struct { } // newClient creates a new Lumera client with provided options -func newClient(ctx context.Context, opts ...Option) (Client, error) { - cfg := DefaultConfig() - - // Apply all options - for _, opt := range opts { - opt(cfg) - } +func newClient(ctx context.Context, cfg *Config) (Client, error) { // Create a single gRPC connection to be shared by all modules conn, err := newGRPCConnection(ctx, cfg.GRPCAddr) diff --git a/pkg/lumera/config.go b/pkg/lumera/config.go index ab557de2..7e9cca91 100644 --- a/pkg/lumera/config.go +++ b/pkg/lumera/config.go @@ -1,7 +1,7 @@ package lumera import ( - "time" + "fmt" "github.com/cosmos/cosmos-sdk/crypto/keyring" ) @@ -14,9 +14,6 @@ type Config struct { // ChainID is the ID of the chain ChainID string - // Timeout is the default request timeout - Timeout time.Duration - // keyring is the keyring conf for the node sign & verify keyring keyring.Keyring @@ -24,12 +21,25 @@ type Config struct { KeyName string } -// DefaultConfig returns a default configuration -func DefaultConfig() *Config { - return &Config{ - GRPCAddr: "localhost:9090", - ChainID: "lumera", - Timeout: 30, - KeyName: "", +func NewConfig(grpcAddr, chainID string, keyName string, keyring keyring.Keyring) (*Config, error) { + + if grpcAddr == "" { + return nil, fmt.Errorf("grpcAddr cannot be empty") + } + if chainID == "" { + return nil, fmt.Errorf("chainID cannot be empty") } + if keyring == nil { + return nil, fmt.Errorf("keyring cannot be nil") + } + if keyName == "" { + return nil, fmt.Errorf("keyName cannot be empty") + } + + return &Config{ + GRPCAddr: grpcAddr, + ChainID: chainID, + keyring: keyring, + KeyName: keyName, + }, nil } diff --git a/pkg/lumera/connection.go b/pkg/lumera/connection.go index 77855e6f..296c6e1d 100644 --- a/pkg/lumera/connection.go +++ b/pkg/lumera/connection.go @@ -9,6 +9,8 @@ import ( "google.golang.org/grpc/credentials/insecure" ) +const DefaultTimeout = 30 * time.Second + // Connection defines the interface for a client connection type Connection interface { Close() error @@ -22,7 +24,7 @@ type grpcConnection struct { // newGRPCConnection creates a new gRPC connection func newGRPCConnection(ctx context.Context, addr string) (Connection, error) { - dialCtx, cancel := context.WithTimeout(ctx, 10*time.Second) + dialCtx, cancel := context.WithTimeout(ctx, DefaultTimeout) defer cancel() // Note: Cosmos SDK doesn't support TLS for gRPC so we use insecure credentials diff --git a/pkg/lumera/interface.go b/pkg/lumera/interface.go index 37495129..c5b0725d 100644 --- a/pkg/lumera/interface.go +++ b/pkg/lumera/interface.go @@ -25,6 +25,6 @@ type Client interface { } // NewClient creates a new Lumera client with provided options -func NewClient(ctx context.Context, opts ...Option) (Client, error) { - return newClient(ctx, opts...) +func NewClient(ctx context.Context, config *Config) (Client, error) { + return newClient(ctx, config) } diff --git a/pkg/lumera/options.go b/pkg/lumera/options.go deleted file mode 100644 index d6d843f9..00000000 --- a/pkg/lumera/options.go +++ /dev/null @@ -1,45 +0,0 @@ -package lumera - -import ( - "time" - - "github.com/cosmos/cosmos-sdk/crypto/keyring" -) - -// Option is a function that applies a change to Config -type Option func(*Config) - -// WithGRPCAddr sets the gRPC endpoint address -func WithGRPCAddr(addr string) Option { - return func(c *Config) { - c.GRPCAddr = addr - } -} - -// WithChainID sets the chain ID -func WithChainID(chainID string) Option { - return func(c *Config) { - c.ChainID = chainID - } -} - -// WithTimeout sets the default timeout -func WithTimeout(duration time.Duration) Option { - return func(c *Config) { - c.Timeout = duration - } -} - -// WithKeyring sets the keyring conf for the node -func WithKeyring(k keyring.Keyring) Option { - return func(c *Config) { - c.keyring = k - } -} - -// WithKeyName sets the key name to use for signing -func WithKeyName(keyName string) Option { - return func(c *Config) { - c.KeyName = keyName - } -} diff --git a/sdk/adapters/lumera/adapter.go b/sdk/adapters/lumera/adapter.go index 69f59566..0514b6b4 100644 --- a/sdk/adapters/lumera/adapter.go +++ b/sdk/adapters/lumera/adapter.go @@ -3,7 +3,6 @@ package lumera import ( "context" "fmt" - "time" "github.com/LumeraProtocol/supernode/sdk/log" @@ -27,8 +26,8 @@ type Client interface { type ConfigParams struct { GRPCAddr string ChainID string - Timeout time.Duration KeyName string + Keyring keyring.Keyring } type Adapter struct { @@ -37,40 +36,19 @@ type Adapter struct { } // NewAdapter creates a new Adapter with dependencies explicitly injected -func NewAdapter(ctx context.Context, config ConfigParams, kr keyring.Keyring, logger log.Logger) (Client, error) { +func NewAdapter(ctx context.Context, config ConfigParams, logger log.Logger) (Client, error) { // Set default logger if nil if logger == nil { logger = log.NewNoopLogger() } - logger.Debug(ctx, "Creating Lumera adapter", - "grpcAddr", config.GRPCAddr, - "chainID", config.ChainID, - "timeout", config.Timeout) - - // Create client options from the config - options := []lumeraclient.Option{ - lumeraclient.WithGRPCAddr(config.GRPCAddr), - } - - if config.ChainID != "" { - options = append(options, lumeraclient.WithChainID(config.ChainID)) - } - - if config.Timeout > 0 { - options = append(options, lumeraclient.WithTimeout(config.Timeout)) - } - - if kr != nil { - options = append(options, lumeraclient.WithKeyring(kr)) - } - - if config.KeyName != "" { - options = append(options, lumeraclient.WithKeyName(config.KeyName)) + lumeraConfig, err := lumeraclient.NewConfig(config.GRPCAddr, config.ChainID, config.KeyName, config.Keyring) + if err != nil { + logger.Error(ctx, "Failed to create Lumera config", "error", err) + return nil, fmt.Errorf("failed to create Lumera config: %w", err) } - // Initialize the client - client, err := lumeraclient.NewClient(ctx, options...) + client, err := lumeraclient.NewClient(ctx, lumeraConfig) if err != nil { logger.Error(ctx, "Failed to initialize Lumera client", "error", err) return nil, fmt.Errorf("failed to initialize Lumera client: %w", err) diff --git a/sdk/task/manager.go b/sdk/task/manager.go index fb5bb97b..5e2381dc 100644 --- a/sdk/task/manager.go +++ b/sdk/task/manager.go @@ -51,10 +51,9 @@ func NewManager(ctx context.Context, config config.Config, logger log.Logger, kr lumera.ConfigParams{ GRPCAddr: config.Lumera.GRPCAddr, ChainID: config.Lumera.ChainID, - Timeout: config.Lumera.Timeout, KeyName: config.Lumera.KeyName, + Keyring: kr, }, - kr, logger) if err != nil { diff --git a/supernode/cmd/supernode.go b/supernode/cmd/supernode.go index e9c6e75f..1744c495 100644 --- a/supernode/cmd/supernode.go +++ b/supernode/cmd/supernode.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "os" - "time" "github.com/LumeraProtocol/supernode/p2p" "github.com/LumeraProtocol/supernode/pkg/logtrace" @@ -132,19 +131,13 @@ func initLumeraClient(ctx context.Context, config *config.Config, kr keyring.Key return nil, fmt.Errorf("config is nil") } - logtrace.Info(ctx, "Initializing Lumera client", logtrace.Fields{ - "grpc_addr": config.LumeraClientConfig.GRPCAddr, - "chain_id": config.LumeraClientConfig.ChainID, - "timeout": config.LumeraClientConfig.Timeout, - }) - + lumeraConfig, err := lumera.NewConfig(config.LumeraClientConfig.GRPCAddr, config.LumeraClientConfig.ChainID, config.SupernodeConfig.KeyName, kr) + if err != nil { + return nil, fmt.Errorf("failed to create Lumera config: %w", err) + } return lumera.NewClient( ctx, - lumera.WithGRPCAddr(config.LumeraClientConfig.GRPCAddr), - lumera.WithChainID(config.LumeraClientConfig.ChainID), - lumera.WithTimeout(time.Duration(config.LumeraClientConfig.Timeout)*time.Second), - lumera.WithKeyring(kr), - lumera.WithKeyName(config.SupernodeConfig.KeyName), + lumeraConfig, ) }