github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/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/fibonacci-chain/fbc/libs/cosmos-sdk/client"
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags"
    13  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    14  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    15  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version"
    16  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/distribution/client/common"
    17  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/distribution/types"
    18  )
    19  
    20  // GetQueryCmd returns the cli query commands for this module
    21  func GetQueryCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
    22  	distQueryCmd := &cobra.Command{
    23  		Use:                        types.ModuleName,
    24  		Short:                      "Querying commands for the distribution module",
    25  		DisableFlagParsing:         true,
    26  		SuggestionsMinimumDistance: 2,
    27  		RunE:                       client.ValidateCmd,
    28  	}
    29  
    30  	distQueryCmd.AddCommand(flags.GetCommands(
    31  		GetCmdQueryParams(queryRoute, cdc),
    32  		GetCmdQueryValidatorOutstandingRewards(queryRoute, cdc),
    33  		GetCmdQueryValidatorCommission(queryRoute, cdc),
    34  		GetCmdQueryValidatorSlashes(queryRoute, cdc),
    35  		GetCmdQueryDelegatorRewards(queryRoute, cdc),
    36  		GetCmdQueryCommunityPool(queryRoute, cdc),
    37  	)...)
    38  
    39  	return distQueryCmd
    40  }
    41  
    42  // GetCmdQueryParams implements the query params command.
    43  func GetCmdQueryParams(queryRoute string, cdc *codec.Codec) *cobra.Command {
    44  	return &cobra.Command{
    45  		Use:   "params",
    46  		Args:  cobra.NoArgs,
    47  		Short: "Query distribution params",
    48  		RunE: func(cmd *cobra.Command, args []string) error {
    49  			cliCtx := context.NewCLIContext().WithCodec(cdc)
    50  
    51  			route := fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryParams)
    52  			res, _, err := cliCtx.QueryWithData(route, nil)
    53  			if err != nil {
    54  				return err
    55  			}
    56  
    57  			var params types.Params
    58  			if err := cdc.UnmarshalJSON(res, &params); err != nil {
    59  				return fmt.Errorf("failed to unmarshal params: %w", err)
    60  			}
    61  
    62  			return cliCtx.PrintOutput(params)
    63  		},
    64  	}
    65  }
    66  
    67  // GetCmdQueryValidatorOutstandingRewards implements the query validator outstanding rewards command.
    68  func GetCmdQueryValidatorOutstandingRewards(queryRoute string, cdc *codec.Codec) *cobra.Command {
    69  	return &cobra.Command{
    70  		Use:   "validator-outstanding-rewards [validator]",
    71  		Args:  cobra.ExactArgs(1),
    72  		Short: "Query distribution outstanding (un-withdrawn) rewards for a validator and all their delegations",
    73  		Long: strings.TrimSpace(
    74  			fmt.Sprintf(`Query distribution outstanding (un-withdrawn) rewards
    75  for a validator and all their delegations.
    76  
    77  Example:
    78  $ %s query distribution validator-outstanding-rewards cosmosvaloper1lwjmdnks33xwnmfayc64ycprww49n33mtm92ne
    79  `,
    80  				version.ClientName,
    81  			),
    82  		),
    83  		RunE: func(cmd *cobra.Command, args []string) error {
    84  			cliCtx := context.NewCLIContext().WithCodec(cdc)
    85  
    86  			valAddr, err := sdk.ValAddressFromBech32(args[0])
    87  			if err != nil {
    88  				return err
    89  			}
    90  
    91  			params := types.NewQueryValidatorOutstandingRewardsParams(valAddr)
    92  			bz, err := cdc.MarshalJSON(params)
    93  			if err != nil {
    94  				return err
    95  			}
    96  
    97  			resp, _, err := cliCtx.QueryWithData(
    98  				fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryValidatorOutstandingRewards),
    99  				bz,
   100  			)
   101  			if err != nil {
   102  				return err
   103  			}
   104  
   105  			var outstandingRewards types.ValidatorOutstandingRewards
   106  			if err := cdc.UnmarshalJSON(resp, &outstandingRewards); err != nil {
   107  				return err
   108  			}
   109  
   110  			return cliCtx.PrintOutput(outstandingRewards)
   111  		},
   112  	}
   113  }
   114  
   115  // GetCmdQueryValidatorCommission implements the query validator commission command.
   116  func GetCmdQueryValidatorCommission(queryRoute string, cdc *codec.Codec) *cobra.Command {
   117  	return &cobra.Command{
   118  		Use:   "commission [validator]",
   119  		Args:  cobra.ExactArgs(1),
   120  		Short: "Query distribution validator commission",
   121  		Long: strings.TrimSpace(
   122  			fmt.Sprintf(`Query validator commission rewards from delegators to that validator.
   123  
   124  Example:
   125  $ %s query distribution commission cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   126  `,
   127  				version.ClientName,
   128  			),
   129  		),
   130  		RunE: func(cmd *cobra.Command, args []string) error {
   131  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   132  
   133  			validatorAddr, err := sdk.ValAddressFromBech32(args[0])
   134  			if err != nil {
   135  				return err
   136  			}
   137  
   138  			res, err := common.QueryValidatorCommission(cliCtx, queryRoute, validatorAddr)
   139  			if err != nil {
   140  				return err
   141  			}
   142  
   143  			var valCom types.ValidatorAccumulatedCommission
   144  			cdc.MustUnmarshalJSON(res, &valCom)
   145  			return cliCtx.PrintOutput(valCom)
   146  		},
   147  	}
   148  }
   149  
   150  // GetCmdQueryValidatorSlashes implements the query validator slashes command.
   151  func GetCmdQueryValidatorSlashes(queryRoute string, cdc *codec.Codec) *cobra.Command {
   152  	return &cobra.Command{
   153  		Use:   "slashes [validator] [start-height] [end-height]",
   154  		Args:  cobra.ExactArgs(3),
   155  		Short: "Query distribution validator slashes",
   156  		Long: strings.TrimSpace(
   157  			fmt.Sprintf(`Query all slashes of a validator for a given block range.
   158  
   159  Example:
   160  $ %s query distribution slashes cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 0 100
   161  `,
   162  				version.ClientName,
   163  			),
   164  		),
   165  		RunE: func(cmd *cobra.Command, args []string) error {
   166  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   167  
   168  			validatorAddr, err := sdk.ValAddressFromBech32(args[0])
   169  			if err != nil {
   170  				return err
   171  			}
   172  
   173  			startHeight, err := strconv.ParseUint(args[1], 10, 64)
   174  			if err != nil {
   175  				return fmt.Errorf("start-height %s not a valid uint, please input a valid start-height", args[1])
   176  			}
   177  
   178  			endHeight, err := strconv.ParseUint(args[2], 10, 64)
   179  			if err != nil {
   180  				return fmt.Errorf("end-height %s not a valid uint, please input a valid end-height", args[2])
   181  			}
   182  
   183  			params := types.NewQueryValidatorSlashesParams(validatorAddr, startHeight, endHeight)
   184  			bz, err := cdc.MarshalJSON(params)
   185  			if err != nil {
   186  				return err
   187  			}
   188  
   189  			res, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/validator_slashes", queryRoute), bz)
   190  			if err != nil {
   191  				return err
   192  			}
   193  
   194  			var slashes types.ValidatorSlashEvents
   195  			cdc.MustUnmarshalJSON(res, &slashes)
   196  			return cliCtx.PrintOutput(slashes)
   197  		},
   198  	}
   199  }
   200  
   201  // GetCmdQueryDelegatorRewards implements the query delegator rewards command.
   202  func GetCmdQueryDelegatorRewards(queryRoute string, cdc *codec.Codec) *cobra.Command {
   203  	return &cobra.Command{
   204  		Use:   "rewards [delegator-addr] [<validator-addr>]",
   205  		Args:  cobra.RangeArgs(1, 2),
   206  		Short: "Query all distribution delegator rewards or rewards from a particular validator",
   207  		Long: strings.TrimSpace(
   208  			fmt.Sprintf(`Query all rewards earned by a delegator, optionally restrict to rewards from a single validator.
   209  
   210  Example:
   211  $ %s query distribution rewards cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
   212  $ %s query distribution rewards cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   213  `,
   214  				version.ClientName, version.ClientName,
   215  			),
   216  		),
   217  		RunE: func(cmd *cobra.Command, args []string) error {
   218  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   219  
   220  			// query for rewards from a particular delegation
   221  			if len(args) == 2 {
   222  				resp, _, err := common.QueryDelegationRewards(cliCtx, queryRoute, args[0], args[1])
   223  				if err != nil {
   224  					return err
   225  				}
   226  
   227  				var result sdk.DecCoins
   228  				if err = cdc.UnmarshalJSON(resp, &result); err != nil {
   229  					return fmt.Errorf("failed to unmarshal response: %w", err)
   230  				}
   231  
   232  				return cliCtx.PrintOutput(result)
   233  			}
   234  
   235  			delegatorAddr, err := sdk.AccAddressFromBech32(args[0])
   236  			if err != nil {
   237  				return err
   238  			}
   239  
   240  			params := types.NewQueryDelegatorParams(delegatorAddr)
   241  			bz, err := cdc.MarshalJSON(params)
   242  			if err != nil {
   243  				return fmt.Errorf("failed to marshal params: %w", err)
   244  			}
   245  
   246  			// query for delegator total rewards
   247  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegatorTotalRewards)
   248  			res, _, err := cliCtx.QueryWithData(route, bz)
   249  			if err != nil {
   250  				return err
   251  			}
   252  
   253  			var result types.QueryDelegatorTotalRewardsResponse
   254  			if err = cdc.UnmarshalJSON(res, &result); err != nil {
   255  				return fmt.Errorf("failed to unmarshal response: %w", err)
   256  			}
   257  
   258  			return cliCtx.PrintOutput(result)
   259  		},
   260  	}
   261  }
   262  
   263  // GetCmdQueryCommunityPool returns the command for fetching community pool info
   264  func GetCmdQueryCommunityPool(queryRoute string, cdc *codec.Codec) *cobra.Command {
   265  	return &cobra.Command{
   266  		Use:   "community-pool",
   267  		Args:  cobra.NoArgs,
   268  		Short: "Query the amount of coins in the community pool",
   269  		Long: strings.TrimSpace(
   270  			fmt.Sprintf(`Query all coins in the community pool which is under Governance control.
   271  
   272  Example:
   273  $ %s query distribution community-pool
   274  `,
   275  				version.ClientName,
   276  			),
   277  		),
   278  		RunE: func(cmd *cobra.Command, args []string) error {
   279  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   280  
   281  			res, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/community_pool", queryRoute), nil)
   282  			if err != nil {
   283  				return err
   284  			}
   285  
   286  			var result sdk.DecCoins
   287  			cdc.MustUnmarshalJSON(res, &result)
   288  			return cliCtx.PrintOutput(result)
   289  		},
   290  	}
   291  }