mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-24 15:25:18 +00:00
Add QueryGetAccounts to CDP Client (#596)
* add module accounts command * update get accounts query to return array of module accounts instead of map of addresses * update tests and add update swagger Co-authored-by: Kevin Davis <kjydavis3@gmail.com>
This commit is contained in:
parent
687c39be82
commit
e81987c31f
@ -36,6 +36,8 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
[\#596](https://github.com/Kava-Labs/kava/pull/596) Add REST client and CLI query to get module account information for the CDP module
|
||||||
|
|
||||||
[\#590](https://github.com/Kava-Labs/kava/pull/590) Add CLI query to return kavadist module account balance
|
[\#590](https://github.com/Kava-Labs/kava/pull/590) Add CLI query to return kavadist module account balance
|
||||||
|
|
||||||
[\#584](https://github.com/Kava-Labs/kava/pulls/584) Add REST client and CLI queries for `kavadist` module
|
[\#584](https://github.com/Kava-Labs/kava/pulls/584) Add REST client and CLI queries for `kavadist` module
|
||||||
|
@ -599,6 +599,48 @@
|
|||||||
description: Invalid request
|
description: Invalid request
|
||||||
500:
|
500:
|
||||||
description: Server internal error
|
description: Server internal error
|
||||||
|
/cdp/accounts:
|
||||||
|
get:
|
||||||
|
summary: Get the cdp module accounts
|
||||||
|
tags:
|
||||||
|
- CDP
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: The cdp module accounts
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
height:
|
||||||
|
type: string
|
||||||
|
example: "100"
|
||||||
|
result:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
account_number:
|
||||||
|
type: number
|
||||||
|
address:
|
||||||
|
$ref: '#/definitions/Address'
|
||||||
|
coins:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/Coin'
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
permissions:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
public_key:
|
||||||
|
$ref: "#/definitions/PublicKey"
|
||||||
|
sequence:
|
||||||
|
type: number
|
||||||
|
500:
|
||||||
|
description: Server internal error
|
||||||
|
|
||||||
/cdp/parameters:
|
/cdp/parameters:
|
||||||
get:
|
get:
|
||||||
summary: Get the parameters of the cdp module
|
summary: Get the parameters of the cdp module
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/version"
|
"github.com/cosmos/cosmos-sdk/version"
|
||||||
|
supply "github.com/cosmos/cosmos-sdk/x/supply"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/x/cdp/types"
|
"github.com/kava-labs/kava/x/cdp/types"
|
||||||
)
|
)
|
||||||
@ -29,6 +30,7 @@ func GetQueryCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
|||||||
QueryCdpsByDenomAndRatioCmd(queryRoute, cdc),
|
QueryCdpsByDenomAndRatioCmd(queryRoute, cdc),
|
||||||
QueryCdpDepositsCmd(queryRoute, cdc),
|
QueryCdpDepositsCmd(queryRoute, cdc),
|
||||||
QueryParamsCmd(queryRoute, cdc),
|
QueryParamsCmd(queryRoute, cdc),
|
||||||
|
QueryGetAccounts(queryRoute, cdc),
|
||||||
)...)
|
)...)
|
||||||
|
|
||||||
return cdpQueryCmd
|
return cdpQueryCmd
|
||||||
@ -225,3 +227,29 @@ func QueryParamsCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func QueryGetAccounts(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
||||||
|
return &cobra.Command{
|
||||||
|
Use: "accounts",
|
||||||
|
Short: "Get module accounts",
|
||||||
|
Long: "Get cdp module account addresses",
|
||||||
|
Args: cobra.NoArgs,
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
cliCtx := context.NewCLIContext().WithCodec(cdc)
|
||||||
|
|
||||||
|
// Query
|
||||||
|
res, height, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryGetAccounts), nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
cliCtx = cliCtx.WithHeight(height)
|
||||||
|
|
||||||
|
// Decode and print results
|
||||||
|
var out []supply.ModuleAccount
|
||||||
|
if err := cdc.UnmarshalJSON(res, &out); err != nil {
|
||||||
|
return fmt.Errorf("failed to unmarshal accounts: %w", err)
|
||||||
|
}
|
||||||
|
return cliCtx.PrintOutput(out)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -14,6 +14,7 @@ import (
|
|||||||
|
|
||||||
// define routes that get registered by the main application
|
// define routes that get registered by the main application
|
||||||
func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router) {
|
func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router) {
|
||||||
|
r.HandleFunc("/cdp/accounts", getAccountsHandlerFn(cliCtx)).Methods("GET")
|
||||||
r.HandleFunc("/cdp/parameters", getParamsHandlerFn(cliCtx)).Methods("GET")
|
r.HandleFunc("/cdp/parameters", getParamsHandlerFn(cliCtx)).Methods("GET")
|
||||||
r.HandleFunc(fmt.Sprintf("/cdp/cdps/cdp/{%s}/{%s}", types.RestOwner, types.RestCollateralDenom), queryCdpHandlerFn(cliCtx)).Methods("GET")
|
r.HandleFunc(fmt.Sprintf("/cdp/cdps/cdp/{%s}/{%s}", types.RestOwner, types.RestCollateralDenom), queryCdpHandlerFn(cliCtx)).Methods("GET")
|
||||||
r.HandleFunc(fmt.Sprintf("/cdp/cdps/denom/{%s}", types.RestCollateralDenom), queryCdpsHandlerFn(cliCtx)).Methods("GET")
|
r.HandleFunc(fmt.Sprintf("/cdp/cdps/denom/{%s}", types.RestCollateralDenom), queryCdpsHandlerFn(cliCtx)).Methods("GET")
|
||||||
@ -174,3 +175,21 @@ func getParamsHandlerFn(cliCtx context.CLIContext) http.HandlerFunc {
|
|||||||
rest.PostProcessResponse(w, cliCtx, res)
|
rest.PostProcessResponse(w, cliCtx, res)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getAccountsHandlerFn(cliCtx context.CLIContext) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
res, height, err := cliCtx.QueryWithData(fmt.Sprintf("custom/cdp/%s", types.QueryGetAccounts), nil)
|
||||||
|
cliCtx = cliCtx.WithHeight(height)
|
||||||
|
if err != nil {
|
||||||
|
rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rest.PostProcessResponse(w, cliCtx, res)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
|
supply "github.com/cosmos/cosmos-sdk/x/supply"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/x/cdp/types"
|
"github.com/kava-labs/kava/x/cdp/types"
|
||||||
)
|
)
|
||||||
@ -24,6 +25,8 @@ func NewQuerier(keeper Keeper) sdk.Querier {
|
|||||||
return queryGetParams(ctx, req, keeper)
|
return queryGetParams(ctx, req, keeper)
|
||||||
case types.QueryGetCdpDeposits:
|
case types.QueryGetCdpDeposits:
|
||||||
return queryGetDeposits(ctx, req, keeper)
|
return queryGetDeposits(ctx, req, keeper)
|
||||||
|
case types.QueryGetAccounts:
|
||||||
|
return queryGetAccounts(ctx, req, keeper)
|
||||||
default:
|
default:
|
||||||
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint %s", types.ModuleName, path[0])
|
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint %s", types.ModuleName, path[0])
|
||||||
}
|
}
|
||||||
@ -155,3 +158,23 @@ func queryGetParams(ctx sdk.Context, req abci.RequestQuery, keeper Keeper) ([]by
|
|||||||
}
|
}
|
||||||
return bz, nil
|
return bz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// query cdp module accounts
|
||||||
|
func queryGetAccounts(ctx sdk.Context, req abci.RequestQuery, keeper Keeper) ([]byte, error) {
|
||||||
|
cdpAccAccount := keeper.supplyKeeper.GetModuleAccount(ctx, types.ModuleName)
|
||||||
|
liquidatorAccAccount := keeper.supplyKeeper.GetModuleAccount(ctx, types.LiquidatorMacc)
|
||||||
|
savingsRateAccAccount := keeper.supplyKeeper.GetModuleAccount(ctx, types.SavingsRateMacc)
|
||||||
|
|
||||||
|
accounts := []supply.ModuleAccount{
|
||||||
|
*cdpAccAccount.(*supply.ModuleAccount),
|
||||||
|
*liquidatorAccAccount.(*supply.ModuleAccount),
|
||||||
|
*savingsRateAccAccount.(*supply.ModuleAccount),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encode results
|
||||||
|
bz, err := codec.MarshalJSONIndent(supply.ModuleCdc, accounts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
|
||||||
|
}
|
||||||
|
return bz, nil
|
||||||
|
}
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/simulation"
|
"github.com/cosmos/cosmos-sdk/x/simulation"
|
||||||
|
supply "github.com/cosmos/cosmos-sdk/x/supply"
|
||||||
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
tmtime "github.com/tendermint/tendermint/types/time"
|
tmtime "github.com/tendermint/tendermint/types/time"
|
||||||
@ -279,6 +280,29 @@ func (suite *QuerierTestSuite) TestQueryDeposits() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (suite *QuerierTestSuite) TestQueryAccounts() {
|
||||||
|
bz, err := suite.querier(suite.ctx, []string{types.QueryGetAccounts}, abci.RequestQuery{})
|
||||||
|
suite.Require().NoError(err)
|
||||||
|
suite.Require().NotNil(bz)
|
||||||
|
|
||||||
|
var accounts []supply.ModuleAccount
|
||||||
|
suite.Require().Nil(supply.ModuleCdc.UnmarshalJSON(bz, &accounts))
|
||||||
|
suite.Require().Equal(3, len(accounts))
|
||||||
|
|
||||||
|
findByName := func(name string) bool {
|
||||||
|
for _, account := range accounts {
|
||||||
|
if account.GetName() == name {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
suite.Require().True(findByName("cdp"))
|
||||||
|
suite.Require().True(findByName("liquidator"))
|
||||||
|
suite.Require().True(findByName("savings"))
|
||||||
|
}
|
||||||
|
|
||||||
func TestQuerierTestSuite(t *testing.T) {
|
func TestQuerierTestSuite(t *testing.T) {
|
||||||
suite.Run(t, new(QuerierTestSuite))
|
suite.Run(t, new(QuerierTestSuite))
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ const (
|
|||||||
QueryGetCdps = "cdps"
|
QueryGetCdps = "cdps"
|
||||||
QueryGetCdpsByCollateralization = "ratio"
|
QueryGetCdpsByCollateralization = "ratio"
|
||||||
QueryGetParams = "params"
|
QueryGetParams = "params"
|
||||||
|
QueryGetAccounts = "accounts"
|
||||||
RestOwner = "owner"
|
RestOwner = "owner"
|
||||||
RestCollateralDenom = "collateral-denom"
|
RestCollateralDenom = "collateral-denom"
|
||||||
RestRatio = "ratio"
|
RestRatio = "ratio"
|
||||||
|
Loading…
Reference in New Issue
Block a user