Skip to content

Commit

Permalink
chore: migrating oracle old exg rates to new exg rates format (includ…
Browse files Browse the repository at this point in the history
…e timestamp format) (#2272)

* migrating oracle old exg rate format to new exg rates format

* retrigger checks

---------

Co-authored-by: Egor Kostetskiy <[email protected]>
Co-authored-by: kosegor <[email protected]>
  • Loading branch information
3 people authored Oct 3, 2023
1 parent 33624ed commit a174a91
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 8 deletions.
11 changes: 8 additions & 3 deletions app/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import (
leveragekeeper "github.com/umee-network/umee/v6/x/leverage/keeper"
leveragetypes "github.com/umee-network/umee/v6/x/leverage/types"

oraclekeeper "github.com/umee-network/umee/v6/x/oracle/keeper"
oraclemigrator "github.com/umee-network/umee/v6/x/oracle/migrations"
oracletypes "github.com/umee-network/umee/v6/x/oracle/types"
"github.com/umee-network/umee/v6/x/ugov"
"github.com/umee-network/umee/v6/x/uibc"
Expand Down Expand Up @@ -64,11 +64,16 @@ func (app *UmeeApp) registerUpgrade6_1(planName string, _ upgradetypes.Plan) {
app.UpgradeKeeper.SetUpgradeHandler(planName,
func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
ctx.Logger().Info("-----------------------------\n-----------------------------")
ctx.Logger().Info("Upgrade handler execution", "name", planName)
ctx.Logger().Info("Run v6.1 migration")
err := app.OracleKeeper.SetHistoricAvgCounterParams(ctx, oracletypes.DefaultAvgCounterParams())
if err != nil {
return fromVM, err
}

oracleUpgrader := oraclemigrator.NewMigrator(&app.OracleKeeper)
oracleUpgrader.MigrateOldExgRatesToExgRatesWithTimestamp(ctx)

return app.mm.RunMigrations(ctx, app.configurator, fromVM)
},
)
Expand Down Expand Up @@ -181,7 +186,7 @@ func (app *UmeeApp) registerUpgrade4_1(_ upgradetypes.Plan) {
}
if migrated {
// If leverage BNB migration was skipped, also skip oracle so they stay in sync
oracleUpgrader := oraclekeeper.NewMigrator(&app.OracleKeeper)
oracleUpgrader := oraclemigrator.NewMigrator(&app.OracleKeeper)
oracleUpgrader.MigrateBNB(ctx)
}
return app.mm.RunMigrations(ctx, app.configurator, fromVM)
Expand All @@ -196,7 +201,7 @@ func (app *UmeeApp) registerUpgrade3_3to4_0(_ upgradetypes.Plan) {
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.0 migration")
upgrader := oraclekeeper.NewMigrator(&app.OracleKeeper)
upgrader := oraclemigrator.NewMigrator(&app.OracleKeeper)
err := upgrader.HistoracleParams3x4(ctx)
if err != nil {
ctx.Logger().Error("Unable to run v4.0 Migration!", "err", err)
Expand Down
21 changes: 20 additions & 1 deletion x/oracle/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ func (k Keeper) SetExchangeRateWithEvent(ctx sdk.Context, denom string, rate sdk
}

// IterateExchangeRates iterates over all USD rates in the store.
// TODO: handler should use ExchangeRate type rather than Dec
func (k Keeper) IterateExchangeRates(ctx sdk.Context, handler func(string, sdk.Dec, time.Time) bool) {
store := ctx.KVStore(k.storeKey)
iter := sdk.KVStorePrefixIterator(store, types.KeyPrefixExchangeRate)
Expand Down Expand Up @@ -393,3 +392,23 @@ func (k Keeper) ValidateFeeder(ctx sdk.Context, feederAddr sdk.AccAddress, valAd

return nil
}

// IterateOldExchangeRates iterates over all old exchange rates from store and returns them.
// Note: this is only used for v6.1 Migrations
func (k Keeper) IterateOldExchangeRates(ctx sdk.Context, handler func(string, sdk.Dec) bool) {
store := ctx.KVStore(k.storeKey)
iter := sdk.KVStorePrefixIterator(store, types.KeyPrefixExchangeRate)
defer iter.Close()
prefixLen := len(types.KeyPrefixExchangeRate)

for ; iter.Valid(); iter.Next() {
key := iter.Key()
denom := string(key[prefixLen : len(key)-1]) // -1 to remove the null suffix
dp := sdk.DecProto{}
k.cdc.MustUnmarshal(iter.Value(), &dp)

if handler(denom, dp.Dec) {
break
}
}
}
15 changes: 15 additions & 0 deletions x/oracle/migrations/exg_rates_migrations.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package migrations

import (
sdk "github.com/cosmos/cosmos-sdk/types"
)

// MigrateOldExgRatesToExgRatesWithTimestamp will migrate old exchnage rate of denoms into new exchange rate format with
// timestamp into store.
func (m Migrator) MigrateOldExgRatesToExgRatesWithTimestamp(ctx sdk.Context) {
m.keeper.IterateOldExchangeRates(ctx, func(s string, d sdk.Dec) bool {
ctx.Logger().Info("Migrating old exchange rate to new exchange rate format", "denom", s)
m.keeper.SetExchangeRateWithTimestamp(ctx, s, d, ctx.BlockTime())
return false
})
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package keeper
package migrations

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/umee-network/umee/v6/x/oracle/keeper"
"github.com/umee-network/umee/v6/x/oracle/types"
)

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

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

Expand Down
3 changes: 2 additions & 1 deletion x/oracle/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/umee-network/umee/v6/util"
"github.com/umee-network/umee/v6/x/oracle/client/cli"
"github.com/umee-network/umee/v6/x/oracle/keeper"
"github.com/umee-network/umee/v6/x/oracle/migrations"
simulation "github.com/umee-network/umee/v6/x/oracle/simulations"
"github.com/umee-network/umee/v6/x/oracle/types"
)
Expand Down Expand Up @@ -126,7 +127,7 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))
types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQuerier(am.keeper))

m := keeper.NewMigrator(&am.keeper)
m := migrations.NewMigrator(&am.keeper)

if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {
panic(fmt.Sprintf("failed to migrate x/oracle from version 1 to 2: %v", err))
Expand Down

0 comments on commit a174a91

Please sign in to comment.