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 }