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  // }