mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 14:17:28 +00:00 
			
		
		
		
	* add total supply endpoint to x/liquid * add test of x/liquid total supply query * refactor x/savings test * add total supply endpoint for x/savings (w/ test) * add total supply endpoint for x/earn * handle converting bkava to underlying staked amount * aggregate bkava underlying values in x/earn * aggregate underlying value of bkava in x/savings
		
			
				
	
	
		
			209 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package cli
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	"github.com/spf13/cobra"
 | 
						|
 | 
						|
	"github.com/cosmos/cosmos-sdk/client"
 | 
						|
	"github.com/cosmos/cosmos-sdk/client/flags"
 | 
						|
	"github.com/cosmos/cosmos-sdk/version"
 | 
						|
 | 
						|
	"github.com/kava-labs/kava/x/earn/types"
 | 
						|
)
 | 
						|
 | 
						|
// flags for cli queries
 | 
						|
const (
 | 
						|
	flagDenom               = "denom"
 | 
						|
	flagOwner               = "owner"
 | 
						|
	flagValueInStakedTokens = "value_in_staked_tokens"
 | 
						|
)
 | 
						|
 | 
						|
// GetQueryCmd returns the cli query commands for the earn module
 | 
						|
func GetQueryCmd() *cobra.Command {
 | 
						|
	earnQueryCommand := &cobra.Command{
 | 
						|
		Use:                        types.ModuleName,
 | 
						|
		Short:                      "Querying commands for the earn module",
 | 
						|
		DisableFlagParsing:         true,
 | 
						|
		SuggestionsMinimumDistance: 2,
 | 
						|
		RunE:                       client.ValidateCmd,
 | 
						|
	}
 | 
						|
 | 
						|
	cmds := []*cobra.Command{
 | 
						|
		queryParamsCmd(),
 | 
						|
		queryVaultsCmd(),
 | 
						|
		queryVaultCmd(),
 | 
						|
		queryDepositsCmd(),
 | 
						|
		queryTotalSupplyCmd(),
 | 
						|
	}
 | 
						|
 | 
						|
	for _, cmd := range cmds {
 | 
						|
		flags.AddQueryFlagsToCmd(cmd)
 | 
						|
	}
 | 
						|
 | 
						|
	earnQueryCommand.AddCommand(cmds...)
 | 
						|
 | 
						|
	return earnQueryCommand
 | 
						|
}
 | 
						|
 | 
						|
