github.com/KiraCore/sekai@v0.3.43/x/layer2/keeper/keeper.go (about) 1 package keeper 2 3 import ( 4 appparams "github.com/KiraCore/sekai/app/params" 5 govkeeper "github.com/KiraCore/sekai/x/gov/keeper" 6 govtypes "github.com/KiraCore/sekai/x/gov/types" 7 "github.com/KiraCore/sekai/x/layer2/types" 8 "github.com/cosmos/cosmos-sdk/codec" 9 storetypes "github.com/cosmos/cosmos-sdk/store/types" 10 sdk "github.com/cosmos/cosmos-sdk/types" 11 ) 12 13 type Keeper struct { 14 cdc codec.BinaryCodec 15 storeKey storetypes.StoreKey 16 bk types.BankKeeper 17 sk types.StakingKeeper 18 gk govkeeper.Keeper 19 spk types.SpendingKeeper 20 } 21 22 func NewKeeper(storeKey storetypes.StoreKey, cdc codec.BinaryCodec, bk types.BankKeeper, sk types.StakingKeeper, gk govkeeper.Keeper, spk types.SpendingKeeper) Keeper { 23 return Keeper{ 24 cdc: cdc, 25 storeKey: storeKey, 26 bk: bk, 27 sk: sk, 28 gk: gk, 29 spk: spk, 30 } 31 } 32 33 // DefaultDenom returns the denom that is basically used for fee payment 34 func (k Keeper) DefaultDenom(ctx sdk.Context) string { 35 return appparams.DefaultDenom 36 } 37 38 func (k Keeper) CheckIfAllowedPermission(ctx sdk.Context, addr sdk.AccAddress, permValue govtypes.PermValue) bool { 39 return govkeeper.CheckIfAllowedPermission(ctx, k.gk, addr, govtypes.PermHandleBasketEmergency) 40 } 41 42 func (k Keeper) IsAllowedAddress(ctx sdk.Context, address sdk.AccAddress, permInfo types.Controllers) bool { 43 for _, owner := range permInfo.Whitelist.Addresses { 44 if owner == address.String() { 45 return true 46 } 47 } 48 49 actor, found := k.gk.GetNetworkActorByAddress(ctx, address) 50 if !found { 51 return false 52 } 53 54 flags := make(map[uint64]bool) 55 for _, role := range permInfo.Whitelist.Roles { 56 flags[role] = true 57 } 58 59 for _, role := range actor.Roles { 60 if flags[role] { 61 return true 62 } 63 } 64 return false 65 } 66 67 func (k Keeper) AllowedAddresses(ctx sdk.Context, permInfo types.Controllers) []string { 68 addrs := []string{} 69 flags := make(map[string]bool) 70 71 for _, owner := range permInfo.Whitelist.Addresses { 72 if flags[owner] == false { 73 flags[owner] = true 74 addrs = append(addrs, owner) 75 } 76 } 77 78 for _, role := range permInfo.Whitelist.Roles { 79 actorIter := k.gk.GetNetworkActorsByRole(ctx, role) 80 81 for ; actorIter.Valid(); actorIter.Next() { 82 addr := sdk.AccAddress(actorIter.Value()).String() 83 if flags[addr] == false { 84 flags[addr] = true 85 addrs = append(addrs, addr) 86 } 87 } 88 } 89 90 return addrs 91 }