github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/farm/keeper/whitelist.go (about)

     1  package keeper
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  	swaptypes "github.com/fibonacci-chain/fbc/x/ammswap/types"
     6  	"github.com/fibonacci-chain/fbc/x/farm/types"
     7  )
     8  
     9  // GetWhitelist gets the whole whitelist currently
    10  func (k Keeper) GetWhitelist(ctx sdk.Context) (whitelist types.PoolNameList) {
    11  	store := ctx.KVStore(k.StoreKey())
    12  	iterator := sdk.KVStorePrefixIterator(store, types.PoolsYieldNativeTokenPrefix)
    13  	defer iterator.Close()
    14  
    15  	for ; iterator.Valid(); iterator.Next() {
    16  		whitelist = append(whitelist, types.SplitPoolsYieldNativeTokenKey(iterator.Key()))
    17  	}
    18  
    19  	return
    20  }
    21  
    22  // GetWhitelist sets the pool name as a member into whitelist
    23  func (k Keeper) SetWhitelist(ctx sdk.Context, poolName string) {
    24  	ctx.KVStore(k.storeKey).Set(types.GetWhitelistMemberKey(poolName), []byte(""))
    25  }
    26  
    27  // DeleteWhiteList removes the pool name from whitelist
    28  func (k Keeper) DeleteWhiteList(ctx sdk.Context, poolName string) {
    29  	ctx.KVStore(k.storeKey).Delete(types.GetWhitelistMemberKey(poolName))
    30  }
    31  
    32  func (k Keeper) isPoolNameExistedInWhiteList(ctx sdk.Context, poolName string) bool {
    33  	return ctx.KVStore(k.storeKey).Has(types.GetWhitelistMemberKey(poolName))
    34  }
    35  
    36  func (k Keeper) satisfyWhiteListAdmittance(ctx sdk.Context, pool types.FarmPool) sdk.Error {
    37  	quoteTokenSymbol := k.GetParams(ctx).QuoteSymbol
    38  	// lock token is quote symbol
    39  	if pool.MinLockAmount.Denom == quoteTokenSymbol {
    40  		return nil
    41  	}
    42  	if !swaptypes.IsPoolToken(pool.MinLockAmount.Denom) {
    43  		// locked token is common token
    44  		// check the existence of locked token with default quoteTokenSymbol in Params
    45  		if !k.isSwapTokenPairExisted(ctx, pool.MinLockAmount.Denom, quoteTokenSymbol) {
    46  			return types.ErrSwapTokenPairNotExist(swaptypes.GetSwapTokenPairName(pool.MinLockAmount.Denom, quoteTokenSymbol))
    47  
    48  		}
    49  
    50  		return nil
    51  	}
    52  
    53  	// locked token is lpt
    54  	tokenSymbol0, tokenSymbol1 := swaptypes.SplitPoolToken(pool.MinLockAmount.Denom)
    55  	if tokenSymbol0 == quoteTokenSymbol || tokenSymbol1 == quoteTokenSymbol {
    56  		// base or quote token contains default quoteTokenSymbol in Params
    57  		// check the existence of locked token
    58  		if !k.isSwapTokenPairExisted(ctx, tokenSymbol0, tokenSymbol1) {
    59  			return types.ErrTokenNotExist(pool.MinLockAmount.Denom)
    60  		}
    61  
    62  		return nil
    63  	}
    64  
    65  	// base or quote token don't contain default quoteTokenSymbol in Params
    66  	// check the existence of locked token both with default quoteTokenSymbol in Params
    67  	if !k.isSwapTokenPairExisted(ctx, tokenSymbol0, quoteTokenSymbol) {
    68  		return types.ErrSwapTokenPairNotExist(swaptypes.GetSwapTokenPairName(tokenSymbol0, quoteTokenSymbol))
    69  	}
    70  
    71  	if !k.isSwapTokenPairExisted(ctx, tokenSymbol1, quoteTokenSymbol) {
    72  		return types.ErrSwapTokenPairNotExist(swaptypes.GetSwapTokenPairName(tokenSymbol1, quoteTokenSymbol))
    73  	}
    74  
    75  	return nil
    76  }
    77  
    78  func (k Keeper) isSwapTokenPairExisted(ctx sdk.Context, baseTokenSymbol, quoteTokenSymbol string) bool {
    79  	_, err := k.swapKeeper.GetSwapTokenPair(ctx, swaptypes.GetSwapTokenPairName(baseTokenSymbol, quoteTokenSymbol))
    80  	if err != nil {
    81  		return false
    82  	}
    83  
    84  	return true
    85  }