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 }