func queryParamsCmd() *cobra.Command {
 | 
						|
	return &cobra.Command{
 | 
						|
		Use:   "params",
 | 
						|
		Short: "get the earn module parameters",
 | 
						|
		Long:  "Get the current earn module parameters.",
 | 
						|
		Args:  cobra.NoArgs,
 | 
						|
		RunE: func(cmd *cobra.Command, args []string) error {
 | 
						|
			clientCtx, err := client.GetClientQueryContext(cmd)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			queryClient := types.NewQueryClient(clientCtx)
 | 
						|
 | 
						|
			req := types.NewQueryParamsRequest()
 | 
						|
			res, err := queryClient.Params(context.Background(), req)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			return clientCtx.PrintProto(&res.Params)
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func queryVaultsCmd() *cobra.Command {
 | 
						|
	return &cobra.Command{
 | 
						|
		Use:     "vaults",
 | 
						|
		Short:   "get all earn vaults",
 | 
						|
		Long:    "Get all earn module vaults.",
 | 
						|
		Args:    cobra.NoArgs,
 | 
						|
		Example: fmt.Sprintf(`%[1]s q %[2]s vaults`, version.AppName, types.ModuleName),
 | 
						|
		RunE: func(cmd *cobra.Command, args []string) error {
 | 
						|
			clientCtx, err := client.GetClientQueryContext(cmd)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			queryClient := types.NewQueryClient(clientCtx)
 | 
						|
 | 
						|
			req := types.NewQueryVaultsRequest()
 | 
						|
			res, err := queryClient.Vaults(context.Background(), req)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			return clientCtx.PrintProto(res)
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func queryVaultCmd() *cobra.Command {
 | 
						|
	return &cobra.Command{
 | 
						|
		Use:     "vault",
 | 
						|
		Short:   "get a earn vault",
 | 
						|
		Long:    "Get a specific earn module vault by denom.",
 | 
						|
		Args:    cobra.ExactArgs(1),
 | 
						|
		Example: fmt.Sprintf(`%[1]s q %[2]s vault usdx`, version.AppName, types.ModuleName),
 | 
						|
		RunE: func(cmd *cobra.Command, args []string) error {
 | 
						|
			clientCtx, err := client.GetClientQueryContext(cmd)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			queryClient := types.NewQueryClient(clientCtx)
 | 
						|
 | 
						|
			req := types.NewQueryVaultRequest(args[0])
 | 
						|
			res, err := queryClient.Vault(context.Background(), req)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			return clientCtx.PrintProto(res)
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func queryDepositsCmd() *cobra.Command {
 | 
						|
	cmd := &cobra.Command{
 | 
						|
		Use:   "deposits",
 | 
						|
		Short: "get earn vault deposits",
 | 
						|
		Long:  "Get earn vault deposits for all or specific accounts and vaults.",
 | 
						|
		Args:  cobra.NoArgs,
 | 
						|
		Example: fmt.Sprintf(`%[1]s q %[2]s deposits
 | 
						|
%[1]s q %[2]s deposits --owner kava1l0xsq2z7gqd7yly0g40y5836g0appumark77ny --denom usdx
 | 
						|
%[1]s q %[2]s deposits --denom usdx`, version.AppName, types.ModuleName),
 | 
						|
		RunE: func(cmd *cobra.Command, args []string) error {
 | 
						|
			clientCtx, err := client.GetClientQueryContext(cmd)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			ownerBech, err := cmd.Flags().GetString(flagOwner)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
			denom, err := cmd.Flags().GetString(flagDenom)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
			valueInStakedTokens, err := cmd.Flags().GetBool(flagValueInStakedTokens)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			pageReq, err := client.ReadPageRequest(cmd.Flags())
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			queryClient := types.NewQueryClient(clientCtx)
 | 
						|
 | 
						|
			req := types.NewQueryDepositsRequest(
 | 
						|
				ownerBech,
 | 
						|
				denom,
 | 
						|
				valueInStakedTokens,
 | 
						|
				pageReq,
 | 
						|
			)
 | 
						|
			res, err := queryClient.Deposits(context.Background(), req)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			return clientCtx.PrintProto(res)
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	flags.AddPaginationFlagsToCmd(cmd, "deposits")
 | 
						|
 | 
						|
	cmd.Flags().String(flagOwner, "", "(optional) filter for deposits by owner address")
 | 
						|
	cmd.Flags().String(flagDenom, "", "(optional) filter for deposits by vault denom")
 | 
						|
	cmd.Flags().Bool(flagValueInStakedTokens, false, "(optional) get underlying staked tokens for staking derivative vaults")
 | 
						|
 | 
						|
	return cmd
 | 
						|
}
 | 
						|
 | 
						|
func queryTotalSupplyCmd() *cobra.Command {
 | 
						|
	return &cobra.Command{
 | 
						|
		Use:   "total-supply",
 | 
						|
		Short: "get total supply across all savings strategy vaults",
 | 
						|
		Long:  "Get the sum of all denoms locking into vaults that allow the savings strategy.",
 | 
						|
		Args:  cobra.NoArgs,
 | 
						|
		RunE: func(cmd *cobra.Command, args []string) error {
 | 
						|
			clientCtx, err := client.GetClientQueryContext(cmd)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			queryClient := types.NewQueryClient(clientCtx)
 | 
						|
 | 
						|
			res, err := queryClient.TotalSupply(context.Background(), &types.QueryTotalSupplyRequest{})
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			return clientCtx.PrintProto(res)
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 |