github.com/KiraCore/sekai@v0.3.43/x/layer2/keeper/dapp.go (about)

     1  package keeper
     2  
     3  import (
     4  	"github.com/KiraCore/sekai/x/layer2/types"
     5  	sdk "github.com/cosmos/cosmos-sdk/types"
     6  )
     7  
     8  func (k Keeper) GetDapp(ctx sdk.Context, name string) types.Dapp {
     9  	store := ctx.KVStore(k.storeKey)
    10  	bz := store.Get(types.DappKey(name))
    11  	if bz == nil {
    12  		return types.Dapp{}
    13  	}
    14  
    15  	dapp := types.Dapp{}
    16  	k.cdc.MustUnmarshal(bz, &dapp)
    17  	return dapp
    18  }
    19  
    20  func (k Keeper) GetAllDapps(ctx sdk.Context) []types.Dapp {
    21  	store := ctx.KVStore(k.storeKey)
    22  
    23  	dapps := []types.Dapp{}
    24  	it := sdk.KVStorePrefixIterator(store, types.KeyPrefixDapp)
    25  	defer it.Close()
    26  
    27  	for ; it.Valid(); it.Next() {
    28  		dapp := types.Dapp{}
    29  		k.cdc.MustUnmarshal(it.Value(), &dapp)
    30  		dapps = append(dapps, dapp)
    31  	}
    32  	return dapps
    33  }
    34  
    35  func (k Keeper) SetDapp(ctx sdk.Context, dapp types.Dapp) {
    36  	bz := k.cdc.MustMarshal(&dapp)
    37  	store := ctx.KVStore(k.storeKey)
    38  	store.Set(types.DappKey(dapp.Name), bz)
    39  }
    40  
    41  func (k Keeper) DeleteDapp(ctx sdk.Context, name string) {
    42  	store := ctx.KVStore(k.storeKey)
    43  	store.Delete(types.DappKey(name))
    44  }
    45  
    46  func (k Keeper) SetUserDappBond(ctx sdk.Context, bond types.UserDappBond) {
    47  	bz := k.cdc.MustMarshal(&bond)
    48  	store := ctx.KVStore(k.storeKey)
    49  	store.Set(types.UserDappBondKey(bond.DappName, bond.User), bz)
    50  }
    51  
    52  func (k Keeper) DeleteUserDappBond(ctx sdk.Context, name, address string) {
    53  	store := ctx.KVStore(k.storeKey)
    54  	store.Delete(types.UserDappBondKey(name, address))
    55  }
    56  
    57  func (k Keeper) GetUserDappBond(ctx sdk.Context, name string, user string) types.UserDappBond {
    58  	store := ctx.KVStore(k.storeKey)
    59  	bz := store.Get(types.UserDappBondKey(name, user))
    60  	if bz == nil {
    61  		return types.UserDappBond{}
    62  	}
    63  
    64  	bond := types.UserDappBond{}
    65  	k.cdc.MustUnmarshal(bz, &bond)
    66  	return bond
    67  }
    68  
    69  func (k Keeper) GetUserDappBonds(ctx sdk.Context, name string) []types.UserDappBond {
    70  	store := ctx.KVStore(k.storeKey)
    71  
    72  	bondlist := []types.UserDappBond{}
    73  	it := sdk.KVStorePrefixIterator(store, append([]byte(types.PrefixUserDappBondKey), name...))
    74  	defer it.Close()
    75  
    76  	for ; it.Valid(); it.Next() {
    77  		bond := types.UserDappBond{}
    78  		k.cdc.MustUnmarshal(it.Value(), &bond)
    79  		bondlist = append(bondlist, bond)
    80  	}
    81  	return bondlist
    82  }
    83  
    84  func (k Keeper) GetAllUserDappBonds(ctx sdk.Context) []types.UserDappBond {
    85  	store := ctx.KVStore(k.storeKey)
    86  
    87  	bondlist := []types.UserDappBond{}
    88  	it := sdk.KVStorePrefixIterator(store, []byte(types.PrefixUserDappBondKey))
    89  	defer it.Close()
    90  
    91  	for ; it.Valid(); it.Next() {
    92  		bond := types.UserDappBond{}
    93  		k.cdc.MustUnmarshal(it.Value(), &bond)
    94  		bondlist = append(bondlist, bond)
    95  	}
    96  	return bondlist
    97  }
    98  
    99  func (k Keeper) ExecuteDappRemove(ctx sdk.Context, dapp types.Dapp) error {
   100  	for _, userBond := range k.GetUserDappBonds(ctx, dapp.Name) {
   101  		// send tokens back to user
   102  		addr := sdk.MustAccAddressFromBech32(userBond.User)
   103  		err := k.bk.SendCoinsFromModuleToAccount(ctx, types.ModuleName, addr, sdk.Coins{userBond.Bond})
   104  		if err != nil {
   105  			return err
   106  		}
   107  		k.DeleteUserDappBond(ctx, dapp.Name, userBond.User)
   108  	}
   109  	k.DeleteDapp(ctx, dapp.Name)
   110  	return nil
   111  }