cosmos-sdk/x/distribution/keeper/migrations.go

60 lines
1.6 KiB
Go

package keeper
import (
"context"
v4 "cosmossdk.io/x/distribution/migrations/v4"
"cosmossdk.io/x/distribution/types"
)
// Migrator is a struct for handling in-place store migrations.
type Migrator struct {
keeper Keeper
}
// NewMigrator returns a new Migrator.
func NewMigrator(keeper Keeper) Migrator {
return Migrator{keeper: keeper}
}
// Migrate1to2 migrates from version 1 to 2.
func (m Migrator) Migrate1to2(ctx context.Context) error {
return nil
}
// Migrate2to3 migrates the x/distribution module state from the consensus
// version 2 to version 3. Specifically, it takes the parameters that are currently stored
// and managed by the x/params module and stores them directly into the x/distribution
// module state.
func (m Migrator) Migrate2to3(ctx context.Context) error {
return nil
}
// Migrate3to4 migrates the x/distribution module state to use collections
// Additionally it migrates distribution fee pool to use protocol pool module account
func (m Migrator) Migrate3to4(ctx context.Context) error {
if err := v4.MigrateStore(ctx, m.keeper.Environment, m.keeper.cdc); err != nil {
return err
}
return m.migrateFunds(ctx)
}
func (m Migrator) migrateFunds(ctx context.Context) error {
macc := m.keeper.GetDistributionAccount(ctx)
poolMacc := m.keeper.authKeeper.GetModuleAccount(ctx, types.ProtocolPoolDistrAccount)
feePool, err := m.keeper.FeePool.Get(ctx)
if err != nil {
return err
}
feePool, err = v4.MigrateFunds(ctx, m.keeper.bankKeeper, feePool, macc, poolMacc)
if err != nil {
return err
}
// the feePool has now an empty community pool and the remainder is stored in the DecimalPool
return m.keeper.FeePool.Set(ctx, feePool)
}