2019-11-25 19:46:02 +00:00
|
|
|
package cli
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2020-01-12 15:35:34 +00:00
|
|
|
"strings"
|
2019-11-25 19:46:02 +00:00
|
|
|
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
|
|
|
|
"github.com/cosmos/cosmos-sdk/client"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client/context"
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
|
|
|
|
"github.com/kava-labs/kava/x/cdp/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
// GetQueryCmd returns the cli query commands for this module
|
|
|
|
func GetQueryCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
|
|
|
// Group nameservice queries under a subcommand
|
|
|
|
cdpQueryCmd := &cobra.Command{
|
|
|
|
Use: "cdp",
|
|
|
|
Short: "Querying commands for the cdp module",
|
|
|
|
}
|
|
|
|
|
|
|
|
cdpQueryCmd.AddCommand(client.GetCommands(
|
2020-01-12 15:35:34 +00:00
|
|
|
QueryCdpCmd(queryRoute, cdc),
|
|
|
|
QueryCdpsByDenomCmd(queryRoute, cdc),
|
|
|
|
QueryCdpsByDenomAndRatioCmd(queryRoute, cdc),
|
|
|
|
QueryParamsCmd(queryRoute, cdc),
|
2019-11-25 19:46:02 +00:00
|
|
|
)...)
|
|
|
|
|
|
|
|
return cdpQueryCmd
|
|
|
|
}
|
|
|
|
|
2020-01-12 15:35:34 +00:00
|
|
|
// QueryCdpCmd returns the command handler for querying a particular cdp
|
|
|
|
func QueryCdpCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
2019-11-25 19:46:02 +00:00
|
|
|
return &cobra.Command{
|
|
|
|
Use: "cdp [ownerAddress] [collateralType]",
|
|
|
|
Short: "get info about a cdp",
|
|
|
|
Args: cobra.ExactArgs(2),
|
|
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
|
|
cliCtx := context.NewCLIContext().WithCodec(cdc)
|
|
|
|
|
|
|
|
// Prepare params for querier
|
|
|
|
ownerAddress, err := sdk.AccAddressFromBech32(args[0])
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
collateralType := args[1] // TODO validation?
|
2020-01-15 14:19:33 +00:00
|
|
|
bz, err := cdc.MarshalJSON(types.QueryCdpParams{
|
2019-11-25 19:46:02 +00:00
|
|
|
CollateralDenom: collateralType,
|
2020-01-15 14:19:33 +00:00
|
|
|
Owner: ownerAddress,
|
2019-11-25 19:46:02 +00:00
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Query
|
2020-01-12 15:35:34 +00:00
|
|
|
route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryGetCdp)
|
2019-11-25 19:46:02 +00:00
|
|
|
res, _, err := cliCtx.QueryWithData(route, bz)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Decode and print results
|
2020-01-12 15:35:34 +00:00
|
|
|
var cdp types.CDP
|
|
|
|
cdc.MustUnmarshalJSON(res, &cdp)
|
|
|
|
return cliCtx.PrintOutput(cdp)
|
2019-11-25 19:46:02 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-12 15:35:34 +00:00
|
|
|
// QueryCdpsByDenomCmd returns the command handler for querying cdps for a collateral type
|
|
|
|
func QueryCdpsByDenomCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
2019-11-25 19:46:02 +00:00
|
|
|
return &cobra.Command{
|
|
|
|
Use: "cdps [collateralType]",
|
2020-01-12 15:35:34 +00:00
|
|
|
Short: "Query cdps by collateral type",
|
|
|
|
Long: strings.TrimSpace(`Query cdps by a specific collateral type, or query all cdps if none is specifed:
|
|
|
|
|
2020-01-15 14:19:33 +00:00
|
|
|
$ <appcli> query cdp cdps uatom
|
2020-01-12 15:35:34 +00:00
|
|
|
`),
|
|
|
|
Args: cobra.MaximumNArgs(1),
|
2019-11-25 19:46:02 +00:00
|
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
|
|
cliCtx := context.NewCLIContext().WithCodec(cdc)
|
|
|
|
|
|
|
|
// Prepare params for querier
|
2020-01-12 15:35:34 +00:00
|
|
|
bz, err := cdc.MarshalJSON(types.QueryCdpsParams{CollateralDenom: args[0]})
|
2019-11-25 19:46:02 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Query
|
|
|
|
route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryGetCdps)
|
|
|
|
res, _, err := cliCtx.QueryWithData(route, bz)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Decode and print results
|
|
|
|
var out types.CDPs
|
|
|
|
cdc.MustUnmarshalJSON(res, &out)
|
|
|
|
return cliCtx.PrintOutput(out)
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-12 15:35:34 +00:00
|
|
|
// QueryCdpsByDenomAndRatioCmd returns the command handler for querying cdps
|
|
|
|
// by specified collateral type and collateralization ratio
|
|
|
|
func QueryCdpsByDenomAndRatioCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
2019-11-25 19:46:02 +00:00
|
|
|
return &cobra.Command{
|
2020-01-12 15:35:34 +00:00
|
|
|
Use: "cdps [collateralType] [ratio]",
|
|
|
|
Short: "get cdps with matching collateral type and below the specified ratio",
|
|
|
|
Long: strings.TrimSpace(`Get all CDPS of a particular collateral type with collateralization
|
|
|
|
ratio below the specified input.`),
|
|
|
|
Args: cobra.ExactArgs(2),
|
2019-11-25 19:46:02 +00:00
|
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
|
|
cliCtx := context.NewCLIContext().WithCodec(cdc)
|
|
|
|
|
|
|
|
// Prepare params for querier
|
|
|
|
price, errSdk := sdk.NewDecFromStr(args[1])
|
|
|
|
if errSdk != nil {
|
2020-01-12 15:35:34 +00:00
|
|
|
return fmt.Errorf(errSdk.Error())
|
2019-11-25 19:46:02 +00:00
|
|
|
}
|
2020-01-12 15:35:34 +00:00
|
|
|
bz, err := cdc.MarshalJSON(types.QueryCdpsByRatioParams{
|
|
|
|
CollateralDenom: args[0],
|
|
|
|
Ratio: price,
|
2019-11-25 19:46:02 +00:00
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Query
|
|
|
|
route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryGetCdps)
|
|
|
|
res, _, err := cliCtx.QueryWithData(route, bz)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Decode and print results
|
|
|
|
var out types.CDPs
|
|
|
|
cdc.MustUnmarshalJSON(res, &out)
|
|
|
|
return cliCtx.PrintOutput(out)
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-12 15:35:34 +00:00
|
|
|
// QueryParamsCmd returns the command handler for cdp parameter querying
|
|
|
|
func QueryParamsCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
2019-11-25 19:46:02 +00:00
|
|
|
return &cobra.Command{
|
|
|
|
Use: "params",
|
|
|
|
Short: "get the cdp module parameters",
|
|
|
|
Long: "Get the current global cdp module parameters.",
|
|
|
|
Args: cobra.NoArgs,
|
|
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
|
|
cliCtx := context.NewCLIContext().WithCodec(cdc)
|
|
|
|
|
|
|
|
// Query
|
|
|
|
route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryGetParams)
|
2020-01-12 15:35:34 +00:00
|
|
|
res, _, err := cliCtx.QueryWithData(route, nil)
|
2019-11-25 19:46:02 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Decode and print results
|
2020-01-12 15:35:34 +00:00
|
|
|
var out types.QueryCdpParams
|
2019-11-25 19:46:02 +00:00
|
|
|
cdc.MustUnmarshalJSON(res, &out)
|
|
|
|
return cliCtx.PrintOutput(out)
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|