syntax = "proto3";
package zgc.committee.v1beta1;

import "cosmos_proto/cosmos.proto";
import "gogoproto/gogo.proto";
import "google/protobuf/any.proto";
import "zgc/committee/v1beta1/genesis.proto";

option go_package = "github.com/0glabs/0g-chain/x/committee/types";
option (gogoproto.goproto_getters_all) = false;

// Msg defines the committee Msg service
service Msg {
  // SubmitProposal defines a method for submitting a committee proposal
  rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse);
  // Vote defines a method for voting on a proposal
  rpc Vote(MsgVote) returns (MsgVoteResponse);
}

// MsgSubmitProposal is used by committee members to create a new proposal that they can vote on.
message MsgSubmitProposal {
  google.protobuf.Any pub_proposal = 1 [(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"];
  string proposer = 2;
  uint64 committee_id = 3 [(gogoproto.customname) = "CommitteeID"];
}

// MsgSubmitProposalResponse defines the SubmitProposal response type
message MsgSubmitProposalResponse {
  uint64 proposal_id = 1 [(gogoproto.customname) = "ProposalID"];
}

// MsgVote is submitted by committee members to vote on proposals.
message MsgVote {
  uint64 proposal_id = 1 [(gogoproto.customname) = "ProposalID"];
  string voter = 2;
  VoteType vote_type = 3;
}

// MsgVoteResponse defines the Vote response type
message MsgVoteResponse {}