package v0_16 import ( "time" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" v039auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v039" v040auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v040" v036supply "github.com/cosmos/cosmos-sdk/x/bank/legacy/v036" v038bank "github.com/cosmos/cosmos-sdk/x/bank/legacy/v038" v040bank "github.com/cosmos/cosmos-sdk/x/bank/legacy/v040" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" v039crisis "github.com/cosmos/cosmos-sdk/x/crisis/legacy/v039" v040crisis "github.com/cosmos/cosmos-sdk/x/crisis/legacy/v040" v036distr "github.com/cosmos/cosmos-sdk/x/distribution/legacy/v036" v038distr "github.com/cosmos/cosmos-sdk/x/distribution/legacy/v038" v040distr "github.com/cosmos/cosmos-sdk/x/distribution/legacy/v040" v038evidence "github.com/cosmos/cosmos-sdk/x/evidence/legacy/v038" v040evidence "github.com/cosmos/cosmos-sdk/x/evidence/legacy/v040" v039genutil "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v039" v040genutil "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v040" v043genutil "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v043" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" v036gov "github.com/cosmos/cosmos-sdk/x/gov/legacy/v036" v040gov "github.com/cosmos/cosmos-sdk/x/gov/legacy/v040" v039mint "github.com/cosmos/cosmos-sdk/x/mint/legacy/v039" v040mint "github.com/cosmos/cosmos-sdk/x/mint/legacy/v040" v036params "github.com/cosmos/cosmos-sdk/x/params/legacy/v036" v039slashing "github.com/cosmos/cosmos-sdk/x/slashing/legacy/v039" v040slashing "github.com/cosmos/cosmos-sdk/x/slashing/legacy/v040" v038staking "github.com/cosmos/cosmos-sdk/x/staking/legacy/v038" v040staking "github.com/cosmos/cosmos-sdk/x/staking/legacy/v040" v038upgrade "github.com/cosmos/cosmos-sdk/x/upgrade/legacy/v038" ibctransfertypes "github.com/cosmos/ibc-go/modules/apps/transfer/types" ibchost "github.com/cosmos/ibc-go/modules/core/24-host" ibctypes "github.com/cosmos/ibc-go/modules/core/types" "github.com/kava-labs/kava/app" v015kavadist "github.com/kava-labs/kava/x/kavadist/legacy/v0_15" v015validatorvesting "github.com/kava-labs/kava/x/validator-vesting/legacy/v0_15" ) func migrateGenutil(oldGenState v039genutil.GenesisState) *genutiltypes.GenesisState { return &genutiltypes.GenesisState{ GenTxs: oldGenState.GenTxs, } } func MigrateCosmosAppState(appState genutiltypes.AppMap, clientCtx client.Context, genesisTime time.Time) genutiltypes.AppMap { appState = migrateV040(appState, clientCtx, genesisTime) appState = migrateV043(appState, clientCtx) appState = addIbcGenesisStates(appState, clientCtx) return appState } func addIbcGenesisStates(appState genutiltypes.AppMap, clientCtx client.Context) genutiltypes.AppMap { appState[capabilitytypes.ModuleName] = clientCtx.Codec.MustMarshalJSON(capabilitytypes.DefaultGenesis()) appState[ibchost.ModuleName] = clientCtx.Codec.MustMarshalJSON(ibctypes.DefaultGenesisState()) appState[ibctransfertypes.ModuleName] = clientCtx.Codec.MustMarshalJSON(ibctransfertypes.DefaultGenesisState()) return appState } // migrateV043 migrates cosmos modules from v0.40 to a v0.43 genesis state. func migrateV043(appState genutiltypes.AppMap, clientCtx client.Context) genutiltypes.AppMap { return v043genutil.Migrate(appState, clientCtx) } // migrateV040 migrates cosmos modules from v0.39 to a v0.40 genesis state. // This is based on the genutil/legacy/v40 migration logic but adapted to handle custom types from the kava module. func migrateV040(appState genutiltypes.AppMap, clientCtx client.Context, genesisTime time.Time) genutiltypes.AppMap { app.SetSDKConfig() v039Codec := codec.NewLegacyAmino() v039auth.RegisterLegacyAminoCodec(v039Codec) v036gov.RegisterLegacyAminoCodec(v039Codec) v036distr.RegisterLegacyAminoCodec(v039Codec) v036params.RegisterLegacyAminoCodec(v039Codec) v038upgrade.RegisterLegacyAminoCodec(v039Codec) v015kavadist.RegisterLegacyAminoCodec(v039Codec) v015validatorvesting.RegisterLegacyAminoCodec(v039Codec) v039Codec.RegisterInterface((*v038evidence.Evidence)(nil), nil) v040Codec := clientCtx.Codec if appState[v038bank.ModuleName] != nil { // unmarshal relative source genesis application state var bankGenState v038bank.GenesisState v039Codec.MustUnmarshalJSON(appState[v038bank.ModuleName], &bankGenState) // unmarshal x/auth genesis state to retrieve all account balances var authGenState v039auth.GenesisState v039Codec.MustUnmarshalJSON(appState[v039auth.ModuleName], &authGenState) // unmarshal x/supply genesis state to retrieve total supply var supplyGenState v036supply.GenesisState v039Codec.MustUnmarshalJSON(appState[v036supply.ModuleName], &supplyGenState) // delete deprecated x/bank genesis state delete(appState, v038bank.ModuleName) // delete deprecated x/supply genesis state delete(appState, v036supply.ModuleName) // Migrate relative source genesis application state and marshal it into // the respective key. appState[v040bank.ModuleName] = v040Codec.MustMarshalJSON(v040bank.Migrate(bankGenState, authGenState, supplyGenState)) } // remove balances from existing accounts if appState[v039auth.ModuleName] != nil { // unmarshal relative source genesis application state var authGenState v039auth.GenesisState v039Codec.MustUnmarshalJSON(appState[v039auth.ModuleName], &authGenState) // delete deprecated x/auth genesis state delete(appState, v039auth.ModuleName) // Run our custom auth v40 migration on the v039 auth gen state appState[v040auth.ModuleName] = v040Codec.MustMarshalJSON(MigrateAuthV040(authGenState, genesisTime)) } // Migrate x/crisis. if appState[v039crisis.ModuleName] != nil { // unmarshal relative source genesis application state var crisisGenState v039crisis.GenesisState v039Codec.MustUnmarshalJSON(appState[v039crisis.ModuleName], &crisisGenState) // delete deprecated x/crisis genesis state delete(appState, v039crisis.ModuleName) // Migrate relative source genesis application state and marshal it into // the respective key. appState[v040crisis.ModuleName] = v040Codec.MustMarshalJSON(v040crisis.Migrate(crisisGenState)) } // Migrate x/distribution. if appState[v038distr.ModuleName] != nil { // unmarshal relative source genesis application state var distributionGenState v038distr.GenesisState v039Codec.MustUnmarshalJSON(appState[v038distr.ModuleName], &distributionGenState) // delete deprecated x/distribution genesis state delete(appState, v038distr.ModuleName) // Migrate relative source genesis application state and marshal it into // the respective key. appState[v040distr.ModuleName] = v040Codec.MustMarshalJSON(v040distr.Migrate(distributionGenState)) } // Migrate x/evidence. if appState[v038evidence.ModuleName] != nil { // unmarshal relative source genesis application state var evidenceGenState v038evidence.GenesisState v039Codec.MustUnmarshalJSON(appState[v038evidence.ModuleName], &evidenceGenState) // delete deprecated x/evidence genesis state delete(appState, v038evidence.ModuleName) // Migrate relative source genesis application state and marshal it into // the respective key. appState[v040evidence.ModuleName] = v040Codec.MustMarshalJSON(v040evidence.Migrate(evidenceGenState)) } // Migrate x/gov. if appState[v036gov.ModuleName] != nil { // unmarshal relative source genesis application state var govGenState v036gov.GenesisState v039Codec.MustUnmarshalJSON(appState[v036gov.ModuleName], &govGenState) // delete deprecated x/gov genesis state delete(appState, v036gov.ModuleName) // Run our custom gov v40 migration on the v039 gov gen state appState[v040gov.ModuleName] = v040Codec.MustMarshalJSON(MigrateGovV040(govGenState)) } // Migrate x/mint. if appState[v039mint.ModuleName] != nil { // unmarshal relative source genesis application state var mintGenState v039mint.GenesisState v039Codec.MustUnmarshalJSON(appState[v039mint.ModuleName], &mintGenState) // delete deprecated x/mint genesis state delete(appState, v039mint.ModuleName) // Migrate relative source genesis application state and marshal it into // the respective key. appState[v040mint.ModuleName] = v040Codec.MustMarshalJSON(v040mint.Migrate(mintGenState)) } // Migrate x/slashing. if appState[v039slashing.ModuleName] != nil { // unmarshal relative source genesis application state var slashingGenState v039slashing.GenesisState v039Codec.MustUnmarshalJSON(appState[v039slashing.ModuleName], &slashingGenState) // delete deprecated x/slashing genesis state delete(appState, v039slashing.ModuleName) // Migrate relative source genesis application state and marshal it into // the respective key. appState[v040slashing.ModuleName] = v040Codec.MustMarshalJSON(v040slashing.Migrate(slashingGenState)) } // Migrate x/staking. if appState[v038staking.ModuleName] != nil { // unmarshal relative source genesis application state var stakingGenState v038staking.GenesisState v039Codec.MustUnmarshalJSON(appState[v038staking.ModuleName], &stakingGenState) // Update historical entries to 10000 stakingGenState.Params.HistoricalEntries = 10000 // delete deprecated x/staking genesis state delete(appState, v038staking.ModuleName) // Migrate relative source genesis application state and marshal it into // the respective key. appState[v040staking.ModuleName] = v040Codec.MustMarshalJSON(v040staking.Migrate(stakingGenState)) } // Migrate x/genutil if appState[v039genutil.ModuleName] != nil { // unmarshal relative source genesis application state var genutilGenState v039genutil.GenesisState v039Codec.MustUnmarshalJSON(appState[v039genutil.ModuleName], &genutilGenState) // delete deprecated x/staking genesis state delete(appState, v039genutil.ModuleName) // Migrate relative source genesis application state and marshal it into // the respective key. appState[v040genutil.ModuleName] = v040Codec.MustMarshalJSON(migrateGenutil(genutilGenState)) } return appState }