Skip to content

Commit 95e65fe

Browse files
authored
feat: Add metadata field to proposal (#10989)
## Description Closes: #10490 --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [ ] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] added `!` to the type prefix if API or client breaking change - [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules) - [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [ ] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable)
1 parent 1581289 commit 95e65fe

27 files changed

+378
-213
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
115115
* [\#10748](https://github.com/cosmos/cosmos-sdk/pull/10748) Move legacy `x/gov` api to `v1beta1` directory.
116116
* [\#10816](https://github.com/cosmos/cosmos-sdk/pull/10816) Reuse blocked addresses from the bank module. No need to pass them to distribution.
117117
* [\#10852](https://github.com/cosmos/cosmos-sdk/pull/10852) Move `x/gov/types` to `x/gov/types/v1beta2`.
118-
* [\#10868](https://github.com/cosmos/cosmos-sdk/pull/10868) The Gov keeper accepts now a mandatory last argument, the ServiceMsgRouter.
118+
* [\#10868](https://github.com/cosmos/cosmos-sdk/pull/10868), [\#10989](https://github.com/cosmos/cosmos-sdk/pull/10989) The Gov keeper accepts now 2 more mandatory arguments, the ServiceMsgRouter and a maximum proposal metadata length.
119119

120120
### Client Breaking Changes
121121

proto/cosmos/gov/v1beta2/gov.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ message Proposal {
4949
repeated cosmos.base.v1beta1.Coin total_deposit = 7 [(gogoproto.nullable) = false];
5050
google.protobuf.Timestamp voting_start_time = 8 [(gogoproto.stdtime) = true];
5151
google.protobuf.Timestamp voting_end_time = 9 [(gogoproto.stdtime) = true];
52+
53+
// metadata is any arbitrary metadata attached to the proposal.
54+
bytes metadata = 10;
5255
}
5356

5457
// ProposalStatus enumerates the valid statuses of a proposal.

proto/cosmos/gov/v1beta2/tx.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ message MsgSubmitProposal {
3636
repeated google.protobuf.Any messages = 1;
3737
repeated cosmos.base.v1beta1.Coin initial_deposit = 2 [(gogoproto.nullable) = false];
3838
string proposer = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"];
39+
// metadata is any arbitrary metadata attached to the proposal.
40+
bytes metadata = 4;
3941
}
4042

4143
// MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.

simapp/app.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,10 @@ func NewSimApp(
302302
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)).
303303
AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)).
304304
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper))
305+
govMaxMetadataLen := uint64(10000)
305306
govKeeper := govkeeper.NewKeeper(
306307
appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
307-
&stakingKeeper, govRouter, app.msgSvcRouter,
308+
&stakingKeeper, govRouter, app.msgSvcRouter, govMaxMetadataLen,
308309
)
309310

310311
app.GovKeeper = *govKeeper.SetHooks(

x/auth/middleware/tips_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (s *MWTestSuite) setupAcctsForTips(ctx sdk.Context) (sdk.Context, []testAcc
3333
s.Require().NoError(err)
3434

3535
// Create dummy proposal for tipper to vote on.
36-
prop, err := govtypes.NewProposal([]sdk.Msg{banktypes.NewMsgSend(accts[0].acc.GetAddress(), accts[0].acc.GetAddress(), initialRegens)}, 1, time.Now(), time.Now().Add(time.Hour))
36+
prop, err := govtypes.NewProposal([]sdk.Msg{banktypes.NewMsgSend(accts[0].acc.GetAddress(), accts[0].acc.GetAddress(), initialRegens)}, 1, nil, time.Now(), time.Now().Add(time.Hour))
3737
s.Require().NoError(err)
3838
s.app.GovKeeper.SetProposal(ctx, prop)
3939
s.app.GovKeeper.ActivateVotingPeriod(ctx, prop)

x/gov/abci_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func TestTickExpiredDepositPeriod(t *testing.T) {
3737
[]sdk.Msg{mkTestLegacyContent(t)},
3838
sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)},
3939
addrs[0].String(),
40+
nil,
4041
)
4142
require.NoError(t, err)
4243

@@ -89,6 +90,7 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) {
8990
[]sdk.Msg{mkTestLegacyContent(t)},
9091
sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)},
9192
addrs[0].String(),
93+
nil,
9294
)
9395
require.NoError(t, err)
9496

@@ -112,6 +114,7 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) {
112114
[]sdk.Msg{mkTestLegacyContent(t)},
113115
sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)},
114116
addrs[0].String(),
117+
nil,
115118
)
116119
require.NoError(t, err)
117120

@@ -169,6 +172,7 @@ func TestTickPassedDepositPeriod(t *testing.T) {
169172
[]sdk.Msg{mkTestLegacyContent(t)},
170173
sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)},
171174
addrs[0].String(),
175+
nil,
172176
)
173177
require.NoError(t, err)
174178

