cosmos-sdk/proto/cosmos/group/v1beta1/types.proto

273 lines
9.5 KiB
Protocol Buffer

syntax = "proto3";
package cosmos.group.v1beta1;
option go_package = "github.com/cosmos/cosmos-sdk/x/group";
import "gogoproto/gogo.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "cosmos_proto/cosmos.proto";
import "google/protobuf/any.proto";
// Member represents a group member with an account address,
// non-zero weight and metadata.
message Member {
// address is the member's account address.
string address = 1;
// weight is the member's voting weight that should be greater than 0.
string weight = 2;
// metadata is any arbitrary metadata to attached to the member.
bytes metadata = 3;
}
// Members defines a repeated slice of Member objects.
message Members {
// members is the list of members.
repeated Member members = 1 [(gogoproto.nullable) = false];
}
// ThresholdDecisionPolicy implements the DecisionPolicy interface
message ThresholdDecisionPolicy {
option (cosmos_proto.implements_interface) = "DecisionPolicy";
// threshold is the minimum weighted sum of yes votes that must be met or exceeded for a proposal to succeed.
string threshold = 1;
// timeout is the duration from submission of a proposal to the end of voting period
// Within this times votes and exec messages can be submitted.
google.protobuf.Duration timeout = 2 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false];
}
// Choice defines available types of choices for voting.
enum Choice {
// CHOICE_UNSPECIFIED defines a no-op voting choice.
CHOICE_UNSPECIFIED = 0;
// CHOICE_NO defines a no voting choice.
CHOICE_NO = 1;
// CHOICE_YES defines a yes voting choice.
CHOICE_YES = 2;
// CHOICE_ABSTAIN defines an abstaining voting choice.
CHOICE_ABSTAIN = 3;
// CHOICE_VETO defines a voting choice with veto.
CHOICE_VETO = 4;
}
//
// State
//
// GroupInfo represents the high-level on-chain information for a group.
message GroupInfo {
// group_id is the unique ID of the group.
uint64 group_id = 1;
// admin is the account address of the group's admin.
string admin = 2;
// metadata is any arbitrary metadata to attached to the group.
bytes metadata = 3;
// version is used to track changes to a group's membership structure that
// would break existing proposals. Whenever any members weight is changed,
// or any member is added or removed this version is incremented and will
// cause proposals based on older versions of this group to fail
uint64 version = 4;
// total_weight is the sum of the group members' weights.
string total_weight = 5;
}
// GroupMember represents the relationship between a group and a member.
message GroupMember {
// group_id is the unique ID of the group.
uint64 group_id = 1;
// member is the member data.
Member member = 2;
}
// GroupAccountInfo represents the high-level on-chain information for a group account.
message GroupAccountInfo {
option (gogoproto.equal) = true;
option (gogoproto.goproto_getters) = false;
// address is the group account address.
string address = 1;
// group_id is the unique ID of the group.
uint64 group_id = 2;
// admin is the account address of the group admin.
string admin = 3;
// metadata is any arbitrary metadata to attached to the group account.
bytes metadata = 4;
// version is used to track changes to a group's GroupAccountInfo structure that
// would create a different result on a running proposal.
uint64 version = 5;
// decision_policy specifies the group account's decision policy.
google.protobuf.Any decision_policy = 6 [(cosmos_proto.accepts_interface) = "DecisionPolicy"];
// derivation_key is the "derivation" key of the group account,
// which is needed to derive the group root module key and execute proposals.
bytes derivation_key = 7;
}
// Proposal defines a group proposal. Any member of a group can submit a proposal
// for a group account to decide upon.
// A proposal consists of a set of `sdk.Msg`s that will be executed if the proposal
// passes as well as some optional metadata associated with the proposal.
message Proposal {
option (gogoproto.goproto_getters) = false;
// proposal_id is the unique id of the proposal.
uint64 proposal_id = 1;
// address is the group account address.
string address = 2;
// metadata is any arbitrary metadata to attached to the proposal.
bytes metadata = 3;
// proposers are the account addresses of the proposers.
repeated string proposers = 4;
// submitted_at is a timestamp specifying when a proposal was submitted.
google.protobuf.Timestamp submitted_at = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
// group_version tracks the version of the group that this proposal corresponds to.
// When group membership is changed, existing proposals from previous group versions will become invalid.
uint64 group_version = 6;
// group_account_version tracks the version of the group account that this proposal corresponds to.
// When a decision policy is changed, existing proposals from previous policy versions will become invalid.
uint64 group_account_version = 7;
// Status defines proposal statuses.
enum Status {
option (gogoproto.goproto_enum_prefix) = false;
// An empty value is invalid and not allowed.
STATUS_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "ProposalStatusInvalid"];
// Initial status of a proposal when persisted.
STATUS_SUBMITTED = 1 [(gogoproto.enumvalue_customname) = "ProposalStatusSubmitted"];
// Final status of a proposal when the final tally was executed.
STATUS_CLOSED = 2 [(gogoproto.enumvalue_customname) = "ProposalStatusClosed"];
// Final status of a proposal when the group was modified before the final tally.
STATUS_ABORTED = 3 [(gogoproto.enumvalue_customname) = "ProposalStatusAborted"];
// TODO: do we want to support a withdrawn operation?
// A proposal can be deleted before the voting start time by the owner. When this happens the final status
// is Withdrawn.
// STATUS_WITHDRAWN = 4 [(gogoproto.enumvalue_customname) = "Withdrawn"];
}
// Status represents the high level position in the life cycle of the proposal. Initial value is Submitted.
Status status = 8;
// Result defines types of proposal results.
enum Result {
option (gogoproto.goproto_enum_prefix) = false;
// An empty value is invalid and not allowed
RESULT_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "ProposalResultInvalid"];
// Until a final tally has happened the status is unfinalized
RESULT_UNFINALIZED = 1 [(gogoproto.enumvalue_customname) = "ProposalResultUnfinalized"];
// Final result of the tally
RESULT_ACCEPTED = 2 [(gogoproto.enumvalue_customname) = "ProposalResultAccepted"];
// Final result of the tally
RESULT_REJECTED = 3 [(gogoproto.enumvalue_customname) = "ProposalResultRejected"];
}
// result is the final result based on the votes and election rule. Initial value is unfinalized.
// The result is persisted so that clients can always rely on this state and not have to replicate the logic.
Result result = 9;
// vote_state contains the sums of all weighted votes for this proposal.
Tally vote_state = 10 [(gogoproto.nullable) = false];
// timeout is the timestamp of the block where the proposal execution times out. Header times of the votes and
// execution messages must be before this end time to be included in the election. After the timeout timestamp the
// proposal can not be executed anymore and should be considered pending delete.
google.protobuf.Timestamp timeout = 11 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
// ExecutorResult defines types of proposal executor results.
enum ExecutorResult {
option (gogoproto.goproto_enum_prefix) = false;
// An empty value is not allowed.
EXECUTOR_RESULT_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "ProposalExecutorResultInvalid"];
// We have not yet run the executor.
EXECUTOR_RESULT_NOT_RUN = 1 [(gogoproto.enumvalue_customname) = "ProposalExecutorResultNotRun"];
// The executor was successful and proposed action updated state.
EXECUTOR_RESULT_SUCCESS = 2 [(gogoproto.enumvalue_customname) = "ProposalExecutorResultSuccess"];
// The executor returned an error and proposed action didn't update state.
EXECUTOR_RESULT_FAILURE = 3 [(gogoproto.enumvalue_customname) = "ProposalExecutorResultFailure"];
}
// executor_result is the final result based on the votes and election rule. Initial value is NotRun.
ExecutorResult executor_result = 12;
// msgs is a list of Msgs that will be executed if the proposal passes.
repeated google.protobuf.Any msgs = 13;
}
// Tally represents the sum of weighted votes.
message Tally {
option (gogoproto.goproto_getters) = false;
// yes_count is the weighted sum of yes votes.
string yes_count = 1;
// no_count is the weighted sum of no votes.
string no_count = 2;
// abstain_count is the weighted sum of abstainers
string abstain_count = 3;
// veto_count is the weighted sum of vetoes.
string veto_count = 4;
}
// Vote represents a vote for a proposal.
message Vote {
// proposal is the unique ID of the proposal.
uint64 proposal_id = 1;
// voter is the account address of the voter.
string voter = 2;
// choice is the voter's choice on the proposal.
Choice choice = 3;
// metadata is any arbitrary metadata to attached to the vote.
bytes metadata = 4;
// submitted_at is the timestamp when the vote was submitted.
google.protobuf.Timestamp submitted_at = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
}