# Messages Committee members submit proposals using a `MsgSubmitProposal` ```go // MsgSubmitProposal is used by committee members to create a new proposal that they can vote on. type MsgSubmitProposal struct { PubProposal PubProposal `json:"pub_proposal" yaml:"pub_proposal"` Proposer sdk.AccAddress `json:"proposer" yaml:"proposer"` CommitteeID uint64 `json:"committee_id" yaml:"committee_id"` } ``` ## State Modifications - Generate new `ProposalID` - Create new `Proposal` with deadline equal to the time that the proposal will expire. Valid votes include 'yes', 'no', and 'abstain'. ```go // MsgVote is submitted by committee members to vote on proposals. type MsgVote struct { ProposalID uint64 `json:"proposal_id" yaml:"proposal_id"` Voter sdk.AccAddress `json:"voter" yaml:"voter"` VoteType VoteType `json:"vote_type" yaml:"vote_type"` } ``` ## State Modifications - Create a new `Vote` - When the proposal is evaluated: - Enact the proposal (passed proposals may cause state modifications) - Delete the proposal and associated votes