Skip to content

Commit 78bba26

Browse files
authored
fix(x/gov): proposal v1 to v1beta1 converter (#35)
1 parent 00b6c72 commit 78bba26

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
5555
* [#22](https://github.com/atomone-hub/cosmos-sdk/pull/22) Remove non forked go modules from repository.
5656
* [#25](https://github.com/atomone-hub/cosmos-sdk/pull/25) feat: remove `client/v2` workspace.
5757

58+
### Bug Fixes
59+
60+
* (x/gov) [#35](https://github.com/atomone-hub/cosmos-sdk/pull/35) Cherry-pick [proposal v1 to v1beta1 converter fix from AtomOne](https://github.com/atomone-hub/atomone/pull/102)
61+
5862
## [Unreleased]
5963

6064
### Improvements

x/gov/keeper/grpc_query_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposal() {
133133
false,
134134
},
135135
{
136-
"valid request",
136+
"valid request with proposal containing no msg",
137137
func() {
138138
req = &v1beta1.QueryProposalRequest{ProposalId: 1}
139139
testProposal := v1beta1.NewTextProposal("Proposal", "testing proposal")
@@ -149,13 +149,11 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposal() {
149149
true,
150150
},
151151
{
152-
"valid request - expedited",
152+
"valid request with proposal containing no msg",
153153
func() {
154154
req = &v1beta1.QueryProposalRequest{ProposalId: 2}
155-
testProposal := v1beta1.NewTextProposal("Proposal", "testing proposal")
156-
msgContent, err := v1.NewLegacyContent(testProposal, govAcct.String())
157-
suite.Require().NoError(err)
158-
submittedProposal, err := suite.govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "", "title", "summary", addrs[0])
155+
156+
submittedProposal, err := suite.govKeeper.SubmitProposal(ctx, nil, "metadata", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"))
159157
suite.Require().NoError(err)
160158
suite.Require().NotEmpty(submittedProposal)
161159

x/gov/migrations/v3/convert.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package v3
33
import (
44
"fmt"
55

6+
"github.com/cosmos/gogoproto/proto"
7+
68
"cosmossdk.io/math"
79

810
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
@@ -49,8 +51,18 @@ func ConvertToLegacyProposal(proposal v1.Proposal) (v1beta1.Proposal, error) {
4951
if err != nil {
5052
return v1beta1.Proposal{}, err
5153
}
52-
if len(msgs) != 1 {
53-
return v1beta1.Proposal{}, sdkerrors.ErrInvalidType.Wrap("can't convert a gov/v1 Proposal to gov/v1beta1 Proposal when amount of proposal messages not exactly one")
54+
if len(msgs) == 0 {
55+
// If there is no messages, consider proposal as a text proposal
56+
content := v1beta1.NewTextProposal(proposal.Title, proposal.Summary)
57+
msg, ok := content.(proto.Message)
58+
if !ok {
59+
return v1beta1.Proposal{}, sdkerrors.ErrInvalidType.Wrap("can't convert a gov/v1 Proposal to gov/v1beta1 Proposal: content is not a proto message")
60+
}
61+
legacyProposal.Content, err = codectypes.NewAnyWithValue(msg)
62+
return legacyProposal, err
63+
}
64+
if len(msgs) > 1 {
65+
return v1beta1.Proposal{}, sdkerrors.ErrInvalidType.Wrap("can't convert a gov/v1 Proposal to gov/v1beta1 Proposal when amount of proposal messages exceeds one")
5466
}
5567
if legacyMsg, ok := msgs[0].(*v1.MsgExecLegacyContent); ok {
5668
// check that the content struct can be unmarshalled

x/gov/migrations/v3/convert_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,10 @@ func TestConvertToLegacyProposalContent(t *testing.T) {
9999
_, err = v3.ConvertToLegacyProposal(proposal)
100100
require.ErrorIs(t, sdkerrors.ErrInvalidType, err)
101101

102-
// zero messages is not supported
102+
// zero messages is supported
103103
proposal.Messages = nil
104104
_, err = v3.ConvertToLegacyProposal(proposal)
105-
require.ErrorIs(t, sdkerrors.ErrInvalidType, err)
105+
require.NoError(t, err)
106106
}
107107

108108
func TestConvertToLegacyTallyResult(t *testing.T) {

0 commit comments

Comments
 (0)