github.com/KiraCore/sekai@v0.3.43/x/tokens/keeper/msg_server.go (about)

     1  package keeper
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strings"
     7  
     8  	sdk "github.com/cosmos/cosmos-sdk/types"
     9  	"github.com/cosmos/cosmos-sdk/types/errors"
    10  
    11  	govtypes "github.com/KiraCore/sekai/x/gov/types"
    12  	"github.com/KiraCore/sekai/x/tokens/types"
    13  	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
    14  )
    15  
    16  type msgServer struct {
    17  	keeper Keeper
    18  	cgk    types.CustomGovKeeper
    19  }
    20  
    21  // NewMsgServerImpl returns an implementation of the bank MsgServer interface
    22  // for the provided Keeper.
    23  func NewMsgServerImpl(keeper Keeper, cgk types.CustomGovKeeper) types.MsgServer {
    24  	return &msgServer{
    25  		keeper: keeper,
    26  		cgk:    cgk,
    27  	}
    28  }
    29  
    30  var _ types.MsgServer = msgServer{}
    31  
    32  func (k msgServer) UpsertTokenAlias(
    33  	goCtx context.Context,
    34  	msg *types.MsgUpsertTokenAlias,
    35  ) (*types.MsgUpsertTokenAliasResponse, error) {
    36  	ctx := sdk.UnwrapSDKContext(goCtx)
    37  
    38  	isAllowed := k.cgk.CheckIfAllowedPermission(ctx, msg.Proposer, govtypes.PermUpsertTokenAlias)
    39  	if !isAllowed {
    40  		return nil, errors.Wrap(govtypes.ErrNotEnoughPermissions, govtypes.PermUpsertTokenAlias.String())
    41  	}
    42  
    43  	err := k.keeper.UpsertTokenAlias(ctx, *types.NewTokenAlias(
    44  		msg.Symbol,
    45  		msg.Name,
    46  		msg.Icon,
    47  		msg.Decimals,
    48  		msg.Denoms,
    49  		msg.Invalidated,
    50  	))
    51  	ctx.EventManager().EmitEvent(
    52  		sdk.NewEvent(
    53  			types.EventTypeUpsertTokenAlias,
    54  			sdk.NewAttribute(types.AttributeKeyProposer, msg.Proposer.String()),
    55  			sdk.NewAttribute(types.AttributeKeySymbol, msg.Symbol),
    56  			sdk.NewAttribute(types.AttributeKeyName, msg.Name),
    57  			sdk.NewAttribute(types.AttributeKeyIcon, msg.Icon),
    58  			sdk.NewAttribute(types.AttributeKeyDecimals, fmt.Sprintf("%d", msg.Decimals)),
    59  			sdk.NewAttribute(types.AttributeKeyDenoms, strings.Join(msg.Denoms, ",")),
    60  		),
    61  	)
    62  	return &types.MsgUpsertTokenAliasResponse{}, err
    63  }
    64  
    65  func (k msgServer) UpsertTokenRate(goCtx context.Context, msg *types.MsgUpsertTokenRate) (*types.MsgUpsertTokenRateResponse, error) {
    66  	ctx := sdk.UnwrapSDKContext(goCtx)
    67  
    68  	err := msg.ValidateBasic()
    69  	if err != nil {
    70  		return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
    71  	}
    72  
    73  	isAllowed := k.cgk.CheckIfAllowedPermission(ctx, msg.Proposer, govtypes.PermUpsertTokenRate)
    74  	if !isAllowed {
    75  		return nil, errors.Wrap(govtypes.ErrNotEnoughPermissions, govtypes.PermUpsertTokenRate.String())
    76  	}
    77  
    78  	err = k.keeper.UpsertTokenRate(ctx, *types.NewTokenRate(
    79  		msg.Denom,
    80  		msg.Rate,
    81  		msg.FeePayments,
    82  		msg.StakeCap,
    83  		msg.StakeMin,
    84  		msg.StakeToken,
    85  		msg.Invalidated,
    86  	))
    87  
    88  	if err != nil {
    89  		return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
    90  	}
    91  	ctx.EventManager().EmitEvent(
    92  		sdk.NewEvent(
    93  			types.EventTypeUpsertTokenRate,
    94  			sdk.NewAttribute(types.AttributeKeyProposer, msg.Proposer.String()),
    95  			sdk.NewAttribute(types.AttributeKeyDenom, msg.Denom),
    96  			sdk.NewAttribute(types.AttributeKeyRate, msg.Rate.String()),
    97  			sdk.NewAttribute(types.AttributeKeyFeePayments, fmt.Sprintf("%t", msg.FeePayments)),
    98  		),
    99  	)
   100  
   101  	return &types.MsgUpsertTokenRateResponse{}, nil
   102  }