Added custom querier

This commit is contained in:
Tony Stark 2019-03-01 01:10:32 +05:30
parent 10bd98e58e
commit b42410ea80
No known key found for this signature in database
GPG Key ID: CB0E78E8A3D60001
2 changed files with 67 additions and 8 deletions

View File

@ -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) {

54
x/auth/querier.go Normal file
View File

@ -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, &params); 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
}