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

option go_package = "github.com/cosmos/cosmos-sdk/x/capability/types";

import "gogoproto/gogo.proto";

// Capability defines an implementation of an object capability. The index
// provided to a Capability must be globally unique.
message Capability {
  option (gogoproto.goproto_stringer) = false;

  uint64 index = 1 [(gogoproto.moretags) = "yaml:\"index\""];
}

// Owner defines a single capability owner. An owner is defined by the name of
// capability and the module name.
message Owner {
  option (gogoproto.goproto_stringer) = false;
  option (gogoproto.goproto_getters)  = false;

  string module = 1 [(gogoproto.moretags) = "yaml:\"module\""];
  string name   = 2 [(gogoproto.moretags) = "yaml:\"name\""];
}

// CapabilityOwners defines a set of owners of a single Capability. The set of
// owners must be unique.
message CapabilityOwners {
  repeated Owner owners = 1 [(gogoproto.nullable) = false];
}