package types
import (
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
)
const (
TypeMsgCreateDenom = "create_denom"
TypeMsgMint = "tf_mint"
TypeMsgBurn = "tf_burn"
TypeMsgForceTransfer = "force_transfer"
TypeMsgChangeAdmin = "change_admin"
TypeMsgSetDenomMetadata = "set_denom_metadata"
)
var _ sdk.Msg = &MsgCreateDenom{}
func NewMsgCreateDenom(sender, subdenom string) *MsgCreateDenom {
return &MsgCreateDenom{
Sender: sender,
Subdenom: subdenom,
}
}
func (m MsgCreateDenom) Route() string { return RouterKey }
func (m MsgCreateDenom) Type() string { return TypeMsgCreateDenom }
func (m MsgCreateDenom) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err)
}
_, err = GetTokenDenom(m.Sender, m.Subdenom)
if err != nil {
return errorsmod.Wrap(ErrInvalidDenom, err.Error())
}
return nil
}
func (m MsgCreateDenom) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgCreateDenom) GetSigners() []sdk.AccAddress {
sender, _ := sdk.AccAddressFromBech32(m.Sender)
return []sdk.AccAddress{sender}
}
var _ sdk.Msg = &MsgMint{}
func NewMsgMint(sender string, amount sdk.Coin) *MsgMint {
return &MsgMint{
Sender: sender,
Amount: amount,
}
}
func NewMsgMintTo(sender string, amount sdk.Coin, mintToAddress string) *MsgMint {
return &MsgMint{
Sender: sender,
Amount: amount,
MintToAddress: mintToAddress,
}
}
func (m MsgMint) Route() string { return RouterKey }
func (m MsgMint) Type() string { return TypeMsgMint }
func (m MsgMint) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err)
}
if m.MintToAddress != "" {
_, err = sdk.AccAddressFromBech32(m.MintToAddress)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid mint to address (%s)", err)
}
}
if !m.Amount.IsValid() || m.Amount.Amount.Equal(sdk.ZeroInt()) {
return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String())
}
return nil
}
func (m MsgMint) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgMint) GetSigners() []sdk.AccAddress {
sender, _ := sdk.AccAddressFromBech32(m.Sender)
return []sdk.AccAddress{sender}
}
var _ sdk.Msg = &MsgBurn{}
func NewMsgBurn(sender string, amount sdk.Coin) *MsgBurn {
return &MsgBurn{
Sender: sender,
Amount: amount,
}
}
func NewMsgBurnFrom(sender string, amount sdk.Coin, burnFromAddress string) *MsgBurn {
return &MsgBurn{
Sender: sender,
Amount: amount,
BurnFromAddress: burnFromAddress,
}
}
func (m MsgBurn) Route() string { return RouterKey }
func (m MsgBurn) Type() string { return TypeMsgBurn }
func (m MsgBurn) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err)
}
if !m.Amount.IsValid() || m.Amount.Amount.Equal(sdk.ZeroInt()) {
return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String())
}
if m.BurnFromAddress != "" {
_, err = sdk.AccAddressFromBech32(m.BurnFromAddress)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid burn from address (%s)", err)
}
}
return nil
}
func (m MsgBurn) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgBurn) GetSigners() []sdk.AccAddress {
sender, _ := sdk.AccAddressFromBech32(m.Sender)
return []sdk.AccAddress{sender}
}
var _ sdk.Msg = &MsgForceTransfer{}
func NewMsgForceTransfer(sender string, amount sdk.Coin, fromAddr, toAddr string) *MsgForceTransfer {
return &MsgForceTransfer{
Sender: sender,
Amount: amount,
TransferFromAddress: fromAddr,
TransferToAddress: toAddr,
}
}
func (m MsgForceTransfer) Route() string { return RouterKey }
func (m MsgForceTransfer) Type() string { return TypeMsgForceTransfer }
func (m MsgForceTransfer) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err)
}
_, err = sdk.AccAddressFromBech32(m.TransferFromAddress)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid from address (%s)", err)
}
_, err = sdk.AccAddressFromBech32(m.TransferToAddress)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid to address (%s)", err)
}
if !m.Amount.IsValid() {
return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String())
}
return nil
}
func (m MsgForceTransfer) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgForceTransfer) GetSigners() []sdk.AccAddress {
sender, _ := sdk.AccAddressFromBech32(m.Sender)
return []sdk.AccAddress{sender}
}
var _ sdk.Msg = &MsgChangeAdmin{}
func NewMsgChangeAdmin(sender, denom, newAdmin string) *MsgChangeAdmin {
return &MsgChangeAdmin{
Sender: sender,
Denom: denom,
NewAdmin: newAdmin,
}
}
func (m MsgChangeAdmin) Route() string { return RouterKey }
func (m MsgChangeAdmin) Type() string { return TypeMsgChangeAdmin }
func (m MsgChangeAdmin) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err)
}
_, err = sdk.AccAddressFromBech32(m.NewAdmin)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid address (%s)", err)
}
_, _, err = DeconstructDenom(m.Denom)
if err != nil {
return err
}
return nil
}
func (m MsgChangeAdmin) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgChangeAdmin) GetSigners() []sdk.AccAddress {
sender, _ := sdk.AccAddressFromBech32(m.Sender)
return []sdk.AccAddress{sender}
}
var _ sdk.Msg = &MsgSetDenomMetadata{}
func NewMsgSetDenomMetadata(sender string, metadata banktypes.Metadata) *MsgSetDenomMetadata {
return &MsgSetDenomMetadata{
Sender: sender,
Metadata: metadata,
}
}
func (m MsgSetDenomMetadata) Route() string { return RouterKey }
func (m MsgSetDenomMetadata) Type() string { return TypeMsgSetDenomMetadata }
func (m MsgSetDenomMetadata) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err)
}
err = m.Metadata.Validate()
if err != nil {
return err
}
_, _, err = DeconstructDenom(m.Metadata.Base)
if err != nil {
return err
}
return nil
}
func (m MsgSetDenomMetadata) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgSetDenomMetadata) GetSigners() []sdk.AccAddress {
sender, _ := sdk.AccAddressFromBech32(m.Sender)
return []sdk.AccAddress{sender}
}
var _ sdk.Msg = &MsgUpdateParams{}
func (m MsgUpdateParams) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {
addr, _ := sdk.AccAddressFromBech32(m.Authority)
return []sdk.AccAddress{addr}
}
func (m *MsgUpdateParams) ValidateBasic() error {
if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {
return errorsmod.Wrap(err, "invalid authority address")
}
return m.Params.Validate()
}