github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/client/cli/query_distr_proposal.go (about)

     1  package cli
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/spf13/cobra"
     8  
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    11  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version"
    13  
    14  	"github.com/fibonacci-chain/fbc/x/distribution/client/common"
    15  	"github.com/fibonacci-chain/fbc/x/distribution/types"
    16  )
    17  
    18  // GetCmdQueryDelegatorRewards implements the query delegator rewards command.
    19  func GetCmdQueryDelegatorRewards(queryRoute string, cdc *codec.Codec) *cobra.Command {
    20  	return &cobra.Command{
    21  		Use:   "rewards [delegator-addr] [<validator-addr>]",
    22  		Args:  cobra.RangeArgs(1, 2),
    23  		Short: "Query all distribution delegator rewards or rewards from a particular validator",
    24  		Long: strings.TrimSpace(
    25  			fmt.Sprintf(`Query all rewards earned by a delegator, optionally restrict to rewards from a single validator.
    26  
    27  Example:
    28  $ %s query distr rewards ex1j5mr2jhr9pf20e7yhln5zkcsgqtdt7cydr8x3y
    29  $ %s query distr rewards ex1j5mr2jhr9pf20e7yhln5zkcsgqtdt7cydr8x3y fbvaloper1pt7xrmxul7sx54ml44lvv403r06clrdkehd8z7
    30  `,
    31  				version.ClientName, version.ClientName,
    32  			),
    33  		),
    34  		RunE: func(cmd *cobra.Command, args []string) error {
    35  			cliCtx := context.NewCLIContext().WithCodec(cdc)
    36  
    37  			// query for rewards from a particular delegation
    38  			if len(args) == 2 {
    39  				resp, _, err := common.QueryDelegationRewards(cliCtx, queryRoute, args[0], args[1])
    40  				if err != nil {
    41  					return err
    42  				}
    43  
    44  				var result sdk.DecCoins
    45  				if err = cdc.UnmarshalJSON(resp, &result); err != nil {
    46  					return fmt.Errorf("failed to unmarshal response: %w", err)
    47  				}
    48  
    49  				return cliCtx.PrintOutput(result)
    50  			}
    51  
    52  			delegatorAddr, err := sdk.AccAddressFromBech32(args[0])
    53  			if err != nil {
    54  				return err
    55  			}
    56  
    57  			params := types.NewQueryDelegatorParams(delegatorAddr)
    58  			bz, err := cdc.MarshalJSON(params)
    59  			if err != nil {
    60  				return fmt.Errorf("failed to marshal params: %w", err)
    61  			}
    62  
    63  			// query for delegator total rewards
    64  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegatorTotalRewards)
    65  			res, _, err := cliCtx.QueryWithData(route, bz)
    66  			if err != nil {
    67  				return err
    68  			}
    69  
    70  			var result types.QueryDelegatorTotalRewardsResponse
    71  			if err = cdc.UnmarshalJSON(res, &result); err != nil {
    72  				return fmt.Errorf("failed to unmarshal response: %w", err)
    73  			}
    74  
    75  			return cliCtx.PrintOutput(result)
    76  		},
    77  	}
    78  }
    79  
    80  // GetCmdQueryValidatorOutstandingRewards implements the query validator outstanding rewards command.
    81  func GetCmdQueryValidatorOutstandingRewards(queryRoute string, cdc *codec.Codec) *cobra.Command {
    82  	return &cobra.Command{
    83  		Use:   "outstanding-rewards [validator]",
    84  		Args:  cobra.ExactArgs(1),
    85  		Short: "Query distribution outstanding (un-withdrawn) rewards for a validator and all their delegations",
    86  		Long: strings.TrimSpace(
    87  			fmt.Sprintf(`Query distribution outstanding (un-withdrawn) rewards
    88  for a validator and all their delegations.
    89  
    90  Example:
    91  $ %s query distr outstanding-rewards fbvaloper1pt7xrmxul7sx54ml44lvv403r06clrdkehd8z7
    92  `,
    93  				version.ClientName,
    94  			),
    95  		),
    96  		RunE: func(cmd *cobra.Command, args []string) error {
    97  			cliCtx := context.NewCLIContext().WithCodec(cdc)
    98  
    99  			valAddr, err := sdk.ValAddressFromBech32(args[0])
   100  			if err != nil {
   101  				return err
   102  			}
   103  
   104  			params := types.NewQueryValidatorOutstandingRewardsParams(valAddr)
   105  			bz, err := cdc.MarshalJSON(params)
   106  			if err != nil {
   107  				return err
   108  			}
   109  
   110  			resp, _, err := cliCtx.QueryWithData(
   111  				fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryValidatorOutstandingRewards),
   112  				bz,
   113  			)
   114  			if err != nil {
   115  				return err
   116  			}
   117  
   118  			var outstandingRewards types.ValidatorOutstandingRewards
   119  			if err := cdc.UnmarshalJSON(resp, &outstandingRewards); err != nil {
   120  				return err
   121  			}
   122  
   123  			return cliCtx.PrintOutput(outstandingRewards)
   124  		},
   125  	}
   126  }
   127  
   128  // GetCmdQueryWithdrawAddr implements the query the delegator's withdraw address for commission and reward
   129  func GetCmdQueryWithdrawAddr(queryRoute string, cdc *codec.Codec) *cobra.Command {
   130  	return &cobra.Command{
   131  		Use:   "withdraw-addr [delegator]",
   132  		Args:  cobra.ExactArgs(1),
   133  		Short: "Query delegator's withdraw address",
   134  		Long: strings.TrimSpace(
   135  			fmt.Sprintf(`Query delegator's withdraw address.
   136  
   137  Example:
   138  $ %s query distr withdraw-addr ex17kn7d20d85yymu45h79dqs5pxq9m3nyx2mdmcs
   139  `,
   140  				version.ClientName,
   141  			),
   142  		),
   143  		RunE: func(cmd *cobra.Command, args []string) error {
   144  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   145  
   146  			delegatorAddr, err := sdk.AccAddressFromBech32(args[0])
   147  			if err != nil {
   148  				return err
   149  			}
   150  
   151  			params := types.NewQueryDelegatorWithdrawAddrParams(delegatorAddr)
   152  
   153  			bz, err := cdc.MarshalJSON(params)
   154  			if err != nil {
   155  				return err
   156  			}
   157  
   158  			resp, _, err := cliCtx.QueryWithData(
   159  				fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryWithdrawAddr),
   160  				bz,
   161  			)
   162  			if err != nil {
   163  				return err
   164  			}
   165  
   166  			var accAddress sdk.AccAddress
   167  			if err := cdc.UnmarshalJSON(resp, &accAddress); err != nil {
   168  				return err
   169  			}
   170  
   171  			return cliCtx.PrintOutput(accAddress)
   172  		},
   173  	}
   174  }