github.com/Finschia/finschia-sdk@v0.48.1/x/bank/keeper/querier.go (about)

     1  package keeper
     2  
     3  import (
     4  	abci "github.com/tendermint/tendermint/abci/types"
     5  
     6  	"github.com/Finschia/finschia-sdk/codec"
     7  	sdk "github.com/Finschia/finschia-sdk/types"
     8  	sdkerrors "github.com/Finschia/finschia-sdk/types/errors"
     9  	"github.com/Finschia/finschia-sdk/x/bank/types"
    10  )
    11  
    12  // NewQuerier returns a new sdk.Keeper instance.
    13  func NewQuerier(k Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier {
    14  	return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) {
    15  		switch path[0] {
    16  		case types.QueryBalance:
    17  			return queryBalance(ctx, req, k, legacyQuerierCdc)
    18  
    19  		case types.QueryAllBalances:
    20  			return queryAllBalance(ctx, req, k, legacyQuerierCdc)
    21  
    22  		case types.QueryTotalSupply:
    23  			return queryTotalSupply(ctx, req, k, legacyQuerierCdc)
    24  
    25  		case types.QuerySupplyOf:
    26  			return querySupplyOf(ctx, req, k, legacyQuerierCdc)
    27  
    28  		default:
    29  			return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0])
    30  		}
    31  	}
    32  }
    33  
    34  func queryBalance(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) {
    35  	var params types.QueryBalanceRequest
    36  
    37  	if err := legacyQuerierCdc.UnmarshalJSON(req.Data, &params); err != nil {
    38  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
    39  	}
    40  
    41  	address, err := sdk.AccAddressFromBech32(params.Address)
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  
    46  	balance := k.GetBalance(ctx, address, params.Denom)
    47  
    48  	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, balance)
    49  	if err != nil {
    50  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
    51  	}
    52  
    53  	return bz, nil
    54  }
    55  
    56  func queryAllBalance(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) {
    57  	var params types.QueryAllBalancesRequest
    58  
    59  	if err := legacyQuerierCdc.UnmarshalJSON(req.Data, &params); err != nil {
    60  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
    61  	}
    62  
    63  	address, err := sdk.AccAddressFromBech32(params.Address)
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  
    68  	balances := k.GetAllBalances(ctx, address)
    69  
    70  	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, balances)
    71  	if err != nil {
    72  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
    73  	}
    74  
    75  	return bz, nil
    76  }
    77  
    78  func queryTotalSupply(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) {
    79  	var params types.QueryTotalSupplyRequest
    80  
    81  	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &params)
    82  	if err != nil {
    83  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
    84  	}
    85  
    86  	totalSupply, pageRes, err := k.GetPaginatedTotalSupply(ctx, params.Pagination)
    87  	if err != nil {
    88  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
    89  	}
    90  
    91  	supplyRes := &types.QueryTotalSupplyResponse{
    92  		Supply:     totalSupply,
    93  		Pagination: pageRes,
    94  	}
    95  
    96  	res, err := codec.MarshalJSONIndent(legacyQuerierCdc, supplyRes)
    97  	if err != nil {
    98  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
    99  	}
   100  
   101  	return res, nil
   102  }
   103  
   104  func querySupplyOf(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) {
   105  	var params types.QuerySupplyOfParams
   106  
   107  	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &params)
   108  	if err != nil {
   109  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
   110  	}
   111  
   112  	amount := k.GetSupply(ctx, params.Denom)
   113  	supply := sdk.NewCoin(params.Denom, amount.Amount)
   114  
   115  	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, supply)
   116  	if err != nil {
   117  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
   118  	}
   119  
   120  	return bz, nil
   121  }