From 3caed03aa1e18e7bf49c20a08d1fa28c9c8f0f24 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:42:32 +0200 Subject: [PATCH] Fix for stuck deposits --- app/app.go | 17 +++++++++++++++++ x/millions/keeper/keeper_deposit.go | 12 ++++++++++++ 2 files changed, 29 insertions(+) diff --git a/app/app.go b/app/app.go index 13838e47..9c33f30b 100644 --- a/app/app.go +++ b/app/app.go @@ -913,6 +913,18 @@ func (app *App) registerUpgradeHandlers() { return app.mm.RunMigrations(ctx, app.configurator, fromVM) }) + app.UpgradeKeeper.SetUpgradeHandler("v1.6.6", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + app.Logger().Info("Starting v1.6.6 upgrade") + + // Fix the stuck deposits + depositIDs := []uint64{1301, 1302, 1310, 1329} + for _, depositID := range depositIDs { + app.MillionsKeeper.UnsafeSetDepositErrorState(ctx, 3, depositID, millionstypes.DepositState_IcaDelegate) + } + + return app.mm.RunMigrations(ctx, app.configurator, fromVM) + }) + upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() if err != nil { panic(fmt.Sprintf("failed to read upgrade info from disk %s", err)) @@ -1019,4 +1031,9 @@ func (app *App) registerUpgradeHandlers() { storeUpgrades := storetypes.StoreUpgrades{} app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) } + + if upgradeInfo.Name == "v1.6.6" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + storeUpgrades := storetypes.StoreUpgrades{} + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) + } } diff --git a/x/millions/keeper/keeper_deposit.go b/x/millions/keeper/keeper_deposit.go index e1def476..0e7232f0 100644 --- a/x/millions/keeper/keeper_deposit.go +++ b/x/millions/keeper/keeper_deposit.go @@ -408,3 +408,15 @@ func (k Keeper) UnsafeSetUnpersistedDeposits(ctx sdk.Context) int { return i } + +func (k Keeper) UnsafeSetDepositErrorState(ctx sdk.Context, poolID uint64, depositID uint64, state types.DepositState) { + deposit, err := k.GetPoolDeposit(ctx, poolID, depositID) + if err != nil { + panic(err) + } + + deposit.State = types.DepositState_Failure + deposit.ErrorState = state + k.setAccountDeposit(ctx, &deposit) + k.setPoolDeposit(ctx, &deposit) +}