-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: create v1beta2 gov proto types #10589
Merged
+505
−0
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
syntax = "proto3"; | ||
|
||
package cosmos.gov.v1beta2; | ||
|
||
import "gogoproto/gogo.proto"; | ||
import "cosmos/gov/v1beta2/gov.proto"; | ||
|
||
option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types"; | ||
|
||
// GenesisState defines the gov module's genesis state. | ||
message GenesisState { | ||
// starting_proposal_id is the ID of the starting proposal. | ||
uint64 starting_proposal_id = 1 [(gogoproto.moretags) = "yaml:\"starting_proposal_id\""]; | ||
// deposits defines all the deposits present at genesis. | ||
repeated Deposit deposits = 2 [(gogoproto.castrepeated) = "Deposits", (gogoproto.nullable) = false]; | ||
// votes defines all the votes present at genesis. | ||
repeated Vote votes = 3 [(gogoproto.castrepeated) = "Votes", (gogoproto.nullable) = false]; | ||
// proposals defines all the proposals present at genesis. | ||
repeated Proposal proposals = 4 [(gogoproto.castrepeated) = "Proposals", (gogoproto.nullable) = false]; | ||
// params defines all the paramaters of related to deposit. | ||
DepositParams deposit_params = 5 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"deposit_params\""]; | ||
// params defines all the paramaters of related to voting. | ||
VotingParams voting_params = 6 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"voting_params\""]; | ||
// params defines all the paramaters of related to tally. | ||
TallyParams tally_params = 7 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"tally_params\""]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
syntax = "proto3"; | ||
package cosmos.gov.v1beta2; | ||
|
||
import "cosmos/base/v1beta1/coin.proto"; | ||
import "gogoproto/gogo.proto"; | ||
import "google/protobuf/timestamp.proto"; | ||
import "google/protobuf/any.proto"; | ||
import "google/protobuf/duration.proto"; | ||
import "cosmos_proto/cosmos.proto"; | ||
|
||
option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types"; | ||
option (gogoproto.goproto_stringer_all) = false; | ||
option (gogoproto.stringer_all) = false; | ||
option (gogoproto.goproto_getters_all) = false; | ||
|
||
// VoteOption enumerates the valid vote options for a given governance proposal. | ||
enum VoteOption { | ||
option (gogoproto.goproto_enum_prefix) = false; | ||
|
||
// VOTE_OPTION_UNSPECIFIED defines a no-op vote option. | ||
VOTE_OPTION_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "OptionEmpty"]; | ||
// VOTE_OPTION_YES defines a yes vote option. | ||
VOTE_OPTION_YES = 1 [(gogoproto.enumvalue_customname) = "OptionYes"]; | ||
// VOTE_OPTION_ABSTAIN defines an abstain vote option. | ||
VOTE_OPTION_ABSTAIN = 2 [(gogoproto.enumvalue_customname) = "OptionAbstain"]; | ||
// VOTE_OPTION_NO defines a no vote option. | ||
VOTE_OPTION_NO = 3 [(gogoproto.enumvalue_customname) = "OptionNo"]; | ||
// VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. | ||
VOTE_OPTION_NO_WITH_VETO = 4 [(gogoproto.enumvalue_customname) = "OptionNoWithVeto"]; | ||
} | ||
|
||
// WeightedVoteOption defines a unit of vote for vote split. | ||
message WeightedVoteOption { | ||
VoteOption option = 1; | ||
string weight = 2 [ | ||
(cosmos_proto.scalar) = "cosmos.Dec", | ||
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", | ||
(gogoproto.nullable) = false | ||
]; | ||
} | ||
|
||
// Deposit defines an amount deposited by an account address to an active | ||
// proposal. | ||
message Deposit { | ||
option (gogoproto.goproto_getters) = false; | ||
option (gogoproto.equal) = false; | ||
|
||
uint64 proposal_id = 1; | ||
string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||
repeated cosmos.base.v1beta1.Coin amount = 3 | ||
[(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; | ||
} | ||
|
||
// Proposal defines the core field members of a governance proposal. | ||
message Proposal { | ||
option (gogoproto.equal) = true; | ||
|
||
uint64 proposal_id = 1 [(gogoproto.jsontag) = "id", (gogoproto.moretags) = "yaml:\"id\""]; | ||
repeated google.protobuf.Any messages = 2; | ||
ProposalStatus status = 3 [(gogoproto.moretags) = "yaml:\"proposal_status\""]; | ||
TallyResult final_tally_result = 4 | ||
[(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"final_tally_result\""]; | ||
google.protobuf.Timestamp submit_time = 5 | ||
[(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"submit_time\""]; | ||
google.protobuf.Timestamp deposit_end_time = 6 | ||
[(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"deposit_end_time\""]; | ||
repeated cosmos.base.v1beta1.Coin total_deposit = 7 [ | ||
(gogoproto.nullable) = false, | ||
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", | ||
(gogoproto.moretags) = "yaml:\"total_deposit\"" | ||
]; | ||
google.protobuf.Timestamp voting_start_time = 8 | ||
[(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"voting_start_time\""]; | ||
google.protobuf.Timestamp voting_end_time = 9 | ||
[(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"voting_end_time\""]; | ||
} | ||
|
||
// ProposalStatus enumerates the valid statuses of a proposal. | ||
enum ProposalStatus { | ||
option (gogoproto.goproto_enum_prefix) = false; | ||
|
||
// PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. | ||
PROPOSAL_STATUS_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "StatusNil"]; | ||
// PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit | ||
// period. | ||
PROPOSAL_STATUS_DEPOSIT_PERIOD = 1 [(gogoproto.enumvalue_customname) = "StatusDepositPeriod"]; | ||
// PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting | ||
// period. | ||
PROPOSAL_STATUS_VOTING_PERIOD = 2 [(gogoproto.enumvalue_customname) = "StatusVotingPeriod"]; | ||
// PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has | ||
// passed. | ||
PROPOSAL_STATUS_PASSED = 3 [(gogoproto.enumvalue_customname) = "StatusPassed"]; | ||
// PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has | ||
// been rejected. | ||
PROPOSAL_STATUS_REJECTED = 4 [(gogoproto.enumvalue_customname) = "StatusRejected"]; | ||
// PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has | ||
// failed. | ||
PROPOSAL_STATUS_FAILED = 5 [(gogoproto.enumvalue_customname) = "StatusFailed"]; | ||
} | ||
|
||
// TallyResult defines a standard tally for a governance proposal. | ||
message TallyResult { | ||
option (gogoproto.equal) = true; | ||
|
||
string yes = 1 [ | ||
(cosmos_proto.scalar) = "cosmos.Int", | ||
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", | ||
(gogoproto.nullable) = false | ||
]; | ||
string abstain = 2 [ | ||
(cosmos_proto.scalar) = "cosmos.Int", | ||
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", | ||
(gogoproto.nullable) = false | ||
]; | ||
string no = 3 [ | ||
(cosmos_proto.scalar) = "cosmos.Int", | ||
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", | ||
(gogoproto.nullable) = false | ||
]; | ||
string no_with_veto = 4 [ | ||
(cosmos_proto.scalar) = "cosmos.Int", | ||
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", | ||
(gogoproto.nullable) = false | ||
]; | ||
} | ||
|
||
// Vote defines a vote on a governance proposal. | ||
// A Vote consists of a proposal ID, the voter, and the vote option. | ||
message Vote { | ||
option (gogoproto.goproto_stringer) = false; | ||
option (gogoproto.equal) = false; | ||
|
||
uint64 proposal_id = 1; | ||
string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||
// Deprecated: Prefer to use `options` instead. This field is set in queries | ||
// if and only if `len(options) == 1` and that option has weight 1. In all | ||
// other cases, this field will default to VOTE_OPTION_UNSPECIFIED. | ||
VoteOption option = 3 [deprecated = true]; | ||
repeated WeightedVoteOption options = 4 [(gogoproto.nullable) = false]; | ||
} | ||
|
||
// DepositParams defines the params for deposits on governance proposals. | ||
message DepositParams { | ||
// Minimum deposit for a proposal to enter voting period. | ||
repeated cosmos.base.v1beta1.Coin min_deposit = 1 [ | ||
(gogoproto.nullable) = false, | ||
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", | ||
(gogoproto.jsontag) = "min_deposit,omitempty" | ||
]; | ||
|
||
// Maximum period for Atom holders to deposit on a proposal. Initial value: 2 | ||
// months. | ||
google.protobuf.Duration max_deposit_period = 2 [ | ||
(gogoproto.nullable) = false, | ||
(gogoproto.stdduration) = true, | ||
(gogoproto.jsontag) = "max_deposit_period,omitempty" | ||
]; | ||
} | ||
|
||
// VotingParams defines the params for voting on governance proposals. | ||
message VotingParams { | ||
// Length of the voting period. | ||
google.protobuf.Duration voting_period = 1 | ||
[(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.jsontag) = "voting_period,omitempty"]; | ||
} | ||
|
||
// TallyParams defines the params for tallying votes on governance proposals. | ||
message TallyParams { | ||
// Minimum percentage of total stake needed to vote for a result to be | ||
// considered valid. | ||
bytes quorum = 1 [ | ||
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", | ||
(gogoproto.nullable) = false, | ||
(gogoproto.jsontag) = "quorum,omitempty" | ||
]; | ||
|
||
// Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. | ||
bytes threshold = 2 [ | ||
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", | ||
(gogoproto.nullable) = false, | ||
(gogoproto.jsontag) = "threshold,omitempty" | ||
]; | ||
|
||
// Minimum value of Veto votes to Total votes ratio for proposal to be | ||
// vetoed. Default value: 1/3. | ||
bytes veto_threshold = 3 [ | ||
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", | ||
(gogoproto.nullable) = false, | ||
(gogoproto.jsontag) = "veto_threshold,omitempty" | ||
]; | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the pattern that the latest version is just used as
/types
with no version in the package?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is what I've defaulted to doing but also a question I had myself
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well I don't actually think we have a good pattern right now. I proposed a pattern here which just uses the proto package as the go package more or less: #10582. But that's a bigger refactoring. And for now this seems the most logical and least intrusive. But open to other suggestions