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 }