github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/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/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/staking/types"
    17  )
    18  
    19  // GetQueryCmd returns the cli query commands for this module
    20  func GetQueryCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
    21  	stakingQueryCmd := &cobra.Command{
    22  		Use:                        types.ModuleName,
    23  		Short:                      "Querying commands for the staking module",
    24  		DisableFlagParsing:         true,
    25  		SuggestionsMinimumDistance: 2,
    26  		RunE:                       client.ValidateCmd,
    27  	}
    28  	stakingQueryCmd.AddCommand(flags.GetCommands(
    29  		GetCmdQueryDelegation(queryRoute, cdc),
    30  		GetCmdQueryDelegations(queryRoute, cdc),
    31  		GetCmdQueryUnbondingDelegation(queryRoute, cdc),
    32  		GetCmdQueryUnbondingDelegations(queryRoute, cdc),
    33  		GetCmdQueryRedelegation(queryRoute, cdc),
    34  		GetCmdQueryRedelegations(queryRoute, cdc),
    35  		GetCmdQueryValidator(queryRoute, cdc),
    36  		GetCmdQueryValidators(queryRoute, cdc),
    37  		GetCmdQueryValidatorDelegations(queryRoute, cdc),
    38  		GetCmdQueryValidatorUnbondingDelegations(queryRoute, cdc),
    39  		GetCmdQueryValidatorRedelegations(queryRoute, cdc),
    40  		GetCmdQueryHistoricalInfo(queryRoute, cdc),
    41  		GetCmdQueryParams(queryRoute, cdc),
    42  		GetCmdQueryPool(queryRoute, cdc))...)
    43  
    44  	return stakingQueryCmd
    45  
    46  }
    47  
    48  // GetCmdQueryValidator implements the validator query command.
    49  func GetCmdQueryValidator(storeName string, cdc *codec.Codec) *cobra.Command {
    50  	return &cobra.Command{
    51  		Use:   "validator [validator-addr]",
    52  		Short: "Query a validator",
    53  		Long: strings.TrimSpace(
    54  			fmt.Sprintf(`Query details about an individual validator.
    55  
    56  Example:
    57  $ %s query staking validator cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
    58  `,
    59  				version.ClientName,
    60  			),
    61  		),
    62  		Args: cobra.ExactArgs(1),
    63  		RunE: func(cmd *cobra.Command, args []string) error {
    64  			cliCtx := context.NewCLIContext().WithCodec(cdc)
    65  
    66  			addr, err := sdk.ValAddressFromBech32(args[0])
    67  			if err != nil {
    68  				return err
    69  			}
    70  
    71  			res, _, err := cliCtx.QueryStore(types.GetValidatorKey(addr), storeName)
    72  			if err != nil {
    73  				return err
    74  			}
    75  
    76  			if len(res) == 0 {
    77  				return fmt.Errorf("no validator found with address %s", addr)
    78  			}
    79  
    80  			return cliCtx.PrintOutput(types.MustUnmarshalValidator(cdc, res))
    81  		},
    82  	}
    83  }
    84  
    85  // GetCmdQueryValidators implements the query all validators command.
    86  func GetCmdQueryValidators(storeName string, cdc *codec.Codec) *cobra.Command {
    87  	return &cobra.Command{
    88  		Use:   "validators",
    89  		Short: "Query for all validators",
    90  		Args:  cobra.NoArgs,
    91  		Long: strings.TrimSpace(
    92  			fmt.Sprintf(`Query details about all validators on a network.
    93  
    94  Example:
    95  $ %s query staking validators
    96  `,
    97  				version.ClientName,
    98  			),
    99  		),
   100  		RunE: func(cmd *cobra.Command, args []string) error {
   101  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   102  
   103  			resKVs, _, err := cliCtx.QuerySubspace(types.ValidatorsKey, storeName)
   104  			if err != nil {
   105  				return err
   106  			}
   107  
   108  			var validators types.Validators
   109  			for _, kv := range resKVs {
   110  				validators = append(validators, types.MustUnmarshalValidator(cdc, kv.Value))
   111  			}
   112  
   113  			return cliCtx.PrintOutput(validators)
   114  		},
   115  	}
   116  }
   117  
   118  // GetCmdQueryValidatorUnbondingDelegations implements the query all unbonding delegatations from a validator command.
   119  func GetCmdQueryValidatorUnbondingDelegations(queryRoute string, cdc *codec.Codec) *cobra.Command {
   120  	return &cobra.Command{
   121  		Use:   "unbonding-delegations-from [validator-addr]",
   122  		Short: "Query all unbonding delegatations from a validator",
   123  		Long: strings.TrimSpace(
   124  			fmt.Sprintf(`Query delegations that are unbonding _from_ a validator.
   125  
   126  Example:
   127  $ %s query staking unbonding-delegations-from cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   128  `,
   129  				version.ClientName,
   130  			),
   131  		),
   132  		Args: cobra.ExactArgs(1),
   133  		RunE: func(cmd *cobra.Command, args []string) error {
   134  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   135  
   136  			valAddr, err := sdk.ValAddressFromBech32(args[0])
   137  			if err != nil {
   138  				return err
   139  			}
   140  
   141  			bz, err := cdc.MarshalJSON(types.NewQueryValidatorParams(valAddr))
   142  			if err != nil {
   143  				return err
   144  			}
   145  
   146  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryValidatorUnbondingDelegations)
   147  			res, _, err := cliCtx.QueryWithData(route, bz)
   148  			if err != nil {
   149  				return err
   150  			}
   151  
   152  			var ubds types.UnbondingDelegations
   153  			cdc.MustUnmarshalJSON(res, &ubds)
   154  			return cliCtx.PrintOutput(ubds)
   155  		},
   156  	}
   157  }
   158  
   159  // GetCmdQueryValidatorRedelegations implements the query all redelegatations
   160  // from a validator command.
   161  func GetCmdQueryValidatorRedelegations(queryRoute string, cdc *codec.Codec) *cobra.Command {
   162  	return &cobra.Command{
   163  		Use:   "redelegations-from [validator-addr]",
   164  		Short: "Query all outgoing redelegatations from a validator",
   165  		Long: strings.TrimSpace(
   166  			fmt.Sprintf(`Query delegations that are redelegating _from_ a validator.
   167  
   168  Example:
   169  $ %s query staking redelegations-from cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   170  `,
   171  				version.ClientName,
   172  			),
   173  		),
   174  		Args: cobra.ExactArgs(1),
   175  		RunE: func(cmd *cobra.Command, args []string) error {
   176  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   177  
   178  			valSrcAddr, err := sdk.ValAddressFromBech32(args[0])
   179  			if err != nil {
   180  				return err
   181  			}
   182  
   183  			bz, err := cdc.MarshalJSON(types.QueryRedelegationParams{SrcValidatorAddr: valSrcAddr})
   184  			if err != nil {
   185  				return err
   186  			}
   187  
   188  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryRedelegations)
   189  			res, _, err := cliCtx.QueryWithData(route, bz)
   190  			if err != nil {
   191  				return err
   192  			}
   193  
   194  			var resp types.RedelegationResponses
   195  			if err := cdc.UnmarshalJSON(res, &resp); err != nil {
   196  				return err
   197  			}
   198  
   199  			return cliCtx.PrintOutput(resp)
   200  		},
   201  	}
   202  }
   203  
   204  // GetCmdQueryDelegation the query delegation command.
   205  func GetCmdQueryDelegation(queryRoute string, cdc *codec.Codec) *cobra.Command {
   206  	return &cobra.Command{
   207  		Use:   "delegation [delegator-addr] [validator-addr]",
   208  		Short: "Query a delegation based on address and validator address",
   209  		Long: strings.TrimSpace(
   210  			fmt.Sprintf(`Query delegations for an individual delegator on an individual validator.
   211  
   212  Example:
   213  $ %s query staking delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   214  `,
   215  				version.ClientName,
   216  			),
   217  		),
   218  		Args: cobra.ExactArgs(2),
   219  		RunE: func(cmd *cobra.Command, args []string) error {
   220  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   221  
   222  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   223  			if err != nil {
   224  				return err
   225  			}
   226  
   227  			valAddr, err := sdk.ValAddressFromBech32(args[1])
   228  			if err != nil {
   229  				return err
   230  			}
   231  
   232  			bz, err := cdc.MarshalJSON(types.NewQueryBondsParams(delAddr, valAddr))
   233  			if err != nil {
   234  				return err
   235  			}
   236  
   237  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegation)
   238  			res, _, err := cliCtx.QueryWithData(route, bz)
   239  			if err != nil {
   240  				return err
   241  			}
   242  
   243  			var resp types.DelegationResponse
   244  			if err := cdc.UnmarshalJSON(res, &resp); err != nil {
   245  				return err
   246  			}
   247  
   248  			return cliCtx.PrintOutput(resp)
   249  		},
   250  	}
   251  }
   252  
   253  // GetCmdQueryDelegations implements the command to query all the delegations
   254  // made from one delegator.
   255  func GetCmdQueryDelegations(queryRoute string, cdc *codec.Codec) *cobra.Command {
   256  	return &cobra.Command{
   257  		Use:   "delegations [delegator-addr]",
   258  		Short: "Query all delegations made by one delegator",
   259  		Long: strings.TrimSpace(
   260  			fmt.Sprintf(`Query delegations for an individual delegator on all validators.
   261  
   262  Example:
   263  $ %s query staking delegations cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
   264  `,
   265  				version.ClientName,
   266  			),
   267  		),
   268  		Args: cobra.ExactArgs(1),
   269  		RunE: func(cmd *cobra.Command, args []string) error {
   270  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   271  
   272  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   273  			if err != nil {
   274  				return err
   275  			}
   276  
   277  			bz, err := cdc.MarshalJSON(types.NewQueryDelegatorParams(delAddr))
   278  			if err != nil {
   279  				return err
   280  			}
   281  
   282  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegatorDelegations)
   283  			res, _, err := cliCtx.QueryWithData(route, bz)
   284  			if err != nil {
   285  				return err
   286  			}
   287  
   288  			var resp types.DelegationResponses
   289  			if err := cdc.UnmarshalJSON(res, &resp); err != nil {
   290  				return err
   291  			}
   292  
   293  			return cliCtx.PrintOutput(resp)
   294  		},
   295  	}
   296  }
   297  
   298  // GetCmdQueryValidatorDelegations implements the command to query all the
   299  // delegations to a specific validator.
   300  func GetCmdQueryValidatorDelegations(queryRoute string, cdc *codec.Codec) *cobra.Command {
   301  	return &cobra.Command{
   302  		Use:   "delegations-to [validator-addr]",
   303  		Short: "Query all delegations made to one validator",
   304  		Long: strings.TrimSpace(
   305  			fmt.Sprintf(`Query delegations on an individual validator.
   306  
   307  Example:
   308  $ %s query staking delegations-to cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   309  `,
   310  				version.ClientName,
   311  			),
   312  		),
   313  		Args: cobra.ExactArgs(1),
   314  		RunE: func(cmd *cobra.Command, args []string) error {
   315  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   316  
   317  			valAddr, err := sdk.ValAddressFromBech32(args[0])
   318  			if err != nil {
   319  				return err
   320  			}
   321  
   322  			bz, err := cdc.MarshalJSON(types.NewQueryValidatorParams(valAddr))
   323  			if err != nil {
   324  				return err
   325  			}
   326  
   327  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryValidatorDelegations)
   328  			res, _, err := cliCtx.QueryWithData(route, bz)
   329  			if err != nil {
   330  				return err
   331  			}
   332  
   333  			var resp types.DelegationResponses
   334  			if err := cdc.UnmarshalJSON(res, &resp); err != nil {
   335  				return err
   336  			}
   337  
   338  			return cliCtx.PrintOutput(resp)
   339  		},
   340  	}
   341  }
   342  
   343  // GetCmdQueryUnbondingDelegation implements the command to query a single
   344  // unbonding-delegation record.
   345  func GetCmdQueryUnbondingDelegation(queryRoute string, cdc *codec.Codec) *cobra.Command {
   346  	return &cobra.Command{
   347  		Use:   "unbonding-delegation [delegator-addr] [validator-addr]",
   348  		Short: "Query an unbonding-delegation record based on delegator and validator address",
   349  		Long: strings.TrimSpace(
   350  			fmt.Sprintf(`Query unbonding delegations for an individual delegator on an individual validator.
   351  
   352  Example:
   353  $ %s query staking unbonding-delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   354  `,
   355  				version.ClientName,
   356  			),
   357  		),
   358  		Args: cobra.ExactArgs(2),
   359  		RunE: func(cmd *cobra.Command, args []string) error {
   360  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   361  
   362  			valAddr, err := sdk.ValAddressFromBech32(args[1])
   363  			if err != nil {
   364  				return err
   365  			}
   366  
   367  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   368  			if err != nil {
   369  				return err
   370  			}
   371  
   372  			bz, err := cdc.MarshalJSON(types.NewQueryBondsParams(delAddr, valAddr))
   373  			if err != nil {
   374  				return err
   375  			}
   376  
   377  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryUnbondingDelegation)
   378  			res, _, err := cliCtx.QueryWithData(route, bz)
   379  			if err != nil {
   380  				return err
   381  			}
   382  
   383  			return cliCtx.PrintOutput(types.MustUnmarshalUBD(cdc, res))
   384  		},
   385  	}
   386  }
   387  
   388  // GetCmdQueryUnbondingDelegations implements the command to query all the
   389  // unbonding-delegation records for a delegator.
   390  func GetCmdQueryUnbondingDelegations(queryRoute string, cdc *codec.Codec) *cobra.Command {
   391  	return &cobra.Command{
   392  		Use:   "unbonding-delegations [delegator-addr]",
   393  		Short: "Query all unbonding-delegations records for one delegator",
   394  		Long: strings.TrimSpace(
   395  			fmt.Sprintf(`Query unbonding delegations for an individual delegator.
   396  
   397  Example:
   398  $ %s query staking unbonding-delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
   399  `,
   400  				version.ClientName,
   401  			),
   402  		),
   403  		Args: cobra.ExactArgs(1),
   404  		RunE: func(cmd *cobra.Command, args []string) error {
   405  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   406  
   407  			delegatorAddr, err := sdk.AccAddressFromBech32(args[0])
   408  			if err != nil {
   409  				return err
   410  			}
   411  
   412  			bz, err := cdc.MarshalJSON(types.NewQueryDelegatorParams(delegatorAddr))
   413  			if err != nil {
   414  				return err
   415  			}
   416  
   417  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegatorUnbondingDelegations)
   418  			res, _, err := cliCtx.QueryWithData(route, bz)
   419  			if err != nil {
   420  				return err
   421  			}
   422  
   423  			var ubds types.UnbondingDelegations
   424  			if err = cdc.UnmarshalJSON(res, &ubds); err != nil {
   425  				return err
   426  			}
   427  
   428  			return cliCtx.PrintOutput(ubds)
   429  		},
   430  	}
   431  }
   432  
   433  // GetCmdQueryRedelegation implements the command to query a single
   434  // redelegation record.
   435  func GetCmdQueryRedelegation(queryRoute string, cdc *codec.Codec) *cobra.Command {
   436  	return &cobra.Command{
   437  		Use:   "redelegation [delegator-addr] [src-validator-addr] [dst-validator-addr]",
   438  		Short: "Query a redelegation record based on delegator and a source and destination validator address",
   439  		Long: strings.TrimSpace(
   440  			fmt.Sprintf(`Query a redelegation record for an individual delegator between a source and destination validator.
   441  
   442  Example:
   443  $ %s query staking redelegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
   444  `,
   445  				version.ClientName,
   446  			),
   447  		),
   448  		Args: cobra.ExactArgs(3),
   449  		RunE: func(cmd *cobra.Command, args []string) error {
   450  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   451  
   452  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   453  			if err != nil {
   454  				return err
   455  			}
   456  
   457  			valSrcAddr, err := sdk.ValAddressFromBech32(args[1])
   458  			if err != nil {
   459  				return err
   460  			}
   461  
   462  			valDstAddr, err := sdk.ValAddressFromBech32(args[2])
   463  			if err != nil {
   464  				return err
   465  			}
   466  
   467  			bz, err := cdc.MarshalJSON(types.NewQueryRedelegationParams(delAddr, valSrcAddr, valDstAddr))
   468  			if err != nil {
   469  				return err
   470  			}
   471  
   472  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryRedelegations)
   473  			res, _, err := cliCtx.QueryWithData(route, bz)
   474  			if err != nil {
   475  				return err
   476  			}
   477  
   478  			var resp types.RedelegationResponses
   479  			if err := cdc.UnmarshalJSON(res, &resp); err != nil {
   480  				return err
   481  			}
   482  
   483  			return cliCtx.PrintOutput(resp)
   484  		},
   485  	}
   486  }
   487  
   488  // GetCmdQueryRedelegations implements the command to query all the
   489  // redelegation records for a delegator.
   490  func GetCmdQueryRedelegations(queryRoute string, cdc *codec.Codec) *cobra.Command {
   491  	return &cobra.Command{
   492  		Use:   "redelegations [delegator-addr]",
   493  		Args:  cobra.ExactArgs(1),
   494  		Short: "Query all redelegations records for one delegator",
   495  		Long: strings.TrimSpace(
   496  			fmt.Sprintf(`Query all redelegation records for an individual delegator.
   497  
   498  Example:
   499  $ %s query staking redelegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
   500  `,
   501  				version.ClientName,
   502  			),
   503  		),
   504  		RunE: func(cmd *cobra.Command, args []string) error {
   505  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   506  
   507  			delAddr, err := sdk.AccAddressFromBech32(args[0])
   508  			if err != nil {
   509  				return err
   510  			}
   511  
   512  			bz, err := cdc.MarshalJSON(types.QueryRedelegationParams{DelegatorAddr: delAddr})
   513  			if err != nil {
   514  				return err
   515  			}
   516  
   517  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryRedelegations)
   518  			res, _, err := cliCtx.QueryWithData(route, bz)
   519  			if err != nil {
   520  				return err
   521  			}
   522  
   523  			var resp types.RedelegationResponses
   524  			if err := cdc.UnmarshalJSON(res, &resp); err != nil {
   525  				return err
   526  			}
   527  
   528  			return cliCtx.PrintOutput(resp)
   529  		},
   530  	}
   531  }
   532  
   533  // GetCmdQueryHistoricalInfo implements the historical info query command
   534  func GetCmdQueryHistoricalInfo(queryRoute string, cdc *codec.Codec) *cobra.Command {
   535  	return &cobra.Command{
   536  		Use:   "historical-info [height]",
   537  		Args:  cobra.ExactArgs(1),
   538  		Short: "Query historical info at given height",
   539  		Long: strings.TrimSpace(
   540  			fmt.Sprintf(`Query historical info at given height.
   541  
   542  Example:
   543  $ %s query staking historical-info 5
   544  `,
   545  				version.ClientName,
   546  			),
   547  		),
   548  		RunE: func(cmd *cobra.Command, args []string) error {
   549  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   550  
   551  			height, err := strconv.ParseInt(args[0], 10, 64)
   552  			if err != nil || height < 0 {
   553  				return fmt.Errorf("height argument provided must be a non-negative-integer: %v", err)
   554  			}
   555  
   556  			bz, err := cdc.MarshalJSON(types.QueryHistoricalInfoParams{Height: height})
   557  			if err != nil {
   558  				return err
   559  			}
   560  
   561  			route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryHistoricalInfo)
   562  			res, _, err := cliCtx.QueryWithData(route, bz)
   563  			if err != nil {
   564  				return err
   565  			}
   566  
   567  			var resp types.HistoricalInfo
   568  			if err := cdc.UnmarshalJSON(res, &resp); err != nil {
   569  				return err
   570  			}
   571  
   572  			return cliCtx.PrintOutput(resp)
   573  		},
   574  	}
   575  }
   576  
   577  // GetCmdQueryPool implements the pool query command.
   578  func GetCmdQueryPool(storeName string, cdc *codec.Codec) *cobra.Command {
   579  	return &cobra.Command{
   580  		Use:   "pool",
   581  		Args:  cobra.NoArgs,
   582  		Short: "Query the current staking pool values",
   583  		Long: strings.TrimSpace(
   584  			fmt.Sprintf(`Query values for amounts stored in the staking pool.
   585  
   586  Example:
   587  $ %s query staking pool
   588  `,
   589  				version.ClientName,
   590  			),
   591  		),
   592  		RunE: func(cmd *cobra.Command, args []string) error {
   593  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   594  
   595  			bz, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/pool", storeName), nil)
   596  			if err != nil {
   597  				return err
   598  			}
   599  
   600  			var pool types.Pool
   601  			if err := cdc.UnmarshalJSON(bz, &pool); err != nil {
   602  				return err
   603  			}
   604  
   605  			return cliCtx.PrintOutput(pool)
   606  		},
   607  	}
   608  }
   609  
   610  // GetCmdQueryParams implements the params query command.
   611  func GetCmdQueryParams(storeName string, cdc *codec.Codec) *cobra.Command {
   612  	return &cobra.Command{
   613  		Use:   "params",
   614  		Args:  cobra.NoArgs,
   615  		Short: "Query the current staking parameters information",
   616  		Long: strings.TrimSpace(
   617  			fmt.Sprintf(`Query values set as staking parameters.
   618  
   619  Example:
   620  $ %s query staking params
   621  `,
   622  				version.ClientName,
   623  			),
   624  		),
   625  		RunE: func(cmd *cobra.Command, args []string) error {
   626  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   627  
   628  			route := fmt.Sprintf("custom/%s/%s", storeName, types.QueryParameters)
   629  			bz, _, err := cliCtx.QueryWithData(route, nil)
   630  			if err != nil {
   631  				return err
   632  			}
   633  
   634  			var params types.Params
   635  			cdc.MustUnmarshalJSON(bz, &params)
   636  			return cliCtx.PrintOutput(params)
   637  		},
   638  	}
   639  }