diff --git a/x/gov/abci.go b/x/gov/abci.go index b18e7ac84bce..688619083dbc 100644 --- a/x/gov/abci.go +++ b/x/gov/abci.go @@ -84,7 +84,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error { logger.Info( "proposal did not meet minimum deposit; deleted", "proposal", proposal.Id, - "expedited", proposal.Expedited, + "proposal_type", proposal.ProposalType, "title", proposal.Title, "min_deposit", sdk.NewCoins(proposal.GetMinDepositFromParams(params)...).String(), "total_deposit", sdk.NewCoins(proposal.TotalDeposit...).String(), @@ -131,7 +131,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error { // the deposit at this point since the proposal is converted to regular. // As a result, the deposits are either deleted or refunded in all cases // EXCEPT when an expedited proposal fails. - if passes || !proposal.Expedited { + if passes || !(proposal.ProposalType == v1.ProposalType_PROPOSAL_TYPE_EXPEDITED) { if burnDeposits { err = keeper.DeleteAndBurnDeposits(ctx, proposal.Id) } else { @@ -204,7 +204,8 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error { // to a regular proposal. As a result, the voting period is extended, and, // once the regular voting period expires again, the tally is repeated // according to the regular proposal rules. - proposal.Expedited = false + proposal.ProposalType = v1.ProposalType_PROPOSAL_TYPE_STANDARD + proposal.Expedited = false // can be removed as never read but kept for state coherence params, err := keeper.Params.Get(ctx) if err != nil { return false, err @@ -246,7 +247,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error { "proposal tallied", "proposal", proposal.Id, "status", proposal.Status.String(), - "expedited", proposal.Expedited, + "proposal_type", proposal.ProposalType, "title", proposal.Title, "results", logMsg, ) @@ -317,7 +318,7 @@ func failUnsupportedProposal( logger.Info( "proposal failed to decode; deleted", "proposal", proposal.Id, - "expedited", proposal.Expedited, + "proposal_type", proposal.ProposalType, "title", proposal.Title, "results", errMsg, ) diff --git a/x/gov/abci_test.go b/x/gov/abci_test.go index dca647173f03..9c5487c8a904 100644 --- a/x/gov/abci_test.go +++ b/x/gov/abci_test.go @@ -311,7 +311,7 @@ func TestTickPassedVotingPeriod(t *testing.T) { proposal, err = suite.GovKeeper.Proposals.Get(ctx, res.ProposalId) require.Nil(t, err) require.Equal(t, v1.StatusVotingPeriod, proposal.Status) - require.False(t, proposal.Expedited) + require.False(t, proposal.ProposalType == v1.ProposalType_PROPOSAL_TYPE_EXPEDITED) require.Equal(t, proposal.VotingStartTime.Add(*params.VotingPeriod), *proposal.VotingEndTime) }) } @@ -559,7 +559,7 @@ func TestExpeditedProposal_PassAndConversionToRegular(t *testing.T) { proposal, err = suite.GovKeeper.Proposals.Get(ctx, res.ProposalId) require.Nil(t, err) require.Equal(t, v1.StatusVotingPeriod, proposal.Status) - require.False(t, proposal.Expedited) + require.False(t, proposal.ProposalType == v1.ProposalType_PROPOSAL_TYPE_EXPEDITED) require.Equal(t, proposal.VotingStartTime.Add(*params.VotingPeriod), *proposal.VotingEndTime) // We also want to make sure that the deposit is not refunded yet and is still present in the module account diff --git a/x/gov/keeper/deposit.go b/x/gov/keeper/deposit.go index c149ca560b5d..196fe346e590 100644 --- a/x/gov/keeper/deposit.go +++ b/x/gov/keeper/deposit.go @@ -281,7 +281,7 @@ func (keeper Keeper) RefundAndDeleteDeposits(ctx context.Context, proposalID uin // validateInitialDeposit validates if initial deposit is greater than or equal to the minimum // required at the time of proposal submission. This threshold amount is determined by // the deposit parameters. Returns nil on success, error otherwise. -func (keeper Keeper) validateInitialDeposit(ctx context.Context, params v1.Params, initialDeposit sdk.Coins, expedited bool) error { +func (keeper Keeper) validateInitialDeposit(ctx context.Context, params v1.Params, initialDeposit sdk.Coins, proposalType v1.ProposalType) error { if !initialDeposit.IsValid() || initialDeposit.IsAnyNegative() { return errors.Wrap(sdkerrors.ErrInvalidCoins, initialDeposit.String()) } @@ -295,9 +295,10 @@ func (keeper Keeper) validateInitialDeposit(ctx context.Context, params v1.Param } var minDepositCoins sdk.Coins - if expedited { + switch proposalType { + case v1.ProposalType_PROPOSAL_TYPE_EXPEDITED: minDepositCoins = params.ExpeditedMinDeposit - } else { + default: minDepositCoins = params.MinDeposit } diff --git a/x/gov/keeper/msg_server.go b/x/gov/keeper/msg_server.go index e99d537b7de6..2bbf32e76a32 100644 --- a/x/gov/keeper/msg_server.go +++ b/x/gov/keeper/msg_server.go @@ -76,7 +76,12 @@ func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitPropos return nil, fmt.Errorf("failed to get governance parameters: %w", err) } - if err := k.validateInitialDeposit(ctx, params, initialDeposit, msg.Expedited); err != nil { + proposalType := msg.ProposalType + if msg.Expedited { // checking for backward compatibility + proposalType = v1.ProposalType_PROPOSAL_TYPE_EXPEDITED + } + + if err := k.validateInitialDeposit(ctx, params, initialDeposit, proposalType); err != nil { return nil, err } @@ -84,10 +89,6 @@ func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitPropos return nil, err } - proposalType := msg.ProposalType - if msg.Expedited { // checking for backward compatibility - proposalType = v1.ProposalType_PROPOSAL_TYPE_EXPEDITED - } proposal, err := k.Keeper.SubmitProposal(ctx, proposalMsgs, msg.Metadata, msg.Title, msg.Summary, proposer, proposalType) if err != nil { return nil, err diff --git a/x/gov/migrations/v3/convert_test.go b/x/gov/migrations/v3/convert_test.go index 667066a56677..3b44f9724552 100644 --- a/x/gov/migrations/v3/convert_test.go +++ b/x/gov/migrations/v3/convert_test.go @@ -154,16 +154,6 @@ func TestConvertToLegacyTallyResult(t *testing.T) { }, expErr: true, }, - "invalid spam count": { - tallyResult: v1.TallyResult{ - YesCount: tallyResult.YesCount, - NoCount: tallyResult.NoCount, - AbstainCount: tallyResult.AbstainCount, - NoWithVetoCount: tallyResult.NoWithVetoCount, - SpamCount: "invalid", - }, - expErr: true, - }, } for name, tc := range testCases { tc := tc diff --git a/x/gov/types/v1/msgs_test.go b/x/gov/types/v1/msgs_test.go index 1350dfa6b904..91c4e93f27a7 100644 --- a/x/gov/types/v1/msgs_test.go +++ b/x/gov/types/v1/msgs_test.go @@ -54,7 +54,7 @@ func TestMsgSubmitProposal_GetSignBytes(t *testing.T) { "gov/MsgVote", "Proposal for a governance vote msg", v1.ProposalType_PROPOSAL_TYPE_STANDARD, - `{"type":"cosmos-sdk/v1/MsgSubmitProposal","value":{"initial_deposit":[],"messages":[{"type":"cosmos-sdk/v1/MsgVote","value":{"option":1,"proposal_id":"1","voter":"cosmos1w3jhxap3gempvr"}}],"summary":"Proposal for a governance vote msg","title":"gov/MsgVote"}}`, + `{"type":"cosmos-sdk/v1/MsgSubmitProposal","value":{"initial_deposit":[],"messages":[{"type":"cosmos-sdk/v1/MsgVote","value":{"option":1,"proposal_id":"1","voter":"cosmos1w3jhxap3gempvr"}}],"proposal_type":1,"summary":"Proposal for a governance vote msg","title":"gov/MsgVote"}}`, }, { "MsgSend", @@ -62,7 +62,7 @@ func TestMsgSubmitProposal_GetSignBytes(t *testing.T) { "bank/MsgSend", "Proposal for a bank msg send", v1.ProposalType_PROPOSAL_TYPE_STANDARD, - fmt.Sprintf(`{"type":"cosmos-sdk/v1/MsgSubmitProposal","value":{"initial_deposit":[],"messages":[{"type":"cosmos-sdk/MsgSend","value":{"amount":[],"from_address":"%s","to_address":"%s"}}],"summary":"Proposal for a bank msg send","title":"bank/MsgSend"}}`, addrs[0], addrs[0]), + fmt.Sprintf(`{"type":"cosmos-sdk/v1/MsgSubmitProposal","value":{"initial_deposit":[],"messages":[{"type":"cosmos-sdk/MsgSend","value":{"amount":[],"from_address":"%s","to_address":"%s"}}],"proposal_type":1,"summary":"Proposal for a bank msg send","title":"bank/MsgSend"}}`, addrs[0], addrs[0]), }, } diff --git a/x/gov/types/v1/proposals_test.go b/x/gov/types/v1/proposals_test.go index 95c902adad90..2152a60e1bbb 100644 --- a/x/gov/types/v1/proposals_test.go +++ b/x/gov/types/v1/proposals_test.go @@ -49,10 +49,12 @@ func TestProposalSetExpedited(t *testing.T) { proposal, err := v1.NewProposal([]sdk.Msg{}, 1, time.Now(), time.Now(), "", "title", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), v1.ProposalType_PROPOSAL_TYPE_STANDARD) require.NoError(t, err) require.Equal(t, startExpedited, proposal.Expedited) + require.Equal(t, proposal.ProposalType, v1.ProposalType_PROPOSAL_TYPE_STANDARD) proposal, err = v1.NewProposal([]sdk.Msg{}, 1, time.Now(), time.Now(), "", "title", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), v1.ProposalType_PROPOSAL_TYPE_EXPEDITED) require.NoError(t, err) require.Equal(t, !startExpedited, proposal.Expedited) + require.Equal(t, proposal.ProposalType, v1.ProposalType_PROPOSAL_TYPE_EXPEDITED) } func TestProposalGetMinDepositFromParams(t *testing.T) {