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

     1  package keeper
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  	"github.com/fibonacci-chain/fbc/x/dex/types"
     6  	ordertypes "github.com/fibonacci-chain/fbc/x/order/types"
     7  )
     8  
     9  // IsTokenPairLocked return true if token pair locked
    10  func (k Keeper) IsTokenPairLocked(ctx sdk.Context, product string) bool {
    11  	return k.getProductLock(ctx, product) != nil
    12  }
    13  
    14  func (k Keeper) getProductLock(ctx sdk.Context, product string) *ordertypes.ProductLock {
    15  	store := ctx.KVStore(k.storeKey)
    16  	productInfo := store.Get(types.GetLockProductKey(product))
    17  
    18  	if productInfo == nil {
    19  		return nil
    20  	}
    21  	productLock := &ordertypes.ProductLock{}
    22  	k.cdc.MustUnmarshalBinaryLengthPrefixed(productInfo, productLock)
    23  	return productLock
    24  }
    25  
    26  // LockTokenPair locks token pair
    27  func (k Keeper) LockTokenPair(ctx sdk.Context, product string, lock *ordertypes.ProductLock) {
    28  	store := ctx.KVStore(k.storeKey)
    29  	store.Set(types.GetLockProductKey(product), k.cdc.MustMarshalBinaryLengthPrefixed(*lock))
    30  }
    31  
    32  // UnlockTokenPair unlocks token pair
    33  func (k Keeper) UnlockTokenPair(ctx sdk.Context, product string) {
    34  	store := ctx.KVStore(k.storeKey)
    35  	store.Delete(types.GetLockProductKey(product))
    36  }
    37  
    38  // LoadProductLocks loads product locked
    39  func (k Keeper) LoadProductLocks(ctx sdk.Context) *ordertypes.ProductLockMap {
    40  	store := ctx.KVStore(k.storeKey)
    41  	iter := sdk.KVStorePrefixIterator(store, types.TokenPairLockKeyPrefix)
    42  	defer iter.Close()
    43  
    44  	lockMap := ordertypes.NewProductLockMap()
    45  
    46  	for iter.Valid() {
    47  		lock := &ordertypes.ProductLock{}
    48  		lockBytes := iter.Value()
    49  		k.cdc.MustUnmarshalBinaryLengthPrefixed(lockBytes, &lock)
    50  		lockMap.Data[types.GetKey(iter)] = lock
    51  		iter.Next()
    52  	}
    53  	return lockMap
    54  }
    55  
    56  // GetLockedProductsCopy returns deep copy of product locked
    57  func (k Keeper) GetLockedProductsCopy(ctx sdk.Context) *ordertypes.ProductLockMap {
    58  	return k.LoadProductLocks(ctx)
    59  }
    60  
    61  // IsAnyProductLocked checks if any product is locked
    62  func (k Keeper) IsAnyProductLocked(ctx sdk.Context) bool {
    63  	return len(k.LoadProductLocks(ctx).Data) > 0
    64  }