syntax = "proto3";
package cosmos.evidence.v1beta1;

option go_package            = "github.com/cosmos/cosmos-sdk/x/evidence/types";
option (gogoproto.equal_all) = true;

import "gogoproto/gogo.proto";
import "google/protobuf/any.proto";
import "cosmos_proto/cosmos.proto";
import "cosmos/msg/v1/msg.proto";
import "amino/amino.proto";

// Msg defines the evidence Msg service.
service Msg {
  option (cosmos.msg.v1.service) = true;

  // SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or
  // counterfactual signing.
  rpc SubmitEvidence(MsgSubmitEvidence) returns (MsgSubmitEvidenceResponse);
}

// MsgSubmitEvidence represents a message that supports submitting arbitrary
// Evidence of misbehavior such as equivocation or counterfactual signing.
message MsgSubmitEvidence {
  option (cosmos.msg.v1.signer) = "submitter";
  option (amino.name)           = "cosmos-sdk/MsgSubmitEvidence";

  option (gogoproto.equal)           = false;
  option (gogoproto.goproto_getters) = false;

  // submitter is the signer account address of evidence.
  string              submitter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
  
  // evidence defines the evidence of misbehavior.
  google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "cosmos.evidence.v1beta1.Evidence"];
}

// MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.
message MsgSubmitEvidenceResponse {
  // hash defines the hash of the evidence.
  bytes hash = 4;
}