@@ -221,7 +225,7 @@ func TestTickPassedVotingPeriod(t *testing.T) {
221225
activeQueue.Close()
222226

223227
proposalCoins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, app.StakingKeeper.TokensFromConsensusPower(ctx, 5))}
224-
newProposalMsg, err := v1beta2.NewMsgSubmitProposal([]sdk.Msg{mkTestLegacyContent(t)}, proposalCoins, addrs[0].String())
228+
newProposalMsg, err := v1beta2.NewMsgSubmitProposal([]sdk.Msg{mkTestLegacyContent(t)}, proposalCoins, addrs[0].String(), nil)
225229
require.NoError(t, err)
226230

227231
wrapCtx := sdk.WrapSDKContext(ctx)
@@ -289,7 +293,7 @@ func TestProposalPassedEndblocker(t *testing.T) {
289293
require.NotNil(t, macc)
290294
initialModuleAccCoins := app.BankKeeper.GetAllBalances(ctx, macc.GetAddress())
291295

292-
proposal, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{mkTestLegacyContent(t)})
296+
proposal, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{mkTestLegacyContent(t)}, nil)
293297
require.NoError(t, err)
294298

295299
proposalCoins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, app.StakingKeeper.TokensFromConsensusPower(ctx, 10))}
@@ -339,7 +343,7 @@ func TestEndBlockerProposalHandlerFailed(t *testing.T) {
339343
// Create a proposal where the handler will pass for the test proposal
340344
// because the value of contextKeyBadProposal is true.
341345
ctx = ctx.WithValue(contextKeyBadProposal, true)
342-
proposal, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{mkTestLegacyContent(t)})
346+
proposal, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{mkTestLegacyContent(t)}, nil)
343347
require.NoError(t, err)
344348

345349
proposalCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, app.StakingKeeper.TokensFromConsensusPower(ctx, 10)))

x/gov/client/utils/query.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func QueryDepositsByTxQuery(clientCtx client.Context, params v1beta2.QueryPropos
5656
clientCtx, defaultPage,
5757
// Query legacy Msgs event action
5858
[]string{
59-
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta2.TypeMsgDeposit),
59+
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta1.TypeMsgDeposit),
6060
fmt.Sprintf("%s.%s='%d'", types.EventTypeProposalDeposit, types.AttributeKeyProposalID, params.ProposalID),
6161
},
6262
// Query proto Msgs event action v1beta1
@@ -119,7 +119,7 @@ func QueryVotesByTxQuery(clientCtx client.Context, params v1beta2.QueryProposalV
119119
clientCtx, nextTxPage,
120120
// Query legacy Vote Msgs
121121
[]string{
122-
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta2.TypeMsgVote),
122+
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta1.TypeMsgVote),
123123
fmt.Sprintf("%s.%s='%d'", types.EventTypeProposalVote, types.AttributeKeyProposalID, params.ProposalID),
124124
},
125125
// Query Vote proto Msgs v1beta1
@@ -134,7 +134,7 @@ func QueryVotesByTxQuery(clientCtx client.Context, params v1beta2.QueryProposalV
134134
},
135135
// Query legacy VoteWeighted Msgs
136136
[]string{
137-
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta2.TypeMsgVoteWeighted),
137+
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta1.TypeMsgVoteWeighted),
138138
fmt.Sprintf("%s.%s='%d'", types.EventTypeProposalVote, types.AttributeKeyProposalID, params.ProposalID),
139139
},
140140
// Query VoteWeighted proto Msgs v1beta1
@@ -210,7 +210,7 @@ func QueryVoteByTxQuery(clientCtx client.Context, params v1beta2.QueryVoteParams
210210
clientCtx, defaultPage,
211211
// Query legacy Vote Msgs
212212
[]string{
213-
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta2.TypeMsgVote),
213+
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta1.TypeMsgVote),
214214
fmt.Sprintf("%s.%s='%d'", types.EventTypeProposalVote, types.AttributeKeyProposalID, params.ProposalID),
215215
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeySender, params.Voter),
216216
},
@@ -228,7 +228,7 @@ func QueryVoteByTxQuery(clientCtx client.Context, params v1beta2.QueryVoteParams
228228
},
229229
// Query legacy VoteWeighted Msgs
230230
[]string{
231-
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta2.TypeMsgVoteWeighted),
231+
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta1.TypeMsgVoteWeighted),
232232
fmt.Sprintf("%s.%s='%d'", types.EventTypeProposalVote, types.AttributeKeyProposalID, params.ProposalID),
233233
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeySender, params.Voter.String()),
234234
},
@@ -318,7 +318,7 @@ func QueryDepositByTxQuery(clientCtx client.Context, params v1beta2.QueryDeposit
318318
clientCtx, defaultPage,
319319
// Query legacy Msgs event action
320320
[]string{
321-
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta2.TypeMsgDeposit),
321+
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta1.TypeMsgDeposit),
322322
fmt.Sprintf("%s.%s='%d'", types.EventTypeProposalDeposit, types.AttributeKeyProposalID, params.ProposalID),
323323
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeySender, params.Depositor.String()),
324324
},
@@ -385,7 +385,7 @@ func QueryProposerByTxQuery(clientCtx client.Context, proposalID uint64) (Propos
385385
defaultPage,
386386
// Query legacy Msgs event action
387387
[]string{
388-
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta2.TypeMsgSubmitProposal),
388+
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta1.TypeMsgSubmitProposal),
389389
fmt.Sprintf("%s.%s='%d'", types.EventTypeSubmitProposal, types.AttributeKeyProposalID, proposalID),
390390
},
391391
// Query proto Msgs event action v1beta1
@@ -463,7 +463,7 @@ func queryInitialDepositByTxQuery(clientCtx client.Context, proposalID uint64) (
463463
clientCtx, defaultPage,
464464
// Query legacy Msgs event action
465465
[]string{
466-
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta2.TypeMsgSubmitProposal),
466+
fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, v1beta1.TypeMsgSubmitProposal),
467467
fmt.Sprintf("%s.%s='%d'", types.EventTypeSubmitProposal, types.AttributeKeyProposalID, proposalID),
468468
},
469469
// Query proto Msgs event action v1beta1

