github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/token/querier_v2.go (about)

     1  package token
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
     9  	"github.com/fibonacci-chain/fbc/x/common"
    10  	"github.com/fibonacci-chain/fbc/x/token/types"
    11  )
    12  
    13  func queryAccountV2(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
    14  	addr, err := sdk.AccAddressFromBech32(path[0])
    15  	if err != nil {
    16  		return nil, sdk.ErrInvalidAddress(fmt.Sprintf("invalid address:%s", path[0]))
    17  	}
    18  
    19  	//var queryPage QueryPage
    20  	var accountParam types.AccountParamV2
    21  	//var symbol string
    22  	err = codec.Cdc.UnmarshalJSON(req.Data, &accountParam)
    23  	if err != nil {
    24  		return nil, sdk.ErrUnknownRequest(err.Error())
    25  	}
    26  
    27  	coinsInfo := keeper.GetCoinsInfo(ctx, addr)
    28  	coinsInfoChosen := make([]CoinInfo, 0)
    29  	if accountParam.Currency == "" {
    30  		coinsInfoChosen = coinsInfo
    31  
    32  		// hide_zero yes or no
    33  		if accountParam.HideZero == "no" {
    34  			tokens := keeper.GetTokensInfo(ctx)
    35  
    36  			for _, token := range tokens {
    37  				found := false
    38  				for _, coinInfo := range coinsInfo {
    39  					if coinInfo.Symbol == token.Symbol {
    40  						found = true
    41  						break
    42  					}
    43  				}
    44  				// not found
    45  				if !found {
    46  					ci := types.NewCoinInfo(token.Symbol, "0", "0")
    47  					coinsInfoChosen = append(coinsInfoChosen, *ci)
    48  				}
    49  			}
    50  		}
    51  	} else {
    52  		for _, coinInfo := range coinsInfo {
    53  			if coinInfo.Symbol == accountParam.Currency {
    54  				coinsInfoChosen = append(coinsInfoChosen, coinInfo)
    55  			}
    56  		}
    57  	}
    58  
    59  	res, err := common.JSONMarshalV2(coinsInfoChosen)
    60  	if err != nil {
    61  		return nil, sdk.ErrInternal(err.Error())
    62  	}
    63  	return res, nil
    64  }
    65  
    66  func queryTokensV2(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
    67  	tokens := keeper.GetTokensInfo(ctx)
    68  
    69  	var tokensResp types.Tokens
    70  	for _, token := range tokens {
    71  		tokenResp := types.GenTokenResp(token)
    72  		tokenResp.TotalSupply = keeper.GetTokenTotalSupply(ctx, token.Symbol)
    73  		tokensResp = append(tokensResp, tokenResp)
    74  	}
    75  	res, err := common.JSONMarshalV2(tokensResp)
    76  	if err != nil {
    77  		return nil, sdk.ErrInternal(err.Error())
    78  	}
    79  	return res, nil
    80  }
    81  
    82  func queryTokenV2(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
    83  	name := path[0]
    84  
    85  	token := keeper.GetTokenInfo(ctx, name)
    86  	if token.Symbol == "" {
    87  		return nil, sdk.ErrInvalidCoins("unknown token")
    88  	}
    89  
    90  	tokenResp := types.GenTokenResp(token)
    91  	tokenResp.TotalSupply = keeper.GetTokenTotalSupply(ctx, name)
    92  	res, err := common.JSONMarshalV2(tokenResp)
    93  	if err != nil {
    94  		return nil, sdk.ErrInternal(err.Error())
    95  	}
    96  	return res, nil
    97  }