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  }