x/gov/genesis_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ func TestImportExportQueues(t *testing.T) {
3535

3636
ctx = app.BaseApp.NewContext(false, tmproto.Header{})
3737
// Create two proposals, put the second into the voting period
38-
proposal1, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{mkTestLegacyContent(t)})
38+
proposal1, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{mkTestLegacyContent(t)}, nil)
3939
require.NoError(t, err)
4040
proposalID1 := proposal1.ProposalId
4141

42-
proposal2, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{mkTestLegacyContent(t)})
42+
proposal2, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{mkTestLegacyContent(t)}, nil)
4343
require.NoError(t, err)
4444
proposalID2 := proposal2.ProposalId
4545

x/gov/keeper/deposit_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func TestDeposits(t *testing.T) {
1717
TestAddrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.NewInt(10000000))
1818

1919
tp := TestProposal
20-
proposal, err := app.GovKeeper.SubmitProposal(ctx, tp)
20+
proposal, err := app.GovKeeper.SubmitProposal(ctx, tp, nil)
2121
require.NoError(t, err)
2222
proposalID := proposal.ProposalId
2323

@@ -101,7 +101,7 @@ func TestDeposits(t *testing.T) {
101101
require.Equal(t, addr1Initial, app.BankKeeper.GetAllBalances(ctx, TestAddrs[1]))
102102

103103
// Test delete and burn deposits
104-
proposal, err = app.GovKeeper.SubmitProposal(ctx, tp)
104+
proposal, err = app.GovKeeper.SubmitProposal(ctx, tp, nil)
105105
require.NoError(t, err)
106106
proposalID = proposal.ProposalId
107107
_, err = app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fourStake)

x/gov/keeper/grpc_query_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryProposal() {
5252
testProposal := v1beta1.NewTextProposal("Proposal", "testing proposal")
5353
msgContent, err := v1beta2.NewLegacyContent(testProposal, govAcct.String())
5454
suite.Require().NoError(err)
55-
submittedProposal, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent})
55+
submittedProposal, err := app.GovKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, nil)
5656
suite.Require().NoError(err)
5757
suite.Require().NotEmpty(submittedProposal)
5858

@@ -116,7 +116,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryProposals() {
116116
testProposal := []sdk.Msg{
117117
v1beta2.NewMsgVote(govAddress, uint64(i), v1beta2.OptionYes),
118118
}
119-
proposal, err := app.GovKeeper.SubmitProposal(ctx, testProposal)
119+
proposal, err := app.GovKeeper.SubmitProposal(ctx, testProposal, nil)
120120
suite.Require().NotEmpty(proposal)
121121
suite.Require().NoError(err)
122122
testProposals = append(testProposals, &proposal)
@@ -291,7 +291,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryVote() {
291291
"no votes present",
292292
func() {
293293
var err error
294-
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal)
294+
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal, nil)
295295
suite.Require().NoError(err)
296296

297297
req = &v1beta2.QueryVoteRequest{
@@ -396,7 +396,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryVotes() {
396396
"create a proposal and get votes",
397397
func() {
398398
var err error
399-
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal)
399+
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal, nil)
400400
suite.Require().NoError(err)
401401

402402
req = &v1beta2.QueryVotesRequest{
@@ -588,7 +588,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposit() {
588588
"no deposits proposal",
589589
func() {
590590
var err error
591-
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal)
591+
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal, nil)
592592
suite.Require().NoError(err)
593593
suite.Require().NotNil(proposal)
594594

@@ -677,7 +677,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposits() {
677677
"create a proposal and get deposits",
678678
func() {
679679
var err error
680-
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal)
680+
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal, nil)
681681
suite.Require().NoError(err)
682682

683683
req = &v1beta2.QueryDepositsRequest{
@@ -769,7 +769,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryTally() {
769769
"create a proposal and get tally",
770770
func() {
771771
var err error
772-
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal)
772+
proposal, err = app.GovKeeper.SubmitProposal(ctx, TestProposal, nil)
773773
suite.Require().NoError(err)
774774
suite.Require().NotNil(proposal)
775775

0 commit comments

Comments
 (0)