diff --git a/app/app.go b/app/app.go index 4657d3e51..983bc4972 100644 --- a/app/app.go +++ b/app/app.go @@ -169,6 +169,7 @@ func NewNibiruApp( app.initModuleManager(encodingConfig, skipGenesisInvariants) + app.setupUpgrades() // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. diff --git a/app/upgrades.go b/app/upgrades.go new file mode 100644 index 000000000..5a57a758f --- /dev/null +++ b/app/upgrades.go @@ -0,0 +1,42 @@ +package app + +import ( + "fmt" + + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + + "github.com/NibiruChain/nibiru/app/upgrades" + "github.com/NibiruChain/nibiru/app/upgrades/v1_0_1" +) + +var Upgrades = []upgrades.Upgrade{ + v1_0_1.Upgrade, +} + +func (app *NibiruApp) setupUpgrades() { + app.setUpgradeHandlers() + app.setUpgradeStoreLoaders() +} + +func (app *NibiruApp) setUpgradeHandlers() { + for _, u := range Upgrades { + app.upgradeKeeper.SetUpgradeHandler(u.UpgradeName, u.CreateUpgradeHandler(app.mm, app.configurator)) + } +} + +func (app *NibiruApp) setUpgradeStoreLoaders() { + upgradeInfo, err := app.upgradeKeeper.ReadUpgradeInfoFromDisk() + if err != nil { + panic(fmt.Sprintf("failed to read upgrade info from disk: %s", err.Error())) + } + + if app.upgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + return + } + + for _, u := range Upgrades { + if upgradeInfo.Name == u.UpgradeName { + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &u.StoreUpgrades)) + } + } +} diff --git a/app/upgrades/types.go b/app/upgrades/types.go new file mode 100644 index 000000000..a2cdde4b5 --- /dev/null +++ b/app/upgrades/types.go @@ -0,0 +1,15 @@ +package upgrades + +import ( + store "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/cosmos/cosmos-sdk/x/upgrade/types" +) + +type Upgrade struct { + UpgradeName string + + CreateUpgradeHandler func(*module.Manager, module.Configurator) types.UpgradeHandler + + StoreUpgrades store.StoreUpgrades +} diff --git a/app/upgrades/v1_0_1/constants.go b/app/upgrades/v1_0_1/constants.go new file mode 100644 index 000000000..79444f0b5 --- /dev/null +++ b/app/upgrades/v1_0_1/constants.go @@ -0,0 +1,23 @@ +package v1_0_1 + +import ( + "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + + "github.com/NibiruChain/nibiru/app/upgrades" +) + +const UpgradeName = "v1.0.1" + +// pretty much a no-op store upgrade to test the upgrade process and include the newer version of rocksdb +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: func(mm *module.Manager, cfg module.Configurator) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + return mm.RunMigrations(ctx, cfg, fromVM) + } + }, + StoreUpgrades: types.StoreUpgrades{}, +}