github.com/Finschia/finschia-sdk@v0.48.1/x/distribution/client/cli/query.go (about)

     1  package cli
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  
     8  	"github.com/spf13/cobra"
     9  
    10  	"github.com/Finschia/finschia-sdk/client"
    11  	"github.com/Finschia/finschia-sdk/client/flags"
    12  	sdk "github.com/Finschia/finschia-sdk/types"
    13  	"github.com/Finschia/finschia-sdk/version"
    14  	"github.com/Finschia/finschia-sdk/x/distribution/types"
    15  )
    16  
    17  // GetQueryCmd returns the cli query commands for this module
    18  func GetQueryCmd() *cobra.Command {
    19  	distQueryCmd := &cobra.Command{
    20  		Use:                        types.ModuleName,
    21  		Short:                      "Querying commands for the distribution module",
    22  		DisableFlagParsing:         true,
    23  		SuggestionsMinimumDistance: 2,
    24  		RunE:                       client.ValidateCmd,
    25  	}
    26  
    27  	distQueryCmd.AddCommand(
    28  		GetCmdQueryParams(),
    29  		GetCmdQueryValidatorOutstandingRewards(),
    30  		GetCmdQueryValidatorCommission(),
    31  		GetCmdQueryValidatorSlashes(),
    32  		GetCmdQueryDelegatorRewards(),
    33  		GetCmdQueryCommunityPool(),
    34  	)
    35  
    36  	return distQueryCmd
    37  }
    38  
    39  // GetCmdQueryParams implements the query params command.
    40  func GetCmdQueryParams() *cobra.Command {
    41  	cmd := &cobra.Command{
    42  		Use:   "params",
    43  		Args:  cobra.NoArgs,
    44  		Short: "Query distribution params",
    45  		RunE: func(cmd *cobra.Command, _ []string) error {
    46  			clientCtx, err := client.GetClientQueryContext(cmd)
    47  			if err != nil {
    48  				return err
    49  			}
    50  			queryClient := types.NewQueryClient(clientCtx)
    51  
    52  			res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{})
    53  			if err != nil {
    54  				return err
    55  			}
    56  
    57  			return clientCtx.PrintProto(&res.Params)
    58  		},
    59  	}
    60  
    61  	flags.AddQueryFlagsToCmd(cmd)
    62  	return cmd
    63  }
    64  
    65  // GetCmdQueryValidatorOutstandingRewards implements the query validator
    66  // outstanding rewards command.
    67  func GetCmdQueryValidatorOutstandingRewards() *cobra.Command {
    68  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
    69  
    70  	cmd := &cobra.Command{
    71  		Use:   "validator-outstanding-rewards [validator]",
    72  		Args:  cobra.ExactArgs(1),
    73  		Short: "Query distribution outstanding (un-withdrawn) rewards for a validator and all their delegations",
    74  		Long: strings.TrimSpace(
    75  			fmt.Sprintf(`Query distribution outstanding (un-withdrawn) rewards for a validator and all their delegations.
    76  
    77  Example:
    78  $ %s query distribution validator-outstanding-rewards %s1lwjmdnks33xwnmfayc64ycprww49n33mtm92ne
    79  `,
    80  				version.AppName, bech32PrefixValAddr,
    81  			),
    82  		),
    83  		RunE: func(cmd *cobra.Command, args []string) error {
    84  			clientCtx, err := client.GetClientQueryContext(cmd)
    85  			if err != nil {
    86  				return err
    87  			}
    88  			queryClient := types.NewQueryClient(clientCtx)
    89  
    90  			validatorAddr, err := sdk.ValAddressFromBech32(args[0])
    91  			if err != nil {
    92  				return err
    93  			}
    94  
    95  			res, err := queryClient.ValidatorOutstandingRewards(
    96  				cmd.Context(),
    97  				&types.QueryValidatorOutstandingRewardsRequest{ValidatorAddress: validatorAddr.String()},
    98  			)
    99  			if err != nil {
   100  				return err
   101  			}
   102  
   103  			return clientCtx.PrintProto(&res.Rewards)
   104  		},
   105  	}
   106  
   107  	flags.AddQueryFlagsToCmd(cmd)
   108  	return cmd
   109  }
   110  
   111  // GetCmdQueryValidatorCommission implements the query validator commission command.
   112  func GetCmdQueryValidatorCommission() *cobra.Command {
   113  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   114  
   115  	cmd := &cobra.Command{
   116  		Use:   "commission [validator]",
   117  		Args:  cobra.ExactArgs(1),
   118  		Short: "Query distribution validator commission",
   119  		Long: strings.TrimSpace(
   120  			fmt.Sprintf(`Query validator commission rewards from delegators to that validator.
   121  
   122  Example:
   123  $ %s query distribution commission %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   124  `,
   125  				version.AppName, bech32PrefixValAddr,
   126  			),
   127  		),
   128  		RunE: func(cmd *cobra.Command, args []string) error {
   129  			clientCtx, err := client.GetClientQueryContext(cmd)
   130  			if err != nil {
   131  				return err
   132  			}
   133  			queryClient := types.NewQueryClient(clientCtx)
   134  
   135  			validatorAddr, err := sdk.ValAddressFromBech32(args[0])
   136  			if err != nil {
   137  				return err
   138  			}
   139  
   140  			res, err := queryClient.ValidatorCommission(
   141  				cmd.Context(),
   142  				&types.QueryValidatorCommissionRequest{ValidatorAddress: validatorAddr.String()},
   143  			)
   144  			if err != nil {
   145  				return err
   146  			}
   147  
   148  			return clientCtx.PrintProto(&res.Commission)
   149  		},
   150  	}
   151  
   152  	flags.AddQueryFlagsToCmd(cmd)
   153  	return cmd
   154  }
   155  
   156  // GetCmdQueryValidatorSlashes implements the query validator slashes command.
   157  func GetCmdQueryValidatorSlashes() *cobra.Command {
   158  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   159  
   160  	cmd := &cobra.Command{
   161  		Use:   "slashes [validator] [start-height] [end-height]",
   162  		Args:  cobra.ExactArgs(3),
   163  		Short: "Query distribution validator slashes",
   164  		Long: strings.TrimSpace(
   165  			fmt.Sprintf(`Query all slashes of a validator for a given block range.
   166  
   167  Example:
   168  $ %s query distribution slashes %svaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 0 100
   169  `,
   170  				version.AppName, bech32PrefixValAddr,
   171  			),
   172  		),
   173  		RunE: func(cmd *cobra.Command, args []string) error {
   174  			clientCtx, err := client.GetClientQueryContext(cmd)
   175  			if err != nil {
   176  				return err
   177  			}
   178  			queryClient := types.NewQueryClient(clientCtx)
   179  
   180  			validatorAddr, err := sdk.ValAddressFromBech32(args[0])
   181  			if err != nil {
   182  				return err
   183  			}
   184  
   185  			startHeight, err := strconv.ParseUint(args[1], 10, 64)
   186  			if err != nil {
   187  				return fmt.Errorf("start-height %s not a valid uint, please input a valid start-height", args[1])
   188  			}
   189  
   190  			endHeight, err := strconv.ParseUint(args[2], 10, 64)
   191  			if err != nil {
   192  				return fmt.Errorf("end-height %s not a valid uint, please input a valid end-height", args[2])
   193  			}
   194  
   195  			pageReq, err := client.ReadPageRequest(cmd.Flags())
   196  			if err != nil {
   197  				return err
   198  			}
   199  
   200  			res, err := queryClient.ValidatorSlashes(
   201  				cmd.Context(),
   202  				&types.QueryValidatorSlashesRequest{
   203  					ValidatorAddress: validatorAddr.String(),
   204  					StartingHeight:   startHeight,
   205  					EndingHeight:     endHeight,
   206  					Pagination:       pageReq,
   207  				},
   208  			)
   209  			if err != nil {
   210  				return err
   211  			}
   212  
   213  			return clientCtx.PrintProto(res)
   214  		},
   215  	}
   216  
   217  	flags.AddQueryFlagsToCmd(cmd)
   218  	flags.AddPaginationFlagsToCmd(cmd, "validator slashes")
   219  	return cmd
   220  }
   221  
   222  // GetCmdQueryDelegatorRewards implements the query delegator rewards command.
   223  func GetCmdQueryDelegatorRewards() *cobra.Command {
   224  	bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
   225  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   226  
   227  	cmd := &cobra.Command{
   228  		Use:   "rewards [delegator-addr] [validator-addr]",
   229  		Args:  cobra.RangeArgs(1, 2),
   230  		Short: "Query all distribution delegator rewards or rewards from a particular validator",
   231  		Long: strings.TrimSpace(
   232  			fmt.Sprintf(`Query all rewards earned by a delegator, optionally restrict to rewards from a single validator.
   233  
   234  Example:
   235  $ %s query distribution rewards %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
   236  $ %s query distribution rewards %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   237  `,
   238  				version.AppName, bech32PrefixAccAddr, version.AppName, bech32PrefixAccAddr, bech32PrefixValAddr,
   239  			),
   240  		),
   241  		RunE: func(cmd *cobra.Command, args []string) error {
   242  			clientCtx, err := client.GetClientQueryContext(cmd)
   243  			if err != nil {
   244  				return err
   245  			}
   246  			queryClient := types.NewQueryClient(clientCtx)
   247  
   248  			delegatorAddr, err := sdk.AccAddressFromBech32(args[0])
   249  			if err != nil {
   250  				return err
   251  			}
   252  
   253  			// query for rewards from a particular delegation
   254  			ctx := cmd.Context()
   255  			if len(args) == 2 {
   256  				validatorAddr, err := sdk.ValAddressFromBech32(args[1])
   257  				if err != nil {
   258  					return err
   259  				}
   260  
   261  				res, err := queryClient.DelegationRewards(
   262  					ctx,
   263  					&types.QueryDelegationRewardsRequest{DelegatorAddress: delegatorAddr.String(), ValidatorAddress: validatorAddr.String()},
   264  				)
   265  				if err != nil {
   266  					return err
   267  				}
   268  
   269  				return clientCtx.PrintProto(res)
   270  			}
   271  
   272  			res, err := queryClient.DelegationTotalRewards(
   273  				ctx,
   274  				&types.QueryDelegationTotalRewardsRequest{DelegatorAddress: delegatorAddr.String()},
   275  			)
   276  			if err != nil {
   277  				return err
   278  			}
   279  
   280  			return clientCtx.PrintProto(res)
   281  		},
   282  	}
   283  
   284  	flags.AddQueryFlagsToCmd(cmd)
   285  	return cmd
   286  }
   287  
   288  // GetCmdQueryCommunityPool returns the command for fetching community pool info.
   289  func GetCmdQueryCommunityPool() *cobra.Command {
   290  	cmd := &cobra.Command{
   291  		Use:   "community-pool",
   292  		Args:  cobra.NoArgs,
   293  		Short: "Query the amount of coins in the community pool",
   294  		Long: strings.TrimSpace(
   295  			fmt.Sprintf(`Query all coins in the community pool which is under Governance control.
   296  
   297  Example:
   298  $ %s query distribution community-pool
   299  `,
   300  				version.AppName,
   301  			),
   302  		),
   303  		RunE: func(cmd *cobra.Command, args []string) error {
   304  			clientCtx, err := client.GetClientQueryContext(cmd)
   305  			if err != nil {
   306  				return err
   307  			}
   308  			queryClient := types.NewQueryClient(clientCtx)
   309  
   310  			res, err := queryClient.CommunityPool(cmd.Context(), &types.QueryCommunityPoolRequest{})
   311  			if err != nil {
   312  				return err
   313  			}
   314  
   315  			return clientCtx.PrintProto(res)
   316  		},
   317  	}
   318  
   319  	flags.AddQueryFlagsToCmd(cmd)
   320  	return cmd
   321  }