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 }