diff --git a/x/upgrade/abci_test.go b/x/upgrade/abci_test.go index 62e91f22f2f4..6d098141f044 100644 --- a/x/upgrade/abci_test.go +++ b/x/upgrade/abci_test.go @@ -124,7 +124,10 @@ func setupTest(t *testing.T, height int64, skip map[int64]bool) *TestSuite { s.baseApp.SetParamStore(¶mStore{params: cmtproto.ConsensusParams{Version: &cmtproto.VersionParams{App: 1}}}) - s.keeper = keeper.NewKeeper(skip, storeService, s.encCfg.Codec, t.TempDir(), s.baseApp, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + authority, err := addresscodec.NewBech32Codec("cosmos").BytesToString(authtypes.NewModuleAddress(govtypes.ModuleName)) + require.NoError(t, err) + + s.keeper = keeper.NewKeeper(skip, storeService, s.encCfg.Codec, t.TempDir(), s.baseApp, authority) s.ctx = testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now(), Height: height}) @@ -460,12 +463,16 @@ func TestDowngradeVerification(t *testing.T) { ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now(), Height: 10}) skip := map[int64]bool{} - k := keeper.NewKeeper(skip, storeService, encCfg.Codec, t.TempDir(), nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + + authority, err := addresscodec.NewBech32Codec("cosmos").BytesToString(authtypes.NewModuleAddress(govtypes.ModuleName)) + require.NoError(t, err) + + k := keeper.NewKeeper(skip, storeService, encCfg.Codec, t.TempDir(), nil, authority) m := upgrade.NewAppModule(k, addresscodec.NewBech32Codec("cosmos")) // submit a plan. planName := "downgrade" - err := k.ScheduleUpgrade(ctx, types.Plan{Name: planName, Height: ctx.HeaderInfo().Height + 1}) + err = k.ScheduleUpgrade(ctx, types.Plan{Name: planName, Height: ctx.HeaderInfo().Height + 1}) require.NoError(t, err) ctx = ctx.WithHeaderInfo(header.Info{Height: ctx.HeaderInfo().Height + 1}) @@ -505,8 +512,11 @@ func TestDowngradeVerification(t *testing.T) { for name, tc := range testCases { ctx, _ := ctx.CacheContext() + authority, err := addresscodec.NewBech32Codec("cosmos").BytesToString(authtypes.NewModuleAddress(govtypes.ModuleName)) + require.NoError(t, err) + // downgrade. now keeper does not have the handler. - k := keeper.NewKeeper(skip, storeService, encCfg.Codec, t.TempDir(), nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + k := keeper.NewKeeper(skip, storeService, encCfg.Codec, t.TempDir(), nil, authority) m := upgrade.NewAppModule(k, addresscodec.NewBech32Codec("cosmos")) // assertions diff --git a/x/upgrade/client/cli/tx.go b/x/upgrade/client/cli/tx.go index ab74e5d3e2eb..466b3fac5811 100644 --- a/x/upgrade/client/cli/tx.go +++ b/x/upgrade/client/cli/tx.go @@ -101,7 +101,9 @@ func NewCmdSubmitUpgradeProposal(ac addresscodec.Codec) *cobra.Command { return fmt.Errorf("invalid authority address: %w", err) } } else { - authority = sdk.AccAddress(address.Module("gov")).String() + if authority, err = ac.BytesToString(address.Module("gov")); err != nil { + return fmt.Errorf("failed to convert authority address to string: %w", err) + } } if err := proposal.SetMsgs([]sdk.Msg{ @@ -159,7 +161,9 @@ func NewCmdSubmitCancelUpgradeProposal(ac addresscodec.Codec) *cobra.Command { return fmt.Errorf("invalid authority address: %w", err) } } else { - authority = sdk.AccAddress(address.Module("gov")).String() + if authority, err = ac.BytesToString(address.Module("gov")); err != nil { + return fmt.Errorf("failed to convert authority address to string: %w", err) + } } if err := proposal.SetMsgs([]sdk.Msg{ diff --git a/x/upgrade/keeper/grpc_query_test.go b/x/upgrade/keeper/grpc_query_test.go index aaec09092014..db554116fe6c 100644 --- a/x/upgrade/keeper/grpc_query_test.go +++ b/x/upgrade/keeper/grpc_query_test.go @@ -14,6 +14,7 @@ import ( "cosmossdk.io/x/upgrade/types" "github.com/cosmos/cosmos-sdk/baseapp" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil" sdk "github.com/cosmos/cosmos-sdk/types" @@ -26,10 +27,11 @@ import ( type UpgradeTestSuite struct { suite.Suite - upgradeKeeper *keeper.Keeper - ctx sdk.Context - queryClient types.QueryClient - encCfg moduletestutil.TestEncodingConfig + upgradeKeeper *keeper.Keeper + ctx sdk.Context + queryClient types.QueryClient + encCfg moduletestutil.TestEncodingConfig + encodedAuthority string } func (suite *UpgradeTestSuite) SetupTest() { @@ -40,9 +42,11 @@ func (suite *UpgradeTestSuite) SetupTest() { suite.ctx = testCtx.Ctx skipUpgradeHeights := make(map[int64]bool) - - suite.upgradeKeeper = keeper.NewKeeper(skipUpgradeHeights, storeService, suite.encCfg.Codec, suite.T().TempDir(), nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) - err := suite.upgradeKeeper.SetModuleVersionMap(suite.ctx, module.VersionMap{ + authority, err := addresscodec.NewBech32Codec("cosmos").BytesToString(authtypes.NewModuleAddress(govtypes.ModuleName)) + suite.Require().NoError(err) + suite.encodedAuthority = authority + suite.upgradeKeeper = keeper.NewKeeper(skipUpgradeHeights, storeService, suite.encCfg.Codec, suite.T().TempDir(), nil, authority) + err = suite.upgradeKeeper.SetModuleVersionMap(suite.ctx, module.VersionMap{ "bank": 0, }) suite.Require().NoError(err) @@ -230,7 +234,7 @@ func (suite *UpgradeTestSuite) TestModuleVersions() { func (suite *UpgradeTestSuite) TestAuthority() { res, err := suite.queryClient.Authority(context.Background(), &types.QueryAuthorityRequest{}) suite.Require().NoError(err) - suite.Require().Equal(authtypes.NewModuleAddress(govtypes.ModuleName).String(), res.Address) + suite.Require().Equal(suite.encodedAuthority, res.Address) } func TestUpgradeTestSuite(t *testing.T) { diff --git a/x/upgrade/keeper/keeper_test.go b/x/upgrade/keeper/keeper_test.go index ae3a14ab773c..dcde3e5bf207 100644 --- a/x/upgrade/keeper/keeper_test.go +++ b/x/upgrade/keeper/keeper_test.go @@ -17,6 +17,7 @@ import ( "cosmossdk.io/x/upgrade/types" "github.com/cosmos/cosmos-sdk/baseapp" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" @@ -30,14 +31,16 @@ import ( type KeeperTestSuite struct { suite.Suite - key *storetypes.KVStoreKey - baseApp *baseapp.BaseApp - upgradeKeeper *keeper.Keeper - homeDir string - ctx sdk.Context - msgSrvr types.MsgServer - addrs []sdk.AccAddress - encCfg moduletestutil.TestEncodingConfig + key *storetypes.KVStoreKey + baseApp *baseapp.BaseApp + upgradeKeeper *keeper.Keeper + homeDir string + ctx sdk.Context + msgSrvr types.MsgServer + addrs []sdk.AccAddress + encodedAddrs []string + encodedAuthority string + encCfg moduletestutil.TestEncodingConfig } func (s *KeeperTestSuite) SetupTest() { @@ -62,7 +65,11 @@ func (s *KeeperTestSuite) SetupTest() { skipUpgradeHeights := make(map[int64]bool) homeDir := filepath.Join(s.T().TempDir(), "x_upgrade_keeper_test") - s.upgradeKeeper = keeper.NewKeeper(skipUpgradeHeights, storeService, s.encCfg.Codec, homeDir, s.baseApp, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + ac := addresscodec.NewBech32Codec("cosmos") + authority, err := ac.BytesToString(authtypes.NewModuleAddress(govtypes.ModuleName)) + s.Require().NoError(err) + s.encodedAuthority = authority + s.upgradeKeeper = keeper.NewKeeper(skipUpgradeHeights, storeService, s.encCfg.Codec, homeDir, s.baseApp, authority) s.Require().Equal(testCtx.Ctx.Logger().With("module", "x/"+types.ModuleName), s.upgradeKeeper.Logger(testCtx.Ctx)) s.T().Log("home dir:", homeDir) @@ -70,6 +77,9 @@ func (s *KeeperTestSuite) SetupTest() { s.msgSrvr = keeper.NewMsgServerImpl(s.upgradeKeeper) s.addrs = simtestutil.CreateIncrementalAccounts(1) + encodedAddr, err := ac.BytesToString(s.addrs[0].Bytes()) + s.Require().NoError(err) + s.encodedAddrs = []string{encodedAddr} } func (s *KeeperTestSuite) TestReadUpgradeInfoFromDisk() { @@ -237,7 +247,7 @@ func (s *KeeperTestSuite) TestIsSkipHeight() { s.Require().False(ok) skip := map[int64]bool{skipOne: true} storeService := runtime.NewKVStoreService(s.key) - upgradeKeeper := keeper.NewKeeper(skip, storeService, s.encCfg.Codec, s.T().TempDir(), s.baseApp, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + upgradeKeeper := keeper.NewKeeper(skip, storeService, s.encCfg.Codec, s.T().TempDir(), s.baseApp, s.encodedAuthority) s.Require().True(upgradeKeeper.IsSkipHeight(9)) s.Require().False(upgradeKeeper.IsSkipHeight(10)) } diff --git a/x/upgrade/keeper/msg_server_test.go b/x/upgrade/keeper/msg_server_test.go index f3197be3c0d9..470eb55a3af2 100644 --- a/x/upgrade/keeper/msg_server_test.go +++ b/x/upgrade/keeper/msg_server_test.go @@ -2,14 +2,9 @@ package keeper_test import ( "cosmossdk.io/x/upgrade/types" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/address" ) func (s *KeeperTestSuite) TestSoftwareUpgrade() { - govAccAddr := sdk.AccAddress(address.Module("gov")).String() - testCases := []struct { name string req *types.MsgSoftwareUpgrade @@ -31,7 +26,7 @@ func (s *KeeperTestSuite) TestSoftwareUpgrade() { { "unauthorized authority address", &types.MsgSoftwareUpgrade{ - Authority: s.addrs[0].String(), + Authority: s.encodedAddrs[0], Plan: types.Plan{ Name: "all-good", Info: "some text here", @@ -44,7 +39,7 @@ func (s *KeeperTestSuite) TestSoftwareUpgrade() { { "invalid plan", &types.MsgSoftwareUpgrade{ - Authority: govAccAddr, + Authority: s.encodedAuthority, Plan: types.Plan{ Height: 123450000, }, @@ -55,7 +50,7 @@ func (s *KeeperTestSuite) TestSoftwareUpgrade() { { "successful upgrade scheduled", &types.MsgSoftwareUpgrade{ - Authority: govAccAddr, + Authority: s.encodedAuthority, Plan: types.Plan{ Name: "all-good", Info: "some text here", @@ -83,8 +78,6 @@ func (s *KeeperTestSuite) TestSoftwareUpgrade() { } func (s *KeeperTestSuite) TestCancelUpgrade() { - govAccAddr := "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn" // TODO - // govAccAddr := s.govKeeper.GetGovernanceAccount(s.ctx).GetAddress().String() err := s.upgradeKeeper.ScheduleUpgrade(s.ctx, types.Plan{ Name: "some name", Info: "some info", @@ -109,7 +102,7 @@ func (s *KeeperTestSuite) TestCancelUpgrade() { { "unauthorized authority address", &types.MsgCancelUpgrade{ - Authority: s.addrs[0].String(), + Authority: s.encodedAddrs[0], }, true, "expected authority account as only signer for proposal message", @@ -117,7 +110,7 @@ func (s *KeeperTestSuite) TestCancelUpgrade() { { "upgrade canceled successfully", &types.MsgCancelUpgrade{ - Authority: govAccAddr, + Authority: s.encodedAuthority, }, false, "", diff --git a/x/upgrade/module.go b/x/upgrade/module.go index d96566f3d242..8bb8b0230f82 100644 --- a/x/upgrade/module.go +++ b/x/upgrade/module.go @@ -214,8 +214,13 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) } + auth, err := in.AddressCodec.BytesToString(authority) + if err != nil { + panic(err) + } + // set the governance module account as the authority for conducting upgrades - k := keeper.NewKeeper(skipUpgradeHeights, in.StoreService, in.Cdc, homePath, in.AppVersionModifier, authority.String()) + k := keeper.NewKeeper(skipUpgradeHeights, in.StoreService, in.Cdc, homePath, in.AppVersionModifier, auth) m := NewAppModule(k, in.AddressCodec) return ModuleOutputs{UpgradeKeeper: k, Module: m}