Skip to content

Commit

Permalink
x/gov: gRPC query Service (#6491)
Browse files Browse the repository at this point in the history
* WIP: adding gRPC for gov

* removed passing new store

* fixed error

* added register query service in module

* order of imports changed

* order of imports changed

* Fix proto file

* added get all proposals grpc

* added more tests

* added doc in tests

* added grpc for votes

* Added grpc for Deposits

* updated protos

* added grpc for proposal, vote, deposit, tally

* WIP: adding params grpc

* added params in gRPC

* updated error messages

* fixed error check

* added more tests

* updated tests

* added yaml types

* review changes and lint issues

* updated tests

* code cleanup

* removed cosmos.gov prefixes

* added more checks

* added more test checks

* added filtered pagination

* removed test check

* added tests for filtered pagination

* Fix Proposals

* lint

* fixed error in tests

* lint issues

* Add nil check for params

* Added unpacker

* removed casttypes

* review changes

* use suite in grpc query tests

* migrated tests to use suite

* fix non-determinism

* tests migrated to table driven tests

* fixed doc typo

* revert change

* Merge branch 'master' of github.com:cosmos/cosmos-sdk into atheesh/5921-grpc-x-gov

* review changes

* review changes

* review changes

* review change

* review changes

* docs updated

* review change

* review changes

* review changes

* review changes

* Update x/gov/keeper/keeper_test.go

Co-authored-by: sahith-narahari <sahithnarahari@gmail.com>
Co-authored-by: Anil Kumar Kammari <anil@vitwit.com>
Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
5 people authored Jul 16, 2020
1 parent ab162a6 commit 2826990
Show file tree
Hide file tree
Showing 9 changed files with 6,003 additions and 98 deletions.
55 changes: 55 additions & 0 deletions proto/cosmos/gov/gov.proto
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import "gogoproto/gogo.proto";
import "cosmos_proto/cosmos.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";

option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types";
option (gogoproto.goproto_stringer_all) = false;
Expand Down Expand Up @@ -160,3 +161,57 @@ message Vote {
bytes voter = 2 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
VoteOption option = 3;
}

// DepositParams defines the params around deposits for governance
message DepositParams {
// Minimum deposit for a proposal to enter voting period.
repeated cosmos.Coin min_deposit = 1 [
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins",
(gogoproto.moretags) = "yaml:\"min_deposit\"",
(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",
(gogoproto.moretags) = "yaml:\"max_deposit_period\""
];
}

// VotingParams defines the params around Voting in governance
message VotingParams {
// Length of the voting period.
google.protobuf.Duration voting_period = 1 [
(gogoproto.nullable) = false,
(gogoproto.stdduration) = true,
(gogoproto.jsontag) = "voting_period,omitempty",
(gogoproto.moretags) = "yaml:\"voting_period\""
];
}

// TallyParams defines the params around Tallying votes in governance
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. Initial 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. Initial value: 1/3.
bytes veto = 3 [
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
(gogoproto.nullable) = false,
(gogoproto.jsontag) = "veto,omitempty"
];
}
148 changes: 148 additions & 0 deletions proto/cosmos/gov/query.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
syntax = "proto3";
package cosmos.gov;

import "cosmos/query/pagination.proto";
import "gogoproto/gogo.proto";
import "cosmos/gov/gov.proto";

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

// Query defines the gRPC querier service for gov module
service Query {
// Proposal queries proposal details based on ProposalID
rpc Proposal (QueryProposalRequest) returns (QueryProposalResponse) {}

// Proposals queries all proposals based on given status
rpc Proposals (QueryProposalsRequest) returns (QueryProposalsResponse) {}

// Vote queries Voted information based on proposalID, voterAddr
rpc Vote(QueryVoteRequest) returns (QueryVoteResponse) {}

// Votes queries votes of a given proposal
rpc Votes (QueryVotesRequest) returns (QueryVotesResponse) {}

// Params queries all params
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {}

// Deposit queries single deposit information based proposalID, depositAddr
rpc Deposit(QueryDepositRequest) returns (QueryDepositResponse) {}

// Deposits queries all deposits of a single proposal
rpc Deposits(QueryDepositsRequest) returns (QueryDepositsResponse) {}

// TallyResult queries the tally of a proposal vote
rpc TallyResult(QueryTallyResultRequest) returns (QueryTallyResultResponse) {}
}

// QueryProposalRequest is the request type for the Query/Proposal RPC method
message QueryProposalRequest {
// unique id of the proposal
uint64 proposal_id = 1;
}

// QueryProposalResponse is the response type for the Query/Proposal RPC method
message QueryProposalResponse {
Proposal proposal = 1 [(gogoproto.nullable) = false];
}

// QueryProposalsRequest is the request type for the Query/Proposals RPC method
message QueryProposalsRequest {
// status of the proposals.
ProposalStatus proposal_status = 1 ;

// Voter address for the proposals.
bytes voter = 2 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];

// Deposit addresses from the proposals.
bytes depositor = 3 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];

