package app import ( "fmt" upgradetypes "cosmossdk.io/x/upgrade/types" "github.com/cosmos/cosmos-sdk/baseapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/CosmWasm/wasmd/app/upgrades" "github.com/CosmWasm/wasmd/app/upgrades/noop" v050 "github.com/CosmWasm/wasmd/app/upgrades/v050" v2 "github.com/CosmWasm/wasmd/x/wasm/migrations/v2" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" ) // Upgrades list of chain upgrades var Upgrades = []upgrades.Upgrade{v050.Upgrade} // RegisterUpgradeHandlers registers the chain upgrade handlers func (app *WasmApp) RegisterUpgradeHandlers() { setupLegacyKeyTables(&app.ParamsKeeper) if len(Upgrades) == 0 { // always have a unique upgrade registered for the current version to test in system tests Upgrades = append(Upgrades, noop.NewUpgrade(app.Version())) } keepers := upgrades.AppKeepers{ AccountKeeper: &app.AccountKeeper, ParamsKeeper: &app.ParamsKeeper, ConsensusParamsKeeper: &app.ConsensusParamsKeeper, IBCKeeper: app.IBCKeeper, Codec: app.appCodec, GetStoreKey: app.GetKey, } app.GetStoreKeys() // register all upgrade handlers for _, upgrade := range Upgrades { app.UpgradeKeeper.SetUpgradeHandler( upgrade.UpgradeName, upgrade.CreateUpgradeHandler( app.ModuleManager, app.configurator, &keepers, ), ) } upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() if err != nil { panic(fmt.Sprintf("failed to read upgrade info from disk %s", err)) } if app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { return } // register store loader for current upgrade for _, upgrade := range Upgrades { if upgradeInfo.Name == upgrade.UpgradeName { app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &upgrade.StoreUpgrades)) break } } } func setupLegacyKeyTables(k *paramskeeper.Keeper) { for _, subspace := range k.GetSubspaces() { var keyTable paramstypes.KeyTable switch subspace.Name() { case authtypes.ModuleName: keyTable = authtypes.ParamKeyTable() //nolint:staticcheck case banktypes.ModuleName: keyTable = banktypes.ParamKeyTable() //nolint:staticcheck case stakingtypes.ModuleName: keyTable = stakingtypes.ParamKeyTable() //nolint:staticcheck case minttypes.ModuleName: keyTable = minttypes.ParamKeyTable() //nolint:staticcheck case distrtypes.ModuleName: keyTable = distrtypes.ParamKeyTable() //nolint:staticcheck case slashingtypes.ModuleName: keyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck case govtypes.ModuleName: keyTable = govv1.ParamKeyTable() //nolint:staticcheck case crisistypes.ModuleName: keyTable = crisistypes.ParamKeyTable() //nolint:staticcheck // wasm case wasmtypes.ModuleName: keyTable = v2.ParamKeyTable() //nolint:staticcheck default: continue } if !subspace.HasKeyTable() { subspace.WithKeyTable(keyTable) } } // sdk 47 k.Subspace(baseapp.Paramspace). WithKeyTable(paramstypes.ConsensusParamsKeyTable()) }