-
Notifications
You must be signed in to change notification settings - Fork 12
/
migrations.go
70 lines (62 loc) · 2.48 KB
/
migrations.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package keeper
import (
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
crosschaintypes "github.com/functionx/fx-core/v3/x/crosschain/types"
ethtypes "github.com/functionx/fx-core/v3/x/eth/types"
v2 "github.com/functionx/fx-core/v3/x/gravity/legacy/v2"
)
// Migrator is a struct for handling in-place store migrations.
type Migrator struct {
cdc codec.BinaryCodec
sk v2.StakingKeeper
ak v2.AccountKeeper
bk v2.BankKeeper
gravityStoreKey sdk.StoreKey
ethStoreKey sdk.StoreKey
legacyAmino *codec.LegacyAmino
paramsStoreKey sdk.StoreKey
}
// NewMigrator returns a new Migrator.
func NewMigrator(cdc codec.BinaryCodec, legacyAmino *codec.LegacyAmino,
paramsStoreKey sdk.StoreKey, gravityStoreKey sdk.StoreKey, ethStoreKey sdk.StoreKey,
sk v2.StakingKeeper, ak v2.AccountKeeper, bk v2.BankKeeper,
) Migrator {
return Migrator{
cdc: cdc,
sk: sk,
ak: ak,
bk: bk,
gravityStoreKey: gravityStoreKey,
ethStoreKey: ethStoreKey,
paramsStoreKey: paramsStoreKey,
legacyAmino: legacyAmino,
}
}
// Migrate1to2 migrates from version 1 to 2.
func (m Migrator) Migrate1to2(ctx sdk.Context) error {
ctx.Logger().Info("migrating module gravity to module eth", "module", "gravity")
if err := v2.MigrateBank(ctx, m.ak, m.bk, ethtypes.ModuleName); err != nil {
return err
}
gravityStore := ctx.MultiStore().GetKVStore(m.gravityStoreKey)
ethStore := ctx.MultiStore().GetKVStore(m.ethStoreKey)
paramsStore := ctx.MultiStore().GetKVStore(m.paramsStoreKey)
if err := v2.MigrateParams(m.legacyAmino, paramsStore, ethtypes.ModuleName); err != nil {
return err
}
ctx.Logger().Info("params has been migrated successfully", "module", "gravity")
var metadatas []banktypes.Metadata
m.bk.IterateAllDenomMetaData(ctx, func(metadata banktypes.Metadata) bool {
metadatas = append(metadatas, metadata)
return false
})
v2.MigrateBridgeTokenFromMetadatas(metadatas, ethStore)
ctx.Logger().Info("bridge token has been migrated successfully", "module", "gravity")
oracleMap := v2.MigrateValidatorToOracle(ctx, m.cdc, gravityStore, ethStore, m.sk, m.bk)
v2.MigrateStore(m.cdc, gravityStore, ethStore, oracleMap)
ctx.Logger().Info("store key has been migrated successfully", "module", "gravity",
"LatestOracleSetNonce", sdk.BigEndianToUint64(ethStore.Get(crosschaintypes.LatestOracleSetNonce)))
return nil
}