x/gov v0.43 Audit updates (#9258)

* Update gov tx usage

* Update proto

* make proto-gen

* Add deposit test

* Rename test function

* More audits

* Update x/gov/keeper/internal_test.go

* Update x/gov/spec/01_concepts.md

Co-authored-by: atheeshp <59333759+atheeshp@users.noreply.github.com>
This commit is contained in:
Amaury
2021-05-07 12:00:19 +00:00
committed by GitHub
co-authored by atheeshp
parent 4af85dc1a3
commit 5725659684
12 changed files with 220 additions and 195 deletions
+2 -2
View File
@@ -5481,7 +5481,7 @@ MsgVoteResponse defines the Msg/Vote response type.
<a name="cosmos.gov.v1beta1.MsgVoteWeighted"></a>
### MsgVoteWeighted
MsgVote defines a message to cast a vote.
MsgVoteWeighted defines a message to cast a vote.
| Field | Type | Label | Description |
@@ -5520,7 +5520,7 @@ Msg defines the bank Msg service.
| ----------- | ------------ | ------------- | ------------| ------- | -------- |
| `SubmitProposal` | [MsgSubmitProposal](#cosmos.gov.v1beta1.MsgSubmitProposal) | [MsgSubmitProposalResponse](#cosmos.gov.v1beta1.MsgSubmitProposalResponse) | SubmitProposal defines a method to create new proposal given a content. | |
| `Vote` | [MsgVote](#cosmos.gov.v1beta1.MsgVote) | [MsgVoteResponse](#cosmos.gov.v1beta1.MsgVoteResponse) | Vote defines a method to add a vote on a specific proposal. | |
| `VoteWeighted` | [MsgVoteWeighted](#cosmos.gov.v1beta1.MsgVoteWeighted) | [MsgVoteWeightedResponse](#cosmos.gov.v1beta1.MsgVoteWeightedResponse) | WeightedVote defines a method to add a weighted vote on a specific proposal. | |
| `VoteWeighted` | [MsgVoteWeighted](#cosmos.gov.v1beta1.MsgVoteWeighted) | [MsgVoteWeightedResponse](#cosmos.gov.v1beta1.MsgVoteWeightedResponse) | VoteWeighted defines a method to add a weighted vote on a specific proposal. | |
| `Deposit` | [MsgDeposit](#cosmos.gov.v1beta1.MsgDeposit) | [MsgDepositResponse](#cosmos.gov.v1beta1.MsgDepositResponse) | Deposit defines a method to add deposit on a specific proposal. | |
<!-- end services -->
+6 -6
View File
@@ -17,7 +17,7 @@ service Msg {
// Vote defines a method to add a vote on a specific proposal.
rpc Vote(MsgVote) returns (MsgVoteResponse);
// WeightedVote defines a method to add a weighted vote on a specific proposal.
// VoteWeighted defines a method to add a weighted vote on a specific proposal.
rpc VoteWeighted(MsgVoteWeighted) returns (MsgVoteWeightedResponse);
// Deposit defines a method to add deposit on a specific proposal.
@@ -58,21 +58,21 @@ message MsgVote {
VoteOption option = 3;
}
// MsgVote defines a message to cast a vote.
// MsgVoteResponse defines the Msg/Vote response type.
message MsgVoteResponse {}
// MsgVoteWeighted defines a message to cast a vote.
message MsgVoteWeighted {
option (gogoproto.equal) = false;
option (gogoproto.goproto_stringer) = false;
option (gogoproto.stringer) = false;
option (gogoproto.goproto_getters) = false;
uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (gogoproto.moretags) = "yaml:\"proposal_id\""];
uint64 proposal_id = 1 [(gogoproto.moretags) = "yaml:\"proposal_id\""];
string voter = 2;
repeated WeightedVoteOption options = 3 [(gogoproto.nullable) = false];
}
// MsgVoteResponse defines the Msg/Vote response type.
message MsgVoteResponse {}
// MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.
message MsgVoteWeightedResponse {}
+1 -1
View File
@@ -247,7 +247,7 @@ func NewCmdWeightedVote() *cobra.Command {
find the proposal-id by running "%s query gov proposals".
Example:
$ %s tx gov vote 1 yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05 --from mykey
$ %s tx gov weighted-vote 1 yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05 --from mykey
`,
version.AppName, version.AppName,
),
+5 -5
View File
@@ -119,13 +119,13 @@ func TestImportExportQueues_ErrorUnconsistentState(t *testing.T) {
gov.InitGenesis(ctx, app.AccountKeeper, app.BankKeeper, app.GovKeeper, &types.GenesisState{
Deposits: types.Deposits{
{
1234,
"me",
sdk.Coins{
{
ProposalId: 1234,
Depositor: "me",
Amount: sdk.Coins{
sdk.NewCoin(
"stake",
sdk.NewInt(1234),
},
),
},
},
},
+7
View File
@@ -100,4 +100,11 @@ func TestDeposits(t *testing.T) {
require.False(t, found)
require.Equal(t, addr0Initial, app.BankKeeper.GetAllBalances(ctx, TestAddrs[0]))
require.Equal(t, addr1Initial, app.BankKeeper.GetAllBalances(ctx, TestAddrs[1]))
// Test delete deposits
_, err = app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fourStake)
require.NoError(t, err)
app.GovKeeper.DeleteDeposits(ctx, proposalID)
deposits = app.GovKeeper.GetDeposits(ctx, proposalID)
require.Len(t, deposits, 0)
}
+2 -4
View File
@@ -52,10 +52,8 @@ func TestHooks(t *testing.T) {
govHooksReceiver := MockGovHooksReceiver{}
app.GovKeeper = *keeper.UpdateHooks(&app.GovKeeper,
types.NewMultiGovHooks(
&govHooksReceiver,
),
keeper.UnsafeSetHooks(
&app.GovKeeper, types.NewMultiGovHooks(&govHooksReceiver),
)
require.False(t, govHooksReceiver.AfterProposalSubmissionValid)
+4 -2
View File
@@ -2,7 +2,9 @@ package keeper
import "github.com/cosmos/cosmos-sdk/x/gov/types"
func UpdateHooks(k *Keeper, h types.GovHooks) *Keeper {
// UnsafeSetHooks updates the gov keeper's hooks, overriding any potential
// pre-existing hooks.
// WARNING: this function should only be used in tests.
func UnsafeSetHooks(k *Keeper, h types.GovHooks) {
k.hooks = h
return k
}
+5 -4
View File
@@ -8,11 +8,9 @@ import (
"fmt"
"math/rand"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/gorilla/mux"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/spf13/cobra"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/cosmos/cosmos-sdk/client"
@@ -159,7 +157,10 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
m := keeper.NewMigrator(am.keeper)
cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2)
err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2)
if err != nil {
panic(err)
}
}
// InitGenesis performs genesis initialization for the gov module. It returns
+16 -2
View File
@@ -43,8 +43,8 @@ proposals:
`SoftwareUpgradeProposals`.
- `CommunityPoolSpendProposal` details a proposal for use of community funds,
together with how many coins are proposed to be spent, and to which recipient account.
- `ParameterChangeProposal` defines a proposal to change one or
more parameters. If accepted, the requested parameter change is updated
- `ParameterChangeProposal` defines a proposal to change one or
more parameters. If accepted, the requested parameter change is updated
automatically by the proposal handler upon conclusion of the voting period.
- `CancelSoftwareUpgradeProposal` is a gov Content type for cancelling a software upgrade.
@@ -118,6 +118,20 @@ proposal but accept the result of the vote.
_Note: from the UI, for urgent proposals we should maybe add a Not Urgent
option that casts a `NoWithVeto` vote._
### Weighted Votes
[ADR-037](../../../docs/architecture/adr-037-gov-split-vote.md) introduces the weighted vote feature which allows a staker to split their votes into several voting options. For example, it could use 70% of its voting power to vote Yes and 30% of its voting power to vote No.
Often times the entity owning that address might not be a single individual. For example, a company might have different stakeholders who want to vote differently, and so it makes sense to allow them to split their voting power. Currently, it is not possible for them to do "passthrough voting" and giving their users voting rights over their tokens. However, with this system, exchanges can poll their users for voting preferences, and then vote on-chain proportionally to the results of the poll.
To represent weighted vote on chain, we use the following Protobuf message.
+++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-alpha1/proto/cosmos/gov/v1beta1/gov.proto#L32-L40
+++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-alpha1/proto/cosmos/gov/v1beta1/gov.proto#L126-L137
For a weighted vote to be valid, the `options` field must not contain duplicate vote options, and the sum of weights of all options must be equal to 1.
### Quorum
Quorum is defined as the minimum percentage of voting power that needs to be
+3
View File
@@ -147,6 +147,9 @@ func TestMsgVoteWeighted(t *testing.T) {
}, false},
{0, addrs[0], WeightedVoteOptions{}, false},
{0, addrs[0], NewNonSplitVoteOption(VoteOption(0x13)), false},
{0, addrs[0], WeightedVoteOptions{ // weight sum <1
WeightedVoteOption{Option: OptionYes, Weight: sdk.NewDecWithPrec(5, 1)},
}, false},
}
for i, tc := range tests {
+1 -2
View File
@@ -29,6 +29,7 @@ func NewProposal(content Content, id uint64, submitTime, depositEndTime time.Tim
}
p := Proposal{
Content: any,
ProposalId: id,
Status: StatusDepositPeriod,
FinalTallyResult: EmptyTallyResult(),
@@ -37,8 +38,6 @@ func NewProposal(content Content, id uint64, submitTime, depositEndTime time.Tim
DepositEndTime: depositEndTime,
}
p.Content = any
return p, nil
}
+168 -167
View File
@@ -156,45 +156,6 @@ func (m *MsgVote) XXX_DiscardUnknown() {
var xxx_messageInfo_MsgVote proto.InternalMessageInfo
// MsgVote defines a message to cast a vote.
type MsgVoteWeighted struct {
ProposalId uint64 `protobuf:"varint,1,opt,name=proposal_id,json=proposalId,proto3" json:"proposal_id" yaml:"proposal_id"`
Voter string `protobuf:"bytes,2,opt,name=voter,proto3" json:"voter,omitempty"`
Options []WeightedVoteOption `protobuf:"bytes,3,rep,name=options,proto3" json:"options"`
}
func (m *MsgVoteWeighted) Reset() { *m = MsgVoteWeighted{} }
func (*MsgVoteWeighted) ProtoMessage() {}
func (*MsgVoteWeighted) Descriptor() ([]byte, []int) {
return fileDescriptor_3c053992595e3dce, []int{3}
}
func (m *MsgVoteWeighted) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *MsgVoteWeighted) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_MsgVoteWeighted.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *MsgVoteWeighted) XXX_Merge(src proto.Message) {
xxx_messageInfo_MsgVoteWeighted.Merge(m, src)
}
func (m *MsgVoteWeighted) XXX_Size() int {
return m.Size()
}
func (m *MsgVoteWeighted) XXX_DiscardUnknown() {
xxx_messageInfo_MsgVoteWeighted.DiscardUnknown(m)
}
var xxx_messageInfo_MsgVoteWeighted proto.InternalMessageInfo
// MsgVoteResponse defines the Msg/Vote response type.
type MsgVoteResponse struct {
}
@@ -203,7 +164,7 @@ func (m *MsgVoteResponse) Reset() { *m = MsgVoteResponse{} }
func (m *MsgVoteResponse) String() string { return proto.CompactTextString(m) }
func (*MsgVoteResponse) ProtoMessage() {}
func (*MsgVoteResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_3c053992595e3dce, []int{4}
return fileDescriptor_3c053992595e3dce, []int{3}
}
func (m *MsgVoteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -232,6 +193,45 @@ func (m *MsgVoteResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_MsgVoteResponse proto.InternalMessageInfo
// MsgVoteWeighted defines a message to cast a vote.
type MsgVoteWeighted struct {
ProposalId uint64 `protobuf:"varint,1,opt,name=proposal_id,json=proposalId,proto3" json:"proposal_id,omitempty" yaml:"proposal_id"`
Voter string `protobuf:"bytes,2,opt,name=voter,proto3" json:"voter,omitempty"`
Options []WeightedVoteOption `protobuf:"bytes,3,rep,name=options,proto3" json:"options"`
}
func (m *MsgVoteWeighted) Reset() { *m = MsgVoteWeighted{} }
func (*MsgVoteWeighted) ProtoMessage() {}
func (*MsgVoteWeighted) Descriptor() ([]byte, []int) {
return fileDescriptor_3c053992595e3dce, []int{4}
}
func (m *MsgVoteWeighted) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *MsgVoteWeighted) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_MsgVoteWeighted.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *MsgVoteWeighted) XXX_Merge(src proto.Message) {
xxx_messageInfo_MsgVoteWeighted.Merge(m, src)
}
func (m *MsgVoteWeighted) XXX_Size() int {
return m.Size()
}
func (m *MsgVoteWeighted) XXX_DiscardUnknown() {
xxx_messageInfo_MsgVoteWeighted.DiscardUnknown(m)
}
var xxx_messageInfo_MsgVoteWeighted proto.InternalMessageInfo
// MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.
type MsgVoteWeightedResponse struct {
}
@@ -349,8 +349,8 @@ func init() {
proto.RegisterType((*MsgSubmitProposal)(nil), "cosmos.gov.v1beta1.MsgSubmitProposal")
proto.RegisterType((*MsgSubmitProposalResponse)(nil), "cosmos.gov.v1beta1.MsgSubmitProposalResponse")
proto.RegisterType((*MsgVote)(nil), "cosmos.gov.v1beta1.MsgVote")
proto.RegisterType((*MsgVoteWeighted)(nil), "cosmos.gov.v1beta1.MsgVoteWeighted")
proto.RegisterType((*MsgVoteResponse)(nil), "cosmos.gov.v1beta1.MsgVoteResponse")
proto.RegisterType((*MsgVoteWeighted)(nil), "cosmos.gov.v1beta1.MsgVoteWeighted")
proto.RegisterType((*MsgVoteWeightedResponse)(nil), "cosmos.gov.v1beta1.MsgVoteWeightedResponse")
proto.RegisterType((*MsgDeposit)(nil), "cosmos.gov.v1beta1.MsgDeposit")
proto.RegisterType((*MsgDepositResponse)(nil), "cosmos.gov.v1beta1.MsgDepositResponse")
@@ -359,48 +359,49 @@ func init() {
func init() { proto.RegisterFile("cosmos/gov/v1beta1/tx.proto", fileDescriptor_3c053992595e3dce) }
var fileDescriptor_3c053992595e3dce = []byte{
// 653 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x3f, 0x6f, 0xd3, 0x5e,
0x14, 0xb5, 0x93, 0xfe, 0x9a, 0x5f, 0x6f, 0x50, 0x4b, 0xad, 0x08, 0x12, 0xb7, 0xb2, 0x23, 0xa3,
0x56, 0x91, 0x50, 0x6d, 0x1a, 0x24, 0x86, 0x32, 0x91, 0xa2, 0x0a, 0x90, 0x22, 0xc0, 0x48, 0x20,
0xb1, 0x14, 0x27, 0x71, 0x5d, 0x8b, 0xc4, 0xd7, 0xca, 0x7b, 0x89, 0x9a, 0x8d, 0x91, 0x09, 0x18,
0x19, 0x3b, 0xb3, 0x21, 0xf1, 0x21, 0x0a, 0x53, 0x47, 0x06, 0x14, 0x50, 0xbb, 0x00, 0x62, 0xea,
0x27, 0x40, 0x7e, 0x7f, 0xdc, 0xd2, 0xa6, 0x51, 0x91, 0xca, 0x94, 0xbc, 0x7b, 0xee, 0x39, 0xb9,
0xe7, 0xbe, 0x7b, 0x5f, 0x60, 0xae, 0x89, 0xa4, 0x83, 0xc4, 0x09, 0xb0, 0xef, 0xf4, 0x97, 0x1b,
0x3e, 0xf5, 0x96, 0x1d, 0xba, 0x65, 0xc7, 0x5d, 0xa4, 0xa8, 0x69, 0x1c, 0xb4, 0x03, 0xec, 0xdb,
0x02, 0xd4, 0x0d, 0x41, 0x68, 0x78, 0xc4, 0x4f, 0x19, 0x4d, 0x0c, 0x23, 0xce, 0xd1, 0xe7, 0x47,
0x08, 0x26, 0x7c, 0x8e, 0x96, 0x38, 0xba, 0xce, 0x4e, 0x8e, 0x90, 0xe7, 0x50, 0x21, 0xc0, 0x00,
0x79, 0x3c, 0xf9, 0x26, 0x09, 0x01, 0x62, 0xd0, 0xf6, 0x1d, 0x76, 0x6a, 0xf4, 0x36, 0x1c, 0x2f,
0x1a, 0x70, 0xc8, 0x7a, 0x9d, 0x81, 0xd9, 0x3a, 0x09, 0x1e, 0xf5, 0x1a, 0x9d, 0x90, 0x3e, 0xe8,
0x62, 0x8c, 0xc4, 0x6b, 0x6b, 0x37, 0x21, 0xd7, 0xc4, 0x88, 0xfa, 0x11, 0x2d, 0xaa, 0x65, 0xb5,
0x92, 0xaf, 0x16, 0x6c, 0x2e, 0x61, 0x4b, 0x09, 0xfb, 0x56, 0x34, 0xa8, 0xe5, 0x3f, 0x7d, 0x58,
0xca, 0xad, 0xf2, 0x44, 0x57, 0x32, 0xb4, 0x57, 0x2a, 0xcc, 0x84, 0x51, 0x48, 0x43, 0xaf, 0xbd,
0xde, 0xf2, 0x63, 0x24, 0x21, 0x2d, 0x66, 0xca, 0xd9, 0x4a, 0xbe, 0x5a, 0xb2, 0x45, 0xb1, 0x89,
0x6f, 0xd9, 0x0c, 0x7b, 0x15, 0xc3, 0xa8, 0x76, 0x6f, 0x67, 0x68, 0x2a, 0x07, 0x43, 0xf3, 0xd2,
0xc0, 0xeb, 0xb4, 0x57, 0xac, 0x63, 0x7c, 0xeb, 0xdd, 0x57, 0xb3, 0x12, 0x84, 0x74, 0xb3, 0xd7,
0xb0, 0x9b, 0xd8, 0x11, 0x9e, 0xc5, 0xc7, 0x12, 0x69, 0x3d, 0x77, 0xe8, 0x20, 0xf6, 0x09, 0x93,
0x22, 0xee, 0xb4, 0x60, 0xdf, 0xe6, 0x64, 0x4d, 0x87, 0xff, 0x63, 0xe6, 0xcc, 0xef, 0x16, 0xb3,
0x65, 0xb5, 0x32, 0xe5, 0xa6, 0xe7, 0x95, 0x8b, 0x2f, 0xb7, 0x4d, 0xe5, 0xed, 0xb6, 0xa9, 0x7c,
0xdf, 0x36, 0x95, 0x17, 0x5f, 0xca, 0x8a, 0xd5, 0x84, 0xd2, 0x89, 0x86, 0xb8, 0x3e, 0x89, 0x31,
0x22, 0xbe, 0xb6, 0x06, 0xf9, 0x58, 0xc4, 0xd6, 0xc3, 0x16, 0x6b, 0xce, 0x44, 0x6d, 0xe1, 0xe7,
0xd0, 0x3c, 0x1a, 0x3e, 0x18, 0x9a, 0x1a, 0xb7, 0x71, 0x24, 0x68, 0xb9, 0x20, 0x4f, 0x77, 0x5b,
0xd6, 0x7b, 0x15, 0x72, 0x75, 0x12, 0x3c, 0x46, 0x7a, 0x6e, 0x9a, 0x5a, 0x01, 0xfe, 0xeb, 0x23,
0xf5, 0xbb, 0xc5, 0x0c, 0xf3, 0xc8, 0x0f, 0xda, 0x0d, 0x98, 0xc4, 0x98, 0x86, 0x18, 0x31, 0xeb,
0xd3, 0x55, 0xc3, 0x3e, 0x39, 0x8f, 0x76, 0x52, 0xc7, 0x7d, 0x96, 0xe5, 0x8a, 0xec, 0x11, 0x8d,
0xf9, 0xa8, 0xc2, 0x8c, 0xa8, 0xf9, 0x89, 0x1f, 0x06, 0x9b, 0xd4, 0x6f, 0xfd, 0xe3, 0xda, 0xd7,
0x20, 0xc7, 0xab, 0x21, 0xc5, 0x2c, 0x1b, 0xa0, 0xc5, 0x51, 0xc5, 0xcb, 0x62, 0x0e, 0x4d, 0xd4,
0x26, 0x92, 0x69, 0x72, 0x25, 0x79, 0x84, 0x97, 0xd9, 0xd4, 0x8a, 0xbc, 0x5a, 0xab, 0x04, 0x97,
0x8f, 0xb9, 0x4b, 0xa1, 0x1f, 0x2a, 0x40, 0x9d, 0x04, 0x72, 0x9e, 0xce, 0xcb, 0xf4, 0x3c, 0x4c,
0x89, 0xf9, 0x46, 0x69, 0xfc, 0x30, 0xa0, 0x35, 0x61, 0xd2, 0xeb, 0x60, 0x2f, 0xa2, 0xc2, 0xfb,
0x98, 0xe5, 0xb9, 0x96, 0xd8, 0xfd, 0xab, 0x15, 0x11, 0xd2, 0x23, 0x3a, 0x53, 0x00, 0xed, 0xd0,
0xaa, 0xec, 0x40, 0xf5, 0x57, 0x06, 0xb2, 0x75, 0x12, 0x68, 0x1b, 0x30, 0x7d, 0xec, 0xa9, 0x58,
0x18, 0x75, 0x25, 0x27, 0x16, 0x48, 0x5f, 0x3a, 0x53, 0x5a, 0xba, 0x67, 0x77, 0x60, 0x82, 0xed,
0xc6, 0xdc, 0x29, 0xb4, 0x04, 0xd4, 0xaf, 0x8c, 0x01, 0x53, 0xa5, 0x67, 0x70, 0xe1, 0x8f, 0x89,
0x1d, 0x47, 0x92, 0x49, 0xfa, 0xd5, 0x33, 0x24, 0xa5, 0xbf, 0xf0, 0x10, 0x72, 0x72, 0x32, 0x8c,
0x53, 0x78, 0x02, 0xd7, 0x17, 0xc7, 0xe3, 0x52, 0xb2, 0x56, 0xdb, 0xd9, 0x33, 0xd4, 0xdd, 0x3d,
0x43, 0xfd, 0xb6, 0x67, 0xa8, 0x6f, 0xf6, 0x0d, 0x65, 0x77, 0xdf, 0x50, 0x3e, 0xef, 0x1b, 0xca,
0xd3, 0xf1, 0x57, 0xbc, 0xc5, 0xfe, 0x31, 0xd8, 0x45, 0x37, 0x26, 0xd9, 0x53, 0x7d, 0xfd, 0x77,
0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x6c, 0x75, 0x57, 0x9d, 0x06, 0x00, 0x00,
// 659 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x3f, 0x6f, 0xd3, 0x5e,
0x14, 0xb5, 0x93, 0xfe, 0x9a, 0x5f, 0x5f, 0x50, 0x4b, 0x9f, 0xa2, 0x92, 0xb8, 0x95, 0x1d, 0x19,
0xb5, 0x8a, 0x84, 0x6a, 0xd3, 0x20, 0x81, 0x54, 0x26, 0x52, 0x54, 0x01, 0x52, 0x04, 0x18, 0x09,
0x24, 0x96, 0xe2, 0x24, 0xae, 0x6b, 0x91, 0xf8, 0x5a, 0x79, 0x2f, 0x51, 0xb3, 0x31, 0x32, 0x01,
0x23, 0x63, 0x67, 0x36, 0x24, 0x26, 0x3e, 0x41, 0xc5, 0xd4, 0x91, 0x01, 0x05, 0xd4, 0x2e, 0x80,
0x98, 0xfa, 0x09, 0x90, 0xdf, 0x1f, 0xb7, 0x34, 0x6e, 0x54, 0x50, 0xa7, 0xe4, 0xdd, 0x73, 0xcf,
0xf1, 0x3d, 0xf7, 0xdd, 0x6b, 0xa3, 0xf9, 0x26, 0x90, 0x0e, 0x10, 0xdb, 0x87, 0xbe, 0xdd, 0x5f,
0x69, 0x78, 0xd4, 0x5d, 0xb1, 0xe9, 0xb6, 0x15, 0x75, 0x81, 0x02, 0xc6, 0x1c, 0xb4, 0x7c, 0xe8,
0x5b, 0x02, 0xd4, 0x74, 0x41, 0x68, 0xb8, 0xc4, 0x4b, 0x18, 0x4d, 0x08, 0x42, 0xce, 0xd1, 0x16,
0x52, 0x04, 0x63, 0x3e, 0x47, 0x4b, 0x1c, 0xdd, 0x60, 0x27, 0x5b, 0xc8, 0x73, 0xa8, 0xe0, 0x83,
0x0f, 0x3c, 0x1e, 0xff, 0x93, 0x04, 0x1f, 0xc0, 0x6f, 0x7b, 0x36, 0x3b, 0x35, 0x7a, 0x9b, 0xb6,
0x1b, 0x0e, 0x38, 0x64, 0xbe, 0xce, 0xa0, 0xd9, 0x3a, 0xf1, 0x1f, 0xf5, 0x1a, 0x9d, 0x80, 0x3e,
0xe8, 0x42, 0x04, 0xc4, 0x6d, 0xe3, 0x9b, 0x28, 0xd7, 0x84, 0x90, 0x7a, 0x21, 0x2d, 0xaa, 0x65,
0xb5, 0x92, 0xaf, 0x16, 0x2c, 0x2e, 0x61, 0x49, 0x09, 0xeb, 0x56, 0x38, 0xa8, 0xe5, 0x3f, 0x7d,
0x58, 0xce, 0xad, 0xf1, 0x44, 0x47, 0x32, 0xf0, 0x2b, 0x15, 0xcd, 0x04, 0x61, 0x40, 0x03, 0xb7,
0xbd, 0xd1, 0xf2, 0x22, 0x20, 0x01, 0x2d, 0x66, 0xca, 0xd9, 0x4a, 0xbe, 0x5a, 0xb2, 0x44, 0xb1,
0xb1, 0x6f, 0xd9, 0x0c, 0x6b, 0x0d, 0x82, 0xb0, 0x76, 0x6f, 0x77, 0x68, 0x28, 0x87, 0x43, 0x63,
0x6e, 0xe0, 0x76, 0xda, 0xab, 0xe6, 0x09, 0xbe, 0xf9, 0xee, 0xab, 0x51, 0xf1, 0x03, 0xba, 0xd5,
0x6b, 0x58, 0x4d, 0xe8, 0x08, 0xcf, 0xe2, 0x67, 0x99, 0xb4, 0x9e, 0xdb, 0x74, 0x10, 0x79, 0x84,
0x49, 0x11, 0x67, 0x5a, 0xb0, 0x6f, 0x73, 0x32, 0xd6, 0xd0, 0xff, 0x11, 0x73, 0xe6, 0x75, 0x8b,
0xd9, 0xb2, 0x5a, 0x99, 0x72, 0x92, 0xf3, 0xea, 0xc5, 0x97, 0x3b, 0x86, 0xf2, 0x76, 0xc7, 0x50,
0xbe, 0xef, 0x18, 0xca, 0x8b, 0x2f, 0x65, 0xc5, 0x6c, 0xa2, 0xd2, 0x48, 0x43, 0x1c, 0x8f, 0x44,
0x10, 0x12, 0x0f, 0xaf, 0xa3, 0x7c, 0x24, 0x62, 0x1b, 0x41, 0x8b, 0x35, 0x67, 0xa2, 0xb6, 0xf8,
0x73, 0x68, 0x1c, 0x0f, 0x1f, 0x0e, 0x0d, 0xcc, 0x6d, 0x1c, 0x0b, 0x9a, 0x0e, 0x92, 0xa7, 0xbb,
0x2d, 0xf3, 0xbd, 0x8a, 0x72, 0x75, 0xe2, 0x3f, 0x06, 0x7a, 0x6e, 0x9a, 0xb8, 0x80, 0xfe, 0xeb,
0x03, 0xf5, 0xba, 0xc5, 0x0c, 0xf3, 0xc8, 0x0f, 0xf8, 0x3a, 0x9a, 0x84, 0x88, 0x06, 0x10, 0x32,
0xeb, 0xd3, 0x55, 0xdd, 0x1a, 0x9d, 0x47, 0x2b, 0xae, 0xe3, 0x3e, 0xcb, 0x72, 0x44, 0x76, 0x4a,
0x63, 0x66, 0xd1, 0x8c, 0x28, 0x59, 0xb6, 0xc3, 0xfc, 0xa8, 0x26, 0xb1, 0x27, 0x5e, 0xe0, 0x6f,
0x51, 0xaf, 0x85, 0x6f, 0xa4, 0xd9, 0x99, 0xfb, 0xe7, 0xfa, 0xd7, 0x51, 0x8e, 0x57, 0x44, 0x8a,
0x59, 0x36, 0x44, 0x4b, 0x69, 0x06, 0xe4, 0xd3, 0x8f, 0x8c, 0xd4, 0x26, 0xe2, 0x89, 0x72, 0x24,
0x39, 0xc5, 0x4f, 0x09, 0x5d, 0x3a, 0x51, 0x7b, 0xe2, 0xeb, 0x87, 0x8a, 0x50, 0x9d, 0xf8, 0x72,
0x80, 0xce, 0xeb, 0x86, 0x16, 0xd0, 0x94, 0x18, 0x68, 0x90, 0x2e, 0x8f, 0x02, 0xb8, 0x89, 0x26,
0xdd, 0x0e, 0xf4, 0x42, 0x2a, 0x8c, 0x8e, 0xd9, 0x96, 0xab, 0xb1, 0xb7, 0xbf, 0xda, 0x09, 0x21,
0x9d, 0xd2, 0x86, 0x02, 0xc2, 0x47, 0x56, 0x65, 0x07, 0xaa, 0xbf, 0x32, 0x28, 0x5b, 0x27, 0x3e,
0xde, 0x44, 0xd3, 0x27, 0xde, 0x0d, 0x8b, 0x69, 0xfd, 0x1f, 0xd9, 0x18, 0x6d, 0xf9, 0x4c, 0x69,
0xc9, 0x62, 0xdd, 0x41, 0x13, 0x6c, 0x19, 0xe6, 0x4f, 0xa1, 0xc5, 0xa0, 0x76, 0x79, 0x0c, 0x98,
0x28, 0x3d, 0x43, 0x17, 0xfe, 0x98, 0xc7, 0x71, 0x24, 0x99, 0xa4, 0x5d, 0x39, 0x43, 0x52, 0xf2,
0x84, 0x87, 0x28, 0x27, 0x27, 0x43, 0x3f, 0x85, 0x27, 0x70, 0x6d, 0x69, 0x3c, 0x2e, 0x25, 0x6b,
0xb5, 0xdd, 0x7d, 0x5d, 0xdd, 0xdb, 0xd7, 0xd5, 0x6f, 0xfb, 0xba, 0xfa, 0xe6, 0x40, 0x57, 0xf6,
0x0e, 0x74, 0xe5, 0xf3, 0x81, 0xae, 0x3c, 0x1d, 0x7f, 0xc5, 0xdb, 0xec, 0x13, 0xc1, 0x2e, 0xba,
0x31, 0xc9, 0xde, 0xcd, 0xd7, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x96, 0x26, 0x77, 0x3f, 0x8e,
0x06, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -419,7 +420,7 @@ type MsgClient interface {
SubmitProposal(ctx context.Context, in *MsgSubmitProposal, opts ...grpc.CallOption) (*MsgSubmitProposalResponse, error)
// Vote defines a method to add a vote on a specific proposal.
Vote(ctx context.Context, in *MsgVote, opts ...grpc.CallOption) (*MsgVoteResponse, error)
// WeightedVote defines a method to add a weighted vote on a specific proposal.
// VoteWeighted defines a method to add a weighted vote on a specific proposal.
VoteWeighted(ctx context.Context, in *MsgVoteWeighted, opts ...grpc.CallOption) (*MsgVoteWeightedResponse, error)
// Deposit defines a method to add deposit on a specific proposal.
Deposit(ctx context.Context, in *MsgDeposit, opts ...grpc.CallOption) (*MsgDepositResponse, error)
@@ -475,7 +476,7 @@ type MsgServer interface {
SubmitProposal(context.Context, *MsgSubmitProposal) (*MsgSubmitProposalResponse, error)
// Vote defines a method to add a vote on a specific proposal.
Vote(context.Context, *MsgVote) (*MsgVoteResponse, error)
// WeightedVote defines a method to add a weighted vote on a specific proposal.
// VoteWeighted defines a method to add a weighted vote on a specific proposal.
VoteWeighted(context.Context, *MsgVoteWeighted) (*MsgVoteWeightedResponse, error)
// Deposit defines a method to add deposit on a specific proposal.
Deposit(context.Context, *MsgDeposit) (*MsgDepositResponse, error)
@@ -723,6 +724,29 @@ func (m *MsgVote) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *MsgVoteResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *MsgVoteResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *MsgVoteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
return len(dAtA) - i, nil
}
func (m *MsgVoteWeighted) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -772,29 +796,6 @@ func (m *MsgVoteWeighted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *MsgVoteResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *MsgVoteResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *MsgVoteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
return len(dAtA) - i, nil
}
func (m *MsgVoteWeightedResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -955,6 +956,15 @@ func (m *MsgVote) Size() (n int) {
return n
}
func (m *MsgVoteResponse) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
return n
}
func (m *MsgVoteWeighted) Size() (n int) {
if m == nil {
return 0
@@ -977,15 +987,6 @@ func (m *MsgVoteWeighted) Size() (n int) {
return n
}
func (m *MsgVoteResponse) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
return n
}
func (m *MsgVoteWeightedResponse) Size() (n int) {
if m == nil {
return 0
@@ -1373,6 +1374,56 @@ func (m *MsgVote) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *MsgVoteResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: MsgVoteResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: MsgVoteResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthTx
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *MsgVoteWeighted) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -1508,56 +1559,6 @@ func (m *MsgVoteWeighted) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *MsgVoteResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: MsgVoteResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: MsgVoteResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthTx
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *MsgVoteWeightedResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0