From b42410ea8029e18d7c1cf92e10f07eb01390db2d Mon Sep 17 00:00:00 2001 From: Tony Stark Date: Fri, 1 Mar 2019 01:10:32 +0530 Subject: [PATCH] Added custom querier --- x/auth/keeper.go | 21 +++++++++++------- x/auth/querier.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 x/auth/querier.go diff --git a/x/auth/keeper.go b/x/auth/keeper.go index 3727981cf..9476029a1 100644 --- a/x/auth/keeper.go +++ b/x/auth/keeper.go @@ -10,17 +10,22 @@ import ( "github.com/cosmos/cosmos-sdk/x/params" ) -var ( - // AddressStoreKeyPrefix prefix for account-by-address store - AddressStoreKeyPrefix = []byte{0x01} - - globalAccountNumberKey = []byte("globalAccountNumber") - +const ( // StoreKey is string representation of the store key for auth StoreKey = "acc" // FeeStoreKey is a string representation of the store key for fees FeeStoreKey = "fee" + + // QuerierRoute is the querier route for acc + QuerierRoute = StoreKey +) + +var ( + // AddressStoreKeyPrefix prefix for account-by-address store + AddressStoreKeyPrefix = []byte{0x01} + + globalAccountNumberKey = []byte("globalAccountNumber") ) // AccountKeeper encodes/decodes accounts using the go-amino (binary) @@ -193,7 +198,7 @@ func (ak AccountKeeper) GetNextAccountNumber(ctx sdk.Context) uint64 { return accNumber } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // Params // SetParams sets the auth module's parameters. @@ -207,7 +212,7 @@ func (ak AccountKeeper) GetParams(ctx sdk.Context) (params Params) { return } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // Misc. func (ak AccountKeeper) decodeAccount(bz []byte) (acc Account) { diff --git a/x/auth/querier.go b/x/auth/querier.go new file mode 100644 index 000000000..5b40bcbf3 --- /dev/null +++ b/x/auth/querier.go @@ -0,0 +1,54 @@ +package auth + +import ( + "fmt" + + abci "github.com/tendermint/tendermint/abci/types" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// query endpoints supported by the auth Querier +const ( + QueryAccount = "account" +) + +// creates a querier for auth REST endpoints +func NewQuerier(keeper AccountKeeper) sdk.Querier { + return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, sdk.Error) { + switch path[0] { + case QueryAccount: + return queryAccount(ctx, req, keeper) + default: + return nil, sdk.ErrUnknownRequest("unknown auth query endpoint") + } + } +} + +// defines the params for query: "custom/acc/account" +type QueryAccountParams struct { + Address sdk.AccAddress +} + +func NewQueryAccountParams(addr sdk.AccAddress) QueryAccountParams { + return QueryAccountParams{ + Address: addr, + } +} + +func queryAccount(ctx sdk.Context, req abci.RequestQuery, keeper AccountKeeper) ([]byte, sdk.Error) { + var params QueryAccountParams + if err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms); err != nil { + return nil, sdk.ErrInternal(fmt.Sprintf("failed to parse params: %s", err)) + } + + account := keeper.GetAccount(ctx, params.Address) + + bz, err := codec.MarshalJSONIndent(keeper.cdc, account) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) + } + + return bz, nil +}