github.com/InjectiveLabs/sdk-go@v1.53.0/chain/tokenfactory/types/msgs.go (about) 1 package types 2 3 import ( 4 "cosmossdk.io/errors" 5 "cosmossdk.io/math" 6 "github.com/InjectiveLabs/sdk-go/chain/types" 7 sdk "github.com/cosmos/cosmos-sdk/types" 8 sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" 9 banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" 10 "strings" 11 ) 12 13 // constants 14 const ( 15 TypeMsgCreateDenom = "create_denom" 16 TypeMsgMint = "tf_mint" 17 TypeMsgBurn = "tf_burn" 18 TypeMsgChangeAdmin = "change_admin" 19 TypeMsgSetDenomMetadata = "set_denom_metadata" 20 TypeMsgUpdateParams = "update_params" 21 ) 22 23 var _ sdk.Msg = &MsgCreateDenom{} 24 var _ sdk.Msg = &MsgMint{} 25 var _ sdk.Msg = &MsgBurn{} 26 var _ sdk.Msg = &MsgSetDenomMetadata{} 27 var _ sdk.Msg = &MsgChangeAdmin{} 28 var _ sdk.Msg = &MsgUpdateParams{} 29 30 func (m MsgUpdateParams) Route() string { return RouterKey } 31 32 func (m MsgUpdateParams) Type() string { return TypeMsgUpdateParams } 33 34 func (m MsgUpdateParams) ValidateBasic() error { 35 if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { 36 return errors.Wrap(err, "invalid authority address") 37 } 38 39 if err := m.Params.Validate(); err != nil { 40 return err 41 } 42 43 return nil 44 } 45 46 func (m *MsgUpdateParams) GetSignBytes() []byte { 47 return sdk.MustSortJSON(ModuleCdc.MustMarshal(m)) 48 } 49 50 func (m MsgUpdateParams) GetSigners() []sdk.AccAddress { 51 addr, _ := sdk.AccAddressFromBech32(m.Authority) 52 return []sdk.AccAddress{addr} 53 } 54 55 // NewMsgCreateDenom creates a msg to create a new denom 56 func NewMsgCreateDenom(sender, subdenom, name, symbol string, decimals uint32) *MsgCreateDenom { 57 return &MsgCreateDenom{ 58 Sender: sender, 59 Subdenom: subdenom, 60 Name: name, 61 Symbol: symbol, 62 Decimals: decimals, 63 } 64 } 65 66 func (m MsgCreateDenom) Route() string { return RouterKey } 67 func (m MsgCreateDenom) Type() string { return TypeMsgCreateDenom } 68 func (m MsgCreateDenom) ValidateBasic() error { 69 _, err := sdk.AccAddressFromBech32(m.Sender) 70 if err != nil { 71 return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err) 72 } 73 74 _, err = GetTokenDenom(m.Sender, m.Subdenom) 75 if err != nil { 76 return errors.Wrap(ErrInvalidDenom, err.Error()) 77 } 78 79 return nil 80 } 81 82 func (m *MsgCreateDenom) GetSignBytes() []byte { 83 return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m)) 84 } 85 86 func (m MsgCreateDenom) GetSigners() []sdk.AccAddress { 87 sender, _ := sdk.AccAddressFromBech32(m.Sender) 88 return []sdk.AccAddress{sender} 89 } 90 91 // NewMsgMint creates a message to mint tokens 92 func NewMsgMint(sender string, amount sdk.Coin) *MsgMint { 93 return &MsgMint{ 94 Sender: sender, 95 Amount: amount, 96 } 97 } 98 99 func (m MsgMint) Route() string { return RouterKey } 100 func (m MsgMint) Type() string { return TypeMsgMint } 101 func (m MsgMint) ValidateBasic() error { 102 _, err := sdk.AccAddressFromBech32(m.Sender) 103 if err != nil { 104 return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err) 105 } 106 107 if !m.Amount.IsValid() || m.Amount.Amount.Equal(math.ZeroInt()) { 108 return errors.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String()) 109 } 110 111 return nil 112 } 113 114 func (m MsgMint) GetSignBytes() []byte { 115 return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) 116 } 117 118 func (m MsgMint) GetSigners() []sdk.AccAddress { 119 sender, _ := sdk.AccAddressFromBech32(m.Sender) 120 return []sdk.AccAddress{sender} 121 } 122 123 // NewMsgBurn creates a message to burn tokens 124 func NewMsgBurn(sender string, amount sdk.Coin) *MsgBurn { 125 return &MsgBurn{ 126 Sender: sender, 127 Amount: amount, 128 } 129 } 130 131 func (m MsgBurn) Route() string { return RouterKey } 132 func (m MsgBurn) Type() string { return TypeMsgBurn } 133 func (m MsgBurn) ValidateBasic() error { 134 _, err := sdk.AccAddressFromBech32(m.Sender) 135 if err != nil { 136 return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err) 137 } 138 139 if !m.Amount.IsValid() || !m.Amount.IsPositive() { 140 return errors.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String()) 141 } 142 143 return nil 144 } 145 146 func (m *MsgBurn) GetSignBytes() []byte { 147 return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m)) 148 } 149 150 func (m MsgBurn) GetSigners() []sdk.AccAddress { 151 sender, _ := sdk.AccAddressFromBech32(m.Sender) 152 return []sdk.AccAddress{sender} 153 } 154 155 // NewMsgChangeAdmin creates a message to change the admin 156 func NewMsgChangeAdmin(sender, denom, newAdmin string) *MsgChangeAdmin { 157 return &MsgChangeAdmin{ 158 Sender: sender, 159 Denom: denom, 160 NewAdmin: newAdmin, 161 } 162 } 163 164 func (m MsgChangeAdmin) Route() string { return RouterKey } 165 func (m MsgChangeAdmin) Type() string { return TypeMsgChangeAdmin } 166 func (m MsgChangeAdmin) ValidateBasic() error { 167 _, err := sdk.AccAddressFromBech32(m.Sender) 168 if err != nil { 169 return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err) 170 } 171 172 _, err = sdk.AccAddressFromBech32(m.NewAdmin) 173 if err != nil { 174 return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid address (%s)", err) 175 } 176 177 _, _, err = DeconstructDenom(m.Denom) 178 if err != nil { 179 return err 180 } 181 182 return nil 183 } 184 185 func (m *MsgChangeAdmin) GetSignBytes() []byte { 186 return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m)) 187 } 188 189 func (m MsgChangeAdmin) GetSigners() []sdk.AccAddress { 190 sender, _ := sdk.AccAddressFromBech32(m.Sender) 191 return []sdk.AccAddress{sender} 192 } 193 194 // NewMsgSetDenomMetadata creates a message to set the denom metadata 195 func NewMsgSetDenomMetadata(sender string, metadata banktypes.Metadata) *MsgSetDenomMetadata { 196 return &MsgSetDenomMetadata{ 197 Sender: sender, 198 Metadata: metadata, 199 } 200 } 201 202 func (m MsgSetDenomMetadata) Route() string { return RouterKey } 203 func (m MsgSetDenomMetadata) Type() string { return TypeMsgSetDenomMetadata } 204 func (m MsgSetDenomMetadata) ValidateBasic() error { 205 _, err := sdk.AccAddressFromBech32(m.Sender) 206 if err != nil { 207 return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err) 208 } 209 210 err = m.Metadata.Validate() 211 if err != nil { 212 return err 213 } 214 215 if m.Metadata.Base == types.InjectiveCoin { 216 return errors.Wrap(ErrInvalidDenom, "cannot set metadata for INJ") 217 } 218 219 err = sdk.ValidateDenom(m.Metadata.Base) 220 if err != nil { 221 return err 222 } 223 224 // If denom metadata is for a TokenFactory denom, run the different components validations 225 strParts := strings.Split(m.Metadata.Base, "/") 226 if len(strParts) > 2 { 227 _, _, err = DeconstructDenom(m.Metadata.Base) 228 if err != nil { 229 return err 230 } 231 } 232 233 return nil 234 } 235 236 func (m *MsgSetDenomMetadata) GetSignBytes() []byte { 237 return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m)) 238 } 239 240 func (m MsgSetDenomMetadata) GetSigners() []sdk.AccAddress { 241 sender, _ := sdk.AccAddressFromBech32(m.Sender) 242 return []sdk.AccAddress{sender} 243 } 244 245 // var _ sdk.Msg = &MsgForceTransfer{} 246 247 // // NewMsgForceTransfer creates a transfer funds from one account to another 248 // func NewMsgForceTransfer(sender string, amount sdk.Coin, fromAddr, toAddr string) *MsgForceTransfer { 249 // return &MsgForceTransfer{ 250 // Sender: sender, 251 // Amount: amount, 252 // TransferFromAddress: fromAddr, 253 // TransferToAddress: toAddr, 254 // } 255 // } 256 257 // func (m MsgForceTransfer) Route() string { return RouterKey } 258 // func (m MsgForceTransfer) Type() string { return TypeMsgForceTransfer } 259 // func (m MsgForceTransfer) ValidateBasic() error { 260 // _, err := sdk.AccAddressFromBech32(m.Sender) 261 // if err != nil { 262 // return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err) 263 // } 264 265 // _, err = sdk.AccAddressFromBech32(m.TransferFromAddress) 266 // if err != nil { 267 // return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid address (%s)", err) 268 // } 269 // _, err = sdk.AccAddressFromBech32(m.TransferToAddress) 270 // if err != nil { 271 // return errors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid address (%s)", err) 272 // } 273 274 // if !m.Amount.IsValid() { 275 // return errors.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String()) 276 // } 277 278 // return nil 279 // } 280 281 // func (m MsgForceTransfer) GetSignBytes() []byte { 282 // return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) 283 // } 284 285 // func (m MsgForceTransfer) GetSigners() []sdk.AccAddress { 286 // sender, _ := sdk.AccAddressFromBech32(m.Sender) 287 // return []sdk.AccAddress{sender} 288 // }