From dcd6a3ef3393b38d634998730cc332573229431b Mon Sep 17 00:00:00 2001 From: Tyler <48813565+technicallyty@users.noreply.github.com> Date: Sat, 25 Jan 2025 09:27:41 -0800 Subject: [PATCH] chore: migrate to core modules (#7866) * core modules * fmt * fix broken tests * lint fix * actually, we can do wasm for now. this will work fine. * appmodulev2 -> appmodule --------- Co-authored-by: Gjermund Garaba --- modules/apps/27-interchain-accounts/module.go | 37 ++++++++------- modules/apps/29-fee/keeper/migrations.go | 6 ++- modules/apps/29-fee/module.go | 25 ++++++---- modules/apps/transfer/keeper/migrations.go | 12 ++--- modules/apps/transfer/module.go | 32 ++++++++----- modules/core/02-client/keeper/migrations.go | 12 +++-- .../02-client/migrations/v7/genesis_test.go | 4 +- modules/core/02-client/migrations/v7/store.go | 27 ++++++----- .../02-client/migrations/v7/store_test.go | 6 ++- .../core/03-connection/keeper/migrations.go | 8 ++-- modules/core/04-channel/keeper/migrations.go | 4 +- modules/core/migrations/v7/genesis_test.go | 4 +- modules/core/module.go | 47 ++++++++++--------- .../08-wasm/keeper/migrations.go | 5 +- modules/light-clients/08-wasm/module.go | 17 ++++--- 15 files changed, 144 insertions(+), 102 deletions(-) diff --git a/modules/apps/27-interchain-accounts/module.go b/modules/apps/27-interchain-accounts/module.go index f99a6953d97..1e9d4ceb522 100644 --- a/modules/apps/27-interchain-accounts/module.go +++ b/modules/apps/27-interchain-accounts/module.go @@ -7,6 +7,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -14,7 +15,6 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -34,10 +34,10 @@ var ( _ appmodule.AppModule = (*AppModule)(nil) _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) + _ appmodule.HasMigrations = (*AppModule)(nil) _ module.AppModule = (*AppModule)(nil) _ module.HasGenesis = (*AppModule)(nil) - _ module.HasServices = (*AppModule)(nil) _ module.HasGRPCGateway = (*AppModule)(nil) // Sims @@ -123,28 +123,33 @@ func (AppModule) GetQueryCmd() *cobra.Command { return cli.GetQueryCmd() } -// RegisterServices registers module services -func (am AppModule) RegisterServices(cfg module.Configurator) { - if am.controllerKeeper != nil { - controllertypes.RegisterMsgServer(cfg.MsgServer(), controllerkeeper.NewMsgServerImpl(am.controllerKeeper)) - controllertypes.RegisterQueryServer(cfg.QueryServer(), am.controllerKeeper) - } - - if am.hostKeeper != nil { - hosttypes.RegisterMsgServer(cfg.MsgServer(), hostkeeper.NewMsgServerImpl(am.hostKeeper)) - hosttypes.RegisterQueryServer(cfg.QueryServer(), am.hostKeeper) - } - +func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { controllerMigrator := controllerkeeper.NewMigrator(am.controllerKeeper) hostMigrator := hostkeeper.NewMigrator(am.hostKeeper) - if err := cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + if err := registrar.Register(types.ModuleName, 2, func(ctx context.Context) error { if err := hostMigrator.MigrateParams(ctx); err != nil { return err } return controllerMigrator.MigrateParams(ctx) }); err != nil { - panic(fmt.Errorf("failed to migrate interchainaccounts app from version 2 to 3 (self-managed params migration): %v", err)) + return fmt.Errorf("failed to migrate interchainaccounts app from version 2 to 3 (self-managed params migration): %w", err) + } + return nil +} + +// RegisterServices registers module services +func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { + if am.controllerKeeper != nil { + controllertypes.RegisterMsgServer(cfg, controllerkeeper.NewMsgServerImpl(am.controllerKeeper)) + controllertypes.RegisterQueryServer(cfg, am.controllerKeeper) } + + if am.hostKeeper != nil { + hosttypes.RegisterMsgServer(cfg, hostkeeper.NewMsgServerImpl(am.hostKeeper)) + hosttypes.RegisterQueryServer(cfg, am.hostKeeper) + } + + return nil } // InitGenesis performs genesis initialization for the interchain accounts module. diff --git a/modules/apps/29-fee/keeper/migrations.go b/modules/apps/29-fee/keeper/migrations.go index 6bb05548796..0b9477b569d 100644 --- a/modules/apps/29-fee/keeper/migrations.go +++ b/modules/apps/29-fee/keeper/migrations.go @@ -1,6 +1,8 @@ package keeper import ( + "context" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/runtime" @@ -24,10 +26,10 @@ func NewMigrator(keeper Keeper) Migrator { // Migrate1to2 migrates ibc-fee module from ConsensusVersion 1 to 2 // by refunding leftover fees to the refund address. -func (m Migrator) Migrate1to2(ctx sdk.Context) error { +func (m Migrator) Migrate1to2(ctx context.Context) error { store := runtime.KVStoreAdapter(m.keeper.KVStoreService.OpenKVStore(ctx)) iterator := storetypes.KVStorePrefixIterator(store, []byte(types.FeesInEscrowPrefix)) - defer coretypes.LogDeferred(ctx.Logger(), func() error { return iterator.Close() }) + defer coretypes.LogDeferred(m.keeper.Logger, func() error { return iterator.Close() }) for ; iterator.Valid(); iterator.Next() { feesInEscrow := m.keeper.MustUnmarshalFees(iterator.Value()) diff --git a/modules/apps/29-fee/module.go b/modules/apps/29-fee/module.go index fbef3e57062..14fad4319e5 100644 --- a/modules/apps/29-fee/module.go +++ b/modules/apps/29-fee/module.go @@ -7,6 +7,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -26,10 +27,10 @@ var ( _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasAminoCodec = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) + _ appmodule.HasMigrations = (*AppModule)(nil) - _ module.AppModule = (*AppModule)(nil) - _ module.HasGenesis = (*AppModule)(nil) - _ module.HasServices = (*AppModule)(nil) + _ module.AppModule = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) _ autocli.HasCustomTxCommand = (*AppModule)(nil) _ autocli.HasCustomQueryCommand = (*AppModule)(nil) @@ -104,15 +105,19 @@ func (AppModule) GetQueryCmd() *cobra.Command { return cli.GetQueryCmd() } -// RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterMsgServer(cfg.MsgServer(), am.keeper) - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - +func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { m := keeper.NewMigrator(am.keeper) - if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { - panic(fmt.Errorf("failed to migrate ibc-fee module from version 1 to 2 (refund leftover fees): %v", err)) + if err := registrar.Register(types.ModuleName, 1, m.Migrate1to2); err != nil { + return fmt.Errorf("failed to migrate ibc-fee module from version 1 to 2 (refund leftover fees): %v", err) } + return nil +} + +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { + types.RegisterMsgServer(cfg, am.keeper) + types.RegisterQueryServer(cfg, am.keeper) + return nil } // InitGenesis performs genesis initialization for the ibc-29-fee module. It returns diff --git a/modules/apps/transfer/keeper/migrations.go b/modules/apps/transfer/keeper/migrations.go index d276aef8091..9d793f33635 100644 --- a/modules/apps/transfer/keeper/migrations.go +++ b/modules/apps/transfer/keeper/migrations.go @@ -30,9 +30,9 @@ func NewMigrator(keeper Keeper) Migrator { } // MigrateParams migrates the transfer module's parameters from the x/params to self store. -func (m Migrator) MigrateParams(ctx sdk.Context) error { +func (m Migrator) MigrateParams(ctx context.Context) error { var params types.Params - m.keeper.legacySubspace.GetParamSet(ctx, ¶ms) + m.keeper.legacySubspace.GetParamSet(sdk.UnwrapSDKContext(ctx), ¶ms) m.keeper.SetParams(ctx, params) m.keeper.Logger.Info("successfully migrated transfer app self-manage params") @@ -40,7 +40,7 @@ func (m Migrator) MigrateParams(ctx sdk.Context) error { } // MigrateDenomMetadata sets token metadata for all the IBC denom traces -func (m Migrator) MigrateDenomMetadata(ctx sdk.Context) error { +func (m Migrator) MigrateDenomMetadata(ctx context.Context) error { m.keeper.iterateDenomTraces(ctx, func(dt internaltypes.DenomTrace) (stop bool) { // check if the metadata for the given denom trace does not already exist @@ -55,7 +55,7 @@ func (m Migrator) MigrateDenomMetadata(ctx sdk.Context) error { } // MigrateTotalEscrowForDenom migrates the total amount of source chain tokens in escrow. -func (m Migrator) MigrateTotalEscrowForDenom(ctx sdk.Context) error { +func (m Migrator) MigrateTotalEscrowForDenom(ctx context.Context) error { var totalEscrowed sdk.Coins portID := m.keeper.GetPort(ctx) @@ -76,7 +76,7 @@ func (m Migrator) MigrateTotalEscrowForDenom(ctx sdk.Context) error { } // MigrateDenomTraceToDenom migrates storage from using DenomTrace to Denom. -func (m Migrator) MigrateDenomTraceToDenom(ctx sdk.Context) error { +func (m Migrator) MigrateDenomTraceToDenom(ctx context.Context) error { var ( denoms []types.Denom denomTraces []internaltypes.DenomTrace @@ -147,7 +147,7 @@ func (k Keeper) iterateDenomTraces(ctx context.Context, cb func(denomTrace inter } // setDenomMetadataWithDenomTrace sets an IBC token's denomination metadata -func (k Keeper) setDenomMetadataWithDenomTrace(ctx sdk.Context, denomTrace internaltypes.DenomTrace) { +func (k Keeper) setDenomMetadataWithDenomTrace(ctx context.Context, denomTrace internaltypes.DenomTrace) { metadata := banktypes.Metadata{ Description: fmt.Sprintf("IBC token from %s", denomTrace.GetFullDenomPath()), DenomUnits: []*banktypes.DenomUnit{ diff --git a/modules/apps/transfer/module.go b/modules/apps/transfer/module.go index 1d054933f0e..31245c739e0 100644 --- a/modules/apps/transfer/module.go +++ b/modules/apps/transfer/module.go @@ -7,6 +7,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -28,11 +29,11 @@ var ( _ appmodule.AppModule = (*AppModule)(nil) _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) + _ appmodule.HasMigrations = (*AppModule)(nil) _ module.AppModule = (*AppModule)(nil) _ module.HasGRPCGateway = (*AppModule)(nil) _ module.HasGenesis = (*AppModule)(nil) - _ module.HasServices = (*AppModule)(nil) // Sims _ module.AppModuleSimulation = (*AppModule)(nil) @@ -118,27 +119,32 @@ func (AppModule) GetQueryCmd() *cobra.Command { } // RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterMsgServer(cfg.MsgServer(), am.keeper) - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterQueryV2Server(cfg.QueryServer(), am.keeper) +func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { + types.RegisterMsgServer(cfg, am.keeper) + types.RegisterQueryServer(cfg, am.keeper) + types.RegisterQueryV2Server(cfg, am.keeper) + return nil +} +func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { m := keeper.NewMigrator(am.keeper) - if err := cfg.RegisterMigration(types.ModuleName, 2, m.MigrateTotalEscrowForDenom); err != nil { - panic(fmt.Errorf("failed to migrate transfer app from version 2 to 3 (total escrow entry migration): %v", err)) + if err := registrar.Register(types.ModuleName, 2, m.MigrateTotalEscrowForDenom); err != nil { + return fmt.Errorf("failed to migrate transfer app from version 2 to 3 (total escrow entry migration): %w", err) } - if err := cfg.RegisterMigration(types.ModuleName, 3, m.MigrateParams); err != nil { - panic(fmt.Errorf("failed to migrate transfer app version 3 to 4 (self-managed params migration): %v", err)) + if err := registrar.Register(types.ModuleName, 3, m.MigrateParams); err != nil { + return fmt.Errorf("failed to migrate transfer app version 3 to 4 (self-managed params migration): %w", err) } - if err := cfg.RegisterMigration(types.ModuleName, 4, m.MigrateDenomMetadata); err != nil { - panic(fmt.Errorf("failed to migrate transfer app from version 4 to 5 (set denom metadata migration): %v", err)) + if err := registrar.Register(types.ModuleName, 4, m.MigrateDenomMetadata); err != nil { + return fmt.Errorf("failed to migrate transfer app from version 4 to 5 (set denom metadata migration): %w", err) } - if err := cfg.RegisterMigration(types.ModuleName, 5, m.MigrateDenomTraceToDenom); err != nil { - panic(fmt.Errorf("failed to migrate transfer app from version 5 to 6 (migrate DenomTrace to Denom): %v", err)) + if err := registrar.Register(types.ModuleName, 5, m.MigrateDenomTraceToDenom); err != nil { + return fmt.Errorf("failed to migrate transfer app from version 5 to 6 (migrate DenomTrace to Denom): %w", err) } + + return nil } // InitGenesis performs genesis initialization for the ibc-transfer module. It returns diff --git a/modules/core/02-client/keeper/migrations.go b/modules/core/02-client/keeper/migrations.go index a66b783f522..5fae9dc8fdd 100644 --- a/modules/core/02-client/keeper/migrations.go +++ b/modules/core/02-client/keeper/migrations.go @@ -1,6 +1,8 @@ package keeper import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/v9/modules/core/02-client/migrations/v7" @@ -25,16 +27,16 @@ func NewMigrator(keeper *Keeper) Migrator { // - prunes solo machine consensus states // - removes the localhost client // - asserts that existing tendermint clients are properly registered on the chain codec -func (m Migrator) Migrate2to3(ctx sdk.Context) error { - return v7.MigrateStore(ctx, m.keeper.KVStoreService, m.keeper.cdc, m.keeper) +func (m Migrator) Migrate2to3(ctx context.Context) error { + return v7.MigrateStore(ctx, m.keeper.Logger, m.keeper.KVStoreService, m.keeper.cdc, m.keeper) } // MigrateParams migrates from consensus version 4 to 5. // This migration takes the parameters that are currently stored and managed by x/params // and stores them directly in the ibc module's state. -func (m Migrator) MigrateParams(ctx sdk.Context) error { +func (m Migrator) MigrateParams(ctx context.Context) error { var params types.Params - m.keeper.legacySubspace.GetParamSet(ctx, ¶ms) + m.keeper.legacySubspace.GetParamSet(sdk.UnwrapSDKContext(ctx), ¶ms) if err := params.Validate(); err != nil { return err } @@ -46,7 +48,7 @@ func (m Migrator) MigrateParams(ctx sdk.Context) error { // MigrateToStatelessLocalhost deletes the localhost client state. The localhost // implementation is now stateless. -func (m Migrator) MigrateToStatelessLocalhost(ctx sdk.Context) error { +func (m Migrator) MigrateToStatelessLocalhost(ctx context.Context) error { clientStore := m.keeper.ClientStore(ctx, exported.LocalhostClientID) // delete the client state diff --git a/modules/core/02-client/migrations/v7/genesis_test.go b/modules/core/02-client/migrations/v7/genesis_test.go index c674e7d9680..b0207d5cdf3 100644 --- a/modules/core/02-client/migrations/v7/genesis_test.go +++ b/modules/core/02-client/migrations/v7/genesis_test.go @@ -3,6 +3,8 @@ package v7_test import ( "encoding/json" + "cosmossdk.io/log" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" @@ -107,7 +109,7 @@ func (suite *MigrationsV7TestSuite) TestMigrateGenesisSolomachine() { // migrate store get expected genesis // store migration and genesis migration should produce identical results // NOTE: tendermint clients are not pruned in genesis so the test should not have expired tendermint clients - err = v7.MigrateStore(suite.chainA.GetContext(), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) + err = v7.MigrateStore(suite.chainA.GetContext(), log.NewTestLogger(suite.T()), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) suite.Require().NoError(err) expectedClientGenState, err := ibcclient.ExportGenesis(suite.chainA.GetContext(), suite.chainA.App.GetIBCKeeper().ClientKeeper) suite.Require().NoError(err) diff --git a/modules/core/02-client/migrations/v7/store.go b/modules/core/02-client/migrations/v7/store.go index bf9e44656b9..4ab12059fa5 100644 --- a/modules/core/02-client/migrations/v7/store.go +++ b/modules/core/02-client/migrations/v7/store.go @@ -1,8 +1,10 @@ package v7 import ( + "context" "strings" + "cosmossdk.io/core/log" corestore "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" storetypes "cosmossdk.io/store/types" @@ -10,7 +12,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" - sdk "github.com/cosmos/cosmos-sdk/types" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" host "github.com/cosmos/ibc-go/v9/modules/core/24-host" @@ -32,24 +33,24 @@ const Localhost string = "09-localhost" // - Pruning all solo machine consensus states // - Removing the localhost client // - Asserting existing tendermint clients are properly registered on the chain codec -func MigrateStore(ctx sdk.Context, storeService corestore.KVStoreService, cdc codec.BinaryCodec, clientKeeper ClientKeeper) error { +func MigrateStore(ctx context.Context, logger log.Logger, storeService corestore.KVStoreService, cdc codec.BinaryCodec, clientKeeper ClientKeeper) error { store := runtime.KVStoreAdapter(storeService.OpenKVStore(ctx)) - if err := handleSolomachineMigration(ctx, store, cdc, clientKeeper); err != nil { + if err := handleSolomachineMigration(ctx, logger, store, cdc, clientKeeper); err != nil { return err } - if err := handleTendermintMigration(ctx, store, clientKeeper); err != nil { + if err := handleTendermintMigration(ctx, logger, store, clientKeeper); err != nil { return err } - return handleLocalhostMigration(ctx, store, clientKeeper) + return handleLocalhostMigration(ctx, logger, store, clientKeeper) } // handleSolomachineMigration iterates over the solo machine clients and migrates client state from // protobuf definition v2 to v3. All consensus states stored outside of the client state are pruned. -func handleSolomachineMigration(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec, clientKeeper ClientKeeper) error { - clients, err := collectClients(ctx, store, exported.Solomachine) +func handleSolomachineMigration(ctx context.Context, logger log.Logger, store storetypes.KVStore, cdc codec.BinaryCodec, clientKeeper ClientKeeper) error { + clients, err := collectClients(logger, store, exported.Solomachine) if err != nil { return err } @@ -85,8 +86,8 @@ func handleSolomachineMigration(ctx sdk.Context, store storetypes.KVStore, cdc c // handleTendermintMigration asserts that the tendermint client in state can be decoded properly. // This ensures the upgrading chain properly registered the tendermint client types on the chain codec. -func handleTendermintMigration(ctx sdk.Context, store storetypes.KVStore, clientKeeper ClientKeeper) error { - clients, err := collectClients(ctx, store, exported.Tendermint) +func handleTendermintMigration(ctx context.Context, logger log.Logger, store storetypes.KVStore, clientKeeper ClientKeeper) error { + clients, err := collectClients(logger, store, exported.Tendermint) if err != nil { return err } @@ -117,8 +118,8 @@ func handleTendermintMigration(ctx sdk.Context, store storetypes.KVStore, client } // handleLocalhostMigration removes all client and consensus states associated with the localhost client type. -func handleLocalhostMigration(ctx sdk.Context, store storetypes.KVStore, clientKeeper ClientKeeper) error { - clients, err := collectClients(ctx, store, Localhost) +func handleLocalhostMigration(ctx context.Context, logger log.Logger, store storetypes.KVStore, clientKeeper ClientKeeper) error { + clients, err := collectClients(logger, store, Localhost) if err != nil { return err } @@ -140,11 +141,11 @@ func handleLocalhostMigration(ctx sdk.Context, store storetypes.KVStore, clientK // avoid state corruption as modifying state during iteration is unsafe. A special case // for tendermint clients is included as only one tendermint clientID is required for // v7 migrations. -func collectClients(ctx sdk.Context, store storetypes.KVStore, clientType string) (clients []string, err error) { +func collectClients(logger log.Logger, store storetypes.KVStore, clientType string) (clients []string, err error) { clientPrefix := host.PrefixedClientStoreKey([]byte(clientType)) iterator := storetypes.KVStorePrefixIterator(store, clientPrefix) - defer coretypes.LogDeferred(ctx.Logger(), func() error { return iterator.Close() }) + defer coretypes.LogDeferred(logger, func() error { return iterator.Close() }) for ; iterator.Valid(); iterator.Next() { path := string(iterator.Key()) if !strings.Contains(path, host.KeyClientState) { diff --git a/modules/core/02-client/migrations/v7/store_test.go b/modules/core/02-client/migrations/v7/store_test.go index f9e104e823f..223ad91987a 100644 --- a/modules/core/02-client/migrations/v7/store_test.go +++ b/modules/core/02-client/migrations/v7/store_test.go @@ -6,6 +6,8 @@ import ( testifysuite "github.com/stretchr/testify/suite" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/runtime" @@ -62,7 +64,7 @@ func (suite *MigrationsV7TestSuite) TestMigrateStore() { suite.createSolomachineClients(solomachines) suite.createLocalhostClients() - err := v7.MigrateStore(suite.chainA.GetContext(), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) + err := v7.MigrateStore(suite.chainA.GetContext(), log.NewTestLogger(suite.T()), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) suite.Require().NoError(err) suite.assertSolomachineClients(solomachines) @@ -78,7 +80,7 @@ func (suite *MigrationsV7TestSuite) TestMigrateStoreNoTendermintClients() { suite.createSolomachineClients(solomachines) suite.createLocalhostClients() - err := v7.MigrateStore(suite.chainA.GetContext(), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) + err := v7.MigrateStore(suite.chainA.GetContext(), log.NewTestLogger(suite.T()), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) suite.Require().NoError(err) suite.assertSolomachineClients(solomachines) diff --git a/modules/core/03-connection/keeper/migrations.go b/modules/core/03-connection/keeper/migrations.go index 83503ebf971..5220d00669f 100644 --- a/modules/core/03-connection/keeper/migrations.go +++ b/modules/core/03-connection/keeper/migrations.go @@ -1,6 +1,8 @@ package keeper import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" connectionv7 "github.com/cosmos/ibc-go/v9/modules/core/03-connection/migrations/v7" @@ -19,7 +21,7 @@ func NewMigrator(keeper *Keeper) Migrator { // Migrate3to4 migrates from version 3 to 4. // This migration writes the sentinel localhost connection end to state. -func (m Migrator) Migrate3to4(ctx sdk.Context) error { +func (m Migrator) Migrate3to4(ctx context.Context) error { connectionv7.MigrateLocalhostConnection(ctx, m.keeper) return nil } @@ -27,9 +29,9 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error { // MigrateParams migrates from consensus version 4 to 5. // This migration takes the parameters that are currently stored and managed by x/params // and stores them directly in the ibc module's state. -func (m Migrator) MigrateParams(ctx sdk.Context) error { +func (m Migrator) MigrateParams(ctx context.Context) error { var params types.Params - m.keeper.legacySubspace.GetParamSet(ctx, ¶ms) + m.keeper.legacySubspace.GetParamSet(sdk.UnwrapSDKContext(ctx), ¶ms) if err := params.Validate(); err != nil { return err } diff --git a/modules/core/04-channel/keeper/migrations.go b/modules/core/04-channel/keeper/migrations.go index c83cf865022..23d9cc1f231 100644 --- a/modules/core/04-channel/keeper/migrations.go +++ b/modules/core/04-channel/keeper/migrations.go @@ -1,7 +1,7 @@ package keeper import ( - sdk "github.com/cosmos/cosmos-sdk/types" + "context" channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" ) @@ -17,7 +17,7 @@ func NewMigrator(keeper *Keeper) Migrator { } // MigrateParams migrates params to the default channel params. -func (m Migrator) MigrateParams(ctx sdk.Context) error { +func (m Migrator) MigrateParams(ctx context.Context) error { params := channeltypes.DefaultParams() m.keeper.SetParams(ctx, params) m.keeper.Logger.Info("successfully migrated ibc channel params") diff --git a/modules/core/migrations/v7/genesis_test.go b/modules/core/migrations/v7/genesis_test.go index fd5d6add051..860cd84a1a7 100644 --- a/modules/core/migrations/v7/genesis_test.go +++ b/modules/core/migrations/v7/genesis_test.go @@ -5,6 +5,8 @@ import ( testifysuite "github.com/stretchr/testify/suite" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" @@ -136,7 +138,7 @@ func (suite *MigrationsV7TestSuite) TestMigrateGenesisSolomachine() { // migrate store get expected genesis // store migration and genesis migration should produce identical results // NOTE: tendermint clients are not pruned in genesis so the test should not have expired tendermint clients - err = clientv7.MigrateStore(suite.chainA.GetContext(), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) + err = clientv7.MigrateStore(suite.chainA.GetContext(), log.NewTestLogger(suite.T()), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) suite.Require().NoError(err) expectedClientGenState, err := ibcclient.ExportGenesis(suite.chainA.GetContext(), suite.chainA.App.GetIBCKeeper().ClientKeeper) suite.Require().NoError(err) diff --git a/modules/core/module.go b/modules/core/module.go index 3d39cdd72d0..8e7d401a752 100644 --- a/modules/core/module.go +++ b/modules/core/module.go @@ -7,6 +7,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -14,7 +15,6 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -37,11 +37,11 @@ var ( _ appmodule.HasBeginBlocker = (*AppModule)(nil) _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) + _ appmodule.HasMigrations = (*AppModule)(nil) _ module.AppModule = (*AppModule)(nil) _ module.HasGRPCGateway = (*AppModule)(nil) _ module.HasGenesis = (*AppModule)(nil) - _ module.HasServices = (*AppModule)(nil) _ module.HasLegacyProposalMsgs = (*AppModule)(nil) _ module.AppModuleSimulation = (*AppModule)(nil) @@ -122,43 +122,48 @@ func (AppModule) RegisterInterfaces(registry coreregistry.InterfaceRegistrar) { types.RegisterInterfaces(registry) } -// RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg module.Configurator) { - clienttypes.RegisterMsgServer(cfg.MsgServer(), am.keeper) - connectiontypes.RegisterMsgServer(cfg.MsgServer(), am.keeper) - channeltypes.RegisterMsgServer(cfg.MsgServer(), am.keeper) - clienttypes.RegisterQueryServer(cfg.QueryServer(), clientkeeper.NewQueryServer(am.keeper.ClientKeeper)) - connectiontypes.RegisterQueryServer(cfg.QueryServer(), connectionkeeper.NewQueryServer(am.keeper.ConnectionKeeper)) - channeltypes.RegisterQueryServer(cfg.QueryServer(), channelkeeper.NewQueryServer(am.keeper.ChannelKeeper)) - +func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { clientMigrator := clientkeeper.NewMigrator(am.keeper.ClientKeeper) - if err := cfg.RegisterMigration(exported.ModuleName, 2, clientMigrator.Migrate2to3); err != nil { - panic(err) + if err := registrar.Register(exported.ModuleName, 2, clientMigrator.Migrate2to3); err != nil { + return err } connectionMigrator := connectionkeeper.NewMigrator(am.keeper.ConnectionKeeper) - if err := cfg.RegisterMigration(exported.ModuleName, 3, connectionMigrator.Migrate3to4); err != nil { - panic(err) + if err := registrar.Register(exported.ModuleName, 3, connectionMigrator.Migrate3to4); err != nil { + return err } - if err := cfg.RegisterMigration(exported.ModuleName, 4, func(ctx sdk.Context) error { + if err := registrar.Register(exported.ModuleName, 4, func(ctx context.Context) error { if err := clientMigrator.MigrateParams(ctx); err != nil { return err } return connectionMigrator.MigrateParams(ctx) }); err != nil { - panic(err) + return err } channelMigrator := channelkeeper.NewMigrator(am.keeper.ChannelKeeper) - if err := cfg.RegisterMigration(exported.ModuleName, 5, channelMigrator.MigrateParams); err != nil { - panic(err) + if err := registrar.Register(exported.ModuleName, 5, channelMigrator.MigrateParams); err != nil { + return err } - if err := cfg.RegisterMigration(exported.ModuleName, 6, clientMigrator.MigrateToStatelessLocalhost); err != nil { - panic(err) + if err := registrar.Register(exported.ModuleName, 6, clientMigrator.MigrateToStatelessLocalhost); err != nil { + return err } + + return nil +} + +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { + clienttypes.RegisterMsgServer(cfg, am.keeper) + connectiontypes.RegisterMsgServer(cfg, am.keeper) + channeltypes.RegisterMsgServer(cfg, am.keeper) + clienttypes.RegisterQueryServer(cfg, clientkeeper.NewQueryServer(am.keeper.ClientKeeper)) + connectiontypes.RegisterQueryServer(cfg, connectionkeeper.NewQueryServer(am.keeper.ConnectionKeeper)) + channeltypes.RegisterQueryServer(cfg, channelkeeper.NewQueryServer(am.keeper.ChannelKeeper)) + return nil } // InitGenesis performs genesis initialization for the ibc module. It returns diff --git a/modules/light-clients/08-wasm/keeper/migrations.go b/modules/light-clients/08-wasm/keeper/migrations.go index bf0a1488494..45005d625df 100644 --- a/modules/light-clients/08-wasm/keeper/migrations.go +++ b/modules/light-clients/08-wasm/keeper/migrations.go @@ -1,6 +1,8 @@ package keeper import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" @@ -24,7 +26,8 @@ func NewMigrator(keeper Keeper) Migrator { // It grabs the checksums stored previously under the old key and stores // them in the global KeySet collection. It then deletes the old key and // the checksums stored under it. -func (m Migrator) MigrateChecksums(ctx sdk.Context) error { +func (m Migrator) MigrateChecksums(goCtx context.Context) error { + ctx := sdk.UnwrapSDKContext(goCtx) checksums, err := m.getStoredChecksums(ctx) if err != nil { return err diff --git a/modules/light-clients/08-wasm/module.go b/modules/light-clients/08-wasm/module.go index bda17444165..6123b48d9cc 100644 --- a/modules/light-clients/08-wasm/module.go +++ b/modules/light-clients/08-wasm/module.go @@ -7,6 +7,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -25,11 +26,11 @@ var ( _ appmodule.AppModule = (*AppModule)(nil) _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) + _ appmodule.HasMigrations = (*AppModule)(nil) _ module.AppModule = (*AppModule)(nil) _ module.HasGRPCGateway = (*AppModule)(nil) _ module.HasGenesis = (*AppModule)(nil) - _ module.HasServices = (*AppModule)(nil) _ autocli.HasCustomTxCommand = (*AppModule)(nil) _ autocli.HasCustomQueryCommand = (*AppModule)(nil) @@ -102,14 +103,18 @@ func (AppModule) GetQueryCmd() *cobra.Command { } // RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterMsgServer(cfg.MsgServer(), am.keeper) - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { + types.RegisterMsgServer(cfg, am.keeper) + types.RegisterQueryServer(cfg, am.keeper) + return nil +} +func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { wasmMigrator := keeper.NewMigrator(am.keeper) - if err := cfg.RegisterMigration(types.ModuleName, 1, wasmMigrator.MigrateChecksums); err != nil { - panic(fmt.Errorf("failed to migrate 08-wasm module from version 1 to 2 (checksums migration to collections): %v", err)) + if err := registrar.Register(types.ModuleName, 1, wasmMigrator.MigrateChecksums); err != nil { + return err } + return nil } // ConsensusVersion implements AppModule/ConsensusVersion.