cosmos.query.PageRequest req = 4;
}

// QueryProposalsResponse is the response type for the Query/Proposals RPC method
message QueryProposalsResponse {
repeated Proposal proposals = 1 [(gogoproto.nullable) = false];

cosmos.query.PageResponse res = 2;
}

// QueryVoteRequest is the request type for the Query/Vote RPC method
message QueryVoteRequest {
// unique id of the proposal
uint64 proposal_id = 1;

// Voter address for the proposals.
bytes voter = 2 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
}

// QueryVoteResponse is the response type for the Query/Vote RPC method
message QueryVoteResponse {
Vote vote = 1 [(gogoproto.nullable) = false];
}

// QueryVotesRequest is the request type for the Query/Votes RPC method
message QueryVotesRequest {
// unique id of the proposal
uint64 proposal_id = 1;

cosmos.query.PageRequest req = 2;
}

// QueryVotesResponse is the response type for the Query/Votes RPC method
message QueryVotesResponse {
repeated Vote votes = 1 [(gogoproto.nullable) = false];

cosmos.query.PageResponse res = 2;
}

// QueryParamsRequest is the request type for the Query/Params RPC method
message QueryParamsRequest {
string params_type = 1;
}

// QueryParamsResponse is the response type for the Query/Params RPC method
message QueryParamsResponse {
VotingParams voting_params = 1 [(gogoproto.nullable) = false];
DepositParams deposit_params = 2 [(gogoproto.nullable) = false];
TallyParams tally_params = 3 [(gogoproto.nullable) = false];
}

// QueryDepositRequest is the request type for the Query/Deposit RPC method
message QueryDepositRequest {
// unique id of the proposal
uint64 proposal_id = 1;

// Deposit addresses from the proposals.
bytes depositor = 2 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
}

// QueryDepositResponse is the response type for the Query/Deposit RPC method
message QueryDepositResponse {
Deposit deposit = 1 [(gogoproto.nullable) = false];
}

// QueryDepositsRequest is the request type for the Query/Deposits RPC method
message QueryDepositsRequest {
// unique id of the proposal
uint64 proposal_id = 1;

cosmos.query.PageRequest req = 2;
}

// QueryDepositsResponse is the response type for the Query/Deposits RPC method
message QueryDepositsResponse {
repeated Deposit deposits = 1 [(gogoproto.nullable) = false];

cosmos.query.PageResponse res = 2;
}

// QueryTallyResultRequest is the request type for the Query/Tally RPC method
message QueryTallyResultRequest {
// unique id of the proposal
uint64 proposal_id = 1;
}

// QueryTallyResultResponse is the response type for the Query/Tally RPC method
message QueryTallyResultResponse {
TallyResult tally = 1 [(gogoproto.nullable) = false];
}
Loading

0 comments on commit 2826990

Please sign in to comment.