github.com/Finschia/finschia-sdk@v0.48.1/x/staking/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/staking/types"
    15  )
    16  
    17  // GetQueryCmd returns the cli query commands for this module
    18  func GetQueryCmd() *cobra.Command {
    19  	stakingQueryCmd := &cobra.Command{
    20  		Use:                        types.ModuleName,
    21  		Short:                      "Querying commands for the staking module",
    22  		DisableFlagParsing:         true,
    23  		SuggestionsMinimumDistance: 2,
    24  		RunE:                       client.ValidateCmd,
    25  	}
    26  
    27  	stakingQueryCmd.AddCommand(
    28  		GetCmdQueryDelegation(),
    29  		GetCmdQueryDelegations(),
    30  		GetCmdQueryUnbondingDelegation(),
    31  		GetCmdQueryUnbondingDelegations(),
    32  		GetCmdQueryRedelegation(),
    33  		GetCmdQueryRedelegations(),
    34  		GetCmdQueryValidator(),
    35  		GetCmdQueryValidators(),
    36  		GetCmdQueryValidatorDelegations(),
    37  		GetCmdQueryValidatorUnbondingDelegations(),
    38  		GetCmdQueryValidatorRedelegations(),
    39  		GetCmdQueryHistoricalInfo(),
    40  		GetCmdQueryParams(),
    41  		GetCmdQueryPool(),
    42  	)
    43  
    44  	return stakingQueryCmd
    45  }
    46  
    47  // GetCmdQueryValidator implements the validator query command.
    48  func GetCmdQueryValidator() *cobra.Command {
    49  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
    50  
    51  	cmd := &cobra.Command{
    52  		Use:   "validator [validator-addr]",
    53  		Short: "Query a validator",
    54  		Long: strings.TrimSpace(
    55  			fmt.Sprintf(`Query details about an individual validator.
    56  
    57  Example:
    58  $ %s query staking validator %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
    59  `,
    60  				version.AppName, bech32PrefixValAddr,
    61  			),
    62  		),
    63  		Args: cobra.ExactArgs(1),
    64  		RunE: func(cmd *cobra.Command, args []string) error {
    65  			clientCtx, err := client.GetClientQueryContext(cmd)
    66  			if err != nil {
    67  				return err
    68  			}
    69  			queryClient := types.NewQueryClient(clientCtx)
    70  
    71  			addr, err := sdk.ValAddressFromBech32(args[0])
    72  			if err != nil {
    73  				return err
    74  			}
    75  
    76  			params := &types.QueryValidatorRequest{ValidatorAddr: addr.String()}
    77  			res, err := queryClient.Validator(cmd.Context(), params)
    78  			if err != nil {
    79  				return err
    80  			}
    81  
    82  			return clientCtx.PrintProto(&res.Validator)
    83  		},
    84  	}
    85  
    86  	flags.AddQueryFlagsToCmd(cmd)
    87  
    88  	return cmd
    89  }
    90  
    91  // GetCmdQueryValidators implements the query all validators command.
    92  func GetCmdQueryValidators() *cobra.Command {
    93  	cmd := &cobra.Command{
    94  		Use:   "validators",
    95  		Short: "Query for all validators",
    96  		Args:  cobra.NoArgs,
    97  		Long: strings.TrimSpace(
    98  			fmt.Sprintf(`Query details about all validators on a network.
    99  
   100  Example:
   101  $ %s query staking validators
   102  `,
   103  				version.AppName,
   104  			),
   105  		),
   106  		RunE: func(cmd *cobra.Command, args []string) error {
   107  			clientCtx, err := client.GetClientQueryContext(cmd)
   108  			if err != nil {
   109  				return err
   110  			}
   111  			queryClient := types.NewQueryClient(clientCtx)
   112  			pageReq, err := client.ReadPageRequest(cmd.Flags())
   113  			if err != nil {
   114  				return err
   115  			}
   116  
   117  			result, err := queryClient.Validators(cmd.Context(), &types.QueryValidatorsRequest{
   118  				// Leaving status empty on purpose to query all validators.
   119  				Pagination: pageReq,
   120  			})
   121  			if err != nil {
   122  				return err
   123  			}
   124  
   125  			return clientCtx.PrintProto(result)
   126  		},
   127  	}
   128  
   129  	flags.AddQueryFlagsToCmd(cmd)
   130  	flags.AddPaginationFlagsToCmd(cmd, "validators")
   131  
   132  	return cmd
   133  }
   134  
   135  // GetCmdQueryValidatorUnbondingDelegations implements the query all unbonding delegatations from a validator command.
   136  func GetCmdQueryValidatorUnbondingDelegations() *cobra.Command {
   137  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   138  
   139  	cmd := &cobra.Command{
   140  		Use:   "unbonding-delegations-from [validator-addr]",
   141  		Short: "Query all unbonding delegatations from a validator",
   142  		Long: strings.TrimSpace(
   143  			fmt.Sprintf(`Query delegations that are unbonding _from_ a validator.
   144  
   145  Example:
   146  $ %s query staking unbonding-delegations-from %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   147  `,
   148  				version.AppName, bech32PrefixValAddr,
   149  			),
   150  		),
   151  		Args: cobra.ExactArgs(1),
   152  		RunE: func(cmd *cobra.Command, args []string) error {
   153  			clientCtx, err := client.GetClientQueryContext(cmd)
   154  			if err != nil {
   155  				return err
   156  			}
   157  			queryClient := types.NewQueryClient(clientCtx)
   158  
   159  			valAddr, err := sdk.ValAddressFromBech32(args[0])
   160  			if err != nil {
   161  				return err
   162  			}
   163  
   164  			pageReq, err := client.ReadPageRequest(cmd.Flags())
   165  			if err != nil {
   166  				return err
   167  			}
   168  
   169  			params := &types.QueryValidatorUnbondingDelegationsRequest{
   170  				ValidatorAddr: valAddr.String(),
   171  				Pagination:    pageReq,
   172  			}
   173  
   174  			res, err := queryClient.ValidatorUnbondingDelegations(cmd.Context(), params)
   175  			if err != nil {
   176  				return err
   177  			}
   178  
   179  			return clientCtx.PrintProto(res)
   180  		},
   181  	}
   182  
   183  	flags.AddQueryFlagsToCmd(cmd)
   184  	flags.AddPaginationFlagsToCmd(cmd, "unbonding delegations")
   185  
   186  	return cmd
   187  }
   188  
   189  // GetCmdQueryValidatorRedelegations implements the query all redelegatations
   190  // from a validator command.
   191  func GetCmdQueryValidatorRedelegations() *cobra.Command {
   192  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   193  
   194  	cmd := &cobra.Command{
   195  		Use:   "redelegations-from [validator-addr]",
   196  		Short: "Query all outgoing redelegatations from a validator",
   197  		Long: strings.TrimSpace(
   198  			fmt.Sprintf(`Query delegations that are redelegating _from_ a validator.
   199  
   200  Example:
   201  $ %s query staking redelegations-from %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   202  `,
   203  				version.AppName, bech32PrefixValAddr,
   204  			),
   205  		),
   206  		Args: cobra.ExactArgs(1),
   207  		RunE: func(cmd *cobra.Command, args []string) error {
   208  			clientCtx, err := client.GetClientQueryContext(cmd)
   209  			if err != nil {
   210  				return err
   211  			}
   212  			queryClient := types.NewQueryClient(clientCtx)
   213  
   214  			valSrcAddr, err := sdk.ValAddressFromBech32(args[0])
   215  			if err != nil {
   216  				return err
   217  			}
   218  
   219  			pageReq, err := client.ReadPageRequest(cmd.Flags())
   220  			if err != nil {
   221  				return err
   222  			}
   223  
   224  			params := &types.QueryRedelegationsRequest{
   225  				SrcValidatorAddr: valSrcAddr.String(),
   226  				Pagination:       pageReq,
   227  			}
   228  
   229  			res, err := queryClient.Redelegations(cmd.Context(), params)
   230  			if err != nil {
   231  				return err
   232  			}
   233  
   234  			return clientCtx.PrintProto(res)
   235  		},
   236  	}
   237  
   238  	flags.AddQueryFlagsToCmd(cmd)
   239  	flags.AddPaginationFlagsToCmd(cmd, "validator redelegations")
   240  
   241  	return cmd
   242  }
   243  
   244  // GetCmdQueryDelegation the query delegation command.
   245  func GetCmdQueryDelegation() *cobra.Command {
   246  	bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
   247  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   248  
   249  	cmd := &cobra.Command{
   250  		Use:   "delegation [delegator-addr] [validator-addr]",
   251  		Short: "Query a delegation based on address and validator address",
   252  		Long: strings.TrimSpace(
   253  			fmt.Sprintf(`Query delegations for an individual delegator on an individual validator.
   254  
   255  Example:
   256  $ %s query staking delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   257  `,
   258  				version.AppName, bech32PrefixAccAddr, bech32PrefixValAddr,
   259  			),
   260  		),
   261  		Args: cobra.ExactArgs(2),
   262  		RunE: func(cmd *cobra.Command, args []string) error {
   263  			clientCtx, err := client.GetClientQueryContext(cmd)
   264  			if err != nil {
   265  				return err
   266  			}
   267  			queryClient := types.NewQueryClient(clientCtx)
   268  
   269  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   270  			if err != nil {
   271  				return err
   272  			}
   273  
   274  			valAddr, err := sdk.ValAddressFromBech32(args[1])
   275  			if err != nil {
   276  				return err
   277  			}
   278  
   279  			params := &types.QueryDelegationRequest{
   280  				DelegatorAddr: delAddr.String(),
   281  				ValidatorAddr: valAddr.String(),
   282  			}
   283  
   284  			res, err := queryClient.Delegation(cmd.Context(), params)
   285  			if err != nil {
   286  				return err
   287  			}
   288  
   289  			return clientCtx.PrintProto(res.DelegationResponse)
   290  		},
   291  	}
   292  
   293  	flags.AddQueryFlagsToCmd(cmd)
   294  
   295  	return cmd
   296  }
   297  
   298  // GetCmdQueryDelegations implements the command to query all the delegations
   299  // made from one delegator.
   300  func GetCmdQueryDelegations() *cobra.Command {
   301  	bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
   302  
   303  	cmd := &cobra.Command{
   304  		Use:   "delegations [delegator-addr]",
   305  		Short: "Query all delegations made by one delegator",
   306  		Long: strings.TrimSpace(
   307  			fmt.Sprintf(`Query delegations for an individual delegator on all validators.
   308  
   309  Example:
   310  $ %s query staking delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
   311  `,
   312  				version.AppName, bech32PrefixAccAddr,
   313  			),
   314  		),
   315  		Args: cobra.ExactArgs(1),
   316  		RunE: func(cmd *cobra.Command, args []string) error {
   317  			clientCtx, err := client.GetClientQueryContext(cmd)
   318  			if err != nil {
   319  				return err
   320  			}
   321  			queryClient := types.NewQueryClient(clientCtx)
   322  
   323  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   324  			if err != nil {
   325  				return err
   326  			}
   327  
   328  			pageReq, err := client.ReadPageRequest(cmd.Flags())
   329  			if err != nil {
   330  				return err
   331  			}
   332  
   333  			params := &types.QueryDelegatorDelegationsRequest{
   334  				DelegatorAddr: delAddr.String(),
   335  				Pagination:    pageReq,
   336  			}
   337  
   338  			res, err := queryClient.DelegatorDelegations(cmd.Context(), params)
   339  			if err != nil {
   340  				return err
   341  			}
   342  
   343  			return clientCtx.PrintProto(res)
   344  		},
   345  	}
   346  
   347  	flags.AddQueryFlagsToCmd(cmd)
   348  	flags.AddPaginationFlagsToCmd(cmd, "delegations")
   349  
   350  	return cmd
   351  }
   352  
   353  // GetCmdQueryValidatorDelegations implements the command to query all the
   354  // delegations to a specific validator.
   355  func GetCmdQueryValidatorDelegations() *cobra.Command {
   356  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   357  
   358  	cmd := &cobra.Command{
   359  		Use:   "delegations-to [validator-addr]",
   360  		Short: "Query all delegations made to one validator",
   361  		Long: strings.TrimSpace(
   362  			fmt.Sprintf(`Query delegations on an individual validator.
   363  
   364  Example:
   365  $ %s query staking delegations-to %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   366  `,
   367  				version.AppName, bech32PrefixValAddr,
   368  			),
   369  		),
   370  		Args: cobra.ExactArgs(1),
   371  		RunE: func(cmd *cobra.Command, args []string) error {
   372  			clientCtx, err := client.GetClientQueryContext(cmd)
   373  			if err != nil {
   374  				return err
   375  			}
   376  			queryClient := types.NewQueryClient(clientCtx)
   377  
   378  			valAddr, err := sdk.ValAddressFromBech32(args[0])
   379  			if err != nil {
   380  				return err
   381  			}
   382  
   383  			pageReq, err := client.ReadPageRequest(cmd.Flags())
   384  			if err != nil {
   385  				return err
   386  			}
   387  
   388  			params := &types.QueryValidatorDelegationsRequest{
   389  				ValidatorAddr: valAddr.String(),
   390  				Pagination:    pageReq,
   391  			}
   392  
   393  			res, err := queryClient.ValidatorDelegations(cmd.Context(), params)
   394  			if err != nil {
   395  				return err
   396  			}
   397  
   398  			return clientCtx.PrintProto(res)
   399  		},
   400  	}
   401  
   402  	flags.AddQueryFlagsToCmd(cmd)
   403  	flags.AddPaginationFlagsToCmd(cmd, "validator delegations")
   404  
   405  	return cmd
   406  }
   407  
   408  // GetCmdQueryUnbondingDelegation implements the command to query a single
   409  // unbonding-delegation record.
   410  func GetCmdQueryUnbondingDelegation() *cobra.Command {
   411  	bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
   412  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   413  
   414  	cmd := &cobra.Command{
   415  		Use:   "unbonding-delegation [delegator-addr] [validator-addr]",
   416  		Short: "Query an unbonding-delegation record based on delegator and validator address",
   417  		Long: strings.TrimSpace(
   418  			fmt.Sprintf(`Query unbonding delegations for an individual delegator on an individual validator.
   419  
   420  Example:
   421  $ %s query staking unbonding-delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   422  `,
   423  				version.AppName, bech32PrefixAccAddr, bech32PrefixValAddr,
   424  			),
   425  		),
   426  		Args: cobra.ExactArgs(2),
   427  		RunE: func(cmd *cobra.Command, args []string) error {
   428  			clientCtx, err := client.GetClientQueryContext(cmd)
   429  			if err != nil {
   430  				return err
   431  			}
   432  			queryClient := types.NewQueryClient(clientCtx)
   433  
   434  			valAddr, err := sdk.ValAddressFromBech32(args[1])
   435  			if err != nil {
   436  				return err
   437  			}
   438  
   439  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   440  			if err != nil {
   441  				return err
   442  			}
   443  
   444  			params := &types.QueryUnbondingDelegationRequest{
   445  				DelegatorAddr: delAddr.String(),
   446  				ValidatorAddr: valAddr.String(),
   447  			}
   448  
   449  			res, err := queryClient.UnbondingDelegation(cmd.Context(), params)
   450  			if err != nil {
   451  				return err
   452  			}
   453  
   454  			return clientCtx.PrintProto(&res.Unbond)
   455  		},
   456  	}
   457  
   458  	flags.AddQueryFlagsToCmd(cmd)
   459  
   460  	return cmd
   461  }
   462  
   463  // GetCmdQueryUnbondingDelegations implements the command to query all the
   464  // unbonding-delegation records for a delegator.
   465  func GetCmdQueryUnbondingDelegations() *cobra.Command {
   466  	bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
   467  
   468  	cmd := &cobra.Command{
   469  		Use:   "unbonding-delegations [delegator-addr]",
   470  		Short: "Query all unbonding-delegations records for one delegator",
   471  		Long: strings.TrimSpace(
   472  			fmt.Sprintf(`Query unbonding delegations for an individual delegator.
   473  
   474  Example:
   475  $ %s query staking unbonding-delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
   476  `,
   477  				version.AppName, bech32PrefixAccAddr,
   478  			),
   479  		),
   480  		Args: cobra.ExactArgs(1),
   481  		RunE: func(cmd *cobra.Command, args []string) error {
   482  			clientCtx, err := client.GetClientQueryContext(cmd)
   483  			if err != nil {
   484  				return err
   485  			}
   486  			queryClient := types.NewQueryClient(clientCtx)
   487  
   488  			delegatorAddr, err := sdk.AccAddressFromBech32(args[0])
   489  			if err != nil {
   490  				return err
   491  			}
   492  
   493  			pageReq, err := client.ReadPageRequest(cmd.Flags())
   494  			if err != nil {
   495  				return err
   496  			}
   497  
   498  			params := &types.QueryDelegatorUnbondingDelegationsRequest{
   499  				DelegatorAddr: delegatorAddr.String(),
   500  				Pagination:    pageReq,
   501  			}
   502  
   503  			res, err := queryClient.DelegatorUnbondingDelegations(cmd.Context(), params)
   504  			if err != nil {
   505  				return err
   506  			}
   507  
   508  			return clientCtx.PrintProto(res)
   509  		},
   510  	}
   511  
   512  	flags.AddQueryFlagsToCmd(cmd)
   513  	flags.AddPaginationFlagsToCmd(cmd, "unbonding delegations")
   514  
   515  	return cmd
   516  }
   517  
   518  // GetCmdQueryRedelegation implements the command to query a single
   519  // redelegation record.
   520  func GetCmdQueryRedelegation() *cobra.Command {
   521  	bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
   522  	bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
   523  
   524  	cmd := &cobra.Command{
   525  		Use:   "redelegation [delegator-addr] [src-validator-addr] [dst-validator-addr]",
   526  		Short: "Query a redelegation record based on delegator and a source and destination validator address",
   527  		Long: strings.TrimSpace(
   528  			fmt.Sprintf(`Query a redelegation record for an individual delegator between a source and destination validator.
   529  
   530  Example:
   531  $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   532  `,
   533  				version.AppName, bech32PrefixAccAddr, bech32PrefixValAddr, bech32PrefixValAddr,
   534  			),
   535  		),
   536  		Args: cobra.ExactArgs(3),
   537  		RunE: func(cmd *cobra.Command, args []string) error {
   538  			clientCtx, err := client.GetClientQueryContext(cmd)
   539  			if err != nil {
   540  				return err
   541  			}
   542  			queryClient := types.NewQueryClient(clientCtx)
   543  
   544  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   545  			if err != nil {
   546  				return err
   547  			}
   548  
   549  			valSrcAddr, err := sdk.ValAddressFromBech32(args[1])
   550  			if err != nil {
   551  				return err
   552  			}
   553  
   554  			valDstAddr, err := sdk.ValAddressFromBech32(args[2])
   555  			if err != nil {
   556  				return err
   557  			}
   558  
   559  			params := &types.QueryRedelegationsRequest{
   560  				DelegatorAddr:    delAddr.String(),
   561  				DstValidatorAddr: valDstAddr.String(),
   562  				SrcValidatorAddr: valSrcAddr.String(),
   563  			}
   564  
   565  			res, err := queryClient.Redelegations(cmd.Context(), params)
   566  			if err != nil {
   567  				return err
   568  			}
   569  
   570  			return clientCtx.PrintProto(res)
   571  		},
   572  	}
   573  
   574  	flags.AddQueryFlagsToCmd(cmd)
   575  
   576  	return cmd
   577  }
   578  
   579  // GetCmdQueryRedelegations implements the command to query all the
   580  // redelegation records for a delegator.
   581  func GetCmdQueryRedelegations() *cobra.Command {
   582  	bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
   583  
   584  	cmd := &cobra.Command{
   585  		Use:   "redelegations [delegator-addr]",
   586  		Args:  cobra.ExactArgs(1),
   587  		Short: "Query all redelegations records for one delegator",
   588  		Long: strings.TrimSpace(
   589  			fmt.Sprintf(`Query all redelegation records for an individual delegator.
   590  
   591  Example:
   592  $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
   593  `,
   594  				version.AppName, bech32PrefixAccAddr,
   595  			),
   596  		),
   597  		RunE: func(cmd *cobra.Command, args []string) error {
   598  			clientCtx, err := client.GetClientQueryContext(cmd)
   599  			if err != nil {
   600  				return err
   601  			}
   602  			queryClient := types.NewQueryClient(clientCtx)
   603  
   604  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   605  			if err != nil {
   606  				return err
   607  			}
   608  
   609  			pageReq, err := client.ReadPageRequest(cmd.Flags())
   610  			if err != nil {
   611  				return err
   612  			}
   613  
   614  			params := &types.QueryRedelegationsRequest{
   615  				DelegatorAddr: delAddr.String(),
   616  				Pagination:    pageReq,
   617  			}
   618  
   619  			res, err := queryClient.Redelegations(cmd.Context(), params)
   620  			if err != nil {
   621  				return err
   622  			}
   623  
   624  			return clientCtx.PrintProto(res)
   625  		},
   626  	}
   627  
   628  	flags.AddQueryFlagsToCmd(cmd)
   629  	flags.AddPaginationFlagsToCmd(cmd, "delegator redelegations")
   630  
   631  	return cmd
   632  }
   633  
   634  // GetCmdQueryHistoricalInfo implements the historical info query command
   635  func GetCmdQueryHistoricalInfo() *cobra.Command {
   636  	cmd := &cobra.Command{
   637  		Use:   "historical-info [height]",
   638  		Args:  cobra.ExactArgs(1),
   639  		Short: "Query historical info at given height",
   640  		Long: strings.TrimSpace(
   641  			fmt.Sprintf(`Query historical info at given height.
   642  
   643  Example:
   644  $ %s query staking historical-info 5
   645  `,
   646  				version.AppName,
   647  			),
   648  		),
   649  		RunE: func(cmd *cobra.Command, args []string) error {
   650  			clientCtx, err := client.GetClientQueryContext(cmd)
   651  			if err != nil {
   652  				return err
   653  			}
   654  			queryClient := types.NewQueryClient(clientCtx)
   655  
   656  			height, err := strconv.ParseInt(args[0], 10, 64)
   657  			if err != nil || height < 0 {
   658  				return fmt.Errorf("height argument provided must be a non-negative-integer: %v", err)
   659  			}
   660  
   661  			params := &types.QueryHistoricalInfoRequest{Height: height}
   662  			res, err := queryClient.HistoricalInfo(cmd.Context(), params)
   663  			if err != nil {
   664  				return err
   665  			}
   666  
   667  			return clientCtx.PrintProto(res.Hist)
   668  		},
   669  	}
   670  
   671  	flags.AddQueryFlagsToCmd(cmd)
   672  
   673  	return cmd
   674  }
   675  
   676  // GetCmdQueryPool implements the pool query command.
   677  func GetCmdQueryPool() *cobra.Command {
   678  	cmd := &cobra.Command{
   679  		Use:   "pool",
   680  		Args:  cobra.NoArgs,
   681  		Short: "Query the current staking pool values",
   682  		Long: strings.TrimSpace(
   683  			fmt.Sprintf(`Query values for amounts stored in the staking pool.
   684  
   685  Example:
   686  $ %s query staking pool
   687  `,
   688  				version.AppName,
   689  			),
   690  		),
   691  		RunE: func(cmd *cobra.Command, args []string) error {
   692  			clientCtx, err := client.GetClientQueryContext(cmd)
   693  			if err != nil {
   694  				return err
   695  			}
   696  			queryClient := types.NewQueryClient(clientCtx)
   697  
   698  			res, err := queryClient.Pool(cmd.Context(), &types.QueryPoolRequest{})
   699  			if err != nil {
   700  				return err
   701  			}
   702  
   703  			return clientCtx.PrintProto(&res.Pool)
   704  		},
   705  	}
   706  
   707  	flags.AddQueryFlagsToCmd(cmd)
   708  
   709  	return cmd
   710  }
   711  
   712  // GetCmdQueryParams implements the params query command.
   713  func GetCmdQueryParams() *cobra.Command {
   714  	cmd := &cobra.Command{
   715  		Use:   "params",
   716  		Args:  cobra.NoArgs,
   717  		Short: "Query the current staking parameters information",
   718  		Long: strings.TrimSpace(
   719  			fmt.Sprintf(`Query values set as staking parameters.
   720  
   721  Example:
   722  $ %s query staking params
   723  `,
   724  				version.AppName,
   725  			),
   726  		),
   727  		RunE: func(cmd *cobra.Command, args []string) error {
   728  			clientCtx, err := client.GetClientQueryContext(cmd)
   729  			if err != nil {
   730  				return err
   731  			}
   732  			queryClient := types.NewQueryClient(clientCtx)
   733  
   734  			res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{})
   735  			if err != nil {
   736  				return err
   737  			}
   738  
   739  			return clientCtx.PrintProto(&res.Params)
   740  		},
   741  	}
   742  
   743  	flags.AddQueryFlagsToCmd(cmd)
   744  
   745  	return cmd
   746  }