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 }