From 0a1e101f534c906a29dc48e7f4964a8ab9ef2e55 Mon Sep 17 00:00:00 2001 From: Julian Toledano Date: Mon, 25 Mar 2024 12:23:55 +0100 Subject: [PATCH 1/4] del: removes acc and val string method --- tests/integration/gov/abci_test.go | 29 ++- tests/sims/gov/operations_test.go | 11 +- x/gov/CHANGELOG.md | 4 + x/gov/client/cli/prompt.go | 21 +- x/gov/client/cli/prompt_test.go | 5 +- x/gov/client/cli/tx.go | 19 +- x/gov/client/cli/tx_test.go | 40 ++-- x/gov/client/cli/util.go | 7 +- x/gov/client/cli/util_test.go | 35 +-- x/gov/client/utils/query.go | 7 +- x/gov/client/utils/query_test.go | 31 +-- x/gov/depinject.go | 6 +- x/gov/keeper/common_test.go | 76 +++++-- x/gov/keeper/deposit.go | 13 +- x/gov/keeper/deposit_test.go | 37 +++- x/gov/keeper/grpc_query_test.go | 122 +++++++---- x/gov/keeper/keeper_test.go | 5 +- x/gov/keeper/msg_server_test.go | 340 ++++++++++++++++++----------- x/gov/keeper/proposal.go | 12 +- x/gov/keeper/proposal_test.go | 37 ++-- x/gov/keeper/tally_test.go | 138 +++++++++--- x/gov/keeper/vote.go | 8 +- x/gov/keeper/vote_test.go | 15 +- x/gov/module.go | 6 +- x/gov/simulation/operations.go | 45 +++- x/gov/types/v1/deposit.go | 4 +- x/gov/types/v1/msgs.go | 12 +- x/gov/types/v1/msgs_test.go | 9 +- x/gov/types/v1/params.go | 2 +- x/gov/types/v1/proposal.go | 4 +- x/gov/types/v1/proposals_test.go | 8 +- x/gov/types/v1/vote.go | 6 +- x/gov/types/v1beta1/deposit.go | 4 +- x/gov/types/v1beta1/msgs.go | 20 +- x/gov/types/v1beta1/msgs_test.go | 8 +- x/group/client/cli/prompt.go | 9 +- x/params/client/cli/tx.go | 6 +- 37 files changed, 775 insertions(+), 386 deletions(-) diff --git a/tests/integration/gov/abci_test.go b/tests/integration/gov/abci_test.go index dbe612a20496..733d7236f9b7 100644 --- a/tests/integration/gov/abci_test.go +++ b/tests/integration/gov/abci_test.go @@ -25,12 +25,14 @@ func TestUnregisteredProposal_InactiveProposalFails(t *testing.T) { suite := createTestSuite(t) ctx := suite.app.BaseApp.NewContext(false) addrs := simtestutil.AddTestAddrs(suite.BankKeeper, suite.StakingKeeper, ctx, 10, valTokens) + addr0Str, err := suite.AccountKeeper.AddressCodec().BytesToString(addrs[0]) + require.NoError(t, err) // manually set proposal in store startTime, endTime := time.Now().Add(-4*time.Hour), ctx.BlockHeader().Time proposal, err := v1.NewProposal([]sdk.Msg{ &v1.Proposal{}, // invalid proposal message - }, 1, startTime, startTime, "", "Unsupported proposal", "Unsupported proposal", addrs[0], v1.ProposalType_PROPOSAL_TYPE_STANDARD) + }, 1, startTime, startTime, "", "Unsupported proposal", "Unsupported proposal", addr0Str, v1.ProposalType_PROPOSAL_TYPE_STANDARD) require.NoError(t, err) err = suite.GovKeeper.Proposals.Set(ctx, proposal.Id, proposal) @@ -51,12 +53,13 @@ func TestUnregisteredProposal_ActiveProposalFails(t *testing.T) { suite := createTestSuite(t) ctx := suite.app.BaseApp.NewContext(false) addrs := simtestutil.AddTestAddrs(suite.BankKeeper, suite.StakingKeeper, ctx, 10, valTokens) - + addr0Str, err := suite.AccountKeeper.AddressCodec().BytesToString(addrs[0]) + require.NoError(t, err) // manually set proposal in store startTime, endTime := time.Now().Add(-4*time.Hour), ctx.BlockHeader().Time proposal, err := v1.NewProposal([]sdk.Msg{ &v1.Proposal{}, // invalid proposal message - }, 1, startTime, startTime, "", "Unsupported proposal", "Unsupported proposal", addrs[0], v1.ProposalType_PROPOSAL_TYPE_STANDARD) + }, 1, startTime, startTime, "", "Unsupported proposal", "Unsupported proposal", addr0Str, v1.ProposalType_PROPOSAL_TYPE_STANDARD) require.NoError(t, err) proposal.Status = v1.StatusVotingPeriod proposal.VotingEndTime = &endTime @@ -194,7 +197,9 @@ func TestTickPassedDepositPeriod(t *testing.T) { newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(1) * time.Second) ctx = ctx.WithHeaderInfo(newHeader) - newDepositMsg := v1.NewMsgDeposit(addrs[1], proposalID, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000)}) + addr1Str, err := suite.AccountKeeper.AddressCodec().BytesToString(addrs[1]) + require.NoError(t, err) + newDepositMsg := v1.NewMsgDeposit(addr1Str, proposalID, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000)}) res1, err := govMsgSvr.Deposit(ctx, newDepositMsg) require.NoError(t, err) @@ -293,7 +298,9 @@ func TestTickPassedVotingPeriod(t *testing.T) { newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(1) * time.Second) ctx = ctx.WithHeaderInfo(newHeader) - newDepositMsg := v1.NewMsgDeposit(addrs[1], proposalID, proposalCoins) + addr1Str, err := suite.AccountKeeper.AddressCodec().BytesToString(addrs[1]) + require.NoError(t, err) + newDepositMsg := v1.NewMsgDeposit(addr1Str, proposalID, proposalCoins) res1, err := govMsgSvr.Deposit(ctx, newDepositMsg) require.NoError(t, err) @@ -373,7 +380,9 @@ func TestProposalPassedEndblocker(t *testing.T) { require.NoError(t, err) proposalCoins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, suite.StakingKeeper.TokensFromConsensusPower(ctx, 10*depositMultiplier))} - newDepositMsg := v1.NewMsgDeposit(addrs[0], proposal.Id, proposalCoins) + addr0Str, err := suite.AccountKeeper.AddressCodec().BytesToString(addrs[0]) + require.NoError(t, err) + newDepositMsg := v1.NewMsgDeposit(addr0Str, proposal.Id, proposalCoins) res, err := govMsgSvr.Deposit(ctx, newDepositMsg) require.NoError(t, err) @@ -433,7 +442,9 @@ func TestEndBlockerProposalHandlerFailed(t *testing.T) { require.NoError(t, err) proposalCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, suite.StakingKeeper.TokensFromConsensusPower(ctx, 10))) - newDepositMsg := v1.NewMsgDeposit(addrs[0], proposal.Id, proposalCoins) + addr0Str, err := suite.AccountKeeper.AddressCodec().BytesToString(addrs[0]) + require.NoError(t, err) + newDepositMsg := v1.NewMsgDeposit(addr0Str, proposal.Id, proposalCoins) govMsgSvr := keeper.NewMsgServerImpl(suite.GovKeeper) res, err := govMsgSvr.Deposit(ctx, newDepositMsg) @@ -531,7 +542,9 @@ func TestExpeditedProposal_PassAndConversionToRegular(t *testing.T) { newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(1) * time.Second) ctx = ctx.WithHeaderInfo(newHeader) - newDepositMsg := v1.NewMsgDeposit(addrs[1], proposalID, proposalCoins) + addr1Str, err := suite.AccountKeeper.AddressCodec().BytesToString(addrs[1]) + require.NoError(t, err) + newDepositMsg := v1.NewMsgDeposit(addr1Str, proposalID, proposalCoins) res1, err := govMsgSvr.Deposit(ctx, newDepositMsg) require.NoError(t, err) diff --git a/tests/sims/gov/operations_test.go b/tests/sims/gov/operations_test.go index 581b6637467a..239049e76bc9 100644 --- a/tests/sims/gov/operations_test.go +++ b/tests/sims/gov/operations_test.go @@ -207,7 +207,8 @@ func TestSimulateMsgCancelProposal(t *testing.T) { r := rand.New(s) accounts := getTestingAccounts(t, r, suite.AccountKeeper, suite.BankKeeper, suite.StakingKeeper, ctx, 3) // setup a proposal - proposer := accounts[0].Address + proposer, err := suite.AccountKeeper.AddressCodec().BytesToString(accounts[0].Address) + require.NoError(t, err) content := v1beta1.NewTextProposal("Test", "description") contentMsg, err := v1.NewLegacyContent(content, suite.GovKeeper.GetGovernanceAccount(ctx).GetAddress().String()) require.NoError(t, err) @@ -233,7 +234,7 @@ func TestSimulateMsgCancelProposal(t *testing.T) { require.NoError(t, err) require.True(t, operationMsg.OK) require.Equal(t, uint64(1), msg.ProposalId) - require.Equal(t, proposer.String(), msg.Proposer) + require.Equal(t, proposer, msg.Proposer) require.Equal(t, simulation.TypeMsgCancelProposal, sdk.MsgTypeURL(&msg)) } @@ -259,7 +260,7 @@ func TestSimulateMsgDeposit(t *testing.T) { params, _ := suite.GovKeeper.Params.Get(ctx) depositPeriod := params.MaxDepositPeriod - proposal, err := v1.NewProposal([]sdk.Msg{contentMsg}, 1, submitTime, submitTime.Add(*depositPeriod), "", "text proposal", "description", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), v1.ProposalType_PROPOSAL_TYPE_STANDARD) + proposal, err := v1.NewProposal([]sdk.Msg{contentMsg}, 1, submitTime, submitTime.Add(*depositPeriod), "", "text proposal", "description", "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", v1.ProposalType_PROPOSAL_TYPE_STANDARD) require.NoError(t, err) err = suite.GovKeeper.Proposals.Set(ctx, proposal.Id, proposal) @@ -303,7 +304,7 @@ func TestSimulateMsgVote(t *testing.T) { params, _ := suite.GovKeeper.Params.Get(ctx) depositPeriod := params.MaxDepositPeriod - proposal, err := v1.NewProposal([]sdk.Msg{contentMsg}, 1, submitTime, submitTime.Add(*depositPeriod), "", "text proposal", "description", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), v1.ProposalType_PROPOSAL_TYPE_STANDARD) + proposal, err := v1.NewProposal([]sdk.Msg{contentMsg}, 1, submitTime, submitTime.Add(*depositPeriod), "", "text proposal", "description", "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", v1.ProposalType_PROPOSAL_TYPE_STANDARD) require.NoError(t, err) err = suite.GovKeeper.ActivateVotingPeriod(ctx, proposal) @@ -345,7 +346,7 @@ func TestSimulateMsgVoteWeighted(t *testing.T) { params, _ := suite.GovKeeper.Params.Get(ctx) depositPeriod := params.MaxDepositPeriod - proposal, err := v1.NewProposal([]sdk.Msg{contentMsg}, 1, submitTime, submitTime.Add(*depositPeriod), "", "text proposal", "test", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), v1.ProposalType_PROPOSAL_TYPE_STANDARD) + proposal, err := v1.NewProposal([]sdk.Msg{contentMsg}, 1, submitTime, submitTime.Add(*depositPeriod), "", "text proposal", "test", "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", v1.ProposalType_PROPOSAL_TYPE_STANDARD) require.NoError(t, err) err = suite.GovKeeper.ActivateVotingPeriod(ctx, proposal) diff --git a/x/gov/CHANGELOG.md b/x/gov/CHANGELOG.md index 94bc8b201fa7..40bcef34baf4 100644 --- a/x/gov/CHANGELOG.md +++ b/x/gov/CHANGELOG.md @@ -61,6 +61,10 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking Changes +* []() Removes the use of Accouts String method: + * `NewDeposit`, `NewMsgDeposit`, `NewMsgVote`, `NewMsgVoteWeighted`, `NewVote`, `NewProposal`, `NewDeposit`, `NewMsgDeposit`, `NewMsgSubmitProposal`, `NewMsgVote`, `NewMsgVoteWeighted` now takes a string as argument instead of an `sdk.AccAddress`. + * `Prompt` and `PromptMetadata` takes an address.Codec as argument. + * `SetProposer` takes a String as argument instead of a `fmt.Stringer`. * [#19481](https://github.com/cosmos/cosmos-sdk/pull/19481) Migrate module to use `appmodule.Environment`; `NewKeeper` now takes `appmodule.Environment` instead of a store service and no `baseapp.MessageRouter` anymore. * [#19481](https://github.com/cosmos/cosmos-sdk/pull/19481) v1beta1 proposal handlers now take a `context.Context` instead of an `sdk.Context`. * [#19592](https://github.com/cosmos/cosmos-sdk/pull/19592) `types.Config` and `types.DefaultConfig` have been moved to the keeper package in order to support the custom tallying function. diff --git a/x/gov/client/cli/prompt.go b/x/gov/client/cli/prompt.go index 8ab8a823cdcb..9ff270b4d667 100644 --- a/x/gov/client/cli/prompt.go +++ b/x/gov/client/cli/prompt.go @@ -9,6 +9,7 @@ import ( "strconv" "strings" + "cosmossdk.io/core/address" "github.com/manifoldco/promptui" "github.com/spf13/cobra" @@ -64,7 +65,7 @@ var suggestedProposalTypes = []proposalType{ // namePrefix is the name to be displayed as "Enter " // TODO: when bringing this in autocli, use proto message instead // this will simplify the get address logic -func Prompt[T any](data T, namePrefix string) (T, error) { +func Prompt[T any](data T, namePrefix string, addressCodec address.Codec) (T, error) { v := reflect.ValueOf(&data).Elem() if v.Kind() == reflect.Interface { v = reflect.ValueOf(data) @@ -95,7 +96,11 @@ func Prompt[T any](data T, namePrefix string) (T, error) { if strings.EqualFold(fieldName, "authority") { // pre-fill with gov address - prompt.Default = authtypes.NewModuleAddress(types.ModuleName).String() + defaultAddr, err := addressCodec.BytesToString(authtypes.NewModuleAddress(types.ModuleName)) + if err != nil { + return data, err + } + prompt.Default = defaultAddr prompt.Validate = client.ValidatePromptAddress } @@ -158,8 +163,8 @@ type proposalType struct { } // Prompt the proposal type values and return the proposal and its metadata -func (p *proposalType) Prompt(cdc codec.Codec, skipMetadata bool) (*proposal, types.ProposalMetadata, error) { - metadata, err := PromptMetadata(skipMetadata) +func (p *proposalType) Prompt(cdc codec.Codec, skipMetadata bool, addressCodec address.Codec) (*proposal, types.ProposalMetadata, error) { + metadata, err := PromptMetadata(skipMetadata, addressCodec) if err != nil { return nil, metadata, fmt.Errorf("failed to set proposal metadata: %w", err) } @@ -185,7 +190,7 @@ func (p *proposalType) Prompt(cdc codec.Codec, skipMetadata bool) (*proposal, ty } // set messages field - result, err := Prompt(p.Msg, "msg") + result, err := Prompt(p.Msg, "msg", addressCodec) if err != nil { return nil, metadata, fmt.Errorf("failed to set proposal message: %w", err) } @@ -209,9 +214,9 @@ func getProposalSuggestions() []string { } // PromptMetadata prompts for proposal metadata or only title and summary if skip is true -func PromptMetadata(skip bool) (types.ProposalMetadata, error) { +func PromptMetadata(skip bool, addressCodec address.Codec) (types.ProposalMetadata, error) { if !skip { - metadata, err := Prompt(types.ProposalMetadata{}, "proposal") + metadata, err := Prompt(types.ProposalMetadata{}, "proposal", addressCodec) if err != nil { return metadata, fmt.Errorf("failed to set proposal metadata: %w", err) } @@ -306,7 +311,7 @@ func NewCmdDraftProposal() *cobra.Command { skipMetadataPrompt, _ := cmd.Flags().GetBool(flagSkipMetadata) - result, metadata, err := proposal.Prompt(clientCtx.Codec, skipMetadataPrompt) + result, metadata, err := proposal.Prompt(clientCtx.Codec, skipMetadataPrompt, clientCtx.AddressCodec) if err != nil { return err } diff --git a/x/gov/client/cli/prompt_test.go b/x/gov/client/cli/prompt_test.go index cfb23272a184..ebd5c4a584bf 100644 --- a/x/gov/client/cli/prompt_test.go +++ b/x/gov/client/cli/prompt_test.go @@ -9,6 +9,7 @@ package cli_test import ( "fmt" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "math" "os" "testing" @@ -50,7 +51,7 @@ func TestPromptIntegerOverflow(t *testing.T) { _, err := fw.Write([]byte(overflowStr + "\n")) assert.NoError(t, err) - v, err := cli.Prompt(st{}, "") + v, err := cli.Prompt(st{}, "", codectestutil.CodecOptions{}.GetAddressCodec()) assert.Equal(t, st{}, v, "expected a value of zero") require.NotNil(t, err, "expected a report of an overflow") require.Contains(t, err.Error(), "range") @@ -81,7 +82,7 @@ func TestPromptParseInteger(t *testing.T) { readline.Stdin = fin _, err := fw.Write([]byte(tc.in + "\n")) assert.NoError(t, err) - v, err := cli.Prompt(st{}, "") + v, err := cli.Prompt(st{}, "", codectestutil.CodecOptions{}.GetAddressCodec()) assert.Nil(t, err, "expected a nil error") assert.Equal(t, tc.want, v.I, "expected %d = %d", tc.want, v.I) }) diff --git a/x/gov/client/cli/tx.go b/x/gov/client/cli/tx.go index d63e0dc24118..cdd56d144a78 100644 --- a/x/gov/client/cli/tx.go +++ b/x/gov/client/cli/tx.go @@ -138,7 +138,12 @@ metadata example: return err } - msg, err := v1.NewMsgSubmitProposal(msgs, deposit, clientCtx.GetFromAddress().String(), proposal.Metadata, proposal.Title, proposal.Summary, proposal.proposalType) + addr, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } + + msg, err := v1.NewMsgSubmitProposal(msgs, deposit, addr, proposal.Metadata, proposal.Title, proposal.Summary, proposal.proposalType) if err != nil { return fmt.Errorf("invalid message: %w", err) } @@ -203,7 +208,12 @@ $ %s tx gov submit-legacy-proposal --title="Test Proposal" --description="My awe return fmt.Errorf("failed to create proposal content: unknown proposal type %s", proposal.Type) } - msg, err := v1beta1.NewMsgSubmitProposal(content, amount, clientCtx.GetFromAddress()) + proposer, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } + + msg, err := v1beta1.NewMsgSubmitProposal(content, amount, proposer) if err != nil { return fmt.Errorf("invalid message: %w", err) } @@ -247,7 +257,10 @@ $ %s tx gov weighted-vote 1 yes=0.6,no=0.3,abstain=0.05,no-with-veto=0.05 --from } // Get voter address - from := clientCtx.GetFromAddress() + from, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } // validate that the proposal id is a uint proposalID, err := strconv.ParseUint(args[0], 10, 64) diff --git a/x/gov/client/cli/tx_test.go b/x/gov/client/cli/tx_test.go index dd903034e109..744f990653e1 100644 --- a/x/gov/client/cli/tx_test.go +++ b/x/gov/client/cli/tx_test.go @@ -68,35 +68,39 @@ func (s *CLITestSuite) SetupSuite() { s.clientCtx = ctxGen() val := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) + val0StrAddr, err := s.clientCtx.AddressCodec.BytesToString(val[0].Address) + s.Require().NoError(err) // create a proposal with deposit - _, err := govclitestutil.MsgSubmitLegacyProposal(s.clientCtx, val[0].Address.String(), + _, err = govclitestutil.MsgSubmitLegacyProposal(s.clientCtx, val0StrAddr, "Text Proposal 1", "Where is the title!?", v1beta1.ProposalTypeText, fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin("stake", v1.DefaultMinDepositTokens).String())) s.Require().NoError(err) // vote for proposal - _, err = govclitestutil.MsgVote(s.clientCtx, val[0].Address.String(), "1", "yes") + _, err = govclitestutil.MsgVote(s.clientCtx, val0StrAddr, "1", "yes") s.Require().NoError(err) // create a proposal without deposit - _, err = govclitestutil.MsgSubmitLegacyProposal(s.clientCtx, val[0].Address.String(), + _, err = govclitestutil.MsgSubmitLegacyProposal(s.clientCtx, val0StrAddr, "Text Proposal 2", "Where is the title!?", v1beta1.ProposalTypeText) s.Require().NoError(err) // create a proposal3 with deposit - _, err = govclitestutil.MsgSubmitLegacyProposal(s.clientCtx, val[0].Address.String(), + _, err = govclitestutil.MsgSubmitLegacyProposal(s.clientCtx, val0StrAddr, "Text Proposal 3", "Where is the title!?", v1beta1.ProposalTypeText, fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin("stake", v1.DefaultMinDepositTokens).String())) s.Require().NoError(err) // vote for proposal3 as val - _, err = govclitestutil.MsgVote(s.clientCtx, val[0].Address.String(), "3", "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05") + _, err = govclitestutil.MsgVote(s.clientCtx, val0StrAddr, "3", "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05") s.Require().NoError(err) } func (s *CLITestSuite) TestNewCmdSubmitProposal() { val := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) + val0StrAddr, err := s.clientCtx.AddressCodec.BytesToString(val[0].Address) + s.Require().NoError(err) // Create a legacy proposal JSON, make sure it doesn't pass this new CLI // command. @@ -150,7 +154,7 @@ func (s *CLITestSuite) TestNewCmdSubmitProposal() { "valid proposal", []string{ validPropFile.Name(), - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), @@ -180,6 +184,8 @@ func (s *CLITestSuite) TestNewCmdSubmitProposal() { func (s *CLITestSuite) TestNewCmdSubmitLegacyProposal() { val := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) + val0StrAddr, err := s.clientCtx.AddressCodec.BytesToString(val[0].Address) + s.Require().NoError(err) invalidProp := `{ "title": "", @@ -207,7 +213,7 @@ func (s *CLITestSuite) TestNewCmdSubmitLegacyProposal() { "invalid proposal (file)", []string{ fmt.Sprintf("--%s=%s", cli.FlagProposal, invalidPropFile.Name()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), }, @@ -219,7 +225,7 @@ func (s *CLITestSuite) TestNewCmdSubmitLegacyProposal() { fmt.Sprintf("--%s='Where is the title!?'", cli.FlagDescription), fmt.Sprintf("--%s=%s", cli.FlagProposalType, v1beta1.ProposalTypeText), fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin("stake", sdkmath.NewInt(5431)).String()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), }, @@ -230,7 +236,7 @@ func (s *CLITestSuite) TestNewCmdSubmitLegacyProposal() { []string{ fmt.Sprintf("--%s=%s", cli.FlagProposal, validPropFile.Name()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), @@ -244,7 +250,7 @@ func (s *CLITestSuite) TestNewCmdSubmitLegacyProposal() { fmt.Sprintf("--%s='Where is the title!?'", cli.FlagDescription), fmt.Sprintf("--%s=%s", cli.FlagProposalType, v1beta1.ProposalTypeText), fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin("stake", sdkmath.NewInt(5431)).String()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), @@ -274,6 +280,8 @@ func (s *CLITestSuite) TestNewCmdSubmitLegacyProposal() { func (s *CLITestSuite) TestNewCmdWeightedVote() { val := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) + val0StrAddr, err := s.clientCtx.AddressCodec.BytesToString(val[0].Address) + s.Require().NoError(err) testCases := []struct { name string @@ -285,7 +293,7 @@ func (s *CLITestSuite) TestNewCmdWeightedVote() { []string{ "abc", "yes", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), @@ -297,7 +305,7 @@ func (s *CLITestSuite) TestNewCmdWeightedVote() { []string{ "1", "AYE", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), @@ -309,7 +317,7 @@ func (s *CLITestSuite) TestNewCmdWeightedVote() { []string{ "1", "yes", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), @@ -321,7 +329,7 @@ func (s *CLITestSuite) TestNewCmdWeightedVote() { []string{ "1", "yes", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--metadata=%s", "AQ=="), @@ -334,7 +342,7 @@ func (s *CLITestSuite) TestNewCmdWeightedVote() { []string{ "1", "yes/0.6,no/0.3,abstain/0.05,no_with_veto/0.05", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), @@ -346,7 +354,7 @@ func (s *CLITestSuite) TestNewCmdWeightedVote() { []string{ "1", "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val0StrAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))).String()), diff --git a/x/gov/client/cli/util.go b/x/gov/client/cli/util.go index 760a6344683a..562b26f59328 100644 --- a/x/gov/client/cli/util.go +++ b/x/gov/client/cli/util.go @@ -201,5 +201,10 @@ func ReadGovPropCmdFlags(proposer string, flagSet *pflag.FlagSet) (*govv1.MsgSub // See also AddGovPropFlagsToCmd. // Deprecated: use ReadPropCmdFlags instead, as this depends on global bech32 prefixes. func ReadGovPropFlags(clientCtx client.Context, flagSet *pflag.FlagSet) (*govv1.MsgSubmitProposal, error) { - return ReadGovPropCmdFlags(clientCtx.GetFromAddress().String(), flagSet) + addr, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return nil, err + } + + return ReadGovPropCmdFlags(addr, flagSet) } diff --git a/x/gov/client/cli/util_test.go b/x/gov/client/cli/util_test.go index 702d6d448ef6..2601a526fe1b 100644 --- a/x/gov/client/cli/util_test.go +++ b/x/gov/client/cli/util_test.go @@ -21,6 +21,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/testutil" "github.com/cosmos/cosmos-sdk/testutil/testdata" @@ -147,6 +148,9 @@ func TestParseSubmitLegacyProposal(t *testing.T) { func TestParseSubmitProposal(t *testing.T) { _, _, addr := testdata.KeyTestPubAddr() + addrStr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(addr) + require.NoError(t, err) + interfaceRegistry := codectypes.NewInterfaceRegistry() cdc := codec.NewProtoCodec(interfaceRegistry) banktypes.RegisterInterfaces(interfaceRegistry) @@ -191,7 +195,7 @@ func TestParseSubmitProposal(t *testing.T) { badJSON := testutil.WriteToNewTempFile(t, "bad json") // nonexistent json - _, _, _, err := parseSubmitProposal(cdc, "fileDoesNotExist") + _, _, _, err = parseSubmitProposal(cdc, "fileDoesNotExist") require.Error(t, err) // invalid json @@ -206,17 +210,17 @@ func TestParseSubmitProposal(t *testing.T) { require.Len(t, msgs, 3) msg1, ok := msgs[0].(*banktypes.MsgSend) require.True(t, ok) - require.Equal(t, addr.String(), msg1.FromAddress) - require.Equal(t, addr.String(), msg1.ToAddress) + require.Equal(t, addrStr, msg1.FromAddress) + require.Equal(t, addrStr, msg1.ToAddress) require.Equal(t, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10))), msg1.Amount) msg2, ok := msgs[1].(*stakingtypes.MsgDelegate) require.True(t, ok) - require.Equal(t, addr.String(), msg2.DelegatorAddress) - require.Equal(t, addr.String(), msg2.ValidatorAddress) + require.Equal(t, addrStr, msg2.DelegatorAddress) + require.Equal(t, addrStr, msg2.ValidatorAddress) require.Equal(t, sdk.NewCoin("stake", sdkmath.NewInt(10)), msg2.Amount) msg3, ok := msgs[2].(*v1.MsgExecLegacyContent) require.True(t, ok) - require.Equal(t, addr.String(), msg3.Authority) + require.Equal(t, addrStr, msg3.Authority) textProp, ok := msg3.Content.GetCachedValue().(*v1beta1.TextProposal) require.True(t, ok) require.Equal(t, "My awesome title", textProp.Title) @@ -300,6 +304,8 @@ func TestReadGovPropFlags(t *testing.T) { argTitle := "--" + FlagTitle argSummary := "--" + FlagSummary + fromAddrStr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(fromAddr) + require.NoError(t, err) // cz is a shorter way to define coins objects for these tests. cz := func(coins string) sdk.Coins { rv, err := sdk.ParseCoinsNormalized(coins) @@ -332,7 +338,7 @@ func TestReadGovPropFlags(t *testing.T) { args: []string{}, exp: &v1.MsgSubmitProposal{ InitialDeposit: nil, - Proposer: fromAddr.String(), + Proposer: fromAddrStr, Metadata: "", Title: "", Summary: "", @@ -547,7 +553,7 @@ func TestReadGovPropFlags(t *testing.T) { }, exp: &v1.MsgSubmitProposal{ InitialDeposit: cz("56depcoin"), - Proposer: fromAddr.String(), + Proposer: fromAddrStr, Metadata: "my proposal is cool", Title: "Simple Gov Prop Title", Summary: "This is just a test summary on a simple gov prop.", @@ -564,7 +570,7 @@ func TestReadGovPropFlags(t *testing.T) { }, exp: &v1.MsgSubmitProposal{ InitialDeposit: cz("78coolcoin"), - Proposer: fromAddr.String(), + Proposer: fromAddrStr, Metadata: "this proposal is cooler", Title: "This title is a *bit* more complex.", Summary: "This\nis\na\ncrazy\nsummary", @@ -614,7 +620,7 @@ func TestReadGovPropFlags(t *testing.T) { }, exp: &v1.MsgSubmitProposal{ InitialDeposit: nil, - Proposer: fromAddr.String(), + Proposer: fromAddrStr, Metadata: "worthless metadata", Title: "This is a Title", Summary: "This is a useless summary", @@ -631,7 +637,7 @@ func TestReadGovPropFlags(t *testing.T) { }, exp: &v1.MsgSubmitProposal{ InitialDeposit: cz("99mdcoin"), - Proposer: fromAddr.String(), + Proposer: fromAddrStr, Metadata: "", Title: "Bland Title", Summary: "Boring summary", @@ -647,7 +653,7 @@ func TestReadGovPropFlags(t *testing.T) { }, exp: &v1.MsgSubmitProposal{ InitialDeposit: cz("71whatcoin"), - Proposer: fromAddr.String(), + Proposer: fromAddrStr, Metadata: "this metadata does not have the title either", Title: "", Summary: "This is a summary on a titleless proposal.", @@ -664,7 +670,7 @@ func TestReadGovPropFlags(t *testing.T) { }, exp: &v1.MsgSubmitProposal{ InitialDeposit: cz("42musiccoin"), - Proposer: fromAddr.String(), + Proposer: fromAddrStr, Metadata: "28", Title: "Now This is What I Call A Governance Proposal 28", Summary: "", @@ -687,7 +693,8 @@ func TestReadGovPropFlags(t *testing.T) { flagSet := cmd.Flags() clientCtx := client.Context{ - FromAddress: tc.fromAddr, + FromAddress: tc.fromAddr, + AddressCodec: codectestutil.CodecOptions{}.GetAddressCodec(), } var msg *v1.MsgSubmitProposal diff --git a/x/gov/client/utils/query.go b/x/gov/client/utils/query.go index 6043c2823248..fdc5354f1f23 100644 --- a/x/gov/client/utils/query.go +++ b/x/gov/client/utils/query.go @@ -120,8 +120,13 @@ type QueryVoteParams struct { // QueryVoteByTxQuery will query for a single vote via a direct txs tags query. func QueryVoteByTxQuery(clientCtx client.Context, params QueryVoteParams) ([]byte, error) { + voterAddr, err := clientCtx.AddressCodec.BytesToString(params.Voter) + if err != nil { + return nil, err + } + q1 := fmt.Sprintf("%s.%s='%d'", types.EventTypeProposalVote, types.AttributeKeyProposalID, params.ProposalID) - q2 := fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeySender, params.Voter.String()) + q2 := fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeySender, voterAddr) q3 := fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeySender, params.Voter) searchResult, err := authtx.QueryTxsByEvents(clientCtx, defaultPage, defaultLimit, fmt.Sprintf("%s AND (%s OR %s)", q1, q2, q3), "") if err != nil { diff --git a/x/gov/client/utils/query_test.go b/x/gov/client/utils/query_test.go index 5c0aed3ac7fa..be2ffb621994 100644 --- a/x/gov/client/utils/query_test.go +++ b/x/gov/client/utils/query_test.go @@ -55,7 +55,8 @@ func (mock TxSearchMock) Block(ctx context.Context, height *int64) (*coretypes.R } func TestGetPaginatedVotes(t *testing.T) { - encCfg := moduletestutil.MakeTestEncodingConfig(codectestutil.CodecOptions{}, gov.AppModule{}) + cdcOpts := codectestutil.CodecOptions{} + encCfg := moduletestutil.MakeTestEncodingConfig(cdcOpts, gov.AppModule{}) type testCase struct { description string @@ -65,16 +66,20 @@ func TestGetPaginatedVotes(t *testing.T) { } acc1 := make(sdk.AccAddress, 20) acc1[0] = 1 + acc1Str, err := cdcOpts.GetAddressCodec().BytesToString(acc1) + require.NoError(t, err) acc2 := make(sdk.AccAddress, 20) acc2[0] = 2 + acc2Str, err := cdcOpts.GetAddressCodec().BytesToString(acc2) + require.NoError(t, err) acc1Msgs := []sdk.Msg{ - v1.NewMsgVote(acc1, 0, v1.OptionYes, ""), - v1.NewMsgVote(acc1, 0, v1.OptionYes, ""), - v1.NewMsgDeposit(acc1, 0, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10)))), // should be ignored + v1.NewMsgVote(acc1Str, 0, v1.OptionYes, ""), + v1.NewMsgVote(acc1Str, 0, v1.OptionYes, ""), + v1.NewMsgDeposit(acc1Str, 0, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(10)))), // should be ignored } acc2Msgs := []sdk.Msg{ - v1.NewMsgVote(acc2, 0, v1.OptionYes, ""), - v1.NewMsgVoteWeighted(acc2, 0, v1.NewNonSplitVoteOption(v1.OptionYes), ""), + v1.NewMsgVote(acc2Str, 0, v1.OptionYes, ""), + v1.NewMsgVoteWeighted(acc2Str, 0, v1.NewNonSplitVoteOption(v1.OptionYes), ""), } for _, tc := range []testCase{ { @@ -86,8 +91,8 @@ func TestGetPaginatedVotes(t *testing.T) { acc2Msgs[:1], }, votes: []v1.Vote{ - v1.NewVote(0, acc1, v1.NewNonSplitVoteOption(v1.OptionYes), ""), - v1.NewVote(0, acc2, v1.NewNonSplitVoteOption(v1.OptionYes), ""), + v1.NewVote(0, acc1Str, v1.NewNonSplitVoteOption(v1.OptionYes), ""), + v1.NewVote(0, acc2Str, v1.NewNonSplitVoteOption(v1.OptionYes), ""), }, }, { @@ -99,8 +104,8 @@ func TestGetPaginatedVotes(t *testing.T) { acc2Msgs, }, votes: []v1.Vote{ - v1.NewVote(0, acc1, v1.NewNonSplitVoteOption(v1.OptionYes), ""), - v1.NewVote(0, acc1, v1.NewNonSplitVoteOption(v1.OptionYes), ""), + v1.NewVote(0, acc1Str, v1.NewNonSplitVoteOption(v1.OptionYes), ""), + v1.NewVote(0, acc1Str, v1.NewNonSplitVoteOption(v1.OptionYes), ""), }, }, { @@ -112,8 +117,8 @@ func TestGetPaginatedVotes(t *testing.T) { acc2Msgs, }, votes: []v1.Vote{ - v1.NewVote(0, acc2, v1.NewNonSplitVoteOption(v1.OptionYes), ""), - v1.NewVote(0, acc2, v1.NewNonSplitVoteOption(v1.OptionYes), ""), + v1.NewVote(0, acc2Str, v1.NewNonSplitVoteOption(v1.OptionYes), ""), + v1.NewVote(0, acc2Str, v1.NewNonSplitVoteOption(v1.OptionYes), ""), }, }, { @@ -123,7 +128,7 @@ func TestGetPaginatedVotes(t *testing.T) { msgs: [][]sdk.Msg{ acc1Msgs[:1], }, - votes: []v1.Vote{v1.NewVote(0, acc1, v1.NewNonSplitVoteOption(v1.OptionYes), "")}, + votes: []v1.Vote{v1.NewVote(0, acc1Str, v1.NewNonSplitVoteOption(v1.OptionYes), "")}, }, { description: "InvalidPage", diff --git a/x/gov/depinject.go b/x/gov/depinject.go index 0a24603c421c..72f9b4767169 100644 --- a/x/gov/depinject.go +++ b/x/gov/depinject.go @@ -76,6 +76,10 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { if in.Config.Authority != "" { authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) } + authorityAddr, err := in.AccountKeeper.AddressCodec().BytesToString(authority) + if err != nil { + panic(err) + } k := keeper.NewKeeper( in.Cdc, @@ -85,7 +89,7 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { in.StakingKeeper, in.PoolKeeper, defaultConfig, - authority.String(), + authorityAddr, ) m := NewAppModule(in.Cdc, k, in.AccountKeeper, in.BankKeeper, in.PoolKeeper, in.LegacyProposalHandler...) hr := v1beta1.HandlerRoute{Handler: v1beta1.ProposalHandler, RouteKey: govtypes.RouterKey} diff --git a/x/gov/keeper/common_test.go b/x/gov/keeper/common_test.go index 1ab164143397..3e1be306d15f 100644 --- a/x/gov/keeper/common_test.go +++ b/x/gov/keeper/common_test.go @@ -35,7 +35,6 @@ var ( govAcct = authtypes.NewModuleAddress(types.ModuleName) poolAcct = authtypes.NewModuleAddress(protocolModuleName) govAcctStr = "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn" - addrStr = addr.String() TestProposal = getTestProposal() ) @@ -49,7 +48,17 @@ const ( // getTestProposal creates and returns a test proposal message. func getTestProposal() []sdk.Msg { - legacyProposalMsg, err := v1.NewLegacyContent(v1beta1.NewTextProposal("Title", "description"), authtypes.NewModuleAddress(types.ModuleName).String()) + moduleAddr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(authtypes.NewModuleAddress(types.ModuleName)) + if err != nil { + panic(err) + } + + legacyProposalMsg, err := v1.NewLegacyContent(v1beta1.NewTextProposal("Title", "description"), moduleAddr) + if err != nil { + panic(err) + } + + addrStr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(addr) if err != nil { panic(err) } @@ -74,9 +83,12 @@ func mockAccountKeeperExpectations(ctx sdk.Context, m mocks) { m.acctKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() } -func mockDefaultExpectations(ctx sdk.Context, m mocks) { +func mockDefaultExpectations(ctx sdk.Context, m mocks) error { mockAccountKeeperExpectations(ctx, m) - trackMockBalances(m.bankKeeper) + err := trackMockBalances(m.bankKeeper) + if err != nil { + return err + } m.stakingKeeper.EXPECT().TokensFromConsensusPower(ctx, gomock.Any()).DoAndReturn(func(ctx sdk.Context, power int64) math.Int { return sdk.TokensFromConsensusPower(power, math.NewIntFromUint64(1000000)) }).AnyTimes() @@ -85,6 +97,7 @@ func mockDefaultExpectations(ctx sdk.Context, m mocks) { m.stakingKeeper.EXPECT().IterateBondedValidatorsByPower(gomock.Any(), gomock.Any()).AnyTimes() m.stakingKeeper.EXPECT().IterateDelegations(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes() m.stakingKeeper.EXPECT().TotalBondedTokens(gomock.Any()).Return(math.NewInt(10000000), nil).AnyTimes() + return nil } // setupGovKeeper creates a govKeeper as well as all its dependencies. @@ -124,21 +137,24 @@ func setupGovKeeper(t *testing.T, expectations ...func(sdk.Context, mocks)) ( poolKeeper: govtestutil.NewMockPoolKeeper(ctrl), } if len(expectations) == 0 { - mockDefaultExpectations(ctx, m) + err := mockDefaultExpectations(ctx, m) + require.NoError(t, err) } else { for _, exp := range expectations { exp(ctx, m) } } - // Gov keeper initializations + govAddr, err := m.acctKeeper.AddressCodec().BytesToString(govAcct) + require.NoError(t, err) - govKeeper := keeper.NewKeeper(encCfg.Codec, environment, m.acctKeeper, m.bankKeeper, m.stakingKeeper, m.poolKeeper, keeper.DefaultConfig(), govAcct.String()) + // Gov keeper initializations + govKeeper := keeper.NewKeeper(encCfg.Codec, environment, m.acctKeeper, m.bankKeeper, m.stakingKeeper, m.poolKeeper, keeper.DefaultConfig(), govAddr) require.NoError(t, govKeeper.ProposalID.Set(ctx, 1)) govRouter := v1beta1.NewRouter() // Also register legacy gov handlers to test them too. govRouter.AddRoute(types.RouterKey, v1beta1.ProposalHandler) govKeeper.SetLegacyRouter(govRouter) - err := govKeeper.Params.Set(ctx, v1.DefaultParams()) + err = govKeeper.Params.Set(ctx, v1.DefaultParams()) require.NoError(t, err) err = govKeeper.Constitution.Set(ctx, "constitution") require.NoError(t, err) @@ -152,9 +168,14 @@ func setupGovKeeper(t *testing.T, expectations ...func(sdk.Context, mocks)) ( // trackMockBalances sets up expected calls on the Mock BankKeeper, and also // locally tracks accounts balances (not modules balances). -func trackMockBalances(bankKeeper *govtestutil.MockBankKeeper) { +func trackMockBalances(bankKeeper *govtestutil.MockBankKeeper) error { + addressCdc := codectestutil.CodecOptions{}.GetAddressCodec() + poolAcctStr, err := addressCdc.BytesToString(poolAcct) + if err != nil { + return err + } balances := make(map[string]sdk.Coins) - balances[poolAcct.String()] = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(0))) + balances[poolAcctStr] = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(0))) // We don't track module account balances. bankKeeper.EXPECT().MintCoins(gomock.Any(), mintModuleName, gomock.Any()).AnyTimes() @@ -163,27 +184,44 @@ func trackMockBalances(bankKeeper *govtestutil.MockBankKeeper) { // But we do track normal account balances. bankKeeper.EXPECT().SendCoinsFromAccountToModule(gomock.Any(), gomock.Any(), types.ModuleName, gomock.Any()).DoAndReturn(func(_ sdk.Context, sender sdk.AccAddress, _ string, coins sdk.Coins) error { - newBalance, negative := balances[sender.String()].SafeSub(coins...) + senderAddr, err := addressCdc.BytesToString(sender) + if err != nil { + return err + } + newBalance, negative := balances[senderAddr].SafeSub(coins...) if negative { return fmt.Errorf("not enough balance") } - balances[sender.String()] = newBalance + balances[senderAddr] = newBalance return nil }).AnyTimes() bankKeeper.EXPECT().SendCoinsFromModuleToAccount(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(_ sdk.Context, module string, rcpt sdk.AccAddress, coins sdk.Coins) error { - balances[rcpt.String()] = balances[rcpt.String()].Add(coins...) + rcptAddr, err := addressCdc.BytesToString(rcpt) + if err != nil { + return err + } + balances[rcptAddr] = balances[rcptAddr].Add(coins...) return nil }).AnyTimes() - bankKeeper.EXPECT().GetAllBalances(gomock.Any(), gomock.Any()).DoAndReturn(func(_ sdk.Context, addr sdk.AccAddress) sdk.Coins { - return balances[addr.String()] + bankKeeper.EXPECT().GetAllBalances(gomock.Any(), gomock.Any()).DoAndReturn(func(_ sdk.Context, addr sdk.AccAddress) (sdk.Coins, error) { + addrStr, err := addressCdc.BytesToString(addr) + if err != nil { + return sdk.Coins{}, err + } + return balances[addrStr], nil }).AnyTimes() - bankKeeper.EXPECT().GetBalance(gomock.Any(), gomock.Any(), sdk.DefaultBondDenom).DoAndReturn(func(_ sdk.Context, addr sdk.AccAddress, _ string) sdk.Coin { - balances := balances[addr.String()] + bankKeeper.EXPECT().GetBalance(gomock.Any(), gomock.Any(), sdk.DefaultBondDenom).DoAndReturn(func(_ sdk.Context, addr sdk.AccAddress, _ string) (sdk.Coin, error) { + addrStr, err := addressCdc.BytesToString(addr) + if err != nil { + return sdk.Coin{}, err + } + balances := balances[addrStr] for _, balance := range balances { if balance.Denom == sdk.DefaultBondDenom { - return balance + return balance, nil } } - return sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(0)) + return sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(0)), nil }).AnyTimes() + return nil } diff --git a/x/gov/keeper/deposit.go b/x/gov/keeper/deposit.go index fc05386ce8e2..1186fc0e6881 100644 --- a/x/gov/keeper/deposit.go +++ b/x/gov/keeper/deposit.go @@ -165,7 +165,11 @@ func (k Keeper) AddDeposit(ctx context.Context, proposalID uint64, depositorAddr deposit.Amount = sdk.NewCoins(deposit.Amount...).Add(depositAmount...) case errors.IsOf(err, collections.ErrNotFound): // deposit doesn't exist - deposit = v1.NewDeposit(proposalID, depositorAddr, depositAmount) + addr, err := k.authKeeper.AddressCodec().BytesToString(depositorAddr) + if err != nil { + return false, err + } + deposit = v1.NewDeposit(proposalID, addr, depositAmount) default: // failed to get deposit return false, err @@ -247,7 +251,10 @@ func (k Keeper) ChargeDeposit(ctx context.Context, proposalID uint64, destAddres // burn the cancellation fee or send the cancellation charges to destination address. if !cancellationCharges.IsZero() { // get the pool module account address - poolAddress := k.authKeeper.GetModuleAddress(pooltypes.ModuleName) + poolAddress, err := k.authKeeper.AddressCodec().BytesToString(k.authKeeper.GetModuleAddress(pooltypes.ModuleName)) + if err != nil { + return err + } switch { case destAddress == "": // burn the cancellation charges from deposits @@ -255,7 +262,7 @@ func (k Keeper) ChargeDeposit(ctx context.Context, proposalID uint64, destAddres if err != nil { return err } - case poolAddress.String() == destAddress: + case poolAddress == destAddress: err := k.poolKeeper.FundCommunityPool(ctx, cancellationCharges, k.ModuleAccountAddress()) if err != nil { return err diff --git a/x/gov/keeper/deposit_test.go b/x/gov/keeper/deposit_test.go index afe696c4fc76..c0dbba8f91a4 100644 --- a/x/gov/keeper/deposit_test.go +++ b/x/gov/keeper/deposit_test.go @@ -40,8 +40,8 @@ func TestDeposits(t *testing.T) { t.Run(tc.name, func(t *testing.T) { govKeeper, mocks, _, ctx := setupGovKeeper(t) authKeeper, bankKeeper, stakingKeeper := mocks.acctKeeper, mocks.bankKeeper, mocks.stakingKeeper - trackMockBalances(bankKeeper) - + err := trackMockBalances(bankKeeper) + require.NoError(t, err) // With expedited proposals the minimum deposit is higher, so we must // initialize and deposit an amount depositMultiplier times larger // than the regular min deposit amount. @@ -53,6 +53,11 @@ func TestDeposits(t *testing.T) { TestAddrs := simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 2, sdkmath.NewInt(10000000*depositMultiplier)) authKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() + addr0Str, err := authKeeper.AddressCodec().BytesToString(TestAddrs[0]) + require.NoError(t, err) + addr1Str, err := authKeeper.AddressCodec().BytesToString(TestAddrs[1]) + require.NoError(t, err) + tp := TestProposal proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "title", "summary", TestAddrs[0], tc.proposalType) require.NoError(t, err) @@ -80,7 +85,7 @@ func TestDeposits(t *testing.T) { deposit, err := govKeeper.Deposits.Get(ctx, collections.Join(proposalID, TestAddrs[0])) require.Nil(t, err) require.Equal(t, fourStake, sdk.NewCoins(deposit.Amount...)) - require.Equal(t, TestAddrs[0].String(), deposit.Depositor) + require.Equal(t, addr0Str, deposit.Depositor) proposal, err = govKeeper.Proposals.Get(ctx, proposalID) require.Nil(t, err) require.Equal(t, fourStake, sdk.NewCoins(proposal.TotalDeposit...)) @@ -93,7 +98,7 @@ func TestDeposits(t *testing.T) { deposit, err = govKeeper.Deposits.Get(ctx, collections.Join(proposalID, TestAddrs[0])) require.Nil(t, err) require.Equal(t, fourStake.Add(fiveStake...), sdk.NewCoins(deposit.Amount...)) - require.Equal(t, TestAddrs[0].String(), deposit.Depositor) + require.Equal(t, addr0Str, deposit.Depositor) proposal, err = govKeeper.Proposals.Get(ctx, proposalID) require.Nil(t, err) require.Equal(t, fourStake.Add(fiveStake...), sdk.NewCoins(proposal.TotalDeposit...)) @@ -105,7 +110,7 @@ func TestDeposits(t *testing.T) { require.True(t, votingStarted) deposit, err = govKeeper.Deposits.Get(ctx, collections.Join(proposalID, TestAddrs[1])) require.Nil(t, err) - require.Equal(t, TestAddrs[1].String(), deposit.Depositor) + require.Equal(t, addr1Str, deposit.Depositor) require.Equal(t, fourStake, sdk.NewCoins(deposit.Amount...)) proposal, err = govKeeper.Proposals.Get(ctx, proposalID) require.Nil(t, err) @@ -128,9 +133,9 @@ func TestDeposits(t *testing.T) { require.Len(t, deposits, 2) propDeposits, _ := govKeeper.GetDeposits(ctx, proposalID) require.Equal(t, deposits, propDeposits) - require.Equal(t, TestAddrs[0].String(), deposits[0].Depositor) + require.Equal(t, addr0Str, deposits[0].Depositor) require.Equal(t, fourStake.Add(fiveStake...), sdk.NewCoins(deposits[0].Amount...)) - require.Equal(t, TestAddrs[1].String(), deposits[1].Depositor) + require.Equal(t, addr1Str, deposits[1].Depositor) require.Equal(t, fourStake, sdk.NewCoins(deposits[1].Amount...)) // Test Refund Deposits @@ -214,7 +219,8 @@ func TestDepositAmount(t *testing.T) { t.Run(tc.name, func(t *testing.T) { govKeeper, mocks, _, ctx := setupGovKeeper(t) authKeeper, bankKeeper, stakingKeeper := mocks.acctKeeper, mocks.bankKeeper, mocks.stakingKeeper - trackMockBalances(bankKeeper) + err := trackMockBalances(bankKeeper) + require.NoError(t, err) testAddrs := simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 2, sdkmath.NewInt(1000000000000000)) authKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() @@ -222,7 +228,7 @@ func TestDepositAmount(t *testing.T) { params, _ := govKeeper.Params.Get(ctx) params.MinDepositRatio = tc.minDepositRatio params.MinDeposit = sdk.NewCoins(params.MinDeposit...).Add(sdk.NewCoin("zcoin", sdkmath.NewInt(10000))) // coins must be sorted by denom - err := govKeeper.Params.Set(ctx, params) + err = govKeeper.Params.Set(ctx, params) require.NoError(t, err) tp := TestProposal @@ -410,10 +416,14 @@ func TestChargeDeposit(t *testing.T) { params.ProposalCancelDest = "" case 1: // normal account address for proposal cancel dest address - params.ProposalCancelDest = TestAddrs[1].String() + addrStr, err := authKeeper.AddressCodec().BytesToString(TestAddrs[1]) + require.NoError(t, err) + params.ProposalCancelDest = addrStr default: // community address for proposal cancel dest address - params.ProposalCancelDest = authtypes.NewModuleAddress(protocolModuleName).String() + addrStr, err := authKeeper.AddressCodec().BytesToString(authtypes.NewModuleAddress(protocolModuleName)) + require.NoError(t, err) + params.ProposalCancelDest = addrStr } err := govKeeper.Params.Set(ctx, params) @@ -440,8 +450,11 @@ func TestChargeDeposit(t *testing.T) { // get the deposits allDeposits, _ := govKeeper.GetDeposits(ctx, proposalID) + addr0Str, err := authKeeper.AddressCodec().BytesToString(TestAddrs[0]) + require.NoError(t, err) + // charge cancellation charges for cancel proposal - err = govKeeper.ChargeDeposit(ctx, proposalID, TestAddrs[0].String(), params.ProposalCancelRatio) + err = govKeeper.ChargeDeposit(ctx, proposalID, addr0Str, params.ProposalCancelRatio) if tc.expectError { require.Error(t, err) return diff --git a/x/gov/keeper/grpc_query_test.go b/x/gov/keeper/grpc_query_test.go index 28ceb6236d9e..0d90df884de6 100644 --- a/x/gov/keeper/grpc_query_test.go +++ b/x/gov/keeper/grpc_query_test.go @@ -19,7 +19,8 @@ import ( func (suite *KeeperTestSuite) TestGRPCQueryProposal() { suite.reset() ctx, queryClient, addrs := suite.ctx, suite.queryClient, suite.addrs - + govAcctStr, err := suite.acctKeeper.AddressCodec().BytesToString(govAcct) + suite.Require().NoError(err) var ( req *v1.QueryProposalRequest expProposal v1.Proposal @@ -56,7 +57,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryProposal() { func() { req = &v1.QueryProposalRequest{ProposalId: 1} testProposal := v1beta1.NewTextProposal("Proposal", "testing proposal") - msgContent, err := v1.NewLegacyContent(testProposal, govAcct.String()) + msgContent, err := v1.NewLegacyContent(testProposal, govAcctStr) suite.Require().NoError(err) submittedProposal, err := suite.govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "", "title", "summary", addrs[0], v1.ProposalType_PROPOSAL_TYPE_STANDARD) suite.Require().NoError(err) @@ -102,6 +103,8 @@ func (suite *KeeperTestSuite) TestGRPCQueryConstitution() { func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposal() { suite.reset() ctx, queryClient, addrs := suite.ctx, suite.legacyQueryClient, suite.addrs + govAcctStr, err := suite.acctKeeper.AddressCodec().BytesToString(govAcct) + suite.Require().NoError(err) var ( req *v1beta1.QueryProposalRequest @@ -139,7 +142,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposal() { func() { req = &v1beta1.QueryProposalRequest{ProposalId: 1} testProposal := v1beta1.NewTextProposal("Proposal", "testing proposal") - msgContent, err := v1.NewLegacyContent(testProposal, govAcct.String()) + msgContent, err := v1.NewLegacyContent(testProposal, govAcctStr) suite.Require().NoError(err) submittedProposal, err := suite.govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "", "title", "summary", addrs[0], v1.ProposalType_PROPOSAL_TYPE_STANDARD) suite.Require().NoError(err) @@ -155,7 +158,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposal() { func() { req = &v1beta1.QueryProposalRequest{ProposalId: 2} testProposal := v1beta1.NewTextProposal("Proposal", "testing proposal") - msgContent, err := v1.NewLegacyContent(testProposal, govAcct.String()) + msgContent, err := v1.NewLegacyContent(testProposal, govAcctStr) suite.Require().NoError(err) submittedProposal, err := suite.govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "", "title", "summary", addrs[0], v1.ProposalType_PROPOSAL_TYPE_EXPEDITED) suite.Require().NoError(err) @@ -191,7 +194,8 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposal() { func (suite *KeeperTestSuite) TestGRPCQueryProposals() { suite.reset() ctx, queryClient, addrs := suite.ctx, suite.queryClient, suite.addrs - + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) testProposals := []*v1.Proposal{} var ( @@ -216,7 +220,8 @@ func (suite *KeeperTestSuite) TestGRPCQueryProposals() { func() { // create 5 test proposals for i := 0; i < 5; i++ { - govAddress := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() + govAddress, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) testProposal := []sdk.Msg{ v1.NewMsgVote(govAddress, uint64(i), v1.OptionYes, ""), } @@ -279,12 +284,12 @@ func (suite *KeeperTestSuite) TestGRPCQueryProposals() { "request with filter of deposit address", func() { depositCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, suite.stakingKeeper.TokensFromConsensusPower(ctx, 20))) - deposit := v1.NewDeposit(testProposals[0].Id, addrs[0], depositCoins) + deposit := v1.NewDeposit(testProposals[0].Id, addr0Str, depositCoins) err := suite.govKeeper.SetDeposit(ctx, deposit) suite.Require().NoError(err) req = &v1.QueryProposalsRequest{ - Depositor: addrs[0].String(), + Depositor: addr0Str, } expRes = &v1.QueryProposalsResponse{ @@ -302,7 +307,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryProposals() { suite.Require().NoError(suite.govKeeper.AddVote(ctx, testProposals[1].Id, addrs[0], v1.NewNonSplitVoteOption(v1.OptionAbstain), "")) req = &v1.QueryProposalsRequest{ - Voter: addrs[0].String(), + Voter: addr0Str, } expRes = &v1.QueryProposalsResponse{ @@ -406,6 +411,8 @@ func (suite *KeeperTestSuite) TestGRPCQueryProposals() { func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposals() { suite.reset() ctx, queryClient, addrs := suite.ctx, suite.legacyQueryClient, suite.addrs + govAcctStr, err := suite.acctKeeper.AddressCodec().BytesToString(govAcct) + suite.Require().NoError(err) var req *v1beta1.QueryProposalsRequest @@ -419,7 +426,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposals() { func() { req = &v1beta1.QueryProposalsRequest{} testProposal := v1beta1.NewTextProposal("Proposal", "testing proposal") - msgContent, err := v1.NewLegacyContent(testProposal, govAcct.String()) + msgContent, err := v1.NewLegacyContent(testProposal, govAcctStr) suite.Require().NoError(err) submittedProposal, err := suite.govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "", "title", "summary", addrs[0], v1.ProposalType_PROPOSAL_TYPE_STANDARD) suite.Require().NoError(err) @@ -451,6 +458,10 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryProposals() { func (suite *KeeperTestSuite) TestGRPCQueryVote() { ctx, queryClient, addrs := suite.ctx, suite.queryClient, suite.addrs + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) + addr1Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[1]) + suite.Require().NoError(err) var ( req *v1.QueryVoteRequest @@ -475,7 +486,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryVote() { func() { req = &v1.QueryVoteRequest{ ProposalId: 0, - Voter: addrs[0].String(), + Voter: addr0Str, } }, false, @@ -495,7 +506,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryVote() { func() { req = &v1.QueryVoteRequest{ ProposalId: 3, - Voter: addrs[0].String(), + Voter: addr0Str, } }, false, @@ -509,7 +520,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryVote() { req = &v1.QueryVoteRequest{ ProposalId: proposal.Id, - Voter: addrs[0].String(), + Voter: addr0Str, } expRes = &v1.QueryVoteResponse{} @@ -526,10 +537,10 @@ func (suite *KeeperTestSuite) TestGRPCQueryVote() { req = &v1.QueryVoteRequest{ ProposalId: proposal.Id, - Voter: addrs[0].String(), + Voter: addr0Str, } - expRes = &v1.QueryVoteResponse{Vote: &v1.Vote{ProposalId: proposal.Id, Voter: addrs[0].String(), Options: []*v1.WeightedVoteOption{{Option: v1.OptionAbstain, Weight: math.LegacyMustNewDecFromStr("1.0").String()}}}} + expRes = &v1.QueryVoteResponse{Vote: &v1.Vote{ProposalId: proposal.Id, Voter: addr0Str, Options: []*v1.WeightedVoteOption{{Option: v1.OptionAbstain, Weight: math.LegacyMustNewDecFromStr("1.0").String()}}}} }, true, }, @@ -538,7 +549,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryVote() { func() { req = &v1.QueryVoteRequest{ ProposalId: proposal.Id, - Voter: addrs[1].String(), + Voter: addr1Str, } expRes = &v1.QueryVoteResponse{} @@ -568,7 +579,10 @@ func (suite *KeeperTestSuite) TestGRPCQueryVote() { func (suite *KeeperTestSuite) TestLegacyGRPCQueryVote() { ctx, queryClient, addrs := suite.ctx, suite.legacyQueryClient, suite.addrs - + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) + addr1Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[1]) + suite.Require().NoError(err) var ( req *v1beta1.QueryVoteRequest expRes *v1beta1.QueryVoteResponse @@ -592,7 +606,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryVote() { func() { req = &v1beta1.QueryVoteRequest{ ProposalId: 0, - Voter: addrs[0].String(), + Voter: addr0Str, } }, false, @@ -612,7 +626,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryVote() { func() { req = &v1beta1.QueryVoteRequest{ ProposalId: 3, - Voter: addrs[0].String(), + Voter: addr0Str, } }, false, @@ -626,7 +640,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryVote() { req = &v1beta1.QueryVoteRequest{ ProposalId: proposal.Id, - Voter: addrs[0].String(), + Voter: addr0Str, } expRes = &v1beta1.QueryVoteResponse{} @@ -643,10 +657,10 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryVote() { req = &v1beta1.QueryVoteRequest{ ProposalId: proposal.Id, - Voter: addrs[0].String(), + Voter: addr0Str, } - expRes = &v1beta1.QueryVoteResponse{Vote: v1beta1.Vote{ProposalId: proposal.Id, Voter: addrs[0].String(), Options: []v1beta1.WeightedVoteOption{{Option: v1beta1.OptionAbstain, Weight: math.LegacyMustNewDecFromStr("1.0")}}}} + expRes = &v1beta1.QueryVoteResponse{Vote: v1beta1.Vote{ProposalId: proposal.Id, Voter: addr0Str, Options: []v1beta1.WeightedVoteOption{{Option: v1beta1.OptionAbstain, Weight: math.LegacyMustNewDecFromStr("1.0")}}}} }, true, }, @@ -655,7 +669,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryVote() { func() { req = &v1beta1.QueryVoteRequest{ ProposalId: proposal.Id, - Voter: addrs[1].String(), + Voter: addr1Str, } expRes = &v1beta1.QueryVoteResponse{} @@ -688,6 +702,10 @@ func (suite *KeeperTestSuite) TestGRPCQueryVotes() { ctx, queryClient := suite.ctx, suite.queryClient addrs := simtestutil.AddTestAddrsIncremental(suite.bankKeeper, suite.stakingKeeper, ctx, 2, math.NewInt(30000000)) + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) + addr1Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[1]) + suite.Require().NoError(err) var ( req *v1.QueryVotesRequest @@ -746,8 +764,8 @@ func (suite *KeeperTestSuite) TestGRPCQueryVotes() { err := suite.govKeeper.Proposals.Set(suite.ctx, proposal.Id, proposal) suite.Require().NoError(err) votes = []*v1.Vote{ - {ProposalId: proposal.Id, Voter: addrs[0].String(), Options: v1.NewNonSplitVoteOption(v1.OptionAbstain)}, - {ProposalId: proposal.Id, Voter: addrs[1].String(), Options: v1.NewNonSplitVoteOption(v1.OptionYes)}, + {ProposalId: proposal.Id, Voter: addr0Str, Options: v1.NewNonSplitVoteOption(v1.OptionAbstain)}, + {ProposalId: proposal.Id, Voter: addr1Str, Options: v1.NewNonSplitVoteOption(v1.OptionYes)}, } codec := address.NewBech32Codec("cosmos") @@ -794,6 +812,10 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryVotes() { ctx, queryClient := suite.ctx, suite.legacyQueryClient addrs := simtestutil.AddTestAddrsIncremental(suite.bankKeeper, suite.stakingKeeper, ctx, 2, math.NewInt(30000000)) + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) + addr1Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[1]) + suite.Require().NoError(err) var ( req *v1beta1.QueryVotesRequest @@ -853,8 +875,8 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryVotes() { suite.Require().NoError(err) votes = []v1beta1.Vote{ - {ProposalId: proposal.Id, Voter: addrs[0].String(), Options: v1beta1.NewNonSplitVoteOption(v1beta1.OptionAbstain)}, - {ProposalId: proposal.Id, Voter: addrs[1].String(), Options: v1beta1.NewNonSplitVoteOption(v1beta1.OptionYes)}, + {ProposalId: proposal.Id, Voter: addr0Str, Options: v1beta1.NewNonSplitVoteOption(v1beta1.OptionAbstain)}, + {ProposalId: proposal.Id, Voter: addr1Str, Options: v1beta1.NewNonSplitVoteOption(v1beta1.OptionYes)}, } codec := address.NewBech32Codec("cosmos") @@ -1095,6 +1117,8 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryParams() { func (suite *KeeperTestSuite) TestGRPCQueryDeposit() { suite.reset() ctx, queryClient, addrs := suite.ctx, suite.queryClient, suite.addrs + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) var ( req *v1.QueryDepositRequest @@ -1119,7 +1143,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposit() { func() { req = &v1.QueryDepositRequest{ ProposalId: 0, - Depositor: addrs[0].String(), + Depositor: addr0Str, } }, false, @@ -1139,7 +1163,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposit() { func() { req = &v1.QueryDepositRequest{ ProposalId: 2, - Depositor: addrs[0].String(), + Depositor: addr0Str, } }, false, @@ -1154,7 +1178,7 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposit() { req = &v1.QueryDepositRequest{ ProposalId: proposal.Id, - Depositor: addrs[0].String(), + Depositor: addr0Str, } }, false, @@ -1163,13 +1187,13 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposit() { "valid request", func() { depositCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, suite.stakingKeeper.TokensFromConsensusPower(ctx, 20))) - deposit := v1.NewDeposit(proposal.Id, addrs[0], depositCoins) + deposit := v1.NewDeposit(proposal.Id, addr0Str, depositCoins) err := suite.govKeeper.SetDeposit(ctx, deposit) suite.Require().NoError(err) req = &v1.QueryDepositRequest{ ProposalId: proposal.Id, - Depositor: addrs[0].String(), + Depositor: addr0Str, } expRes = &v1.QueryDepositResponse{Deposit: &deposit} @@ -1199,6 +1223,8 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposit() { func (suite *KeeperTestSuite) TestLegacyGRPCQueryDeposit() { ctx, queryClient, addrs := suite.ctx, suite.legacyQueryClient, suite.addrs + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) var ( req *v1beta1.QueryDepositRequest @@ -1223,7 +1249,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryDeposit() { func() { req = &v1beta1.QueryDepositRequest{ ProposalId: 0, - Depositor: addrs[0].String(), + Depositor: addr0Str, } }, false, @@ -1243,7 +1269,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryDeposit() { func() { req = &v1beta1.QueryDepositRequest{ ProposalId: 2, - Depositor: addrs[0].String(), + Depositor: addr0Str, } }, false, @@ -1258,7 +1284,7 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryDeposit() { req = &v1beta1.QueryDepositRequest{ ProposalId: proposal.Id, - Depositor: addrs[0].String(), + Depositor: addr0Str, } }, false, @@ -1267,14 +1293,14 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryDeposit() { "valid request", func() { depositCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, suite.stakingKeeper.TokensFromConsensusPower(ctx, 20))) - deposit := v1beta1.NewDeposit(proposal.Id, addrs[0], depositCoins) - v1deposit := v1.NewDeposit(proposal.Id, addrs[0], depositCoins) + deposit := v1beta1.NewDeposit(proposal.Id, addr0Str, depositCoins) + v1deposit := v1.NewDeposit(proposal.Id, addr0Str, depositCoins) err := suite.govKeeper.SetDeposit(ctx, v1deposit) suite.Require().NoError(err) req = &v1beta1.QueryDepositRequest{ ProposalId: proposal.Id, - Depositor: addrs[0].String(), + Depositor: addr0Str, } expRes = &v1beta1.QueryDepositResponse{Deposit: deposit} @@ -1304,6 +1330,10 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryDeposit() { func (suite *KeeperTestSuite) TestGRPCQueryDeposits() { ctx, queryClient, addrs := suite.ctx, suite.queryClient, suite.addrs + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) + addr1Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[1]) + suite.Require().NoError(err) var ( req *v1.QueryDepositsRequest @@ -1358,12 +1388,12 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposits() { "get deposits with default limit", func() { depositAmount1 := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, suite.stakingKeeper.TokensFromConsensusPower(ctx, 20))) - deposit1 := v1.NewDeposit(proposal.Id, addrs[0], depositAmount1) + deposit1 := v1.NewDeposit(proposal.Id, addr0Str, depositAmount1) err := suite.govKeeper.SetDeposit(ctx, deposit1) suite.Require().NoError(err) depositAmount2 := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, suite.stakingKeeper.TokensFromConsensusPower(ctx, 30))) - deposit2 := v1.NewDeposit(proposal.Id, addrs[1], depositAmount2) + deposit2 := v1.NewDeposit(proposal.Id, addr1Str, depositAmount2) err = suite.govKeeper.SetDeposit(ctx, deposit2) suite.Require().NoError(err) @@ -1403,6 +1433,10 @@ func (suite *KeeperTestSuite) TestGRPCQueryDeposits() { func (suite *KeeperTestSuite) TestLegacyGRPCQueryDeposits() { suite.reset() ctx, queryClient, addrs := suite.ctx, suite.legacyQueryClient, suite.addrs + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) + addr1Str, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[1]) + suite.Require().NoError(err) var ( req *v1beta1.QueryDepositsRequest @@ -1457,14 +1491,14 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryDeposits() { "get deposits with default limit", func() { depositAmount1 := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, suite.stakingKeeper.TokensFromConsensusPower(ctx, 20))) - deposit1 := v1beta1.NewDeposit(proposal.Id, addrs[0], depositAmount1) - v1deposit1 := v1.NewDeposit(proposal.Id, addrs[0], depositAmount1) + deposit1 := v1beta1.NewDeposit(proposal.Id, addr0Str, depositAmount1) + v1deposit1 := v1.NewDeposit(proposal.Id, addr0Str, depositAmount1) err := suite.govKeeper.SetDeposit(ctx, v1deposit1) suite.Require().NoError(err) depositAmount2 := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, suite.stakingKeeper.TokensFromConsensusPower(ctx, 30))) - deposit2 := v1beta1.NewDeposit(proposal.Id, addrs[1], depositAmount2) - v1deposit2 := v1.NewDeposit(proposal.Id, addrs[1], depositAmount2) + deposit2 := v1beta1.NewDeposit(proposal.Id, addr1Str, depositAmount2) + v1deposit2 := v1.NewDeposit(proposal.Id, addr1Str, depositAmount2) err = suite.govKeeper.SetDeposit(ctx, v1deposit2) suite.Require().NoError(err) diff --git a/x/gov/keeper/keeper_test.go b/x/gov/keeper/keeper_test.go index f24149a42183..1d6644f4aef1 100644 --- a/x/gov/keeper/keeper_test.go +++ b/x/gov/keeper/keeper_test.go @@ -72,7 +72,10 @@ func (suite *KeeperTestSuite) reset() { suite.legacyQueryClient = legacyQueryClient suite.msgSrvr = keeper.NewMsgServerImpl(suite.govKeeper) - suite.legacyMsgSrvr = keeper.NewLegacyMsgServerImpl(govAcct.String(), suite.msgSrvr) + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(govAcct) + suite.Require().NoError(err) + + suite.legacyMsgSrvr = keeper.NewLegacyMsgServerImpl(govStrAcct, suite.msgSrvr) suite.addrs = simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 3, sdkmath.NewInt(300000000)) suite.acctKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() diff --git a/x/gov/keeper/msg_server_test.go b/x/gov/keeper/msg_server_test.go index 994d4672825b..7015e047e7d7 100644 --- a/x/gov/keeper/msg_server_test.go +++ b/x/gov/keeper/msg_server_test.go @@ -9,6 +9,7 @@ import ( v1 "cosmossdk.io/x/gov/types/v1" "cosmossdk.io/x/gov/types/v1beta1" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "github.com/cosmos/cosmos-sdk/codec/types" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" "github.com/cosmos/cosmos-sdk/testutil/testdata" @@ -24,17 +25,20 @@ var longAddressError = "address max length is 255" func (suite *KeeperTestSuite) TestMsgSubmitProposal() { suite.reset() - govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() addrs := suite.addrs - proposer := addrs[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) + + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) initialDeposit := coins params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := params.MinDeposit bankMsg := &banktypes.MsgSend{ - FromAddress: govAcct.String(), - ToAddress: proposer.String(), + FromAddress: govStrAcct, + ToAddress: proposerAddr, Amount: coins, } @@ -63,7 +67,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( nil, initialDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -78,7 +82,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit, - proposer.String(), + proposerAddr, "", "", "description of proposal", @@ -93,7 +97,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "", @@ -108,7 +112,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit, - proposer.String(), + proposerAddr, "{\"title\":\"Proposal\", \"description\":\"description of proposal\"}", "Proposal2", "description of proposal", @@ -123,7 +127,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit, - proposer.String(), + proposerAddr, "{\"title\":\"Proposal\", \"description\":\"description of proposal\"}", "Proposal", "description", @@ -138,7 +142,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit, - proposer.String(), + proposerAddr, "Metadata", strings.Repeat("1", 256), "description of proposal", @@ -153,7 +157,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit, - proposer.String(), + proposerAddr, strings.Repeat("1", 257), "Proposal", "description of proposal", @@ -168,7 +172,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit, - proposer.String(), + proposerAddr, "", "Proposal", strings.Repeat("1", 10201), @@ -183,7 +187,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{testdata.NewTestMsg(govAcct, addrs[0])}, initialDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -198,7 +202,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{testdata.NewTestMsg(addrs[0])}, initialDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -213,7 +217,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{testdata.NewTestMsg(govAcct)}, initialDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -228,7 +232,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, []sdk.Coin{sdk.NewCoin("invalid", sdkmath.NewInt(100))}, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -243,7 +247,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit.Add(sdk.NewCoin("invalid", sdkmath.NewInt(100))), - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -258,7 +262,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, initialDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -272,7 +276,7 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -304,7 +308,8 @@ func (suite *KeeperTestSuite) TestMsgSubmitProposal() { func (suite *KeeperTestSuite) TestSubmitMultipleChoiceProposal() { suite.reset() addrs := suite.addrs - proposer := addrs[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(addrs[0]) + suite.Require().NoError(err) initialDeposit := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) cases := map[string]struct { @@ -316,7 +321,7 @@ func (suite *KeeperTestSuite) TestSubmitMultipleChoiceProposal() { preRun: func() (*v1.MsgSubmitMultipleChoiceProposal, error) { return v1.NewMultipleChoiceMsgSubmitProposal( initialDeposit, - proposer.String(), + proposerAddr, "mandatory metadata", "Proposal", "description of proposal", @@ -330,7 +335,7 @@ func (suite *KeeperTestSuite) TestSubmitMultipleChoiceProposal() { preRun: func() (*v1.MsgSubmitMultipleChoiceProposal, error) { return v1.NewMultipleChoiceMsgSubmitProposal( initialDeposit, - proposer.String(), + proposerAddr, "mandatory metadata", "Proposal", "description of proposal", @@ -347,7 +352,7 @@ func (suite *KeeperTestSuite) TestSubmitMultipleChoiceProposal() { preRun: func() (*v1.MsgSubmitMultipleChoiceProposal, error) { return v1.NewMultipleChoiceMsgSubmitProposal( initialDeposit, - proposer.String(), + proposerAddr, "mandatory metadata", "Proposal", "description of proposal", @@ -380,18 +385,23 @@ func (suite *KeeperTestSuite) TestMsgCancelProposal() { govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() addrs := suite.addrs proposer := addrs[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(proposer) + suite.Require().NoError(err) + + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(govAcct) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) bankMsg := &banktypes.MsgSend{ - FromAddress: govAcct.String(), - ToAddress: proposer.String(), + FromAddress: govStrAcct, + ToAddress: proposerAddr, Amount: coins, } msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, coins, - proposer.String(), + proposerAddr, "", "title", "summary", v1.ProposalType_PROPOSAL_TYPE_STANDARD, ) @@ -438,7 +448,7 @@ func (suite *KeeperTestSuite) TestMsgCancelProposal() { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, coins, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -459,8 +469,10 @@ func (suite *KeeperTestSuite) TestMsgCancelProposal() { for name, tc := range cases { suite.Run(name, func() { proposalID := tc.preRun() - cancelProposalReq := v1.NewMsgCancelProposal(proposalID, tc.depositor.String()) - _, err := suite.msgSrvr.CancelProposal(suite.ctx, cancelProposalReq) + depositor, err := suite.acctKeeper.AddressCodec().BytesToString(tc.depositor) + suite.Require().NoError(err) + cancelProposalReq := v1.NewMsgCancelProposal(proposalID, depositor) + _, err = suite.msgSrvr.CancelProposal(suite.ctx, cancelProposalReq) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) @@ -473,23 +485,26 @@ func (suite *KeeperTestSuite) TestMsgCancelProposal() { func (suite *KeeperTestSuite) TestMsgVote() { suite.reset() - govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() addrs := suite.addrs proposer := addrs[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(proposer) + suite.Require().NoError(err) + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := params.MinDeposit bankMsg := &banktypes.MsgSend{ - FromAddress: govAcct.String(), - ToAddress: proposer.String(), + FromAddress: govStrAcct, + ToAddress: proposerAddr, Amount: coins, } msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -503,12 +518,14 @@ func (suite *KeeperTestSuite) TestMsgVote() { proposalID := res.ProposalId cases := map[string]struct { - preRun func() uint64 - expErr bool - expErrMsg string - option v1.VoteOption - metadata string - voter sdk.AccAddress + preRun func() uint64 + expErr bool + expErrMsg string + expAddrErr bool + expAddrErrMsg string + option v1.VoteOption + metadata string + voter sdk.AccAddress }{ "empty voter": { preRun: func() uint64 { @@ -535,7 +552,7 @@ func (suite *KeeperTestSuite) TestMsgVote() { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -559,7 +576,7 @@ func (suite *KeeperTestSuite) TestMsgVote() { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, coins, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -592,18 +609,20 @@ func (suite *KeeperTestSuite) TestMsgVote() { preRun: func() uint64 { return proposalID }, - option: v1.VoteOption_VOTE_OPTION_ONE, - voter: sdk.AccAddress(strings.Repeat("a", 300)), - metadata: "", - expErr: true, - expErrMsg: longAddressError, + option: v1.VoteOption_VOTE_OPTION_ONE, + voter: sdk.AccAddress(strings.Repeat("a", 300)), + metadata: "", + expErr: true, + expErrMsg: "invalid voter address: empty address string is not allowed", + expAddrErr: true, + expAddrErrMsg: longAddressError, }, "all good": { preRun: func() uint64 { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -626,8 +645,15 @@ func (suite *KeeperTestSuite) TestMsgVote() { for name, tc := range cases { suite.Run(name, func() { pID := tc.preRun() - voteReq := v1.NewMsgVote(tc.voter, pID, tc.option, tc.metadata) - _, err := suite.msgSrvr.Vote(suite.ctx, voteReq) + voter, err := suite.acctKeeper.AddressCodec().BytesToString(tc.voter) + if tc.expAddrErr { + suite.Require().Error(err) + suite.Require().Contains(err.Error(), tc.expAddrErrMsg) + } else { + suite.Require().NoError(err) + } + voteReq := v1.NewMsgVote(voter, pID, tc.option, tc.metadata) + _, err = suite.msgSrvr.Vote(suite.ctx, voteReq) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) @@ -641,22 +667,26 @@ func (suite *KeeperTestSuite) TestMsgVote() { func (suite *KeeperTestSuite) TestMsgVoteWeighted() { suite.reset() govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(govAcct) + suite.Require().NoError(err) proposer := simtestutil.AddTestAddrsIncremental(suite.bankKeeper, suite.stakingKeeper, suite.ctx, 1, sdkmath.NewInt(50000000))[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(proposer) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := params.MinDeposit bankMsg := &banktypes.MsgSend{ - FromAddress: govAcct.String(), - ToAddress: proposer.String(), + FromAddress: govStrAcct, + ToAddress: proposerAddr, Amount: coins, } msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -670,13 +700,15 @@ func (suite *KeeperTestSuite) TestMsgVoteWeighted() { proposalID := res.ProposalId cases := map[string]struct { - preRun func() uint64 - vote *v1.MsgVote - expErr bool - expErrMsg string - option v1.WeightedVoteOptions - metadata string - voter sdk.AccAddress + preRun func() uint64 + vote *v1.MsgVote + expErr bool + expErrMsg string + expAddrErr bool + expAddrErrMsg string + option v1.WeightedVoteOptions + metadata string + voter sdk.AccAddress }{ "empty voter": { preRun: func() uint64 { @@ -778,7 +810,7 @@ func (suite *KeeperTestSuite) TestMsgVoteWeighted() { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -814,7 +846,7 @@ func (suite *KeeperTestSuite) TestMsgVoteWeighted() { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, coins, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -847,18 +879,20 @@ func (suite *KeeperTestSuite) TestMsgVoteWeighted() { preRun: func() uint64 { return proposalID }, - option: v1.NewNonSplitVoteOption(v1.VoteOption_VOTE_OPTION_ONE), - voter: sdk.AccAddress(strings.Repeat("a", 300)), - metadata: "", - expErr: true, - expErrMsg: longAddressError, + option: v1.NewNonSplitVoteOption(v1.VoteOption_VOTE_OPTION_ONE), + voter: sdk.AccAddress(strings.Repeat("a", 300)), + metadata: "", + expErr: true, + expErrMsg: "invalid voter address: empty address string is not allowed", + expAddrErr: true, + expAddrErrMsg: longAddressError, }, "all good": { preRun: func() uint64 { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -881,7 +915,7 @@ func (suite *KeeperTestSuite) TestMsgVoteWeighted() { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -907,8 +941,15 @@ func (suite *KeeperTestSuite) TestMsgVoteWeighted() { for name, tc := range cases { suite.Run(name, func() { pID := tc.preRun() - voteReq := v1.NewMsgVoteWeighted(tc.voter, pID, tc.option, tc.metadata) - _, err := suite.msgSrvr.VoteWeighted(suite.ctx, voteReq) + voter, err := suite.acctKeeper.AddressCodec().BytesToString(tc.voter) + if tc.expAddrErr { + suite.Require().Error(err) + suite.Require().Contains(err.Error(), tc.expAddrErrMsg) + } else { + suite.Require().NoError(err) + } + voteReq := v1.NewMsgVoteWeighted(voter, pID, tc.option, tc.metadata) + _, err = suite.msgSrvr.VoteWeighted(suite.ctx, voteReq) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) @@ -921,23 +962,26 @@ func (suite *KeeperTestSuite) TestMsgVoteWeighted() { func (suite *KeeperTestSuite) TestMsgDeposit() { suite.reset() - govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) addrs := suite.addrs proposer := addrs[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(proposer) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := sdk.Coins(params.MinDeposit) bankMsg := &banktypes.MsgSend{ - FromAddress: govAcct.String(), - ToAddress: proposer.String(), + FromAddress: govStrAcct, + ToAddress: proposerAddr, Amount: coins, } msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, coins, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -1007,8 +1051,10 @@ func (suite *KeeperTestSuite) TestMsgDeposit() { for name, tc := range cases { suite.Run(name, func() { proposalID := tc.preRun() - depositReq := v1.NewMsgDeposit(tc.depositor, proposalID, tc.deposit) - _, err := suite.msgSrvr.Deposit(suite.ctx, depositReq) + depositor, err := suite.acctKeeper.AddressCodec().BytesToString(tc.depositor) + suite.Require().NoError(err) + depositReq := v1.NewMsgDeposit(depositor, proposalID, tc.deposit) + _, err = suite.msgSrvr.Deposit(suite.ctx, depositReq) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) @@ -1021,12 +1067,14 @@ func (suite *KeeperTestSuite) TestMsgDeposit() { // legacy msg server tests func (suite *KeeperTestSuite) TestLegacyMsgSubmitProposal() { - proposer := simtestutil.AddTestAddrsIncremental(suite.bankKeeper, suite.stakingKeeper, suite.ctx, 1, sdkmath.NewInt(50000000))[0] + proposer, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(simtestutil.AddTestAddrsIncremental(suite.bankKeeper, suite.stakingKeeper, suite.ctx, 1, sdkmath.NewInt(50000000))[0]) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) initialDeposit := coins params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := params.MinDeposit - + address, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(sdk.AccAddress{}) + suite.Require().NoError(err) cases := map[string]struct { preRun func() (*v1beta1.MsgSubmitProposal, error) expErr bool @@ -1062,7 +1110,7 @@ func (suite *KeeperTestSuite) TestLegacyMsgSubmitProposal() { return v1beta1.NewMsgSubmitProposal( content, initialDeposit, - sdk.AccAddress{}, + address, ) }, expErr: true, @@ -1131,23 +1179,26 @@ func (suite *KeeperTestSuite) TestLegacyMsgSubmitProposal() { } func (suite *KeeperTestSuite) TestLegacyMsgVote() { - govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) addrs := suite.addrs proposer := addrs[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(proposer) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := params.MinDeposit bankMsg := &banktypes.MsgSend{ - FromAddress: govAcct.String(), - ToAddress: proposer.String(), + FromAddress: govStrAcct, + ToAddress: proposerAddr, Amount: coins, } msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -1161,12 +1212,14 @@ func (suite *KeeperTestSuite) TestLegacyMsgVote() { proposalID := res.ProposalId cases := map[string]struct { - preRun func() uint64 - expErr bool - expErrMsg string - option v1beta1.VoteOption - metadata string - voter sdk.AccAddress + preRun func() uint64 + expErr bool + expAddrErr bool + expErrMsg string + expAddrErrMsg string + option v1beta1.VoteOption + metadata string + voter sdk.AccAddress }{ "empty voter": { preRun: func() uint64 { @@ -1193,7 +1246,7 @@ func (suite *KeeperTestSuite) TestLegacyMsgVote() { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, coins, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -1216,18 +1269,20 @@ func (suite *KeeperTestSuite) TestLegacyMsgVote() { preRun: func() uint64 { return proposalID }, - option: v1beta1.OptionYes, - voter: sdk.AccAddress(strings.Repeat("a", 300)), - metadata: "", - expErr: true, - expErrMsg: longAddressError, + option: v1beta1.OptionYes, + voter: sdk.AccAddress(strings.Repeat("a", 300)), + metadata: "", + expErr: true, + expErrMsg: "invalid voter address: empty address string is not allowed", + expAddrErr: true, + expAddrErrMsg: longAddressError, }, "all good": { preRun: func() uint64 { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -1250,8 +1305,15 @@ func (suite *KeeperTestSuite) TestLegacyMsgVote() { for name, tc := range cases { suite.Run(name, func() { pID := tc.preRun() - voteReq := v1beta1.NewMsgVote(tc.voter, pID, tc.option) - _, err := suite.legacyMsgSrvr.Vote(suite.ctx, voteReq) + voter, err := suite.acctKeeper.AddressCodec().BytesToString(tc.voter) + if tc.expAddrErr { + suite.Require().Error(err) + suite.Require().Contains(err.Error(), tc.expAddrErrMsg) + } else { + suite.Require().NoError(err) + } + voteReq := v1beta1.NewMsgVote(voter, pID, tc.option) + _, err = suite.legacyMsgSrvr.Vote(suite.ctx, voteReq) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) @@ -1264,23 +1326,26 @@ func (suite *KeeperTestSuite) TestLegacyMsgVote() { func (suite *KeeperTestSuite) TestLegacyVoteWeighted() { suite.reset() - govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) addrs := suite.addrs proposer := addrs[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(proposer) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := params.MinDeposit bankMsg := &banktypes.MsgSend{ - FromAddress: govAcct.String(), - ToAddress: proposer.String(), + FromAddress: govStrAcct, + ToAddress: proposerAddr, Amount: coins, } msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -1294,13 +1359,15 @@ func (suite *KeeperTestSuite) TestLegacyVoteWeighted() { proposalID := res.ProposalId cases := map[string]struct { - preRun func() uint64 - vote *v1beta1.MsgVote - expErr bool - expErrMsg string - option v1beta1.WeightedVoteOptions - metadata string - voter sdk.AccAddress + preRun func() uint64 + vote *v1beta1.MsgVote + expErr bool + expAddrErr bool + expErrMsg string + expAddrErrMsg string + option v1beta1.WeightedVoteOptions + metadata string + voter sdk.AccAddress }{ "empty voter": { preRun: func() uint64 { @@ -1430,7 +1497,7 @@ func (suite *KeeperTestSuite) TestLegacyVoteWeighted() { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, coins, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -1464,17 +1531,19 @@ func (suite *KeeperTestSuite) TestLegacyVoteWeighted() { Weight: sdkmath.LegacyNewDec(1), }, }, - voter: sdk.AccAddress(strings.Repeat("a", 300)), - metadata: "", - expErr: true, - expErrMsg: longAddressError, + voter: sdk.AccAddress(strings.Repeat("a", 300)), + metadata: "", + expErr: true, + expErrMsg: "invalid voter address: empty address string is not allowed", + expAddrErr: true, + expAddrErrMsg: longAddressError, }, "all good": { preRun: func() uint64 { msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, minDeposit, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -1502,8 +1571,15 @@ func (suite *KeeperTestSuite) TestLegacyVoteWeighted() { for name, tc := range cases { suite.Run(name, func() { pID := tc.preRun() - voteReq := v1beta1.NewMsgVoteWeighted(tc.voter, pID, tc.option) - _, err := suite.legacyMsgSrvr.VoteWeighted(suite.ctx, voteReq) + voter, err := suite.acctKeeper.AddressCodec().BytesToString(tc.voter) + if tc.expAddrErr { + suite.Require().Error(err) + suite.Require().Contains(err.Error(), tc.expAddrErrMsg) + } else { + suite.Require().NoError(err) + } + voteReq := v1beta1.NewMsgVoteWeighted(voter, pID, tc.option) + _, err = suite.legacyMsgSrvr.VoteWeighted(suite.ctx, voteReq) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) @@ -1515,23 +1591,26 @@ func (suite *KeeperTestSuite) TestLegacyVoteWeighted() { } func (suite *KeeperTestSuite) TestLegacyMsgDeposit() { - govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress() + govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) addrs := suite.addrs proposer := addrs[0] + proposerAddr, err := suite.acctKeeper.AddressCodec().BytesToString(proposer) + suite.Require().NoError(err) coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := params.MinDeposit bankMsg := &banktypes.MsgSend{ - FromAddress: govAcct.String(), - ToAddress: proposer.String(), + FromAddress: govStrAcct, + ToAddress: proposerAddr, Amount: coins, } msg, err := v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, coins, - proposer.String(), + proposerAddr, "", "Proposal", "description of proposal", @@ -1583,8 +1662,10 @@ func (suite *KeeperTestSuite) TestLegacyMsgDeposit() { for name, tc := range cases { suite.Run(name, func() { proposalID := tc.preRun() - depositReq := v1beta1.NewMsgDeposit(tc.depositor, proposalID, tc.deposit) - _, err := suite.legacyMsgSrvr.Deposit(suite.ctx, depositReq) + depositor, err := suite.acctKeeper.AddressCodec().BytesToString(tc.depositor) + suite.Require().NoError(err) + depositReq := v1beta1.NewMsgDeposit(depositor, proposalID, tc.deposit) + _, err = suite.legacyMsgSrvr.Deposit(suite.ctx, depositReq) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) @@ -2134,15 +2215,16 @@ func (suite *KeeperTestSuite) TestSubmitProposal_InitialDeposit() { suite.Run(name, func() { // Setup govKeeper, ctx := suite.govKeeper, suite.ctx - address := simtestutil.AddTestAddrs(suite.bankKeeper, suite.stakingKeeper, ctx, 1, tc.accountBalance[0].Amount)[0] + address, err := suite.acctKeeper.AddressCodec().BytesToString(simtestutil.AddTestAddrs(suite.bankKeeper, suite.stakingKeeper, ctx, 1, tc.accountBalance[0].Amount)[0]) + suite.Require().NoError(err) params := v1.DefaultParams() params.MinDeposit = tc.minDeposit params.MinInitialDepositRatio = tc.minInitialDepositRatio.String() - err := govKeeper.Params.Set(ctx, params) + err = govKeeper.Params.Set(ctx, params) suite.Require().NoError(err) - msg, err := v1.NewMsgSubmitProposal(TestProposal, tc.initialDeposit, address.String(), "test", "Proposal", "description of proposal", v1.ProposalType_PROPOSAL_TYPE_STANDARD) + msg, err := v1.NewMsgSubmitProposal(TestProposal, tc.initialDeposit, address, "test", "Proposal", "description of proposal", v1.ProposalType_PROPOSAL_TYPE_STANDARD) suite.Require().NoError(err) // System under test @@ -2159,10 +2241,12 @@ func (suite *KeeperTestSuite) TestSubmitProposal_InitialDeposit() { } func (suite *KeeperTestSuite) TestMsgSudoExec() { + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(suite.addrs[0]) + suite.Require().NoError(err) // setup for valid use case params, _ := suite.govKeeper.Params.Get(suite.ctx) minDeposit := params.MinDeposit - proposal, err := v1.NewMsgSubmitProposal([]sdk.Msg{}, minDeposit, suite.addrs[0].String(), "{\"title\":\"Proposal\", \"summary\":\"description of proposal\"}", "Proposal", "description of proposal", v1.ProposalType_PROPOSAL_TYPE_STANDARD) + proposal, err := v1.NewMsgSubmitProposal([]sdk.Msg{}, minDeposit, addr0Str, "{\"title\":\"Proposal\", \"summary\":\"description of proposal\"}", "Proposal", "description of proposal", v1.ProposalType_PROPOSAL_TYPE_STANDARD) suite.Require().NoError(err) proposalResp, err := suite.msgSrvr.SubmitProposal(suite.ctx, proposal) suite.Require().NoError(err) @@ -2171,7 +2255,7 @@ func (suite *KeeperTestSuite) TestMsgSudoExec() { // normally it isn't possible as governance isn't the signer. // governance needs to sudo the vote. validMsg := &v1.MsgSudoExec{Authority: suite.govKeeper.GetAuthority()} - _, err = validMsg.SetSudoedMsg(v1.NewMsgVote(suite.addrs[0], proposalResp.ProposalId, v1.OptionYes, "")) + _, err = validMsg.SetSudoedMsg(v1.NewMsgVote(addr0Str, proposalResp.ProposalId, v1.OptionYes, "")) suite.Require().NoError(err) invalidMsg := &v1.MsgSudoExec{Authority: suite.govKeeper.GetAuthority()} diff --git a/x/gov/keeper/proposal.go b/x/gov/keeper/proposal.go index de732b8760f3..6e48c0005188 100644 --- a/x/gov/keeper/proposal.go +++ b/x/gov/keeper/proposal.go @@ -80,7 +80,11 @@ func (k Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, metadata // assert that the governance module account is the only signer of the messages if !bytes.Equal(signers[0], k.GetGovernanceAccount(ctx).GetAddress()) { - return v1.Proposal{}, errorsmod.Wrapf(types.ErrInvalidSigner, sdk.AccAddress(signers[0]).String()) + addr, err := k.authKeeper.AddressCodec().BytesToString(signers[0]) + if err != nil { + return v1.Proposal{}, errorsmod.Wrapf(types.ErrInvalidSigner, err.Error()) + } + return v1.Proposal{}, errorsmod.Wrapf(types.ErrInvalidSigner, addr) } if err := k.environment.RouterService.MessageRouterService().CanInvoke(ctx, sdk.MsgTypeURL(msg)); err != nil { @@ -124,8 +128,12 @@ func (k Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, metadata return v1.Proposal{}, err } + proposerAddr, err := k.authKeeper.AddressCodec().BytesToString(proposer) + if err != nil { + return v1.Proposal{}, err + } submitTime := k.environment.HeaderService.GetHeaderInfo(ctx).Time - proposal, err := v1.NewProposal(messages, proposalID, submitTime, submitTime.Add(*params.MaxDepositPeriod), metadata, title, summary, proposer, proposalType) + proposal, err := v1.NewProposal(messages, proposalID, submitTime, submitTime.Add(*params.MaxDepositPeriod), metadata, title, summary, proposerAddr, proposalType) if err != nil { return v1.Proposal{}, err } diff --git a/x/gov/keeper/proposal_test.go b/x/gov/keeper/proposal_test.go index d691cf99b881..eb5e7b41abe0 100644 --- a/x/gov/keeper/proposal_test.go +++ b/x/gov/keeper/proposal_test.go @@ -13,6 +13,7 @@ import ( v1 "cosmossdk.io/x/gov/types/v1" "cosmossdk.io/x/gov/types/v1beta1" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -125,9 +126,11 @@ type invalidProposalRoute struct{ v1beta1.TextProposal } func (invalidProposalRoute) ProposalRoute() string { return "nonexistingroute" } func (suite *KeeperTestSuite) TestSubmitProposal() { - govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress().String() - _, _, randomAddr := testdata.KeyTestPubAddr() - + govAcct, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) + _, _, randomAddress := testdata.KeyTestPubAddr() + randomAddr, err := suite.acctKeeper.AddressCodec().BytesToString(randomAddress) + suite.Require().NoError(err) tp := v1beta1.TextProposal{Title: "title", Description: "description"} legacyProposal := func(content v1beta1.Content, authority string) []sdk.Msg { prop, err := v1.NewLegacyContent(content, authority) @@ -136,7 +139,7 @@ func (suite *KeeperTestSuite) TestSubmitProposal() { } // create custom message based params for x/gov/MsgUpdateParams - err := suite.govKeeper.MessageBasedParams.Set(suite.ctx, sdk.MsgTypeURL(&v1.MsgUpdateParams{}), v1.MessageBasedParams{ + err = suite.govKeeper.MessageBasedParams.Set(suite.ctx, sdk.MsgTypeURL(&v1.MsgUpdateParams{}), v1.MessageBasedParams{ VotingPeriod: func() *time.Duration { t := time.Hour * 24 * 7; return &t }(), Quorum: "0.4", Threshold: "0.5", @@ -161,7 +164,7 @@ func (suite *KeeperTestSuite) TestSubmitProposal() { {legacyProposal(&v1beta1.TextProposal{Title: "title", Description: ""}, govAcct), "", v1.ProposalType_PROPOSAL_TYPE_STANDARD, nil}, {legacyProposal(&v1beta1.TextProposal{Title: "title", Description: strings.Repeat("1234567890", 1000)}, govAcct), "", v1.ProposalType_PROPOSAL_TYPE_EXPEDITED, nil}, // error when signer is not gov acct - {legacyProposal(&tp, randomAddr.String()), "", v1.ProposalType_PROPOSAL_TYPE_STANDARD, types.ErrInvalidSigner}, + {legacyProposal(&tp, randomAddr), "", v1.ProposalType_PROPOSAL_TYPE_STANDARD, types.ErrInvalidSigner}, // error only when invalid route {legacyProposal(&invalidProposalRoute{}, govAcct), "", v1.ProposalType_PROPOSAL_TYPE_STANDARD, types.ErrNoProposalHandlerExists}, // error invalid multiple choice proposal @@ -181,7 +184,8 @@ func (suite *KeeperTestSuite) TestSubmitProposal() { } func (suite *KeeperTestSuite) TestCancelProposal() { - govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress().String() + govAcct, err := suite.acctKeeper.AddressCodec().BytesToString(suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()) + suite.Require().NoError(err) tp := v1beta1.TextProposal{Title: "title", Description: "description"} prop, err := v1.NewLegacyContent(&tp, govAcct) suite.Require().NoError(err) @@ -189,6 +193,11 @@ func (suite *KeeperTestSuite) TestCancelProposal() { suite.Require().NoError(err) proposalID := proposal.Id + addr0Str, err := suite.acctKeeper.AddressCodec().BytesToString(suite.addrs[0]) + suite.Require().NoError(err) + addr1Str, err := suite.acctKeeper.AddressCodec().BytesToString(suite.addrs[1]) + suite.Require().NoError(err) + proposal2, err := suite.govKeeper.SubmitProposal(suite.ctx, []sdk.Msg{prop}, "", "title", "summary", suite.addrs[1], v1.ProposalType_PROPOSAL_TYPE_EXPEDITED) suite.Require().NoError(err) proposal2ID := proposal2.Id @@ -227,14 +236,14 @@ func (suite *KeeperTestSuite) TestCancelProposal() { { name: "invalid proposal id", malleate: func() (uint64, string) { - return 10, suite.addrs[1].String() + return 10, addr1Str }, expectedErrMsg: "proposal 10 doesn't exist", }, { name: "valid proposalID but invalid proposer", malleate: func() (uint64, string) { - return proposalID, suite.addrs[1].String() + return proposalID, addr1Str }, expectedErrMsg: "invalid proposer", }, @@ -248,7 +257,7 @@ func (suite *KeeperTestSuite) TestCancelProposal() { proposal2.Status = v1.ProposalStatus_PROPOSAL_STATUS_PASSED err = suite.govKeeper.Proposals.Set(suite.ctx, proposal2.Id, proposal2) suite.Require().NoError(err) - return proposal2ID, suite.addrs[1].String() + return proposal2ID, addr1Str }, expectedErrMsg: "proposal should be in the deposit or voting period", }, @@ -267,14 +276,14 @@ func (suite *KeeperTestSuite) TestCancelProposal() { suite.ctx = suite.ctx.WithHeaderInfo(headerInfo) suite.Require().NoError(err) - return proposal2ID, suite.addrs[1].String() + return proposal2ID, addr1Str }, expectedErrMsg: "too late", }, { name: "valid proposer and proposal id", malleate: func() (uint64, string) { - return proposalID, suite.addrs[0].String() + return proposalID, addr0Str }, }, { @@ -294,7 +303,7 @@ func (suite *KeeperTestSuite) TestCancelProposal() { suite.Require().NoError(err) suite.Require().NotNil(vote) - return proposalID, suite.addrs[0].String() + return proposalID, addr0Str }, }, } @@ -321,7 +330,9 @@ func (suite *KeeperTestSuite) TestCancelProposal() { func TestMigrateProposalMessages(t *testing.T) { content := v1beta1.NewTextProposal("Test", "description") - contentMsg, err := v1.NewLegacyContent(content, sdk.AccAddress("test1").String()) + addr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(sdk.AccAddress("test1")) + require.NoError(t, err) + contentMsg, err := v1.NewLegacyContent(content, addr) require.NoError(t, err) content, err = v1.LegacyContentFromMessage(contentMsg) require.NoError(t, err) diff --git a/x/gov/keeper/tally_test.go b/x/gov/keeper/tally_test.go index 723cfb779f31..fa1109b03115 100644 --- a/x/gov/keeper/tally_test.go +++ b/x/gov/keeper/tally_test.go @@ -145,9 +145,13 @@ func TestTally_Standard(t *testing.T) { name: "one delegator votes: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -170,9 +174,13 @@ func TestTally_Standard(t *testing.T) { name: "one delegator votes yes, validator votes also yes: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -196,9 +204,13 @@ func TestTally_Standard(t *testing.T) { name: "one delegator votes yes, validator votes no: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -227,15 +239,21 @@ func TestTally_Standard(t *testing.T) { name: "delegator with mixed delegations: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) + val1Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[1]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{ { - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(21), }, { - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[1].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val1Addr, Shares: sdkmath.LegacyNewDec(21), }, } @@ -460,8 +478,10 @@ func TestTally_Standard(t *testing.T) { DoAndReturn( func(ctx context.Context, fn func(index int64, validator sdk.ValidatorI) bool) error { for i := int64(0); i < int64(numVals); i++ { + valAddr, err := mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(valAddrs[i]) + require.NoError(t, err) fn(i, stakingtypes.Validator{ - OperatorAddress: valAddrs[i].String(), + OperatorAddress: valAddr, Status: stakingtypes.Bonded, Tokens: sdkmath.NewInt(1000000), DelegatorShares: sdkmath.LegacyNewDec(1000000), @@ -591,9 +611,13 @@ func TestTally_Expedited(t *testing.T) { name: "one delegator votes: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -616,9 +640,13 @@ func TestTally_Expedited(t *testing.T) { name: "one delegator votes yes, validator votes also yes: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -642,9 +670,13 @@ func TestTally_Expedited(t *testing.T) { name: "one delegator votes yes, validator votes no: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -673,15 +705,21 @@ func TestTally_Expedited(t *testing.T) { name: "delegator with mixed delegations: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) + val1Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[1]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{ { - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(21), }, { - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[1].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val1Addr, Shares: sdkmath.LegacyNewDec(21), }, } @@ -910,8 +948,10 @@ func TestTally_Expedited(t *testing.T) { DoAndReturn( func(ctx context.Context, fn func(index int64, validator sdk.ValidatorI) bool) error { for i := int64(0); i < int64(numVals); i++ { + valAddr, err := mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(valAddrs[i]) + require.NoError(t, err) fn(i, stakingtypes.Validator{ - OperatorAddress: valAddrs[i].String(), + OperatorAddress: valAddr, Status: stakingtypes.Bonded, Tokens: sdkmath.NewInt(1000000), DelegatorShares: sdkmath.LegacyNewDec(1000000), @@ -1001,9 +1041,13 @@ func TestTally_Optimistic(t *testing.T) { name: "one delegator votes: threshold no not reached, prop passes", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_THREE) @@ -1068,8 +1112,10 @@ func TestTally_Optimistic(t *testing.T) { DoAndReturn( func(ctx context.Context, fn func(index int64, validator sdk.ValidatorI) bool) error { for i := int64(0); i < int64(numVals); i++ { + valAddr, err := mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(valAddrs[i]) + require.NoError(t, err) fn(i, stakingtypes.Validator{ - OperatorAddress: valAddrs[i].String(), + OperatorAddress: valAddr, Status: stakingtypes.Bonded, Tokens: sdkmath.NewInt(1000000), DelegatorShares: sdkmath.LegacyNewDec(1000000), @@ -1199,9 +1245,13 @@ func TestTally_MultipleChoice(t *testing.T) { name: "one delegator votes: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -1224,9 +1274,13 @@ func TestTally_MultipleChoice(t *testing.T) { name: "one delegator votes yes, validator votes also yes: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -1250,9 +1304,13 @@ func TestTally_MultipleChoice(t *testing.T) { name: "one delegator votes yes, validator votes no: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{{ - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(42), }} delegatorVote(s, s.delAddrs[0], delegations, v1.VoteOption_VOTE_OPTION_ONE) @@ -1281,15 +1339,21 @@ func TestTally_MultipleChoice(t *testing.T) { name: "delegator with mixed delegations: prop fails/burn deposit", setup: func(s tallyFixture) { setTotalBonded(s, 10000000) + del0Addr, err := s.mocks.acctKeeper.AddressCodec().BytesToString(s.delAddrs[0]) + require.NoError(t, err) + val0Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[0]) + require.NoError(t, err) + val1Addr, err := s.mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(s.valAddrs[1]) + require.NoError(t, err) delegations := []stakingtypes.Delegation{ { - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[0].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val0Addr, Shares: sdkmath.LegacyNewDec(21), }, { - DelegatorAddress: s.delAddrs[0].String(), - ValidatorAddress: s.valAddrs[1].String(), + DelegatorAddress: del0Addr, + ValidatorAddress: val1Addr, Shares: sdkmath.LegacyNewDec(21), }, } @@ -1434,8 +1498,10 @@ func TestTally_MultipleChoice(t *testing.T) { DoAndReturn( func(ctx context.Context, fn func(index int64, validator sdk.ValidatorI) bool) error { for i := int64(0); i < int64(numVals); i++ { + valAddr, err := mocks.stakingKeeper.ValidatorAddressCodec().BytesToString(valAddrs[i]) + require.NoError(t, err) fn(i, stakingtypes.Validator{ - OperatorAddress: valAddrs[i].String(), + OperatorAddress: valAddr, Status: stakingtypes.Bonded, Tokens: sdkmath.NewInt(1000000), DelegatorShares: sdkmath.LegacyNewDec(1000000), diff --git a/x/gov/keeper/vote.go b/x/gov/keeper/vote.go index 41805fe0b891..1e635c34c0a1 100644 --- a/x/gov/keeper/vote.go +++ b/x/gov/keeper/vote.go @@ -68,7 +68,11 @@ func (k Keeper) AddVote(ctx context.Context, proposalID uint64, voterAddr sdk.Ac } } - vote := v1.NewVote(proposalID, voterAddr, options, metadata) + voterStrAddr, err := k.authKeeper.AddressCodec().BytesToString(voterAddr) + if err != nil { + return err + } + vote := v1.NewVote(proposalID, voterStrAddr, options, metadata) err = k.Votes.Set(ctx, collections.Join(proposalID, voterAddr), vote) if err != nil { return err @@ -80,7 +84,7 @@ func (k Keeper) AddVote(ctx context.Context, proposalID uint64, voterAddr sdk.Ac } return k.environment.EventService.EventManager(ctx).EmitKV(types.EventTypeProposalVote, - event.NewAttribute(types.AttributeKeyVoter, voterAddr.String()), + event.NewAttribute(types.AttributeKeyVoter, voterStrAddr), event.NewAttribute(types.AttributeKeyOption, options.String()), event.NewAttribute(types.AttributeKeyProposalID, fmt.Sprintf("%d", proposalID)), ) diff --git a/x/gov/keeper/vote_test.go b/x/gov/keeper/vote_test.go index 59905f8b07f5..b008f804f7e3 100644 --- a/x/gov/keeper/vote_test.go +++ b/x/gov/keeper/vote_test.go @@ -22,6 +22,11 @@ func TestVotes(t *testing.T) { addrs := simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 2, sdkmath.NewInt(10000000)) authKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() + addrs0Str, err := authKeeper.AddressCodec().BytesToString(addrs[0]) + require.NoError(t, err) + addrs1Str, err := authKeeper.AddressCodec().BytesToString(addrs[1]) + require.NoError(t, err) + tp := TestProposal proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "title", "description", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), v1.ProposalType_PROPOSAL_TYPE_STANDARD) require.NoError(t, err) @@ -41,7 +46,7 @@ func TestVotes(t *testing.T) { require.NoError(t, govKeeper.AddVote(ctx, proposalID, addrs[0], v1.NewNonSplitVoteOption(v1.OptionAbstain), metadata)) vote, err := govKeeper.Votes.Get(ctx, collections.Join(proposalID, addrs[0])) require.Nil(t, err) - require.Equal(t, addrs[0].String(), vote.Voter) + require.Equal(t, addrs0Str, vote.Voter) require.Equal(t, proposalID, vote.ProposalId) require.True(t, len(vote.Options) == 1) require.Equal(t, v1.OptionAbstain, vote.Options[0].Option) @@ -50,7 +55,7 @@ func TestVotes(t *testing.T) { require.NoError(t, govKeeper.AddVote(ctx, proposalID, addrs[0], v1.NewNonSplitVoteOption(v1.OptionYes), "")) vote, err = govKeeper.Votes.Get(ctx, collections.Join(proposalID, addrs[0])) require.Nil(t, err) - require.Equal(t, addrs[0].String(), vote.Voter) + require.Equal(t, addrs0Str, vote.Voter) require.Equal(t, proposalID, vote.ProposalId) require.True(t, len(vote.Options) == 1) require.Equal(t, v1.OptionYes, vote.Options[0].Option) @@ -64,7 +69,7 @@ func TestVotes(t *testing.T) { }, "")) vote, err = govKeeper.Votes.Get(ctx, collections.Join(proposalID, addrs[1])) require.Nil(t, err) - require.Equal(t, addrs[1].String(), vote.Voter) + require.Equal(t, addrs1Str, vote.Voter) require.Equal(t, proposalID, vote.ProposalId) require.True(t, len(vote.Options) == 4) require.Equal(t, v1.OptionYes, vote.Options[0].Option) @@ -90,11 +95,11 @@ func TestVotes(t *testing.T) { return false, nil })) require.Equal(t, votes, propVotes) - require.Equal(t, addrs[0].String(), votes[0].Voter) + require.Equal(t, addrs0Str, votes[0].Voter) require.Equal(t, proposalID, votes[0].ProposalId) require.True(t, len(votes[0].Options) == 1) require.Equal(t, v1.OptionYes, votes[0].Options[0].Option) - require.Equal(t, addrs[1].String(), votes[1].Voter) + require.Equal(t, addrs1Str, votes[1].Voter) require.Equal(t, proposalID, votes[1].ProposalId) require.True(t, len(votes[1].Options) == 4) require.Equal(t, votes[1].Options[0].Weight, sdkmath.LegacyNewDecWithPrec(60, 2).String()) diff --git a/x/gov/module.go b/x/gov/module.go index 6effa507b528..f88ed628a4fe 100644 --- a/x/gov/module.go +++ b/x/gov/module.go @@ -123,7 +123,11 @@ func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { // RegisterServices registers module services. func (am AppModule) RegisterServices(registrar grpc.ServiceRegistrar) error { msgServer := keeper.NewMsgServerImpl(am.keeper) - v1beta1.RegisterMsgServer(registrar, keeper.NewLegacyMsgServerImpl(am.accountKeeper.GetModuleAddress(govtypes.ModuleName).String(), msgServer)) + addr, err := am.accountKeeper.AddressCodec().BytesToString(am.accountKeeper.GetModuleAddress(govtypes.ModuleName)) + if err != nil { + return err + } + v1beta1.RegisterMsgServer(registrar, keeper.NewLegacyMsgServerImpl(addr, msgServer)) v1.RegisterMsgServer(registrar, msgServer) v1beta1.RegisterQueryServer(registrar, keeper.NewLegacyQueryServer(am.keeper)) diff --git a/x/gov/simulation/operations.go b/x/gov/simulation/operations.go index 749106a58262..0004fbac8394 100644 --- a/x/gov/simulation/operations.go +++ b/x/gov/simulation/operations.go @@ -185,8 +185,13 @@ func SimulateMsgSubmitLegacyProposal( return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "content is nil"), nil, nil } - govacc := k.GetGovernanceAccount(ctx) - contentMsg, err := v1.NewLegacyContent(content, govacc.GetAddress().String()) + //govacc := k.GetGovernanceAccount(ctx) + govacc, err := ak.AddressCodec().BytesToString(k.GetGovernanceAccount(ctx).GetAddress()) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "error getting governance account address"), nil, err + + } + contentMsg, err := v1.NewLegacyContent(content, govacc) if err != nil { return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "error converting legacy content into proposal message"), nil, err } @@ -245,10 +250,14 @@ func simulateMsgSubmitProposal( proposalType = v1.ProposalType_PROPOSAL_TYPE_EXPEDITED } + accAddr, err := ak.AddressCodec().BytesToString(simAccount.Address) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "error getting simAccount address"), nil, err + } msg, err := v1.NewMsgSubmitProposal( proposalMsgs, deposit, - simAccount.Address.String(), + accAddr, simtypes.RandStringOfLength(r, 100), simtypes.RandStringOfLength(r, 100), simtypes.RandStringOfLength(r, 100), @@ -343,7 +352,11 @@ func SimulateMsgDeposit( return simtypes.NoOpMsg(types.ModuleName, TypeMsgDeposit, "unable to generate deposit"), nil, err } - msg := v1.NewMsgDeposit(simAccount.Address, proposalID, deposit) + addr, err := ak.AddressCodec().BytesToString(simAccount.Address) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, TypeMsgDeposit, "unable to get simAccount address"), nil, err + } + msg := v1.NewMsgDeposit(addr, proposalID, deposit) account := ak.GetAccount(ctx, simAccount.Address) spendable := bk.SpendableCoins(ctx, account.GetAddress()) @@ -413,7 +426,11 @@ func operationSimulateMsgVote( } option := randomVotingOption(r) - msg := v1.NewMsgVote(simAccount.Address, proposalID, option, "") + addr, err := ak.AddressCodec().BytesToString(simAccount.Address) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, TypeMsgVote, "unable to get simAccount address"), nil, err + } + msg := v1.NewMsgVote(addr, proposalID, option, "") account := ak.GetAccount(ctx, simAccount.Address) spendable := bk.SpendableCoins(ctx, account.GetAddress()) @@ -476,7 +493,11 @@ func operationSimulateMsgVoteWeighted( } options := randomWeightedVotingOptions(r) - msg := v1.NewMsgVoteWeighted(simAccount.Address, proposalID, options, "") + addr, err := ak.AddressCodec().BytesToString(simAccount.Address) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, TypeMsgVoteWeighted, "unable to get simAccount address"), nil, err + } + msg := v1.NewMsgVoteWeighted(addr, proposalID, options, "") account := ak.GetAccount(ctx, simAccount.Address) spendable := bk.SpendableCoins(ctx, account.GetAddress()) @@ -516,7 +537,11 @@ func SimulateMsgCancelProposal( return simtypes.NoOpMsg(types.ModuleName, TypeMsgCancelProposal, "no proposals found"), nil, nil } - if proposal.Proposer != simAccount.Address.String() { + proposerAddr, err := ak.AddressCodec().BytesToString(simAccount.Address) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, TypeMsgCancelProposal, "invalid proposer"), nil, err + } + if proposal.Proposer != proposerAddr { return simtypes.NoOpMsg(types.ModuleName, TypeMsgCancelProposal, "invalid proposer"), nil, nil } @@ -527,7 +552,11 @@ func SimulateMsgCancelProposal( account := ak.GetAccount(ctx, simAccount.Address) spendable := bk.SpendableCoins(ctx, account.GetAddress()) - msg := v1.NewMsgCancelProposal(proposal.Id, account.GetAddress().String()) + accAddr, err := ak.AddressCodec().BytesToString(account.GetAddress()) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, TypeMsgCancelProposal, "could not get account address"), nil, err + } + msg := v1.NewMsgCancelProposal(proposal.Id, accAddr) txCtx := simulation.OperationInput{ R: r, diff --git a/x/gov/types/v1/deposit.go b/x/gov/types/v1/deposit.go index 2ddbd8c221ac..a35d6928cf9a 100644 --- a/x/gov/types/v1/deposit.go +++ b/x/gov/types/v1/deposit.go @@ -7,8 +7,8 @@ import ( ) // NewDeposit creates a new Deposit instance -func NewDeposit(proposalID uint64, depositor sdk.AccAddress, amount sdk.Coins) Deposit { - return Deposit{proposalID, depositor.String(), amount} +func NewDeposit(proposalID uint64, depositor string, amount sdk.Coins) Deposit { + return Deposit{proposalID, depositor, amount} } // Deposits is a collection of Deposit objects diff --git a/x/gov/types/v1/msgs.go b/x/gov/types/v1/msgs.go index 010bc65605be..d25a9ed33aad 100644 --- a/x/gov/types/v1/msgs.go +++ b/x/gov/types/v1/msgs.go @@ -87,18 +87,18 @@ func NewMultipleChoiceMsgSubmitProposal( } // NewMsgDeposit creates a new MsgDeposit instance -func NewMsgDeposit(depositor sdk.AccAddress, proposalID uint64, amount sdk.Coins) *MsgDeposit { - return &MsgDeposit{proposalID, depositor.String(), amount} +func NewMsgDeposit(depositor string, proposalID uint64, amount sdk.Coins) *MsgDeposit { + return &MsgDeposit{proposalID, depositor, amount} } // NewMsgVote creates a message to cast a vote on an active proposal -func NewMsgVote(voter sdk.AccAddress, proposalID uint64, option VoteOption, metadata string) *MsgVote { - return &MsgVote{proposalID, voter.String(), option, metadata} +func NewMsgVote(voter string, proposalID uint64, option VoteOption, metadata string) *MsgVote { + return &MsgVote{proposalID, voter, option, metadata} } // NewMsgVoteWeighted creates a message to cast a vote on an active proposal -func NewMsgVoteWeighted(voter sdk.AccAddress, proposalID uint64, options WeightedVoteOptions, metadata string) *MsgVoteWeighted { - return &MsgVoteWeighted{proposalID, voter.String(), options, metadata} +func NewMsgVoteWeighted(voter string, proposalID uint64, options WeightedVoteOptions, metadata string) *MsgVoteWeighted { + return &MsgVoteWeighted{proposalID, voter, options, metadata} } // NewMsgExecLegacyContent creates a new MsgExecLegacyContent instance. diff --git a/x/gov/types/v1/msgs_test.go b/x/gov/types/v1/msgs_test.go index 29155a123be4..ad266b15e008 100644 --- a/x/gov/types/v1/msgs_test.go +++ b/x/gov/types/v1/msgs_test.go @@ -10,6 +10,7 @@ import ( v1 "cosmossdk.io/x/gov/types/v1" "github.com/cosmos/cosmos-sdk/codec" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -33,7 +34,9 @@ func init() { func TestMsgDepositGetSignBytes(t *testing.T) { addr := sdk.AccAddress("addr1") - msg := v1.NewMsgDeposit(addr, 0, coinsPos) + addrStr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(addr) + require.NoError(t, err) + msg := v1.NewMsgDeposit(addrStr, 0, coinsPos) pc := codec.NewProtoCodec(types.NewInterfaceRegistry()) res, err := pc.MarshalAminoJSON(msg) require.NoError(t, err) @@ -44,6 +47,8 @@ func TestMsgDepositGetSignBytes(t *testing.T) { // this tests that Amino JSON MsgSubmitProposal.GetSignBytes() still works with Content as Any using the ModuleCdc func TestMsgSubmitProposal_GetSignBytes(t *testing.T) { pc := codec.NewProtoCodec(types.NewInterfaceRegistry()) + addr0Str, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(addrs[0]) + require.NoError(t, err) testcases := []struct { name string proposal []sdk.Msg @@ -54,7 +59,7 @@ func TestMsgSubmitProposal_GetSignBytes(t *testing.T) { }{ { "MsgVote", - []sdk.Msg{v1.NewMsgVote(addrs[0], 1, v1.OptionYes, "")}, + []sdk.Msg{v1.NewMsgVote(addr0Str, 1, v1.OptionYes, "")}, "gov/MsgVote", "Proposal for a governance vote msg", v1.ProposalType_PROPOSAL_TYPE_STANDARD, diff --git a/x/gov/types/v1/params.go b/x/gov/types/v1/params.go index 66efdf0d43c9..1f594e368cca 100644 --- a/x/gov/types/v1/params.go +++ b/x/gov/types/v1/params.go @@ -260,7 +260,7 @@ func (p Params) ValidateBasic(addressCodec address.Codec) error { } if len(p.ProposalCancelDest) != 0 { - _, err := sdk.AccAddressFromBech32(p.ProposalCancelDest) + _, err := addressCodec.StringToBytes(p.ProposalCancelDest) if err != nil { return fmt.Errorf("deposits destination address is invalid: %s", p.ProposalCancelDest) } diff --git a/x/gov/types/v1/proposal.go b/x/gov/types/v1/proposal.go index 47615313fe11..bf4d87161d69 100644 --- a/x/gov/types/v1/proposal.go +++ b/x/gov/types/v1/proposal.go @@ -23,7 +23,7 @@ const ( ) // NewProposal creates a new Proposal instance -func NewProposal(messages []sdk.Msg, id uint64, submitTime, depositEndTime time.Time, metadata, title, summary string, proposer sdk.AccAddress, proposalType ProposalType) (Proposal, error) { +func NewProposal(messages []sdk.Msg, id uint64, submitTime, depositEndTime time.Time, metadata, title, summary string, proposer string, proposalType ProposalType) (Proposal, error) { msgs, err := sdktx.SetMsgs(messages) if err != nil { return Proposal{}, err @@ -46,7 +46,7 @@ func NewProposal(messages []sdk.Msg, id uint64, submitTime, depositEndTime time. DepositEndTime: &depositEndTime, Title: title, Summary: summary, - Proposer: proposer.String(), + Proposer: proposer, ProposalType: proposalType, } diff --git a/x/gov/types/v1/proposals_test.go b/x/gov/types/v1/proposals_test.go index 2152a60e1bbb..01e01d392af7 100644 --- a/x/gov/types/v1/proposals_test.go +++ b/x/gov/types/v1/proposals_test.go @@ -37,7 +37,7 @@ func TestNestedAnys(t *testing.T) { testProposal := v1beta1.NewTextProposal("Proposal", "testing proposal") msgContent, err := v1.NewLegacyContent(testProposal, "cosmos1govacct") require.NoError(t, err) - proposal, err := v1.NewProposal([]sdk.Msg{msgContent}, 1, time.Now(), time.Now(), "", "title", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), v1.ProposalType_PROPOSAL_TYPE_STANDARD) + proposal, err := v1.NewProposal([]sdk.Msg{msgContent}, 1, time.Now(), time.Now(), "", "title", "summary", "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", v1.ProposalType_PROPOSAL_TYPE_STANDARD) require.NoError(t, err) require.NotPanics(t, func() { _ = proposal.String() }) @@ -46,12 +46,12 @@ func TestNestedAnys(t *testing.T) { func TestProposalSetExpedited(t *testing.T) { const startExpedited = false - proposal, err := v1.NewProposal([]sdk.Msg{}, 1, time.Now(), time.Now(), "", "title", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), v1.ProposalType_PROPOSAL_TYPE_STANDARD) + proposal, err := v1.NewProposal([]sdk.Msg{}, 1, time.Now(), time.Now(), "", "title", "summary", "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) + proposal, err = v1.NewProposal([]sdk.Msg{}, 1, time.Now(), time.Now(), "", "title", "summary", "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) @@ -73,7 +73,7 @@ func TestProposalGetMinDepositFromParams(t *testing.T) { } for _, tc := range testcases { - proposal, err := v1.NewProposal([]sdk.Msg{}, 1, time.Now(), time.Now(), "", "title", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), tc.proposalType) + proposal, err := v1.NewProposal([]sdk.Msg{}, 1, time.Now(), time.Now(), "", "title", "summary", "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", tc.proposalType) require.NoError(t, err) actualMinDeposit := proposal.GetMinDepositFromParams(v1.DefaultParams()) diff --git a/x/gov/types/v1/vote.go b/x/gov/types/v1/vote.go index fcd40a061660..f88b5a627e1a 100644 --- a/x/gov/types/v1/vote.go +++ b/x/gov/types/v1/vote.go @@ -6,8 +6,6 @@ import ( "strings" "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" ) const ( @@ -25,8 +23,8 @@ const ( ) // NewVote creates a new Vote instance -func NewVote(proposalID uint64, voter sdk.AccAddress, options WeightedVoteOptions, metadata string) Vote { - return Vote{ProposalId: proposalID, Voter: voter.String(), Options: options, Metadata: metadata} +func NewVote(proposalID uint64, voter string, options WeightedVoteOptions, metadata string) Vote { + return Vote{ProposalId: proposalID, Voter: voter, Options: options, Metadata: metadata} } // Empty returns whether a vote is empty. diff --git a/x/gov/types/v1beta1/deposit.go b/x/gov/types/v1beta1/deposit.go index c9945b420990..48d901a2b197 100644 --- a/x/gov/types/v1beta1/deposit.go +++ b/x/gov/types/v1beta1/deposit.go @@ -7,8 +7,8 @@ import ( ) // NewDeposit creates a new Deposit instance -func NewDeposit(proposalID uint64, depositor sdk.AccAddress, amount sdk.Coins) Deposit { - return Deposit{proposalID, depositor.String(), amount} +func NewDeposit(proposalID uint64, depositor string, amount sdk.Coins) Deposit { + return Deposit{proposalID, depositor, amount} } // Empty returns whether a deposit is empty. diff --git a/x/gov/types/v1beta1/msgs.go b/x/gov/types/v1beta1/msgs.go index 1f8a62019f05..298f26c592eb 100644 --- a/x/gov/types/v1beta1/msgs.go +++ b/x/gov/types/v1beta1/msgs.go @@ -24,10 +24,10 @@ var ( ) // NewMsgSubmitProposal creates a new MsgSubmitProposal. -func NewMsgSubmitProposal(content Content, initialDeposit sdk.Coins, proposer sdk.AccAddress) (*MsgSubmitProposal, error) { +func NewMsgSubmitProposal(content Content, initialDeposit sdk.Coins, proposer string) (*MsgSubmitProposal, error) { m := &MsgSubmitProposal{ InitialDeposit: initialDeposit, - Proposer: proposer.String(), + Proposer: proposer, } err := m.SetContent(content) if err != nil { @@ -54,8 +54,8 @@ func (m *MsgSubmitProposal) SetInitialDeposit(coins sdk.Coins) { } // SetProposer sets the given proposer address for MsgSubmitProposal. -func (m *MsgSubmitProposal) SetProposer(address fmt.Stringer) { - m.Proposer = address.String() +func (m *MsgSubmitProposal) SetProposer(address string) { + m.Proposer = address } // SetContent sets the content for MsgSubmitProposal. @@ -79,16 +79,16 @@ func (m MsgSubmitProposal) UnpackInterfaces(unpacker codectypes.AnyUnpacker) err } // NewMsgDeposit creates a new MsgDeposit instance -func NewMsgDeposit(depositor sdk.AccAddress, proposalID uint64, amount sdk.Coins) *MsgDeposit { - return &MsgDeposit{proposalID, depositor.String(), amount} +func NewMsgDeposit(depositor string, proposalID uint64, amount sdk.Coins) *MsgDeposit { + return &MsgDeposit{proposalID, depositor, amount} } // NewMsgVote creates a message to cast a vote on an active proposal -func NewMsgVote(voter sdk.AccAddress, proposalID uint64, option VoteOption) *MsgVote { - return &MsgVote{proposalID, voter.String(), option} +func NewMsgVote(voter string, proposalID uint64, option VoteOption) *MsgVote { + return &MsgVote{proposalID, voter, option} } // NewMsgVoteWeighted creates a message to cast a vote on an active proposal. -func NewMsgVoteWeighted(voter sdk.AccAddress, proposalID uint64, options WeightedVoteOptions) *MsgVoteWeighted { - return &MsgVoteWeighted{proposalID, voter.String(), options} +func NewMsgVoteWeighted(voter string, proposalID uint64, options WeightedVoteOptions) *MsgVoteWeighted { + return &MsgVoteWeighted{proposalID, voter, options} } diff --git a/x/gov/types/v1beta1/msgs_test.go b/x/gov/types/v1beta1/msgs_test.go index a190c80c3a70..f6d357ab82ff 100644 --- a/x/gov/types/v1beta1/msgs_test.go +++ b/x/gov/types/v1beta1/msgs_test.go @@ -1,6 +1,7 @@ package v1beta1 import ( + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "testing" "github.com/stretchr/testify/require" @@ -20,7 +21,8 @@ func init() { } func TestMsgDepositGetSignBytes(t *testing.T) { - addr := sdk.AccAddress("addr1") + addr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(sdk.AccAddress("addr1")) + require.NoError(t, err) msg := NewMsgDeposit(addr, 0, coinsPos) pc := codec.NewProtoCodec(types.NewInterfaceRegistry()) res, err := pc.MarshalAminoJSON(msg) @@ -32,7 +34,9 @@ func TestMsgDepositGetSignBytes(t *testing.T) { // this tests that Amino JSON MsgSubmitProposal.GetSignBytes() still works with Content as Any using the ModuleCdc func TestMsgSubmitProposal_GetSignBytes(t *testing.T) { - msg, err := NewMsgSubmitProposal(NewTextProposal("test", "abcd"), sdk.NewCoins(), sdk.AccAddress{}) + addr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(sdk.AccAddress{}) + require.NoError(t, err) + msg, err := NewMsgSubmitProposal(NewTextProposal("test", "abcd"), sdk.NewCoins(), addr) require.NoError(t, err) pc := codec.NewProtoCodec(types.NewInterfaceRegistry()) bz, err := pc.MarshalAminoJSON(msg) diff --git a/x/group/client/cli/prompt.go b/x/group/client/cli/prompt.go index 62056573f689..3cb018e02548 100644 --- a/x/group/client/cli/prompt.go +++ b/x/group/client/cli/prompt.go @@ -9,6 +9,7 @@ import ( "github.com/manifoldco/promptui" "github.com/spf13/cobra" + "cosmossdk.io/core/address" govcli "cosmossdk.io/x/gov/client/cli" govtypes "cosmossdk.io/x/gov/types" @@ -31,9 +32,9 @@ type proposalType struct { } // Prompt the proposal type values and return the proposal and its metadata. -func (p *proposalType) Prompt(cdc codec.Codec, skipMetadata bool) (*Proposal, govtypes.ProposalMetadata, error) { +func (p *proposalType) Prompt(cdc codec.Codec, skipMetadata bool, addressCodec address.Codec) (*Proposal, govtypes.ProposalMetadata, error) { // set metadata - metadata, err := govcli.PromptMetadata(skipMetadata) + metadata, err := govcli.PromptMetadata(skipMetadata, addressCodec) if err != nil { return nil, metadata, fmt.Errorf("failed to set proposal metadata: %w", err) } @@ -71,7 +72,7 @@ func (p *proposalType) Prompt(cdc codec.Codec, skipMetadata bool) (*Proposal, go } // set messages field - result, err := govcli.Prompt(p.Msg, "msg") + result, err := govcli.Prompt(p.Msg, "msg", addressCodec) if err != nil { return nil, metadata, fmt.Errorf("failed to set proposal message: %w", err) } @@ -142,7 +143,7 @@ func NewCmdDraftProposal() *cobra.Command { skipMetadataPrompt, _ := cmd.Flags().GetBool(flagSkipMetadata) - result, metadata, err := proposal.Prompt(clientCtx.Codec, skipMetadataPrompt) + result, metadata, err := proposal.Prompt(clientCtx.Codec, skipMetadataPrompt, clientCtx.AddressCodec) if err != nil { return err } diff --git a/x/params/client/cli/tx.go b/x/params/client/cli/tx.go index 3e3937a77b12..c768b298d12c 100644 --- a/x/params/client/cli/tx.go +++ b/x/params/client/cli/tx.go @@ -67,7 +67,11 @@ Where proposal.json contains: return err } - from := clientCtx.GetFromAddress() + from, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } + content := paramproposal.NewParameterChangeProposal( proposal.Title, proposal.Description, proposal.Changes.ToParamChanges(), ) From efd669ca1c51b609ecb81dac40221991b6c5595e Mon Sep 17 00:00:00 2001 From: Julian Toledano Date: Mon, 25 Mar 2024 12:45:20 +0100 Subject: [PATCH 2/4] lint --- x/gov/CHANGELOG.md | 6 +++--- x/gov/client/cli/prompt.go | 2 +- x/gov/client/cli/prompt_test.go | 3 ++- x/gov/simulation/operations.go | 2 -- x/gov/types/v1/proposal.go | 2 +- x/gov/types/v1beta1/msgs_test.go | 2 +- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/x/gov/CHANGELOG.md b/x/gov/CHANGELOG.md index 40bcef34baf4..14b4c389ddae 100644 --- a/x/gov/CHANGELOG.md +++ b/x/gov/CHANGELOG.md @@ -61,9 +61,9 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking Changes -* []() Removes the use of Accouts String method: - * `NewDeposit`, `NewMsgDeposit`, `NewMsgVote`, `NewMsgVoteWeighted`, `NewVote`, `NewProposal`, `NewDeposit`, `NewMsgDeposit`, `NewMsgSubmitProposal`, `NewMsgVote`, `NewMsgVoteWeighted` now takes a string as argument instead of an `sdk.AccAddress`. - * `Prompt` and `PromptMetadata` takes an address.Codec as argument. +* [#19850](https://github.com/cosmos/cosmos-sdk/pull/19850) Removes the use of Accounts String method: + * `NewDeposit`, `NewMsgDeposit`, `NewMsgVote`, `NewMsgVoteWeighted`, `NewVote`, `NewProposal`, `NewMsgDeposit`, `NewMsgSubmitProposal`, `NewMsgVote`, `NewMsgVoteWeighted` now takes a string as argument instead of an `sdk.AccAddress`. + * `Prompt` and `PromptMetadata` take as an address.Codec as argument. * `SetProposer` takes a String as argument instead of a `fmt.Stringer`. * [#19481](https://github.com/cosmos/cosmos-sdk/pull/19481) Migrate module to use `appmodule.Environment`; `NewKeeper` now takes `appmodule.Environment` instead of a store service and no `baseapp.MessageRouter` anymore. * [#19481](https://github.com/cosmos/cosmos-sdk/pull/19481) v1beta1 proposal handlers now take a `context.Context` instead of an `sdk.Context`. diff --git a/x/gov/client/cli/prompt.go b/x/gov/client/cli/prompt.go index 9ff270b4d667..bb6706479bf1 100644 --- a/x/gov/client/cli/prompt.go +++ b/x/gov/client/cli/prompt.go @@ -9,10 +9,10 @@ import ( "strconv" "strings" - "cosmossdk.io/core/address" "github.com/manifoldco/promptui" "github.com/spf13/cobra" + "cosmossdk.io/core/address" authtypes "cosmossdk.io/x/auth/types" "cosmossdk.io/x/gov/types" diff --git a/x/gov/client/cli/prompt_test.go b/x/gov/client/cli/prompt_test.go index ebd5c4a584bf..89110536d7e1 100644 --- a/x/gov/client/cli/prompt_test.go +++ b/x/gov/client/cli/prompt_test.go @@ -9,7 +9,6 @@ package cli_test import ( "fmt" - codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "math" "os" "testing" @@ -19,6 +18,8 @@ import ( "github.com/stretchr/testify/require" "cosmossdk.io/x/gov/client/cli" + + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" ) type st struct { diff --git a/x/gov/simulation/operations.go b/x/gov/simulation/operations.go index 0004fbac8394..6941bcc87d38 100644 --- a/x/gov/simulation/operations.go +++ b/x/gov/simulation/operations.go @@ -185,11 +185,9 @@ func SimulateMsgSubmitLegacyProposal( return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "content is nil"), nil, nil } - //govacc := k.GetGovernanceAccount(ctx) govacc, err := ak.AddressCodec().BytesToString(k.GetGovernanceAccount(ctx).GetAddress()) if err != nil { return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "error getting governance account address"), nil, err - } contentMsg, err := v1.NewLegacyContent(content, govacc) if err != nil { diff --git a/x/gov/types/v1/proposal.go b/x/gov/types/v1/proposal.go index bf4d87161d69..aec495ff2040 100644 --- a/x/gov/types/v1/proposal.go +++ b/x/gov/types/v1/proposal.go @@ -23,7 +23,7 @@ const ( ) // NewProposal creates a new Proposal instance -func NewProposal(messages []sdk.Msg, id uint64, submitTime, depositEndTime time.Time, metadata, title, summary string, proposer string, proposalType ProposalType) (Proposal, error) { +func NewProposal(messages []sdk.Msg, id uint64, submitTime, depositEndTime time.Time, metadata, title, summary, proposer string, proposalType ProposalType) (Proposal, error) { msgs, err := sdktx.SetMsgs(messages) if err != nil { return Proposal{}, err diff --git a/x/gov/types/v1beta1/msgs_test.go b/x/gov/types/v1beta1/msgs_test.go index f6d357ab82ff..791a8c9f6da7 100644 --- a/x/gov/types/v1beta1/msgs_test.go +++ b/x/gov/types/v1beta1/msgs_test.go @@ -1,12 +1,12 @@ package v1beta1 import ( - codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "testing" "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/codec" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" ) From 9819366b6afed60344d4f7db2da6c2b9faf41502 Mon Sep 17 00:00:00 2001 From: son trinh Date: Mon, 25 Mar 2024 23:39:37 +0700 Subject: [PATCH 3/4] Update x/gov/CHANGELOG.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- x/gov/CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/x/gov/CHANGELOG.md b/x/gov/CHANGELOG.md index 14b4c389ddae..0b391959407a 100644 --- a/x/gov/CHANGELOG.md +++ b/x/gov/CHANGELOG.md @@ -62,9 +62,9 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking Changes * [#19850](https://github.com/cosmos/cosmos-sdk/pull/19850) Removes the use of Accounts String method: - * `NewDeposit`, `NewMsgDeposit`, `NewMsgVote`, `NewMsgVoteWeighted`, `NewVote`, `NewProposal`, `NewMsgDeposit`, `NewMsgSubmitProposal`, `NewMsgVote`, `NewMsgVoteWeighted` now takes a string as argument instead of an `sdk.AccAddress`. - * `Prompt` and `PromptMetadata` take as an address.Codec as argument. - * `SetProposer` takes a String as argument instead of a `fmt.Stringer`. + * `NewDeposit`, `NewMsgDeposit`, `NewMsgVote`, `NewMsgVoteWeighted`, `NewVote`, `NewProposal`, `NewMsgSubmitProposal`, `NewMsgVote`, `NewMsgVoteWeighted` now take a string as an argument instead of an `sdk.AccAddress`. + * `Prompt` and `PromptMetadata` take an address.Codec as arguments. + * `SetProposer` takes a String as an argument instead of a `fmt.Stringer`. * [#19481](https://github.com/cosmos/cosmos-sdk/pull/19481) Migrate module to use `appmodule.Environment`; `NewKeeper` now takes `appmodule.Environment` instead of a store service and no `baseapp.MessageRouter` anymore. * [#19481](https://github.com/cosmos/cosmos-sdk/pull/19481) v1beta1 proposal handlers now take a `context.Context` instead of an `sdk.Context`. * [#19592](https://github.com/cosmos/cosmos-sdk/pull/19592) `types.Config` and `types.DefaultConfig` have been moved to the keeper package in order to support the custom tallying function. From 20bd143b99744e8046ac1de0cfc592fced8c27bf Mon Sep 17 00:00:00 2001 From: son trinh Date: Tue, 26 Mar 2024 16:55:26 +0700 Subject: [PATCH 4/4] Update x/gov/CHANGELOG.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- x/gov/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/gov/CHANGELOG.md b/x/gov/CHANGELOG.md index 0b391959407a..2bdae3a1d860 100644 --- a/x/gov/CHANGELOG.md +++ b/x/gov/CHANGELOG.md @@ -62,7 +62,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking Changes * [#19850](https://github.com/cosmos/cosmos-sdk/pull/19850) Removes the use of Accounts String method: - * `NewDeposit`, `NewMsgDeposit`, `NewMsgVote`, `NewMsgVoteWeighted`, `NewVote`, `NewProposal`, `NewMsgSubmitProposal`, `NewMsgVote`, `NewMsgVoteWeighted` now take a string as an argument instead of an `sdk.AccAddress`. + * `NewDeposit`, `NewMsgDeposit`, `NewMsgVote`, `NewMsgVoteWeighted`, `NewVote`, `NewProposal`, `NewMsgSubmitProposal` now take a string as an argument instead of an `sdk.AccAddress`. * `Prompt` and `PromptMetadata` take an address.Codec as arguments. * `SetProposer` takes a String as an argument instead of a `fmt.Stringer`. * [#19481](https://github.com/cosmos/cosmos-sdk/pull/19481) Migrate module to use `appmodule.Environment`; `NewKeeper` now takes `appmodule.Environment` instead of a store service and no `baseapp.MessageRouter` anymore.