func NewMsgSubmitProposal(content Content, initialDeposit Coins, proposer AccountID) MsgSubmitProposal {
	return MsgSubmitProposal{content, initialDeposit, proposer}
}
NewMsgSubmitProposal returns a (deprecated) MsgSubmitProposal message.

TODO: Remove once client-side Protobuf migration has been completed.
package types
import (
	chainType "github.com/KuChainNetwork/kuchain/chain/types"
	sdk "github.com/cosmos/cosmos-sdk/types"
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
	"gopkg.in/yaml.v2"
)
const (
	TypeMsgDeposit        = "deposit"
	TypeMsgVote           = "vote"
	TypeMsgSubmitProposal = "submitproposal"
)
var _, _, _, _ chainType.KuMsgData = (*MsgSubmitProposalBase)(nil), (*MsgDeposit)(nil), (*MsgVote)(nil), (*MsgSubmitProposal)(nil)
type MsgSubmitProposalI interface {
	sdk.Msg
	GetContent() Content
	GetInitialDeposit() Coins
	GetProposer() sdk.AccAddress
	GetProposerAccountID() AccountID
}
type MsgSubmitProposalBase struct {
	InitialDeposit Coins     `json:"initial_deposit" yaml:"initial_deposit"`
	Proposer       AccountID `json:"proposer" yaml:"proposer"`
}
func NewMsgSubmitProposalBase(initialDeposit Coins, proposer AccountID) MsgSubmitProposalBase {
	return MsgSubmitProposalBase{
		InitialDeposit: initialDeposit,
		Proposer:       proposer,
	}
}
func (msg MsgSubmitProposalBase) Route() string { return RouterKey }
func (msg MsgSubmitProposalBase) Type() Name {
	return MustName(TypeMsgSubmitProposal)
}
func (msg MsgSubmitProposalBase) Sender() AccountID {
	return msg.Proposer
}
func (msg MsgSubmitProposalBase) ValidateBasic() error {
	if msg.Proposer.Empty() {
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Proposer.String())
	}
	if !msg.InitialDeposit.IsValid() {
		return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.InitialDeposit.String())
	}
	if msg.InitialDeposit.IsAnyNegative() {
		return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.InitialDeposit.String())
	}
	return nil
}
func (msg MsgSubmitProposalBase) GetSignBytes() []byte {
	bz := ModuleCdc.MustMarshalJSON(msg)
	return sdk.MustSortJSON(bz)
}
func (msg MsgSubmitProposalBase) GetSigners() []sdk.AccAddress {
	proposalAccAddress, ok := msg.Proposer.ToAccAddress()
	if ok {
		return []sdk.AccAddress{proposalAccAddress}
	}
	return []sdk.AccAddress{}
}
func (msg MsgSubmitProposalBase) String() string {
	out, _ := yaml.Marshal(msg)
	return string(out)
}
type MsgDeposit struct {
	ProposalID uint64    `json:"proposal_id" yaml:"proposal_id"`
	Depositor  AccountID `json:"depositor" yaml:"depositor"`
	Amount     Coins     `json:"amount" yaml:"amount"`
}
func NewMsgDeposit(depositor AccountID, proposalID uint64, amount Coins) MsgDeposit {
	return MsgDeposit{proposalID, depositor, amount}
}
func (msg MsgDeposit) Route() string { return RouterKey }
func (msg MsgDeposit) Type() Name { return MustName(TypeMsgDeposit) }
func (msg MsgDeposit) Sender() AccountID {
	return msg.Depositor
}
func (msg MsgDeposit) ValidateBasic() error {
	if msg.Depositor.Empty() {
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Depositor.String())
	}
	if !msg.Amount.IsValid() {
		return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())
	}
	if msg.Amount.IsAnyNegative() {
		return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())
	}
	return nil
}
func (msg MsgDeposit) String() string {
	out, _ := yaml.Marshal(msg)
	return string(out)
}
func (msg MsgDeposit) GetSignBytes() []byte {
	bz := ModuleCdc.MustMarshalJSON(msg)
	return sdk.MustSortJSON(bz)
}
func (msg MsgDeposit) GetSigners() []sdk.AccAddress {
	depositorAccAddress, ok := msg.Depositor.ToAccAddress()
	if ok {
		return []sdk.AccAddress{depositorAccAddress}
	}
	return []sdk.AccAddress{}
}
type MsgVote struct {
	ProposalID uint64     `json:"proposal_id" yaml:"proposal_id"`
	Voter      AccountID  `json:"voter" yaml:"voter"`
	Option     VoteOption `json:"option" yaml:"option"`
}
func NewMsgVote(voter AccountID, proposalID uint64, option VoteOption) MsgVote {
	return MsgVote{proposalID, voter, option}
}
func (msg MsgVote) Route() string { return RouterKey }
func (msg MsgVote) Type() Name { return MustName(TypeMsgVote) }
func (msg MsgVote) Sender() AccountID {
	return msg.Voter
}
func (msg MsgVote) ValidateBasic() error {
	if msg.Voter.Empty() {
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Voter.String())
	}
	if !ValidVoteOption(msg.Option) {
		return sdkerrors.Wrap(ErrInvalidVote, msg.Option.String())
	}
	return nil
}
func (msg MsgVote) String() string {
	out, _ := yaml.Marshal(msg)
	return string(out)
}
func (msg MsgVote) GetSignBytes() []byte {
	bz := ModuleCdc.MustMarshalJSON(msg)
	return sdk.MustSortJSON(bz)
}
func (msg MsgVote) GetSigners() []sdk.AccAddress {
	voterAccAddress, ok := msg.Voter.ToAccAddress()
	if ok {
		return []sdk.AccAddress{voterAccAddress}
	}
	return []sdk.AccAddress{}
}
type MsgSubmitProposal struct {
	Content        Content   `json:"content" yaml:"content"`
	InitialDeposit Coins     `json:"initial_deposit" yaml:"initial_deposit"`  
	Proposer       AccountID `json:"proposer" yaml:"proposer"`                
}