github.com/Finschia/finschia-sdk@v0.49.1/x/feegrant/keeper/msg_server.go (about)

     1  package keeper
     2  
     3  import (
     4  	"context"
     5  
     6  	sdk "github.com/Finschia/finschia-sdk/types"
     7  	sdkerrors "github.com/Finschia/finschia-sdk/types/errors"
     8  	"github.com/Finschia/finschia-sdk/x/feegrant"
     9  )
    10  
    11  type msgServer struct {
    12  	Keeper
    13  }
    14  
    15  // NewMsgServerImpl returns an implementation of the feegrant MsgServer interface
    16  // for the provided Keeper.
    17  func NewMsgServerImpl(k Keeper) feegrant.MsgServer {
    18  	return &msgServer{
    19  		Keeper: k,
    20  	}
    21  }
    22  
    23  var _ feegrant.MsgServer = msgServer{}
    24  
    25  // GrantAllowance grants an allowance from the granter's funds to be used by the grantee.
    26  func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantAllowance) (*feegrant.MsgGrantAllowanceResponse, error) {
    27  	ctx := sdk.UnwrapSDKContext(goCtx)
    28  
    29  	grantee, err := sdk.AccAddressFromBech32(msg.Grantee)
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  
    34  	granter, err := sdk.AccAddressFromBech32(msg.Granter)
    35  	if err != nil {
    36  		return nil, err
    37  	}
    38  
    39  	// Checking for duplicate entry
    40  	if f, _ := k.Keeper.GetAllowance(ctx, granter, grantee); f != nil {
    41  		return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "fee allowance already exists")
    42  	}
    43  
    44  	allowance, err := msg.GetFeeAllowanceI()
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  
    49  	err = k.Keeper.GrantAllowance(ctx, granter, grantee, allowance)
    50  	if err != nil {
    51  		return nil, err
    52  	}
    53  
    54  	return &feegrant.MsgGrantAllowanceResponse{}, nil
    55  }
    56  
    57  // RevokeAllowance revokes a fee allowance between a granter and grantee.
    58  func (k msgServer) RevokeAllowance(goCtx context.Context, msg *feegrant.MsgRevokeAllowance) (*feegrant.MsgRevokeAllowanceResponse, error) {
    59  	ctx := sdk.UnwrapSDKContext(goCtx)
    60  
    61  	grantee, err := sdk.AccAddressFromBech32(msg.Grantee)
    62  	if err != nil {
    63  		return nil, err
    64  	}
    65  
    66  	granter, err := sdk.AccAddressFromBech32(msg.Granter)
    67  	if err != nil {
    68  		return nil, err
    69  	}
    70  
    71  	err = k.Keeper.revokeAllowance(ctx, granter, grantee)
    72  	if err != nil {
    73  		return nil, err
    74  	}
    75  
    76  	return &feegrant.MsgRevokeAllowanceResponse{}, nil
    77  }