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, ¶ms); 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, ¶ms); 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, ¶ms) 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, ¶ms) 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 }