github.com/Finschia/finschia-sdk@v0.49.1/x/fswap/types/msgs.go (about)

     1  package types
     2  
     3  import (
     4  	"google.golang.org/grpc/codes"
     5  	"google.golang.org/grpc/status"
     6  
     7  	sdk "github.com/Finschia/finschia-sdk/types"
     8  	sdkerrors "github.com/Finschia/finschia-sdk/types/errors"
     9  	"github.com/Finschia/finschia-sdk/x/foundation/codec"
    10  )
    11  
    12  var (
    13  	_ sdk.Msg = &MsgSwap{}
    14  	_ sdk.Msg = &MsgSwapAll{}
    15  	_ sdk.Msg = &MsgSetSwap{}
    16  )
    17  
    18  // ValidateBasic Implements Msg.
    19  func (m *MsgSwap) ValidateBasic() error {
    20  	_, err := sdk.AccAddressFromBech32(m.FromAddress)
    21  	if err != nil {
    22  		return sdkerrors.ErrInvalidAddress.Wrapf("Invalid address (%s)", err)
    23  	}
    24  
    25  	if !m.FromCoinAmount.IsValid() {
    26  		return sdkerrors.ErrInvalidCoins.Wrap(m.FromCoinAmount.String())
    27  	}
    28  
    29  	if !m.FromCoinAmount.IsPositive() {
    30  		return sdkerrors.ErrInvalidCoins.Wrap(m.FromCoinAmount.String())
    31  	}
    32  
    33  	if err := sdk.ValidateDenom(m.GetToDenom()); err != nil {
    34  		return sdkerrors.ErrInvalidRequest.Wrap(err.Error())
    35  	}
    36  
    37  	return nil
    38  }
    39  
    40  // GetSigners Implements Msg.
    41  func (m *MsgSwap) GetSigners() []sdk.AccAddress {
    42  	from, err := sdk.AccAddressFromBech32(m.FromAddress)
    43  	if err != nil {
    44  		panic(err)
    45  	}
    46  	return []sdk.AccAddress{from}
    47  }
    48  
    49  // GetSignBytes implements the LegacyMsg.GetSignBytes method.
    50  func (m *MsgSwap) GetSignBytes() []byte {
    51  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m))
    52  }
    53  
    54  // Type implements the LegacyMsg.Type method.
    55  func (m *MsgSwap) Type() string {
    56  	return sdk.MsgTypeURL(m)
    57  }
    58  
    59  // Route implements the LegacyMsg.Route method.
    60  func (m *MsgSwap) Route() string {
    61  	return RouterKey
    62  }
    63  
    64  func (m *MsgSwap) GetSignerBytes() []byte {
    65  	return sdk.MustSortJSON(codec.ModuleCdc.MustMarshalJSON(m))
    66  }
    67  
    68  // ValidateBasic Implements Msg.
    69  func (m *MsgSwapAll) ValidateBasic() error {
    70  	_, err := sdk.AccAddressFromBech32(m.FromAddress)
    71  	if err != nil {
    72  		return sdkerrors.ErrInvalidAddress.Wrapf("Invalid address (%s)", err)
    73  	}
    74  
    75  	if err := sdk.ValidateDenom(m.FromDenom); err != nil {
    76  		return sdkerrors.ErrInvalidRequest.Wrap(err.Error())
    77  	}
    78  
    79  	if err := sdk.ValidateDenom(m.ToDenom); err != nil {
    80  		return sdkerrors.ErrInvalidRequest.Wrap(err.Error())
    81  	}
    82  
    83  	return nil
    84  }
    85  
    86  // GetSigners Implements Msg.
    87  func (m *MsgSwapAll) GetSigners() []sdk.AccAddress {
    88  	from, err := sdk.AccAddressFromBech32(m.FromAddress)
    89  	if err != nil {
    90  		panic(err)
    91  	}
    92  	return []sdk.AccAddress{from}
    93  }
    94  
    95  // Type implements the LegacyMsg.Type method.
    96  func (m *MsgSwapAll) Type() string {
    97  	return sdk.MsgTypeURL(m)
    98  }
    99  
   100  // Route implements the LegacyMsg.Route method.
   101  func (m *MsgSwapAll) Route() string {
   102  	return RouterKey
   103  }
   104  
   105  // GetSignBytes implements the LegacyMsg.GetSignBytes method.
   106  func (m *MsgSwapAll) GetSignBytes() []byte {
   107  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m))
   108  }
   109  
   110  func (m *MsgSetSwap) ValidateBasic() error {
   111  	if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {
   112  		return sdkerrors.ErrInvalidAddress.Wrapf("invalid authority address: %s", m.Authority)
   113  	}
   114  
   115  	if err := m.Swap.ValidateBasic(); err != nil {
   116  		return err
   117  	}
   118  	if err := m.ToDenomMetadata.Validate(); err != nil {
   119  		return err
   120  	}
   121  	if m.Swap.ToDenom != m.ToDenomMetadata.Base {
   122  		return sdkerrors.ErrInvalidRequest.Wrapf("denomination does not match %s != %s", m.Swap.ToDenom, m.ToDenomMetadata.Base)
   123  	}
   124  
   125  	return nil
   126  }
   127  
   128  func (m *MsgSetSwap) GetSigners() []sdk.AccAddress {
   129  	signer := sdk.MustAccAddressFromBech32(m.Authority)
   130  	return []sdk.AccAddress{signer}
   131  }
   132  
   133  // Type implements the LegacyMsg.Type method.
   134  func (m *MsgSetSwap) Type() string {
   135  	return sdk.MsgTypeURL(m)
   136  }
   137  
   138  // Route implements the LegacyMsg.Route method.
   139  func (m *MsgSetSwap) Route() string {
   140  	return RouterKey
   141  }
   142  
   143  // GetSignBytes implements the LegacyMsg.GetSignBytes method.
   144  func (m *MsgSetSwap) GetSignBytes() []byte {
   145  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m))
   146  }
   147  
   148  func (m *QuerySwapRequest) Validate() error {
   149  	if m == nil {
   150  		return status.Error(codes.InvalidArgument, "empty QuerySwapRequest is not allowed")
   151  	}
   152  	if m.GetFromDenom() == m.GetToDenom() {
   153  		return status.Error(codes.InvalidArgument, "fromDenom and toDenom cannot be the same")
   154  	}
   155  
   156  	if m.GetFromDenom() == "" {
   157  		return status.Error(codes.InvalidArgument, "from denom is empty")
   158  	}
   159  	if m.GetToDenom() == "" {
   160  		return status.Error(codes.InvalidArgument, "to denom is empty")
   161  	}
   162  	return nil
   163  }