Skip to content

Commit

Permalink
fix: 4.1 BNB migration (#1807)
Browse files Browse the repository at this point in the history
This will switch the BNB ibc denom in the leverage registry and oracle accept list to the correct denom.
  • Loading branch information
toteki committed Feb 14, 2023
1 parent 5c901f4 commit 0e4df51
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ Ref: https://keepachangelog.com/en/1.0.0/

- [1812](https://github.com/umee-network/umee/pull/1812) MaxCollateralShare now works during partial oracle outages when certain conditions are safe.
- [1736](https://github.com/umee-network/umee/pull/1736) Blacklisted tokens no longer add themselves back to the oracle accept list.
- [1807](https://github.com/umee-network/umee/pull/1807) Fixes BNB ibc denom in 4.1 migration

## [v4.0.1](https://github.com/umee-network/umee/releases/tag/v4.0.1) - 2023-02-10

Expand Down
23 changes: 21 additions & 2 deletions app/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

"github.com/umee-network/umee/v4/app/upgradev3"
"github.com/umee-network/umee/v4/app/upgradev3x3"
leveragekeeper "github.com/umee-network/umee/v4/x/leverage/keeper"
leveragetypes "github.com/umee-network/umee/v4/x/leverage/types"
oraclekeeper "github.com/umee-network/umee/v4/x/oracle/keeper"
oracletypes "github.com/umee-network/umee/v4/x/oracle/types"
Expand Down Expand Up @@ -49,10 +50,28 @@ func (app *UmeeApp) registerUpgrade4_2(upgradeInfo upgradetypes.Plan) {
})
}

// performs upgrade from v4.0.1 to v4.1
// performs upgrade from v4.0 to v4.1
func (app *UmeeApp) registerUpgrade4_1(_ upgradetypes.Plan) {
const planName = "v4.1"
app.UpgradeKeeper.SetUpgradeHandler(planName, onlyModuleMigrations(app, planName))
app.UpgradeKeeper.SetUpgradeHandler(planName,
func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
ctx.Logger().Info("Upgrade handler execution", "name", planName)
ctx.Logger().Info("Run v4.1 migration")
leverageUpgrader := leveragekeeper.NewMigrator(&app.LeverageKeeper)
err := leverageUpgrader.MigrateBNB(ctx)
if err != nil {
ctx.Logger().Error("Unable to run v4.1 leverage Migration!", "err", err)
return fromVM, err
}
oracleUpgrader := oraclekeeper.NewMigrator(&app.OracleKeeper)
err = oracleUpgrader.MigrateBNB(ctx)
if err != nil {
ctx.Logger().Error("Unable to run v4.1 oracle Migration!", "err", err)
return fromVM, err
}
return app.mm.RunMigrations(ctx, app.configurator, fromVM)
},
)
}

// performs upgrade from v4.0.0 to v4.0.1
Expand Down
2 changes: 0 additions & 2 deletions x/leverage/keeper/internal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/stretchr/testify/require"

"github.com/umee-network/umee/v4/x/leverage/types"
)
Expand All @@ -20,7 +19,6 @@ type TestKeeper struct {
// an additional TestKeeper that exposes normally
// unexported methods for testing.
func NewTestKeeper(
_ *require.Assertions,
cdc codec.Codec,
storeKey storetypes.StoreKey,
paramSpace paramtypes.Subspace,
Expand Down
46 changes: 46 additions & 0 deletions x/leverage/keeper/migrations.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package keeper

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/umee-network/umee/v4/x/leverage/types"
)

// Migrator is a struct for handling in-place store migrations.
type Migrator struct {
keeper *Keeper
}

// NewMigrator creates a Migrator.
func NewMigrator(keeper *Keeper) Migrator {
return Migrator{keeper: keeper}
}

// MigrateBNB fixes the BNB base denom for the 4.1 upgrade
func (m Migrator) MigrateBNB(ctx sdk.Context) error {
badDenom := "ibc/77BCD42E49E5B7E0FC6B269FEBF0185B15044F13F6F38CA285DF0AF883459F40"
// Ensure zero supply of the token being removed from leverage registry
uSupply := m.keeper.GetUTokenSupply(ctx, types.ToUTokenDenom(badDenom))
if !uSupply.IsZero() {
return types.ErrBadSupplyDetected.Wrap(uSupply.String())
}
// Get the existing BNB token settings
correctDenom := "ibc/8184469200C5E667794375F5B0EC3B9ABB6FF79082941BF5D0F8FF59FEBA862E"
token, err := m.keeper.GetTokenSettings(ctx, badDenom)
if err != nil {
return err
}
// Modify base denom
token.BaseDenom = correctDenom
// Delete initial entry in token registry
store := ctx.KVStore(m.keeper.storeKey)
badKey := types.KeyRegisteredToken(badDenom)
store.Delete(badKey)
// Add back to store, but bypass the hooks in SetRegisteredToken
trueKey := types.KeyRegisteredToken(correctDenom)
bz, err := m.keeper.cdc.Marshal(&token)
if err != nil {
return err
}
store.Set(trueKey, bz)
return nil
}
1 change: 0 additions & 1 deletion x/leverage/keeper/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ func (s *IntegrationTestSuite) SetupTest() {

// we only override the Leverage keeper so we can supply a custom mock oracle
k, tk := keeper.NewTestKeeper(
s.Require(),
app.AppCodec(),
app.GetKey(types.ModuleName),
app.GetSubspace(types.ModuleName),
Expand Down
3 changes: 2 additions & 1 deletion x/leverage/types/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ var (
ErrSupplyNotAllowed = errors.Register(ModuleName, 203, "supplying of Token disabled")
ErrBorrowNotAllowed = errors.Register(ModuleName, 204, "borrowing of Token disabled")
ErrBlacklisted = errors.Register(ModuleName, 205, "blacklisted Token")
ErrDuplicateToken = errors.Register(ModuleName, 207, "duplicate token")
ErrCollateralWeightZero = errors.Register(ModuleName, 206,
"collateral weight of Token is zero: can't be used as a collateral")
ErrDuplicateToken = errors.Register(ModuleName, 207, "duplicate token")
ErrBadSupplyDetected = errors.Register(ModuleName, 208, "supply of a bad token detected")

// 3XX = User Positions
ErrInsufficientBalance = errors.Register(ModuleName, 300, "insufficient balance")
Expand Down
16 changes: 16 additions & 0 deletions x/oracle/keeper/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,19 @@ func (m Migrator) HistoracleParams3x4(ctx sdk.Context) error {
m.keeper.SetMaximumMedianStamps(ctx, types.DefaultMaximumMedianStamps)
return nil
}

// MigrateBNB fixes the BNB base denom for the 4.1 upgrade without using leverage hooks
func (m Migrator) MigrateBNB(ctx sdk.Context) error {
badDenom := "ibc/77BCD42E49E5B7E0FC6B269FEBF0185B15044F13F6F38CA285DF0AF883459F40"
correctDenom := "ibc/8184469200C5E667794375F5B0EC3B9ABB6FF79082941BF5D0F8FF59FEBA862E"
acceptList := m.keeper.AcceptList(ctx)
for index := range acceptList {
// Switch the base denom of the token with changing anything else
if acceptList[index].BaseDenom == badDenom {
acceptList[index].BaseDenom = correctDenom
}
}
// Overwrite previous accept list
m.keeper.SetAcceptList(ctx, acceptList)
return nil
}

0 comments on commit 0e4df51

Please sign in to comment.