refactor(x/gov)!: remove Accounts.String() (#19850)

Co-authored-by: son trinh <trinhleson2000@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This commit is contained in:
Julián Toledano 2024-03-26 11:29:47 +01:00 committed by GitHub
parent a82615bdf8
commit 160c41842e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
37 changed files with 774 additions and 386 deletions

View File

@ -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)

View File

@ -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)

View File

@ -62,6 +62,10 @@ 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` 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.

View File

@ -12,6 +12,7 @@ import (
"github.com/manifoldco/promptui"
"github.com/spf13/cobra"
"cosmossdk.io/core/address"
authtypes "cosmossdk.io/x/auth/types"
"cosmossdk.io/x/gov/types"
@ -64,7 +65,7 @@ var suggestedProposalTypes = []proposalType{
// namePrefix is the name to be displayed as "Enter <namePrefix> <field>"
// 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
}

View File

@ -18,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 {
@ -50,7 +52,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 +83,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)
})

View File

@ -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)

View File

@ -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()),

View File

@ -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)
}

View File

@ -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

View File

@ -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 {

View File

@ -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",

View File

@ -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}

View File

@ -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
}

View File

@ -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
@ -248,7 +252,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
@ -256,7 +263,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

View File

@ -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

View File

@ -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)

View File

@ -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()

View File

@ -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()}

View File

@ -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
}

View File

@ -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)

View File

@ -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),

View File

@ -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)),
)

View File

@ -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())

View File

@ -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))

View File

@ -185,8 +185,11 @@ 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, 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 +248,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 +350,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 +424,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 +491,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 +535,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 +550,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,

View File

@ -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

View File

@ -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.

View File

@ -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,

View File

@ -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)
}

View File

@ -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, 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,
}

View File

@ -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())

View File

@ -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.

View File

@ -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.

View File

@ -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}
}

View File

@ -6,6 +6,7 @@ import (
"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"
)
@ -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)

View File

@ -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
}

View File

@ -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(),
)