func (msg DonateMsg) GetSigners() []sdk.AccAddress {
	return []sdk.AccAddress{sdk.AccAddress(msg.Username)}
}
GetSigners - implements sdk.Msg
package types
import (
	"fmt"
	"unicode/utf8"
	sdk "github.com/cosmos/cosmos-sdk/types"
	"github.com/lino-network/lino/types"
)
type CreatePostMsg struct {
	Author    types.AccountKey `json:"author"`
	PostID    string           `json:"post_id"`
	Title     string           `json:"title"`
	Content   string           `json:"content"`
	CreatedBy types.AccountKey `json:"created_by"`
	Preauth   bool             `json:"preauth"`
}
var _ types.Msg = CreatePostMsg{}
func (msg CreatePostMsg) Route() string { return RouterKey }
func (msg CreatePostMsg) Type() string { return "CreatePostMsg" }
func (msg CreatePostMsg) GetSigners() []sdk.AccAddress {
	if msg.Preauth {
		return []sdk.AccAddress{sdk.AccAddress(msg.Author)}
	}
	return []sdk.AccAddress{sdk.AccAddress(msg.CreatedBy)}
}
func (msg CreatePostMsg) GetSignBytes() []byte {
	return getSignBytes(msg)
}
func (msg CreatePostMsg) GetPermission() types.Permission {
	if msg.Preauth {
		return types.TransactionPermission
	}
	if msg.CreatedBy == msg.Author {
		return types.TransactionPermission
	}
	return types.AppOrAffiliatedPermission
}
func (msg CreatePostMsg) GetConsumeAmount() types.Coin {
	return types.NewCoinFromInt64(0)
}
func (msg CreatePostMsg) ValidateBasic() sdk.Error {
	err := checkPostBasic(msg.PostID, msg.Author, msg.Title, msg.Content)
	if err != nil {
		return err
	}
	if !msg.CreatedBy.IsValid() {
		return ErrInvalidCreatedBy()
	}
	return nil
}
func (msg CreatePostMsg) String() string {
	return fmt.Sprintf(
		"Post.CreatePostMsg{author:%v, postID:%v, title:%v, content:%v, created_by:%v}",
		msg.Author, msg.PostID, msg.Title, msg.Content, msg.CreatedBy)
}
type UpdatePostMsg struct {
	Author  types.AccountKey `json:"author"`
	PostID  string           `json:"post_id"`
	Title   string           `json:"title"`
	Content string           `json:"content"`
}
var _ types.Msg = UpdatePostMsg{}
func (msg UpdatePostMsg) Route() string { return RouterKey }
func (msg UpdatePostMsg) Type() string { return "UpdatePostMsg" }
func (msg UpdatePostMsg) GetPermission() types.Permission {
	return types.TransactionPermission
}
func (msg UpdatePostMsg) ValidateBasic() sdk.Error {
	err := checkPostBasic(msg.PostID, msg.Author, msg.Title, msg.Content)
	if err != nil {
		return err
	}
	return nil
}
func (msg UpdatePostMsg) String() string {
	return fmt.Sprintf("Post.UpdatePostMsg{author:%v, postID:%v, title:%v, content:%v}",
		msg.Author, msg.PostID, msg.Title, msg.Content)
}
func (msg UpdatePostMsg) GetSignBytes() []byte {
	return getSignBytes(msg)
}
func (msg UpdatePostMsg) GetSigners() []sdk.AccAddress {
	return []sdk.AccAddress{sdk.AccAddress(msg.Author)}
}
func (msg UpdatePostMsg) GetConsumeAmount() types.Coin {
	return types.NewCoinFromInt64(0)
}
type DeletePostMsg struct {
	Author types.AccountKey `json:"author"`
	PostID string           `json:"post_id"`
}
var _ types.Msg = DeletePostMsg{}
func (msg DeletePostMsg) Route() string { return RouterKey }
func (msg DeletePostMsg) Type() string { return "DeletePostMsg" }
func (msg DeletePostMsg) ValidateBasic() sdk.Error {
	if len(msg.PostID) == 0 {
		return ErrNoPostID()
	}
	if !msg.Author.IsValid() {
		return ErrInvalidAuthor()
	}
	return nil
}
func (msg DeletePostMsg) GetPermission() types.Permission {
	return types.TransactionPermission
}
func (msg DeletePostMsg) GetSignBytes() []byte {
	return getSignBytes(msg)
}
func (msg DeletePostMsg) GetSigners() []sdk.AccAddress {
	return []sdk.AccAddress{sdk.AccAddress(msg.Author)}
}
func (msg DeletePostMsg) GetConsumeAmount() types.Coin {
	return types.NewCoinFromInt64(0)
}
func (msg DeletePostMsg) String() string {
	return fmt.Sprintf("Post.DeletePostMsg{author:%v, postID:%v}", msg.Author, msg.PostID)
}
type DonateMsg struct {
	Username types.AccountKey `json:"username"`
	Amount   types.LNO        `json:"amount"`
	Author   types.AccountKey `json:"author"`
	PostID   string           `json:"post_id"`
	FromApp  types.AccountKey `json:"from_app"`
	Memo     string           `json:"memo"`
}
var _ types.Msg = DonateMsg{}
func NewDonateMsg(
	user string, amount types.LNO, author string,
	postID string, fromApp string, memo string) DonateMsg {
	return DonateMsg{
		Username: types.AccountKey(user),
		Amount:   amount,
		Author:   types.AccountKey(author),
		PostID:   postID,
		FromApp:  types.AccountKey(fromApp),
		Memo:     memo,
	}
}
func (msg DonateMsg) Route() string { return RouterKey }
func (msg DonateMsg) Type() string { return "DonateMsg" }
func (msg DonateMsg) ValidateBasic() sdk.Error {
	if !msg.Username.IsValid() {
		return ErrInvalidUsername()
	}
	if !msg.Author.IsValid() || len(msg.PostID) == 0 {
		return ErrInvalidTarget()
	}
	if msg.FromApp != "" && !msg.FromApp.IsValid() {
		return ErrInvalidApp()
	}
	if msg.Username == msg.Author {
		return ErrCannotDonateToSelf(msg.Username)
	}
	_, err := types.LinoToCoin(msg.Amount)
	if err != nil {
		return err
	}
	if utf8.RuneCountInString(msg.Memo) > types.MaximumMemoLength {
		return ErrInvalidMemo()
	}
	return nil
}
func (msg DonateMsg) GetPermission() types.Permission {
	return types.TransactionPermission
}
func (msg DonateMsg) GetSignBytes() []byte {
	return getSignBytes(msg)
}