mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-24 15:25:18 +00:00
[R4R] kava 5 migration (#848)
* wip: kava-5 migration * feat: kava 5 migration * fix: don't repeat genesis time
This commit is contained in:
parent
3bf40b97f9
commit
667ad87825
@ -5,11 +5,17 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||||
authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
|
authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
|
||||||
|
"github.com/cosmos/cosmos-sdk/x/genutil"
|
||||||
"github.com/cosmos/cosmos-sdk/x/supply"
|
"github.com/cosmos/cosmos-sdk/x/supply"
|
||||||
|
|
||||||
|
cryptoAmino "github.com/tendermint/tendermint/crypto/encoding/amino"
|
||||||
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
|
"github.com/kava-labs/kava/app"
|
||||||
"github.com/kava-labs/kava/x/bep3"
|
"github.com/kava-labs/kava/x/bep3"
|
||||||
v0_13cdp "github.com/kava-labs/kava/x/cdp"
|
v0_13cdp "github.com/kava-labs/kava/x/cdp"
|
||||||
v0_11cdp "github.com/kava-labs/kava/x/cdp/legacy/v0_11"
|
v0_11cdp "github.com/kava-labs/kava/x/cdp/legacy/v0_11"
|
||||||
@ -31,6 +37,87 @@ var (
|
|||||||
ClaimEndTime = time.Date(2026, 2, 25, 14, 0, 0, 0, time.UTC)
|
ClaimEndTime = time.Date(2026, 2, 25, 14, 0, 0, 0, time.UTC)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Migrate translates a genesis file from kava v0.11 (or v0.12) format to kava v0.13.x format.
|
||||||
|
func Migrate(genDoc tmtypes.GenesisDoc) tmtypes.GenesisDoc {
|
||||||
|
// migrate app state
|
||||||
|
var appStateMap genutil.AppMap
|
||||||
|
cdc := codec.New()
|
||||||
|
cryptoAmino.RegisterAmino(cdc)
|
||||||
|
tmtypes.RegisterEvidences(cdc)
|
||||||
|
|
||||||
|
if err := cdc.UnmarshalJSON(genDoc.AppState, &appStateMap); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
newAppState := MigrateAppState(appStateMap)
|
||||||
|
v0_13Codec := app.MakeCodec()
|
||||||
|
marshaledNewAppState, err := v0_13Codec.MarshalJSON(newAppState)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
genDoc.AppState = marshaledNewAppState
|
||||||
|
genDoc.GenesisTime = GenesisTime
|
||||||
|
genDoc.ChainID = "kava-5"
|
||||||
|
genDoc.ConsensusParams.Block.MaxGas = 20000000
|
||||||
|
return genDoc
|
||||||
|
}
|
||||||
|
|
||||||
|
// MigrateAppState migrates application state from v0.11 (or v0.12) format to a kava v0.13.x format
|
||||||
|
func MigrateAppState(v0_11AppState genutil.AppMap) genutil.AppMap {
|
||||||
|
v0_13AppState := v0_11AppState
|
||||||
|
cdc := app.MakeCodec()
|
||||||
|
var hardGenState v0_11hard.GenesisState
|
||||||
|
if v0_11AppState[v0_13hard.ModuleName] == nil {
|
||||||
|
cdc.MustUnmarshalJSON(v0_11AppState[v0_11hard.ModuleName], &hardGenState)
|
||||||
|
delete(v0_11AppState, v0_11hard.ModuleName)
|
||||||
|
v0_13AppState[v0_13hard.ModuleName] = cdc.MustMarshalJSON(
|
||||||
|
Hard(hardGenState))
|
||||||
|
}
|
||||||
|
delete(v0_13AppState, v0_11hard.ModuleName)
|
||||||
|
if v0_11AppState[v0_11cdp.ModuleName] != nil {
|
||||||
|
var cdpGenState v0_11cdp.GenesisState
|
||||||
|
cdc.MustUnmarshalJSON(v0_11AppState[v0_11cdp.ModuleName], &cdpGenState)
|
||||||
|
delete(v0_11AppState, v0_11cdp.ModuleName)
|
||||||
|
v0_13AppState[v0_13cdp.ModuleName] = cdc.MustMarshalJSON(
|
||||||
|
CDP(cdpGenState))
|
||||||
|
}
|
||||||
|
if v0_11AppState[v0_11incentive.ModuleName] != nil {
|
||||||
|
var incentiveGenState v0_11incentive.GenesisState
|
||||||
|
cdc.MustUnmarshalJSON(v0_11AppState[v0_13incentive.ModuleName], &incentiveGenState)
|
||||||
|
delete(v0_11AppState, v0_11incentive.ModuleName)
|
||||||
|
v0_13AppState[v0_13incentive.ModuleName] = cdc.MustMarshalJSON(Incentive(hardGenState, incentiveGenState))
|
||||||
|
}
|
||||||
|
if v0_11AppState[v0_11pricefeed.ModuleName] != nil {
|
||||||
|
var pricefeedGS v0_11pricefeed.GenesisState
|
||||||
|
cdc.MustUnmarshalJSON(v0_11AppState[v0_13pricefeed.ModuleName], &pricefeedGS)
|
||||||
|
delete(v0_11AppState, v0_11pricefeed.ModuleName)
|
||||||
|
v0_13AppState[v0_13pricefeed.ModuleName] = cdc.MustMarshalJSON(Pricefeed(pricefeedGS))
|
||||||
|
}
|
||||||
|
if v0_11AppState[bep3.ModuleName] != nil {
|
||||||
|
var bep3GS bep3.GenesisState
|
||||||
|
cdc.MustUnmarshalJSON(v0_11AppState[bep3.ModuleName], &bep3GS)
|
||||||
|
delete(v0_11AppState, bep3.ModuleName)
|
||||||
|
v0_13AppState[bep3.ModuleName] = cdc.MustMarshalJSON(Bep3(bep3GS))
|
||||||
|
}
|
||||||
|
if v0_11AppState[v0_11committee.ModuleName] != nil {
|
||||||
|
var committeeGS v0_11committee.GenesisState
|
||||||
|
cdc := codec.New()
|
||||||
|
sdk.RegisterCodec(cdc)
|
||||||
|
v0_11committee.RegisterCodec(cdc)
|
||||||
|
cdc.MustUnmarshalJSON(v0_11AppState[v0_11committee.ModuleName], &committeeGS)
|
||||||
|
delete(v0_11AppState, v0_11committee.ModuleName)
|
||||||
|
cdc = app.MakeCodec()
|
||||||
|
v0_13AppState[v0_13committee.ModuleName] = cdc.MustMarshalJSON(Committee(committeeGS))
|
||||||
|
}
|
||||||
|
if v0_11AppState[auth.ModuleName] != nil {
|
||||||
|
var authGS auth.GenesisState
|
||||||
|
cdc.MustUnmarshalJSON(v0_11AppState[auth.ModuleName], &authGS)
|
||||||
|
delete(v0_11AppState, auth.ModuleName)
|
||||||
|
v0_13AppState[auth.ModuleName] = cdc.MustMarshalJSON(Auth(authGS))
|
||||||
|
}
|
||||||
|
return v0_13AppState
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// CDP migrates from a v0.11 cdp genesis state to a v0.13 cdp genesis state
|
// CDP migrates from a v0.11 cdp genesis state to a v0.13 cdp genesis state
|
||||||
func CDP(oldGenState v0_11cdp.GenesisState) v0_13cdp.GenesisState {
|
func CDP(oldGenState v0_11cdp.GenesisState) v0_13cdp.GenesisState {
|
||||||
var newCDPs v0_13cdp.CDPs
|
var newCDPs v0_13cdp.CDPs
|
||||||
|
@ -11,9 +11,12 @@ import (
|
|||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||||
authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
|
authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
|
||||||
|
"github.com/cosmos/cosmos-sdk/x/genutil"
|
||||||
"github.com/cosmos/cosmos-sdk/x/supply"
|
"github.com/cosmos/cosmos-sdk/x/supply"
|
||||||
supplyexported "github.com/cosmos/cosmos-sdk/x/supply/exported"
|
supplyexported "github.com/cosmos/cosmos-sdk/x/supply/exported"
|
||||||
|
|
||||||
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/kava-labs/kava/app"
|
||||||
"github.com/kava-labs/kava/x/bep3"
|
"github.com/kava-labs/kava/x/bep3"
|
||||||
v0_11cdp "github.com/kava-labs/kava/x/cdp/legacy/v0_11"
|
v0_11cdp "github.com/kava-labs/kava/x/cdp/legacy/v0_11"
|
||||||
@ -223,3 +226,25 @@ func TestBep3(t *testing.T) {
|
|||||||
require.Equal(t, uint64(24686), newGenState.Params.AssetParams[0].MinBlockLock)
|
require.Equal(t, uint64(24686), newGenState.Params.AssetParams[0].MinBlockLock)
|
||||||
require.Equal(t, uint64(86400), newGenState.Params.AssetParams[0].MaxBlockLock)
|
require.Equal(t, uint64(86400), newGenState.Params.AssetParams[0].MaxBlockLock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMigrateFull(t *testing.T) {
|
||||||
|
oldGenDoc, err := tmtypes.GenesisDocFromFile(filepath.Join("testdata", "kava-4-export.json"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// 2) migrate
|
||||||
|
newGenDoc := Migrate(*oldGenDoc)
|
||||||
|
tApp := app.NewTestApp()
|
||||||
|
cdc := app.MakeCodec()
|
||||||
|
var newAppState genutil.AppMap
|
||||||
|
require.NoError(t,
|
||||||
|
cdc.UnmarshalJSON(newGenDoc.AppState, &newAppState),
|
||||||
|
)
|
||||||
|
err = app.ModuleBasics.ValidateGenesis(newAppState)
|
||||||
|
if err != nil {
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
require.NotPanics(t, func() {
|
||||||
|
// this runs both InitGenesis for all modules (which panic on errors) and runs all invariants
|
||||||
|
tApp.InitializeFromGenesisStatesWithTime(newGenDoc.GenesisTime, app.GenesisState(newAppState))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
1
migrate/v0_13/testdata/kava-4-export.json
vendored
Normal file
1
migrate/v0_13/testdata/kava-4-export.json
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
MaxCommitteeDescriptionLength int = 512
|
MaxCommitteeDescriptionLength int = 512
|
||||||
|
ModuleName = "committee"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Permission is anything with a method that validates whether a proposal is allowed by it or not.
|
// Permission is anything with a method that validates whether a proposal is allowed by it or not.
|
||||||
|
@ -11,9 +11,10 @@ import (
|
|||||||
|
|
||||||
// Valid reward multipliers
|
// Valid reward multipliers
|
||||||
const (
|
const (
|
||||||
Small MultiplierName = "small"
|
Small MultiplierName = "small"
|
||||||
Medium MultiplierName = "medium"
|
Medium MultiplierName = "medium"
|
||||||
Large MultiplierName = "large"
|
Large MultiplierName = "large"
|
||||||
|
ModuleName = "incentive"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GenesisClaimPeriodID stores the next claim id and its corresponding collateral type
|
// GenesisClaimPeriodID stores the next claim id and its corresponding collateral type
|
||||||
|
Loading…
Reference in New Issue
Block a user