-
Notifications
You must be signed in to change notification settings - Fork 3.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(serverv2/cometbft) Read config from commands & handle FlagNode
#20621
Changes from 2 commits
a5a5ff4
382207c
f5390a2
bfa5e7e
e999f74
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -21,22 +21,30 @@ import ( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"cosmossdk.io/server/v2/cometbft/client/rpc" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"cosmossdk.io/server/v2/cometbft/flags" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
auth "cosmossdk.io/x/auth/client/cli" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"github.com/cosmos/cosmos-sdk/client" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sdk "github.com/cosmos/cosmos-sdk/types" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"github.com/cosmos/cosmos-sdk/types/query" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"github.com/cosmos/cosmos-sdk/version" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (s *CometBFTServer[T]) rpcClient() (rpc.CometRPC, error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (s *CometBFTServer[T]) rpcClient(cmd *cobra.Command) (rpc.CometRPC, error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if s.config.Standalone { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client, err := rpchttp.New(s.config.CmtConfig.RPC.ListenAddress) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client, err := rpchttp.New(client.GetConfigFromCmd(cmd).RPC.ListenAddress) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return nil, err | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return client, nil | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if s.Node == nil || cmd.Flags().Changed(flags.FlagNode) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcURI, _ := cmd.Flags().GetString(flags.FlagNode) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if rpcURI != "" { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return rpchttp.New(rpcURI) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider handling the error when fetching the The current implementation assumes successful retrieval of the - rpcURI, _ := cmd.Flags().GetString(flags.FlagNode)
+ rpcURI, err := cmd.Flags().GetString(flags.FlagNode)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get FlagNode: %w", err)
+ } Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return local.New(s.Node), nil | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -46,7 +54,7 @@ func (s *CometBFTServer[T]) StatusCommand() *cobra.Command { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use: "status", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Short: "Query remote node for status", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RunE: func(cmd *cobra.Command, _ []string) error { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcclient, err := s.rpcClient() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcclient, err := s.rpcClient(cmd) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure proper error handling and user feedback for command execution. The - return err
+ return fmt.Errorf("failed to get RPC client: %w", err)
- return err
+ return fmt.Errorf("failed to get status from RPC client: %w", err)
- return err
+ return fmt.Errorf("failed to marshal status output: %w", err) Also applies to: 57-57
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return err | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -80,7 +88,8 @@ func (s *CometBFTServer[T]) ShowNodeIDCmd() *cobra.Command { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use: "show-node-id", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Short: "Show this node's ID", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RunE: func(cmd *cobra.Command, args []string) error { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nodeKey, err := p2p.LoadNodeKey(s.config.CmtConfig.NodeKeyFile()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cmtConfig := client.GetConfigFromCmd(cmd) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nodeKey, err := p2p.LoadNodeKey(cmtConfig.NodeKeyFile()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+94
to
+95
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Validate the existence of The + if _, err := os.Stat(cmtConfig.NodeKeyFile()); os.IsNotExist(err) {
+ return fmt.Errorf("node key file does not exist: %s", cmtConfig.NodeKeyFile())
+ }
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return err | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -97,7 +106,7 @@ func (s *CometBFTServer[T]) ShowValidatorCmd() *cobra.Command { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use: "show-validator", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Short: "Show this node's CometBFT validator info", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RunE: func(cmd *cobra.Command, args []string) error { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cfg := s.config.CmtConfig | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cfg := client.GetConfigFromCmd(cmd) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Handle potential nil pointer dereference in The function + if privValidator == nil {
+ return fmt.Errorf("failed to load private validator")
+ }
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
privValidator := pvm.LoadFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pk, err := privValidator.GetPubKey() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -131,7 +140,7 @@ func (s *CometBFTServer[T]) ShowAddressCmd() *cobra.Command { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use: "show-address", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Short: "Shows this node's CometBFT validator consensus address", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RunE: func(cmd *cobra.Command, args []string) error { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cfg := s.config.CmtConfig | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cfg := client.GetConfigFromCmd(cmd) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider adding detailed error handling for address conversion in The conversion of the validator address to a string is straightforward but does not account for potential issues in the address format or conversion process. Adding error handling could improve robustness: + if valConsAddr == nil {
+ return fmt.Errorf("invalid validator consensus address")
+ } Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
privValidator := pvm.LoadFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TODO: use address codec? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
valConsAddr := (sdk.ConsAddress)(privValidator.GetAddress()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -188,7 +197,7 @@ for. Each module documents its respective events under 'xx_events.md'. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
version.AppName, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RunE: func(cmd *cobra.Command, args []string) error { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcclient, err := s.rpcClient() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcclient, err := s.rpcClient(cmd) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Refactor repeated error handling in The error handling in - if err != nil {
- return err
- }
+ if err != nil {
+ return fmt.Errorf("failed to query blocks: %w", err)
+ } Also applies to: 200-200 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return err | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -241,7 +250,7 @@ $ %s query block --%s=%s <hash> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RunE: func(cmd *cobra.Command, args []string) error { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
typ, _ := cmd.Flags().GetString(auth.FlagType) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcclient, err := s.rpcClient() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcclient, err := s.rpcClient(cmd) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Improve error messages for user clarity in The error messages in - return fmt.Errorf("argument should be a block height")
+ return fmt.Errorf("invalid argument: expected a block height, got '%s'", args[0])
- return fmt.Errorf("no block found with height %s", args[0])
+ return fmt.Errorf("no block found with the specified height: %s", args[0])
- return fmt.Errorf("no block found with hash %s", args[0])
+ return fmt.Errorf("no block found with the specified hash: %s", args[0]) Also applies to: 253-253
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return err | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -332,7 +341,7 @@ func (s *CometBFTServer[T]) QueryBlockResultsCmd() *cobra.Command { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TODO: we should be able to do this without using client context | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
node, err := s.rpcClient() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
node, err := s.rpcClient(cmd) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling for potential nil pointer in The function + if node == nil {
+ return fmt.Errorf("RPC client is unavailable")
+ } Also applies to: 344-344 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return err | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -392,6 +401,7 @@ func (s *CometBFTServer[T]) BootstrapStateCmd() *cobra.Command { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Short: "Bootstrap CometBFT state at an arbitrary block height using a light client", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: cobra.NoArgs, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RunE: func(cmd *cobra.Command, args []string) error { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cfg := client.GetConfigFromCmd(cmd) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
height, err := cmd.Flags().GetUint64("height") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return err | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -404,7 +414,7 @@ func (s *CometBFTServer[T]) BootstrapStateCmd() *cobra.Command { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TODO genensis doc provider and apphash | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return node.BootstrapState(cmd.Context(), s.config.CmtConfig, cmtcfg.DefaultDBProvider, nil, height, nil) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return node.BootstrapState(cmd.Context(), cfg, cmtcfg.DefaultDBProvider, nil, height, nil) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
since we can return an error here i would not silent ignore it; even though it's unlikely to happen due to line above