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, ¶ms); 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 }