From d1d03fd41e1655709e83cf4bf1b3904c093e10c1 Mon Sep 17 00:00:00 2001 From: Amaury M <1293565+amaurym@users.noreply.github.com> Date: Mon, 21 Jun 2021 12:37:12 +0200 Subject: [PATCH] Add graceful fallback for Vote.Option --- x/gov/keeper/vote.go | 7 +++++++ x/gov/keeper/vote_test.go | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/x/gov/keeper/vote.go b/x/gov/keeper/vote.go index c54ce875c81f..5ad98f063864 100644 --- a/x/gov/keeper/vote.go +++ b/x/gov/keeper/vote.go @@ -68,6 +68,13 @@ func (keeper Keeper) GetVote(ctx sdk.Context, proposalID uint64, voterAddr sdk.A } keeper.cdc.MustUnmarshal(bz, &vote) + + // Graceful fallback of deprecated `Option` field, in case there's only 1 + // VoteOption. + if len(vote.Options) == 1 && vote.Options[0].Weight.Equal(sdk.MustNewDecFromStr("1.0")) { + vote.Option = vote.Options[0].Option + } + return vote, true } diff --git a/x/gov/keeper/vote_test.go b/x/gov/keeper/vote_test.go index ae6ebc4a5693..80df4671666b 100644 --- a/x/gov/keeper/vote_test.go +++ b/x/gov/keeper/vote_test.go @@ -40,6 +40,7 @@ func TestVotes(t *testing.T) { require.Equal(t, proposalID, vote.ProposalId) require.True(t, len(vote.Options) == 1) require.Equal(t, types.OptionAbstain, vote.Options[0].Option) + require.Equal(t, types.OptionAbstain, vote.Option) // Test change of vote require.NoError(t, app.GovKeeper.AddVote(ctx, proposalID, addrs[0], types.NewNonSplitVoteOption(types.OptionYes))) @@ -49,6 +50,7 @@ func TestVotes(t *testing.T) { require.Equal(t, proposalID, vote.ProposalId) require.True(t, len(vote.Options) == 1) require.Equal(t, types.OptionYes, vote.Options[0].Option) + require.Equal(t, types.OptionYes, vote.Option) // Test second vote require.NoError(t, app.GovKeeper.AddVote(ctx, proposalID, addrs[1], types.WeightedVoteOptions{ @@ -70,6 +72,7 @@ func TestVotes(t *testing.T) { require.True(t, vote.Options[1].Weight.Equal(sdk.NewDecWithPrec(30, 2))) require.True(t, vote.Options[2].Weight.Equal(sdk.NewDecWithPrec(5, 2))) require.True(t, vote.Options[3].Weight.Equal(sdk.NewDecWithPrec(5, 2))) + require.Equal(t, types.OptionEmpty, vote.Option) // Test vote iterator // NOTE order of deposits is determined by the addresses @@ -87,4 +90,5 @@ func TestVotes(t *testing.T) { require.True(t, votes[1].Options[1].Weight.Equal(sdk.NewDecWithPrec(30, 2))) require.True(t, votes[1].Options[2].Weight.Equal(sdk.NewDecWithPrec(5, 2))) require.True(t, votes[1].Options[3].Weight.Equal(sdk.NewDecWithPrec(5, 2))) + require.Equal(t, types.OptionEmpty, vote.Option) }