github.com/Finschia/finschia-sdk@v0.49.1/x/fswap/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/fswap/types"
     9  )
    10  
    11  var _ types.MsgServer = MsgServer{}
    12  
    13  type MsgServer struct {
    14  	keeper Keeper
    15  }
    16  
    17  func NewMsgServer(keeper Keeper) *MsgServer {
    18  	return &MsgServer{keeper}
    19  }
    20  
    21  func (s MsgServer) Swap(ctx context.Context, req *types.MsgSwap) (*types.MsgSwapResponse, error) {
    22  	c := sdk.UnwrapSDKContext(ctx)
    23  
    24  	from, err := sdk.AccAddressFromBech32(req.FromAddress)
    25  	if err != nil {
    26  		return nil, err
    27  	}
    28  
    29  	if err := s.keeper.IsSendEnabledCoins(c, req.GetFromCoinAmount()); err != nil {
    30  		return &types.MsgSwapResponse{}, err
    31  	}
    32  
    33  	if err := s.keeper.Swap(c, from, req.GetFromCoinAmount(), req.GetToDenom()); err != nil {
    34  		return nil, err
    35  	}
    36  
    37  	return &types.MsgSwapResponse{}, nil
    38  }
    39  
    40  func (s MsgServer) SwapAll(ctx context.Context, req *types.MsgSwapAll) (*types.MsgSwapAllResponse, error) {
    41  	c := sdk.UnwrapSDKContext(ctx)
    42  
    43  	from, err := sdk.AccAddressFromBech32(req.FromAddress)
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  
    48  	balance := s.keeper.GetBalance(c, from, req.FromDenom)
    49  	if balance.IsZero() {
    50  		return nil, sdkerrors.ErrInsufficientFunds
    51  	}
    52  
    53  	if err := s.keeper.IsSendEnabledCoins(c, balance); err != nil {
    54  		return nil, err
    55  	}
    56  
    57  	if err := s.keeper.Swap(c, from, balance, req.GetToDenom()); err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	return &types.MsgSwapAllResponse{}, nil
    62  }
    63  
    64  func (s MsgServer) SetSwap(ctx context.Context, req *types.MsgSetSwap) (*types.MsgSetSwapResponse, error) {
    65  	c := sdk.UnwrapSDKContext(ctx)
    66  
    67  	if err := s.keeper.validateAuthority(req.Authority); err != nil {
    68  		return nil, err
    69  	}
    70  
    71  	if err := s.keeper.SetSwap(c, req.GetSwap(), req.GetToDenomMetadata()); err != nil {
    72  		return nil, err
    73  	}
    74  
    75  	return &types.MsgSetSwapResponse{}, nil
    76  }