package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/supply/exported" "github.com/cosmos/cosmos-sdk/x/supply/types" ) // GetModuleAddress returns an address based on the module name func (k Keeper) GetModuleAddress(moduleName string) sdk.AccAddress { permAddr, ok := k.permAddrs[moduleName] if !ok { return nil } return permAddr.GetAddress() } // GetModuleAddressAndPermissions returns an address and permissions based on the module name func (k Keeper) GetModuleAddressAndPermissions(moduleName string) (addr sdk.AccAddress, permissions []string) { permAddr, ok := k.permAddrs[moduleName] if !ok { return addr, permissions } return permAddr.GetAddress(), permAddr.GetPermissions() } // GetModuleAccountAndPermissions gets the module account from the auth account store and its // registered permissions func (k Keeper) GetModuleAccountAndPermissions(ctx sdk.Context, moduleName string) (exported.ModuleAccountI, []string) { addr, perms := k.GetModuleAddressAndPermissions(moduleName) if addr == nil { return nil, []string{} } acc := k.ak.GetAccount(ctx, addr) if acc != nil { macc, ok := acc.(exported.ModuleAccountI) if !ok { panic("account is not a module account") } return macc, perms } // create a new module account macc := types.NewEmptyModuleAccount(moduleName, perms...) maccI := (k.ak.NewAccount(ctx, macc)).(exported.ModuleAccountI) // set the account number k.SetModuleAccount(ctx, maccI) return maccI, perms } // GetModuleAccount gets the module account from the auth account store, if the account does not // exist in the AccountKeeper, then it is created. func (k Keeper) GetModuleAccount(ctx sdk.Context, moduleName string) exported.ModuleAccountI { acc, _ := k.GetModuleAccountAndPermissions(ctx, moduleName) return acc } // SetModuleAccount sets the module account to the auth account store func (k Keeper) SetModuleAccount(ctx sdk.Context, macc exported.ModuleAccountI) { //nolint:interfacer k.ak.SetAccount(ctx, macc) }